1 – Charger les modules du noyau Linux requis:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
1.1
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
2.1 – 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.
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# Attention, la commande précédente peut ne pas fonctionner si <tab> avant/après 'swap' est utilisé au lieu de ' '!
sudo sed '/\tswap/ s/^\(.*\)$/#\1/g' /etc/fstab
# Ou
sudo sed -i '/swap/ s/^/#/' /etc/fstab
# Dans le doute, tester la command sans -i
# Il est aussi possible d'éditer le fichier manuellement.
7 – Ajouter le dépôt Kubernetes à la commande ‘apt’:
# Pré-requis, obtenir la liste de la dernière version stable disponible pour l'installation:
curl -Ls "https://sbom.k8s.io/$(curl -Ls https://dl.k8s.io/release/stable.txt)/release" | grep "SPDXID: SPDXRef-Package-registry.k8s.io" | grep -v sha256 | cut -d- -f3- | sed 's/-/\//' | sed 's/-v1/:v1/'
👉 Pour obtenir l’historique des versions, c’est ici.
# Utiliser la version entière pour la variable; 1.34.2 = 1.34
export K8S_VERSION=v1.34
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:/${K8S_VERSION}/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:/${K8S_VERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
NOTE: Initialiser la variable K8S_VERSION par la version désirée
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
9 – Initialiser le contrôleur:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 # --apiserver-advertise-address=a.b.c.d
# L'adresse IP du serveur Linux sera utilisée par défaut comme point d'entrée de gestion au cluster.
W1204 10:58:23.737205 9235 checks.go:827] detected that the sandbox image "registry.k8s.io/pause:3.8"
of the container runtime is inconsistent with that used by kubeadm.
It is recommended to use "registry.k8s.io/pause:3.10.1" as the CRI sandbox image.
Solution:
# Éditer le fichier /etc/containerd/config.toml et corriger la référence:
sandbox_image = "registry.k8s.io/pause:3.8" par
sandbox_image = "registry.k8s.io/pause:3.10.1"
# Redémarrer containerd
[init] Using Kubernetes version: v1.29.15
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
Raison: Étape 1.1 non complétée!
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-
NOTE: Le statut du ‘control-plane’ est ‘NotReady’ car il manque le service ‘Container Network Interface’
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
#--------------------------------------
# namespace/kube-flannel created
# serviceaccount/flannel created
# clusterrole.rbac.authorization.k8s.io/flannel created
# clusterrolebinding.rbac.authorization.k8s.io/flannel created
# configmap/kube-flannel-cfg created
# daemonset.apps/kube-flannel-ds created
13 – Vérifier le fonctionnement de l’amas (cluster K8s):
kubectl get nodes
kubectl get pods -n kube-system
Exemple de sortie:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8stest Ready control-plane 114m v1.29.15
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-76f75df574-kbl8m 1/1 Running 0 114m
coredns-76f75df574-xqr62 1/1 Running 0 114m
etcd-k8stest 1/1 Running 0 114m
kube-apiserver-k8stest 1/1 Running 0 114m
kube-controller-manager-k8stest 1/1 Running 0 114m
kube-proxy-j6zbq 1/1 Running 0 114m
kube-scheduler-k8stest 1/1 Running 0 114m
kubectl apply -f https://raw.githubusercontent.com/ve2cuy/4204d4/refs/heads/main/module01/superminou.yml
# 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
# Installation d'un contrôleur K8s à partir d'un dépot GitHub
curl https://raw.githubusercontent.com/ve2cuy/4204d4/refs/heads/main/Installation/Kubernetes/server.sh | bash
# Installation d'un noeud K8s à partir d'un dépot GitHub
curl https://raw.githubusercontent.com/ve2cuy/4204d4/refs/heads/main/Installation/Kubernetes/node.sh | bash
# Voici comment changer le rôle d'un noeud
kubectl label node nom-du-noeud node-role.kubernetes.io/worker=worker
export K8S_VERSION=v1.34
curl -fsSL https://pkgs.k8s.io/core:/stable:/${K8S_VERSION}/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:/${K8S_VERSION}/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt-mark unhold kubeadm
sudo apt install -y kubeadm='1.34'
sudo apt-mark hold kubeadm
# TODO: compléter la procédure de mise à jour
sudo kubeadm reset -f
NOTE: Voir les alias K8s dans la section copier/coller
Document rédigé par Alain Boudreault © 2021-2026
Version 2025.12.03.1
Site par ve2cuy