Aller au contenu

Mise en place d'un cluster K8S

Découvrez dans cet article comment installer un cluster Kubernetes.

Présentation

Kubernetes est un système open source qui vise à fournir une « plate-forme permettant d'automatiser le déploiement, la montée en charge et la mise en œuvre de conteneurs d'application sur des grappes de serveurs ».

k8s-logo

Architecture

Voici l'architecture qu'on va mettre en place.

architecture

Pré installation

Définir le nom d'hôte

Connectez-vous à chaque noeud (noeud maître et noeud woker) et définissez leur nom d'hôte à l'aide de la commande hostnamectl.

$ sudo hostnamectl set-hostname "master-00.kaze-cloud.fr"      // Run on master node
$ sudo hostnamectl set-hostname "node-00.kaze-cloud.fr"    // Run on 1st worker node
$ sudo hostnamectl set-hostname "node-01.kaze-cloud.fr"    // Run on 2nd worker node
$ sudo hostnamectl set-hostname "node-02.kaze-cloud.fr"    // Run on 3rd worker node

Ensuite, sur chaque noeud, éditez le fichier /etc/hosts.

1.X.X.5 control-00.kaze-cloud.fr k8s-master-00
1.X.X.6 node-00.kaze-cloud.fr k8s-worker-00
1.X.X.7 node-01.kaze-cloud.fr k8s-worker-01
1.X.X.8 node-02.kaze-cloud.fr k8s-worker-02

Désactiver le swap

Pour que le kubelet fonctionne correctement, il est recommandé de désactiver le swap. Exécutez les commandes suivantes sur les noeuds maître et travailleur pour désactiver le swap.

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

Installation Containerd

Containerd est le moteur de conteneur standard de l'industrie, il et pris en charge par Kubernetes.

Installez donc containerd sur tous les noeuds maîtres et travailleurs.

Avant d'installer containerd, définissez les paramètres de noyau suivants sur tous les noeuds.

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf 
overlay 
br_netfilter
EOF
sudo modprobe overlay 
sudo modprobe br_netfilter
cat <<EOF | sudo 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

Pour que les modifications ci-dessus soient prises en compte, exécutez le programme.

sudo sysctl --system
Maintenant, installez containerd en exécutant la commande apt suivante sur tous les noeuds.

sudo apt update
sudo apt -y install containerd

Ensuite, configurez containerd pour qu'il fonctionne avec Kubernetes, exécutez la commande ci-dessous sur tous les noeuds.

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
Modifiez le fichier '/etc/containerd/config.toml' et recherchez la section '[plugins. « io.containerd.grpc.v1.cri ».containerd.runtimes.runc.options]' et remplacez 'SystemdCgroup = false' par 'SystemdCgroup = true'.

sudo nano /etc/containerd/config.toml

ou la commande suivante:

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

Redémarrer et activer le service containerd sur tous les noeuds.

sudo systemctl restart containerd
sudo systemctl enable containerd

Installation Kubernetes

Configuration des dépôts

Dans Debian 12/11, les paquets liés à Kubernetes ne sont pas disponibles dans les dépôts de paquets par défaut. Nous devons ajouter un dépôt apt Kubernetes supplémentaire sur tous les noeuds, exécutez.

sudo apt install -y gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

Installation des paquets

Ensuite, installez les outils Kubernetes, notamment kubeadm, kubelet et kubectl sur tous les nœuds.

sudo apt update
sudo apt install kubelet kubeadm kubectl -y
sudo apt-mark hold kubelet kubeadm kubectl

Initialiser le cluster

Maintenant, nous sommes prêts à initialiser le cluster Kubernetes, exécutez la commande suivante uniquement à partir de k8s-master-00.

sudo kubeadm init --apiserver-advertise-address=10.10.100.5 --node-name $HOSTNAME --pod-network-cidr=192.168.0.0/16
  • apiserver-advertise-address : IP de votre k8s-master-00 (control plan)
  • pod-network-cidr : Réseau interne des pods de Kubernetes. Important avec Calico utiliser 192.168.0.0/16

Sortie:

kubeadmin init

Sortie Kubeadm

La sortie ci-dessus confirme que le plan de contrôle a été initialisé avec succès. Dans la sortie, nous avons des commandes pour l'utilisateur normal pour interagir avec le cluster et aussi la commande pour joindre n'importe quel nœud de travailleur à ce cluster.

Pour commencer à interagir avec le cluster, exécutez les commandes suivantes sur le nœud maître.

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

Ajouter les workers au control-plan

Sur vos nœuds de travail, joignez-les au cluster en exécutant la commande qui s'est affichée lorsque vous avez initialisé le nœud maître. Elle ressemblera à ceci : « kubeadm join ».

sudo kubeadm join k8s-master-00:6443 --token <SUPER SECRET TOKEN> \
        --discovery-token-ca-cert-hash sha256:<SUPER HASH> \
Sortie:

[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.

Configuration d'un réseau de pods à l'aide de Calico

Sur le k8s-master-00, lancez la commande suivante pour installer calico.

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml

Tester l'installation du cluster Kubernetes

Afin de valider et de tester l'installation du cluster Kubernetes, essayons de déployer une application basée sur nginx via le déploiement. Exécutez les commandes suivantes.

kubectl create deployment nginx-app --image=nginx --replicas 2
kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --port 80 --target-port 80
kubectl describe svc nginx-web-svc
S Essayez d'accéder à l'application nginx en utilisant la commande curl suivante ainsi que le nodeport 32283.

curl http://k8s-worker01:32283

Note : Dans la commande curl, nous pouvons utiliser l'un ou l'autre des noms d'hôte des nœuds de travail.

La suite

Ici : installation metallb