Kubernetes est la référence pour l'orchestration de conteneurs. Ce guide vous montre comment déployer un cluster Kubernetes hautement disponible avec kubeadm, intégrer MetalLB pour la gestion des IP flottantes, configurer un stockage persistant, et surtout garantir un quorum etcd résilient.
Prérequis
- Minimum 3 nœuds masters pour le control-plane (impair recommandé pour le quorum) et 2 nœuds workers
- Distribution Linux (Debian, Ubuntu, Rocky, AlmaLinux)
- Accès root ou sudo
- Un réseau local stable
- Ports etcd (2379, 2380) ouverts entre les masters
Gestion du quorum
Un quorum survient quand la majorité des membres sont disponibles :
- Avec 3 nœuds, quorum = 2 nœuds actifs
- Avec 5 nœuds, quorum = 3 nœuds actifs
- Perdre plus de la moitié des nœuds etcd entraîne l’indisponibilité du cluster
- Vérifiez l’état du quorum :
kubectl exec -n kube-system etcd-<node> -- etcdctl endpoint status --write-out=table
1. Installation des prérequis
Sur tous les nœuds :
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Désactivez le swap :
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
2. Initialiser le premier master
kubeadm init --control-plane-endpoint "lb.k8s.local:6443" --upload-certs
Configurez kubectl
:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. Ajouter d'autres masters
Utilisez la commande join générée avec l’option --control-plane
:
kubeadm join lb.k8s.local:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane --certificate-key <key>
4. Ajouter les workers
kubeadm join lb.k8s.local:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
5. Installer le réseau (Calico)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
6. Déployer MetalLB
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.10/config/manifests/metallb-native.yaml
Configurez un pool IP :
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 192.168.1.240-192.168.1.250
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2adv
namespace: metallb-system
kubectl apply -f metallb-config.yaml
7. Stockage persistant
Exemple NFS :
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
nfs:
path: /srv/nfs/kubedata
server: 192.168.1.100
Vérification
kubectl get nodes
kubectl get pods -A
kubectl get etcd -n kube-system
Conclusion
Vous avez mis en place un cluster Kubernetes robuste, hautement disponible, avec un quorum etcd résilient, MetalLB pour le load balancing et un stockage persistant. Parfait pour la production on-premise.