Ayant besoin de me former sur Kubernetes, j'ai donc commencé à mettre en place un petit cluster de deux noeuds sur mon proxmox maison. Ne sachant pas quelle distribution prendre pour commencer, j'ai choisi de partir sur une debian stable. Et j'ai donc suivi la doc ici. Sauf que quand j'ai voulu faire mon 'kubeadm init', rien ne fonctionnait comme prévu. Et après quelques longues minutes (heures) de recherche, j'ai compris que cela venait de l'incompatibilité entre ma version de containerd (celle packagée par debian) et la version de Kubernetes que j'avais installée. Voici donc mes notes. On part sur 3 machines installées en Debian 11.6. Chacune a 2 vCPU et 2Go de RAM. L'un d'elles accueillera le control plane et les deux autres seront des workers. On définit les noms des machines et les IP :

  • Kube-master : 192.168.1.80
  • Kube-worker1 : 192.168.1.81
  • Kube-worker2 : 192.168.1.82

Les actions qui suivent sont à effectuer sur les trois machines.

1 - Installation de sudo et ajout de l'utilisateur jihefge au groupe sudo

Connecté en root :

root@Kube-master:/home/jihefge# apt-get update
Atteint :1 http://security.debian.org/debian-security bullseye-security InRelease
Atteint :2 http://deb.debian.org/debian bullseye InRelease
Atteint :3 http://deb.debian.org/debian bullseye-updates InRelease
Lecture des listes de paquets... Fait
root@Kube-master:/home/jihefge# apt-get install sudo
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les NOUVEAUX paquets suivants seront installés :
  sudo
