Aller au contenu

Lab 9: Bootstrapping the Kubernetes Worker Nodes

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

From the jumpbox, copy Kubernetes binaries and systemd unit files to each worker instance:

for host in node-0 node-1; do
  SUBNET=$(grep $host machines.txt | cut -d " " -f 5)
  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

The commands in this lab must be run separately on each worker instance: node-0 and node-1. The steps for node-0 are the only ones shown. You must repeat the exact steps and commands on node-1.

Login to the worker node-0 instance with the ssh command.

ssh root@node-0

Provisionnement d'un nœud de travail Kubernetes

Install the operating system dependencies:

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

The socat binary supports the kubectl port-forward command.

Désactivation du Swap

If you have swap enabled, the kubelet will fail to start. 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é. If the output is not empty, run the following command to disable swap immediately:

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

Create the bridge network configuration file:

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