Aller au contenu

Atelier n°9 : Initialisation des nœuds de travail Kubernetes

Info

Il s'agit d'un fork de l'original "Kubernetes the hard way" écrit à l'origine par Kelsey Hightower (GitHub : kelseyhightower). Contrairement à l'original, qui se base sur des distributions de type Debian pour l'architecture ARM64, ce fork cible les distributions Enterprise Linux telles que Rocky Linux, qui fonctionne sur l'architecture x86_64.

Dans cet atelier, vous démarrerez deux nœuds de travail Kubernetes. Vous installerez les composants suivants : runc, plugins de réseautage de conteneurs, containerd, kubelet et kube-proxy.

Prérequis

Depuis le serveur jumpbox, copiez les fichiers binaires Kubernetes et les fichiers d'unités systemd sur chaque instance worker :

for host in node-0 node-1; do
  SUBNET=$(grep $host machines.txt | cut -d " " -f 4)
  sed "s|SUBNET|$SUBNET|g" \
    configs/10-bridge.conf > 10-bridge.conf 

  sed "s|SUBNET|$SUBNET|g" \
    configs/kubelet-config.yaml > kubelet-config.yaml

  scp 10-bridge.conf kubelet-config.yaml \
  root@$host:~/
done
for host in node-0 node-1; do
  scp \
    downloads/runc.amd64 \
    downloads/crictl-v1.32.0-linux-amd64.tar.gz \
    downloads/cni-plugins-linux-amd64-v1.6.2.tgz \
    downloads/containerd-2.0.3-linux-amd64.tar.gz \
    downloads/kubectl \
    downloads/kubelet \
    downloads/kube-proxy \
    configs/99-loopback.conf \
    configs/containerd-config.toml \
    configs/kubelet-config.yaml \
    configs/kube-proxy-config.yaml \
    units/containerd.service \
    units/kubelet.service \
    units/kube-proxy.service \
    root@$host:~/
done

Les commandes de cet atelier doivent être exécutées séparément sur chaque instance worker : node-0 et node-1. Seules les étapes pour node-0 sont affichées. Vous devez répéter exactement les étapes et les commandes sur node-1.

Connectez-vous à l'instance de nœud de travail node-0 avec la commande ssh.

ssh root@node-0

Provisionnement d'un nœud de travail Kubernetes

Installez les dépendances du système d'exploitation :

  dnf -y update
  dnf -y install socat conntrack ipset tar

Le binaire socat prend en charge la commande kubectl port-forward.

Désactivation du Swap

Si vous avez activé swap, le kubelet ne pourra pas démarrer. La recommandation est de désactiver swap pour s'assurer que Kubernetes fournit une allocation de ressources et une qualité de service appropriées.

Vérifiez que le swap est bien activé :

swapon --show

Si la sortie est vide, le swap n'est pas activé. Si le résultat n’est pas vide, exécutez la commande suivante pour désactiver immédiatement le swap :

swapoff -a

Pour vous assurer que le swap reste désactivé après le redémarrage, commentez la ligne qui monte automatiquement le volume de swap dans le fichier /etc/fstab. Entrer la commande suivante :

sudo sed -i '/swap/s/^/#/' /etc/fstab

Créez les répertoires d’installation :

mkdir -p \
  /etc/cni/net.d \
  /opt/cni/bin \
  /var/lib/kubelet \
  /var/lib/kube-proxy \
  /var/lib/kubernetes \
  /var/run/kubernetes

Installez les fichiers binaires de travail :

  mkdir -p containerd
  tar -xvf crictl-v1.32.0-linux-amd64.tar.gz
  tar -xvf containerd-2.0.3-linux-amd64.tar.gz -C containerd
  tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/
  mv runc.amd64 runc
  chmod +x crictl kubectl kube-proxy kubelet runc 
  mv crictl kubectl kube-proxy kubelet runc /usr/local/bin/
  mv containerd/bin/* /bin/

Configuration du Réseau CNI

Créez le fichier de configuration réseau bridge :

mv 10-bridge.conf 99-loopback.conf /etc/cni/net.d/

Configuration de containerd

Installez les fichiers de configuration containerd :

  mkdir -p /etc/containerd/
  mv containerd-config.toml /etc/containerd/config.toml
  mv containerd.service /etc/systemd/system/

Configuration de Kubelet

Créez le fichier de configuration kubelet-config.yaml :

  mv kubelet-config.yaml /var/lib/kubelet/
  mv kubelet.service /etc/systemd/system/

Configuration du proxy Kubernetes

  mv kube-proxy-config.yaml /var/lib/kube-proxy/
  mv kube-proxy.service /etc/systemd/system/

Remarque

Bien que cela soit considéré comme une mauvaise sécurité, vous devrez peut-être désactiver SELinux temporairement ou définitivement si vous rencontrez des difficultés pour démarrer les services systemd nécessaires. La solution appropriée consiste à analyser et à créer les fichiers de stratégie requis à l'aide d'outils tels qu'ausearch, audit2allow, etc.

Pour supprimer et désactiver SELinux, exécutez la commande suivante :

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

Lancement des Worker Services

  systemctl daemon-reload
  systemctl enable containerd kubelet kube-proxy
  systemctl start containerd kubelet kube-proxy

Vérification

Les instances de calcul créées dans ce didacticiel n'auront pas l'autorisation de terminer cette section de vérification. Exécutez les commandes suivantes à partir de la machine jumpbox.

Énumérez les nœuds Kubernetes enregistrés :

ssh root@server "kubectl get nodes --kubeconfig admin.kubeconfig"
NAME     STATUS   ROLES    AGE    VERSION
node-0   Ready    <none>   1m     v1.32.0

Après avoir terminé toutes les étapes précédentes de ce laboratoire sur node-0 et node-1, la sortie de la commande kubectl get nodes devrait afficher :

NAME     STATUS   ROLES    AGE    VERSION
node-0   Ready    <none>   1m     v1.32.0
node-1   Ready    <none>   10s    v1.32.0

Next: Configuring kubectl for Remote Access

Author: Wale Soyinka

Contributors: Steven Spencer, Ganna Zhyrnova