Composants essentiels du déploiement
La mise en place d'un cluster Kubernetes repose sur trois piliers fondamentaux que chaque administrateur système doit maîtriser :
- kubeadm : L'outil de standardisation pour l'initialisation du cluster, la gestion des jetons (tokens) et les mises à jour de version.
- kubelet : L'agent principal s'exécutant sur chaque nœud, garantissant que les conteneurs sont lancés dans des Pods conformément aux spécifications.
- kubectl : L'interface en ligne de commande pour interagir avec l'API Server du cluster.
Architecture et planification du réseau
Cette infrastructure utilise une architecture à haute disponibilité avec un plan de contrôle redondé. La répartition des nœuds est la suivante :
| Hôte | Adresse IP | Rôle | Services clés |
|---|---|---|---|
| k8s-master-01 | 172.24.10.11 | Control Plane | etcd, API Server, Keepalived, HAProxy |
| k8s-master-02 | 172.24.10.12 | Control Plane | etcd, API Server, Keepalived, HAProxy |
| k8s-master-03 | 172.24.10.13 | Control Plane | etcd, API Server, Keepalived, HAProxy |
| k8s-worker-01 | 172.24.10.14 | Worker | Kubelet, Containerd, Calico |
| k8s-worker-02 | 172.24.10.15 | Worker | Kubelet, Containerd, Calico |
Note : L'adresse IP virtuelle (VIP) pour l'accès au cluster est fixée à 172.24.10.100 sur le port 16443.
Iintialisation de l'environnement système
Avant d'installer Kubernetes, chaque nœud doit être préparé. Cela inclut la désactivation du swap, la configuration des modules du noyau et l'installation du moteur de conteneur containerd.
#!/bin/bash
# Configuration des modules pour Kubernetes
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# Paramètres sysctl requis
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# Désactivation du swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Configuration de la Haute Disponibilité (Keepalived & HAProxy)
Pour garantir que l'API Server reste accessible même en cas de panne d'un maître, nous utilisons Keepalived pour la gestion de la VIP et HAProxy pour l'équilibrage de charge vers les ports 6443 locaux.
Exemple de configuration haproxy.cfg pour la redirection du trafic :
frontend k8s-api-proxy
bind *:16443
mode tcp
option tcplog
default_backend k8s-masters
backend k8s-masters
mode tcp
option tcp-check
balance roundrobin
server master1 172.24.10.11:6443 check
server master2 172.24.10.12:6443 check
server master3 172.24.10.13:6443 check
Déploiement du Cluster avec Kubeadm
L'initialisation se fait via un ficheir de configuration YAML pour assurer la répétabilité et la précision des paramètres réseau.
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.30.3
controlPlaneEndpoint: "172.24.10.100:16443"
networking:
serviceSubnet: "10.20.0.0/16"
podSubnet: "10.10.0.0/16"
apiServer:
certSANs:
- "172.24.10.100"
- "k8s-master-01"
- "k8s-master-02"
- "k8s-master-03"
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
Exécutez la commande suivante sur le premier nœud maître :
kubeadm init --config=kubeadm-config.yaml --upload-certs
Installation du plugin réseau (CNI) : Calico
Une fois le plan de contrôle actif, le déploiement de Calico permet la communication entre les Pods. Il est crucial de faire correspondre la variable CALICO_IPV4POOL_CIDR avec le podSubnet défini précédemment.
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Gestion du stockage persistant avec Longhorn
Longhorn fournit une solution de stockage par blocs distribuée. Il nécessite l'installation d'iscsiadm sur tous les nœuds pour fonctionner correctement.
# Sur CentOS/RHEL
sudo yum install iscsi-initiator-utils -y
sudo systemctl enable --now iscsid
# Déploiement via kubectl
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.2/deploy/longhorn.yaml
Surveillance et Interface Graphique
Pour finaliser l'installation, nous déployons Metrics Server pour la collecte de statistiques de ressources et Kubernetes Dashboard pour une gestion visuele.
Metrics Server : Indispensable pour l'auto-scaling horizontal (HPA).
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Helm : Pour simplifier la gestion des applications complexes.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Exposition des services avec Nginx Ingress
L'Ingress Controller agit comme la porte d'entrée pour le trafic HTTP/HTTPS externe vers vos services internes au cluster.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.1/deploy/static/provider/baremetal/deploy.yaml