1 – Charger le modules du noyau Linux requis:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF
sudo modprobe overlay sudo modprobe br_netfilter
2 – Ajuster la configuration réseau requise pour K8S:
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF
# Recharger la nouvelle configuration sudo sysctl --system
3 – Installer containerd:
Note: Containerd est un moteur de conteneurs standard de l’industrie qui gère le cycle de vie complet des conteneurs, de la création à la supervision. C’est un projet de la CNCF (Cloud Native Computing Foundation) qui sert de composant clé pour des plateformes comme Docker et est largement utilisé par Kubernetes pour exécuter des conteneurs, grâce à son efficacité et sa robustesse.
sudo apt-get update sudo apt-get install -y containerd
4 – Renseigner les droits de groupe requis pour le fonctionnement de containerd:
sudo mkdir -p /etc/containerd # Créer le fichier de configuration sudo containerd config default | sudo tee /etc/containerd/config.toml # Ajouter le processus à Cgroup sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
5 – Redémarrer et activer containerd:
sudo systemctl restart containerd # La commande suivante assure que containerd est lancé au redémarrage du serveur sudo systemctl enable containerd
6 – Désactiver le fichier d’échange de la mémoire virtuelle:
sudo swapoff -a # Mettre en commentaire l'activation de la mémoire virtuelle de façon permanente. # Attention, la commande suivante ne semble pas fonctionner correctement! # Il est préférable d'éditer le fichier manuellement. sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
7 – Ajouter le dépôt Kubernetes à la commande ‘apt’:
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gpg sudo mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
8 – Installer les applications K8S et bloquer les mises à jours (M-A-J au besoin):
sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
Step 3: Réaliser la configuration d’un amas K8s d’un seul noeud (sur le contrôleur)
9 – Initialiser le contrôleur:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

10 – Préparer l’environnement de gestion pour l’utilisateur actuel:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
11- Retirer la contrainte qui empêche le contrôleur de rouler des déploiements localement :
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
12 – Installer une couche réseau, utilisée par les déploiements (Flannel CNI plugin):
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
13 – Vérifier le fonctionnement de l’amas (cluster K8s):
kubectl get nodes kubectl get pods -n kube-system

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.24.0
ports:
- containerPort: 80
kubectl apply -f deployment.yaml kubectl get pods -o wide # tester un des serveurs NGINX dans un fureteur local. # Oui bien, $ curl adresseIPduPod
Si au redémarrage du serveur, kubectl affiche le message suivant:

alain@kubectl:~$ kubectl get nodes The connection to the server 192.168.2.155:6443 was refused - did you specify the right host or port? systemctl status kubelet # Il faudra afficher le journal de l'application: journalctl -fu kubelet Une cause possible: Nov 01 17:12:10 kubectl kubelet[7023]: E1101 17:12:10.263490 7023 run.go:74] "command failed" err="failed to run Kubelet: running with swap on is not supported, please disable swap! or set --fail-swap-on flag to false. /proc/swaps contained: [Filename\t\t\t\tType\t\tSize\t\tUsed\t\tPriority /swap.img file\t\t4009980\t\t0\t\t-2]" Nov 01 17:12:10 kubectl systemd[1]: kubelet.service: Main process exited, code=exited, status=1/FAILURE
La cause ici est le fichier d’échange de la mémoire qui est activé. Il faudra désactiver la mémoire virtuelle.
sudo swapoff -a # Ou bien, placer en commentaire la ligne 'swap' du fichier /etc/fstab: sudo nano /etc/fstab #/swap.img none swap sw 0 0 # Redémarrer le service kubelet sudo systemctl start kubelet # La commande suivante devrait à nouveau fonctionner: kubectl get nodes NAME STATUS ROLES AGE VERSION kubectl Ready control-plane 75m v1.29.15
NOTE: Voir les alias K8s dans la section copier/coller