0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 1 059 ko dans les archives.
Après cette opération, 4 699 ko d'espace disque supplémentaires seront utilisés.
Réception de :1 http://deb.debian.org/debian bullseye/main amd64 sudo amd64 1.9.5p2-3 [1 059 kB]
1 059 ko réceptionnés en 0s (4 742 ko/s)
Sélection du paquet sudo précédemment désélectionné.
(Lecture de la base de données... 28651 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../sudo_1.9.5p2-3_amd64.deb ...
Dépaquetage de sudo (1.9.5p2-3) ...
Paramétrage de sudo (1.9.5p2-3) ...
Traitement des actions différées (« triggers ») pour man-db (2.9.4-2) ...
root@Kube-master:/home/jihefge#
root@Kube-worker1:/home/jihefge# /sbin/adduser jihefge sudo
Ajout de l'utilisateur « jihefge » au groupe « sudo »...
Adding user jihefge to group sudo
Fait.
root@Kube-worker1:/home/jihefge#

2 - Edition du fichier hosts

root@Kube-master:/home/jihefge# vi /etc/hosts
192.168.1.80 Kube-master
192.168.1.81 Kube-worker1
192.168.1.82 Kube-worker2

3 - Désactivation du swap

La commande swapoff -a va désactiver l'ensemble des périphériques utilisés par le système comme espaces de swap.

root@Kube-master:/home/jihefge# /usr/sbin/swapoff -a

La commande ci-dessous va commenter la (ou les) ligne(s) du fstab qui concernent un espace de swap

root@Kube-master:/home/jihefge# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

4 - Désactivation d'IPv6

jihefge@Kube-master:~$ sudo vi /etc/sysctl.conf
#Ajout de la ligne suivante
net.ipv6.conf.all.disable_ipv6 = 1

5 - Paramétrage de containerd

Containerd a besoin de deux modules pour fonctionner. On fait en sorte que ces modules se chargent lors du démarrage du service containerd.

root@Kube-master:/home/jihefge# cat <<EOF | tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

On vérifie le contenu du fichier

root@Kube-master:/home/jihefge# cat /etc/modules-load.d/containerd.conf
overlay
br_netfilter

On charge les deux modules

root@Kube-master:/home/jihefge# /sbin/modprobe overlay
root@Kube-master:/home/jihefge# /sbin/modprobe br_netfilter

On change 3 paramètres au niveau système

root@Kube-master:/home/jihefge# cat <<EOF | tee /etc/sysctl.d/99-kubernetes-k8s.conf
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
root@Kube-master:/home/jihefge#

On applique les changements

root@Kube-master:/home/jihefge# /sbin/sysctl --system
* Applique /usr/lib/sysctl.d/50-pid-max.conf …
kernel.pid_max = 4194304
* Applique /etc/sysctl.d/99-kubernetes-k8s.conf …
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
* Applique /etc/sysctl.d/99-sysctl.conf …
net.ipv6.conf.all.disable_ipv6 = 1
* Applique /usr/lib/sysctl.d/protect-links.conf …
fs.protected_fifos = 1
fs.protected_hardlinks = 1
fs.protected_regular = 2
fs.protected_symlinks = 1
* Applique /etc/sysctl.conf …
net.ipv6.conf.all.disable_ipv6 = 1
root@Kube-master:/home/jihefge#

6 - Installation de containerd

On télécharge la dernière version de Containerd et on l'installe sur le système dans /usr/local

root@Kube-master:/home/jihefge# wget https://github.com/containerd/containerd/releases/download/v1.6.14/containerd-1.6.14-linux-amd64.tar.gz
--2022-12-30 17:16:54--  https://github.com/containerd/containerd/releases/download/v1.6.14/containerd-1.6.14-linux-amd64.tar.gz
Résolution de github.com (github.com)… 140.82.121.3
Connexion à github.com (github.com)|140.82.121.3|:443… connecté.
requête HTTP transmise, en attente de la réponse… 302 Found
Emplacement : https://objects.githubusercontent.com/github-production-release-asset-2e65be/46089560/d90749e7-10b0-4e43-bf46-99a51edb0149?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221230%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221230T161655Z&X-Amz-Expires=300&X-Amz-Signature=eadf980809c77676bba8a5570883ff1361fb5f9ec193bc87dd4aa9019826203b&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=46089560&response-content-disposition=attachment%3B%20filename%3Dcontainerd-1.6.14-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream [suivant]
--2022-12-30 17:16:55--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/46089560/d90749e7-10b0-4e43-bf46-99a51edb0149?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20221230%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20221230T161655Z&X-Amz-Expires=300&X-Amz-Signature=eadf980809c77676bba8a5570883ff1361fb5f9ec193bc87dd4aa9019826203b&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=46089560&response-content-disposition=attachment%3B%20filename%3Dcontainerd-1.6.14-linux-amd64.tar.gz&response-content-type=application%2Foctet-stream
Résolution de objects.githubusercontent.com (objects.githubusercontent.com)… 185.199.109.133, 185.199.108.133, 185.199.110.133, ...
Connexion à objects.githubusercontent.com (objects.githubusercontent.com)|185.199.109.133|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 43434970 (41M) [application/octet-stream]
Sauvegarde en : « containerd-1.6.14-linux-amd64.tar.gz »

containerd-1.6.14-linux-amd64.tar.gz                100%[=================================================================================================================>]  41,42M  6,96MB/s    ds 6,1s

2022-12-30 17:17:01 (6,85 MB/s) — « containerd-1.6.14-linux-amd64.tar.gz » sauvegardé [43434970/43434970]

root@Kube-master:/home/jihefge# tar Cxzvf /usr/local containerd-1.6.14-linux-amd64.tar.gz
bin/
bin/containerd-stress
bin/containerd-shim
bin/containerd-shim-runc-v1
bin/containerd-shim-runc-v2
bin/containerd
bin/ctr

On télécharge le fichier permettant de définir le service et on le copie au bon endroit pour qu'il soit pris en compte par le système

root@Kube-master:/home/jihefge# wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
--2022-12-30 17:18:11--  https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
Résolution de raw.githubusercontent.com (raw.githubusercontent.com)… 185.199.109.133, 185.199.111.133, 185.199.110.133, ...
Connexion à raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 1414 (1,4K) [text/plain]
Sauvegarde en : « containerd.service »

containerd.service                                100%[=================================================================================================================>]   1,38K  --.-KB/s    ds 0s

2022-12-30 17:18:11 (22,6 MB/s) — « containerd.service » sauvegardé [1414/1414]
root@Kube-master:/home/jihefge# cp ./containerd.service /lib/systemd/system/
root@Kube-master:/lib/systemd/system# systemctl daemon-reload
root@Kube-master:/lib/systemd/system# systemctl enable containerd
root@Kube-master:/lib/systemd/system# systemctl start  containerd
root@Kube-master:/lib/systemd/system# systemctl status containerd

On créé le dossier qui va accueillir le fichier de configuration de containerd, on extrait la conf par défaut, et on la modifie pour le rendre compatible avec notre usage de Kubernetes

root@Kube-master:/home/jihefge# mkdir -p /etc/containerd
root@Kube-master:/home/jihefge# containerd config default | tee /etc/containerd/config.toml >/dev/null 2>&1
root@Kube-master:/etc# vi /etc/containerd/config.toml

Dans la section ‘[plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]’ , mettre le paramètre SystemdCgroup à true
Redémarrage et activation du service

root@Kube-master:/home/jihefge# systemctl restart containerd
root@Kube-master:/home/jihefge# systemctl enable containerd

7 - Installation de runc et les plugins CNI

On télécharge la dernière version de runc et des plugins CNI

root@Kube-master:/home/jihefge# wget https://github.com/opencontainers/runc/releases/download/v1.1.4/runc.amd64
root@Kube-master:/home/jihefge# install -m 755 runc.amd64 /usr/local/sbin/runc

root@Kube-master:/home/jihefge# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
root@Kube-master:/home/jihefge# mkdir -p /opt/cni/bin
root@Kube-master:/home/jihefge# tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
root@Kube-master:/home/jihefge# apt install gnupg gnupg2 curl software-properties-common -y
root@Kube-worker1:/home/jihefge# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/cgoogle.gpg
root@Kube-worker2:/home/jihefge# apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

8 - Installation de kubelet, kubectl et kubeadm

root@Kube-master:/home/jihefge# apt update
Atteint :1 http://security.debian.org/debian-security bullseye-security InRelease
Atteint :2 http://deb.debian.org/debian bullseye InRelease
Atteint :3 http://deb.debian.org/debian bullseye-updates InRelease
Réception de :4 https://packages.cloud.google.com/apt kubernetes-xenial InRelease [9 383 B]
Réception de :5 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 Packages [62,2 kB]
71,6 ko réceptionnés en 1s (93,2 ko/s)
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Tous les paquets sont à jour.
root@Kube-master:/home/jihefge# apt install kubelet kubeadm kubectl -y
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  conntrack cri-tools ebtables ethtool kubernetes-cni socat
Les NOUVEAUX paquets suivants seront installés :
  conntrack cri-tools ebtables ethtool kubeadm kubectl kubelet kubernetes-cni socat
0 mis à jour, 9 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 83,9 Mo dans les archives.
Après cette opération, 341 Mo d'espace disque supplémentaires seront utilisés.
Réception de :1 http://deb.debian.org/debian bullseye/main amd64 conntrack amd64 1:1.4.6-2 [33,9 kB]
Réception de :2 http://deb.debian.org/debian bullseye/main amd64 ebtables amd64 2.0.11-4+b1 [86,6 kB]
Réception de :3 http://deb.debian.org/debian bullseye/main amd64 ethtool amd64 1:5.9-1 [182 kB]
Réception de :4 http://deb.debian.org/debian bullseye/main amd64 socat amd64 1.7.4.1-3 [370 kB]
Réception de :5 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 cri-tools amd64 1.25.0-00 [17,9 MB]
Réception de :6 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubernetes-cni amd64 1.1.1-00 [25,0 MB]
Réception de :7 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubelet amd64 1.26.0-00 [20,5 MB]
Réception de :8 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubectl amd64 1.26.0-00 [10,1 MB]
Réception de :9 https://packages.cloud.google.com/apt kubernetes-xenial/main amd64 kubeadm amd64 1.26.0-00 [9 730 kB]
83,9 Mo réceptionnés en 13s (6 674 ko/s)
Sélection du paquet conntrack précédemment désélectionné.
(Lecture de la base de données... 30013 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../0-conntrack_1%3a1.4.6-2_amd64.deb ...
Dépaquetage de conntrack (1:1.4.6-2) ...
Sélection du paquet cri-tools précédemment désélectionné.
Préparation du dépaquetage de .../1-cri-tools_1.25.0-00_amd64.deb ...
Dépaquetage de cri-tools (1.25.0-00) ...
Sélection du paquet ebtables précédemment désélectionné.
Préparation du dépaquetage de .../2-ebtables_2.0.11-4+b1_amd64.deb ...
Dépaquetage de ebtables (2.0.11-4+b1) ...
Sélection du paquet ethtool précédemment désélectionné.
Préparation du dépaquetage de .../3-ethtool_1%3a5.9-1_amd64.deb ...
Dépaquetage de ethtool (1:5.9-1) ...
Sélection du paquet kubernetes-cni précédemment désélectionné.
Préparation du dépaquetage de .../4-kubernetes-cni_1.1.1-00_amd64.deb ...
Dépaquetage de kubernetes-cni (1.1.1-00) ...
Sélection du paquet socat précédemment désélectionné.
Préparation du dépaquetage de .../5-socat_1.7.4.1-3_amd64.deb ...
Dépaquetage de socat (1.7.4.1-3) ...
Sélection du paquet kubelet précédemment désélectionné.
Préparation du dépaquetage de .../6-kubelet_1.26.0-00_amd64.deb ...
Dépaquetage de kubelet (1.26.0-00) ...
Sélection du paquet kubectl précédemment désélectionné.
Préparation du dépaquetage de .../7-kubectl_1.26.0-00_amd64.deb ...
Dépaquetage de kubectl (1.26.0-00) ...
Sélection du paquet kubeadm précédemment désélectionné.
Préparation du dépaquetage de .../8-kubeadm_1.26.0-00_amd64.deb ...
Dépaquetage de kubeadm (1.26.0-00) ...
Paramétrage de conntrack (1:1.4.6-2) ...
Paramétrage de kubectl (1.26.0-00) ...
Paramétrage de ebtables (2.0.11-4+b1) ...
Paramétrage de socat (1.7.4.1-3) ...
Paramétrage de cri-tools (1.25.0-00) ...
Paramétrage de kubernetes-cni (1.1.1-00) ...
Paramétrage de ethtool (1:5.9-1) ...
Paramétrage de kubelet (1.26.0-00) ...
Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /lib/systemd/system/kubelet.service.
Paramétrage de kubeadm (1.26.0-00) ...
Traitement des actions différées (« triggers ») pour man-db (2.9.4-2) ...

On marque les paquets Kubernetes pour ne pas qu'ils soient mis à jour automatiquement lors d'un apt update ou dist-upgrade

root@Kube-master:/home/jihefge# apt-mark hold kubelet kubeadm kubectl
kubelet passé en figé (« hold »).
kubeadm passé en figé (« hold »).
kubectl passé en figé (« hold »).
root@Kube-master:/home/jihefge#

9 - Création du cluster Kubernetes (à faire uniquement sur le master)

La doc indique que l'on doit stipuler le fqdn du control plane. Dans les faits, cela ne fonctionne pas : cela nous demande une IP. Donc, on va metre l'IP du master.

jihefge@Kube-master:~$ sudo kubeadm init --control-plane-endpoint=192.168.1.80
[init] Using Kubernetes version: v1.26.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [kube-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.1.80]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [kube-master localhost] and IPs [192.168.1.80 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [kube-master localhost] and IPs [192.168.1.80 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 9.001239 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node kube-master as control-plane by adding the labels: [node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]
[mark-control-plane] Marking the node kube-master as control-plane by adding the taints [node-role.kubernetes.io/control-plane:NoSchedule]
[bootstrap-token] Using token: 3wdz3t.65jpygufrtejw7bl
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join 192.168.1.80:6443 --token 3wdz3t.65jpygufrtejw7bl \
        --discovery-token-ca-cert-hash sha256:68c40444b0fa03343dd9777de9941443de86388d1675f93d7ea4020a17a6d3ac \
        --control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.80:6443 --token 3wdz3t.65jpygufrtejw7bl \
        --discovery-token-ca-cert-hash sha256:68c40444b0fa03343dd9777de9941443de86388d1675f93d7ea4020a17a6d3ac

on créé le fichier admin.conf

jihefge@Kube-master:~$ mkdir -p $HOME/.kube
jihefge@Kube-master:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[sudo] Mot de passe de jihefge :
jihefge@Kube-master:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

10 - Intégration au cluster des 2 workers

Sur chaque worker, on tape la commande suivante :

jihefge@Kube-worker1:~$ su -
Mot de passe :
root@Kube-worker1:~# kubeadm join 192.168.1.80:6443 --token 3wdz3t.65jpygufrtejw7bl --discovery-token-ca-cert-hash sha256:68c40444b0fa03343dd9777de9941443de86388d1675f93d7ea4020a17a6d3ac
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

On vérifie que l'intégration est bien OK :

jihefge@Kube-master:~$ kubectl get nodes
NAME           STATUS     ROLES           AGE   VERSION
kube-master    NotReady   control-plane   59m   v1.26.0
kube-worker1   NotReady   <none>          49s   v1.26.0
kube-worker2   NotReady   <none>          21s   v1.26.0