Aller au contenu

Kubernetes à haute disponibilité

Ce document décrit la mise en place d'un cluster Kubernetes à haute disponibilité, avec pour objectif de n'avoir aucun point de défaillance unique.

Prérequis

  • Avoir réalisé le guide Load balancing avec HAProxy et Keepalived.
  • Avoir réalisé le guide Kubernetes installation.
  • Un nombre impair >= 3 de nœuds pour le plan de contrôle.

Initialisation du plan de contrôle

Kubernetes doit être initialisé depuis l'une des machines qui composera le plan de contrôle, ici MASTER_01.

Bash
1
2
3
4
5
sudo kubeadm init \
    --control-plane-endpoint "10.136.26.70:6443" \
    --upload-certs \
    --pod-network-cidr=192.168.0.0/16 \
    --cri-socket=unix:///run/containerd/containerd.sock

Note: la plage 192.168.0.0/16 est celle utilisée par défaut par Calico, le pod network add-on qui sera utilisé par le cluster.

Une fois initialisé, kubeadm nous indique qu'il faut exécuter les commandes suivantes pour pouvoir utiliser kubectl avec un utilisateur non-root.

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

Pod network add-on

Calico est utilisé comme pod network add-on. Son déploiement est indispensable pour assurer le modèle réseau de Kubernetes.

Bash
# Install the Calico operator
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/tigera-operator.yaml

# Download the custom resources necessary to configure Calico
curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/custom-resources.yaml

# You may need to modify the ipPools cidr. The default value is 192.168.0.0/16

# Create the manifest to install Calico
kubectl create -f custom-resources.yaml

Joindre le cluster

La commande suivante permet de rejoindre le plan de contrôle

Bash
1
2
3
sudo kubeadm join <control-plane-endpoint>:6443 --token <token> \
    --discovery-token-ca-cert-hash sha256:<hash> \
    --control-plane --certificate-key <cert>

Si le certificat n'est plus valable, il est possible d'en générer un nouveau avec la commande suivante (depuis un noeud du plan de contrôle) :

Bash
sudo kubeadm init phase upload-certs --upload-certs

Les workers peuvent rejoindre le cluster avec la commande indiquée après l'initialisation du cluster

Bash
sudo kubeadm join <control-plane-endpoint>:6443 --token <token> \
 --discovery-token-ca-cert-hash sha256:<hash>

Tip

Pour récupérer la commande avec le token et hash correspondant, il est possible d'exécuter la commande suivante depuis un nœud du plan de contrôle :

Bash
kubeadm token create --print-join-command

Configuration spécifique à Botalista

Le cluster est désormais à haute disponibilité et prêt à être utilisé. La suite de la configuration spécifique au projet Botalista est décrite dans le guide Configurer Kubernetes pour Botalista.

Ressources

Kubernetes documentation officielle :

Prérequis sur le nombre de nœuds :

Calico :