Guide pratique pour l'installation de Kubernetes v1.28 sur Ubuntu 22.04

Installation de Kubernetes v1.28 sur Ubuntu 22.04

Ce guide décrit la mise en place d'un cluster Kubernetes v1.28 sur des machines virtuelles Ubuntu 22.04.3. Il couvre la configuration de trois nœuds maîtres et trois nœuds travailleurs.

Planification du déploiement

Le réseau de domaine commun est défini sur example.local, avec un VIP pour l'API Server. Les nœuds sont répartis comme suit :

Rôle IP Nom d'hôte Spécifications
VIP 192.168.100.10 api-vip N/A
master01 192.168.100.11 ctrl01 2 vCPU, 4 Go RAM, 40 Go disque
master02 192.168.100.12 ctrl02 2 vCPU, 4 Go RAM, 40 Go disque
master03 192.168.100.13 ctrl03 2 vCPU, 4 Go RAM, 40 Go disque
worker01 192.168.100.21 node01 4 vCPU, 4 Go RAM, 40 Go disque
worker02 192.168.100.22 node02 4 vCPU, 4 Go RAM, 40 Go disque
worker03 192.168.100.23 node03 4 vCPU, 4 Go RAM, 40 Go disque

Les versions logicielles ciblées sont :

  • Docker CE 24.0.7 et containerd 1.6.26 comme moteur de conteneurs.
  • Kubernetes 1.28.2 avec kubeadm, kubelet et kubectl.
  • Flannel CNI version 0.3.1 pour la mise en réseau.

Tous les paquets sont récupérés depuis des dépôts miroirs en Chine pour accélérer le téléchargement.

Préparation du système d'exploitation

Les étapes suivantes doivent être exécutées sur chaque nœud.

Vérifications préliminaires Ubuntu

Assurez-vous que le pare-feu UFW est désactivé et que la synchronisation NTP est active.

# Vérifier l'état du pare-feu
sudo systemctl status ufw.service
# Confirmer la synchronisation de l'horloge
timedatectl show --property=NTPSynchronized

Désactivez le swap pour améliorer les performances de Kubernetes.

# Désactiver le swap
sudo swapoff -a
# Commenter la ligne swap dans /etc/fstab
sudo sed -i '/swap/s/^/#/' /etc/fstab

Configuration des dépôts APT

Ajoutez les sources APT pour Docker et Kubernetes.

# Ajouter la clé GPG et le dépôt Docker
curl -fsSL https://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Ajouter la clé GPG et le dépôt Kubernetes
curl -fsSL https://mirrors.cloud.aliyuncs.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo add-apt-repository "deb https://mirrors.cloud.aliyuncs.com/kubernetes/apt/ kubernetes-xenial main"

Configuration des hôtes

Modifiez le fichier /etc/hosts sur tous les nœuds pour inclure les entrées correspondantes. Notez que le VIP est temporairement pointé vers ctrl01 pendant l'installation intiiale.

192.168.100.11 ctrl01.example.local ctrl01 api-vip.example.local api-vip
192.168.100.12 ctrl02.example.local ctrl02
192.168.100.13 ctrl03.example.local ctrl03
192.168.100.21 node01.example.local node01
192.168.100.22 node02.example.local node02
192.168.100.23 node03.example.local node03

Installation de Docker et containerd

Installez Docker et containerd sur tous les nœuds, puis configurez containerd pour qu'il utilise systemd comme gestionnaire de cgroups.

# Installer les paquets
sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# Générer la configuration containerd par défaut
containerd config default | sudo tee /etc/containerd/config.toml

# Modifier le fichier de configuration
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo sed -i 's|sandbox_image = "registry.k8s.io/pause:3.6"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml

# Redémarrer les services
sudo systemctl restart containerd.service docker.service

Vérifiez que les services sont actifs et en cours d'exécution.

Installation de Kubernetes

Sur tous les nœuds, installez les composants Kubernetes.

# Installer kubelet, kubeadm, kubectl
sudo apt-get install -y kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00

# Empêcher les mises à jour automatiques
sudo apt-mark hold kubelet kubeadm kubectl

Le service kubelet sera actif après l'initialisation du cluster.

Initialisation du nœud maître principal

Sur le nœud ctrl01, initialisez le cluster en utilisant kubeadm avec des paramètres personnalisés pour les images et le réseau.

# Tirer les images Kubernetes depuis le miroir
sudo kubeadm config images pull --kubernetes-version v1.28.2 --image-repository registry.aliyuncs.com/google_containers

# Initialiser le cluster
sudo kubeadm init \
  --control-plane-endpoint="api-vip.example.local" \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.2 \
  --service-cidr=10.100.0.0/16 \
  --pod-network-cidr=10.200.0.0/16 \
  --ignore-preflight-errors=all

Configurez l'accès à kubectl pour l'utilisateur root.

export KUBECONFIG=/etc/kubernetes/admin.conf
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bashrc
source ~/.bashrc

Déploiement du plugin réseau CNI

Utilisez Flannel pour établir la mise en réseau des pods. Téléchargez et appliquez la configuration.

# Télécharger le manifeste Flannel
curl -LO https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

# Vérifier que le réseau dans le fichier correspond au CIDR des pods
grep "Network" kube-flannel.yml

# Appliquer la configuration
kubectl apply -f kube-flannel.yml

Surveillez l'état des pods système jusqu'à ce qu'ils soient tous en cours d'exécution.

kubectl get pods -n kube-system -w

Ajout des autres nœuds au cluster

Générez un token d'adhésion permanent sur le nœud maître.

sudo kubeadm token create --print-join-command

Utilisez la commande générée sur les nœuds travailleurs et les autres maîtres. Pour les maîtres, ajoutez le drapeau --control-plane.

# Exemple pour un nœud travailleur
sudo kubeadm join api-vip.example.local:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

# Exemple pour un nœud maître additionnel
sudo kubeadm join api-vip.example.local:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane

Vérifiez que tous les nœuds sont dans l'état Ready.

kubectl get nodes

Démonstration d'une application

Déployez une application simple pour valider le cluster.

# Configurer crictl pour utiliser containerd
cat > /etc/crictl.yaml <<eof ajuster="" cr="" create="" crictl="" d="" de="" deployment="" docker.io="" eof="" expose="" exposer="" get="" image="" image-endpoint:="" kubectl="" l="" le="" nginx="" nombre="" pull="" r="" runtime-endpoint:="" scale="" service="" sudo="" svc="" tirer="" un="" une="" unix:="" v="" web-app=""></eof>

L'application sera accessible via le port NodePort affiché sur l'adresse IP de n'importe quel nœud du cluster. Par exemple, en utilisant l'IP du nœud maître avec le port correspondant.

Le cluster Kubernetes est maintenant opérationnel et prêt pour le déploiement d'applications conteneurisées.

Étiquettes: kubernetes Ubuntu Docker containerd kubeadm

Publié le 22 juillet à 16h00