Planification de l'environnement Kubernetes
La mise en place d'un cluster Kubernetes haute disponibilité nécessite une planification minutieuse des composants réseau et de l'infrastructure sous-jacente.
Déploiement de l'équilibreur de charge NGINX avec le module stream
Configuration de deux serveurs NGINX (10.192.27.111 et 10.192.27.112) pour la répartition de charge de niveau 4.
# Création du dépôt NGINX
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=NGINX Stable Repository
baseurl=https://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
EOF
# Installation de NGINX
yum install -y nginx
Configuration du fichier nginx.conf pour le load balancing des API servers Kubernetes :
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
log_format k8s_log '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
access_log /var/log/nginx/k8s-stream.log k8s_log;
upstream k8s_api_servers {
server 10.192.27.100:6443; # Premier master
server 10.192.27.114:6443; # Second master
}
server {
listen 6443;
proxy_pass k8s_api_servers;
proxy_timeout 3s;
}
}
http {
# Configuration HTTP standard
include /etc/nginx/mime.types;
default_type application/octet-stream;
# ... configuration HTTP restante
}
Démarrage et activation du service NGINX :
systemctl enable --now nginx
netstat -tulpn | grep 6443
Copie de la configuration vers le second serveur NGINX :
# Sur NGINX01
echo "nginx-primary" > /usr/share/nginx/html/index.html
scp /etc/nginx/nginx.conf root@10.192.27.112:/etc/nginx/
# Sur NGINX02
systemctl enable --now nginx
echo "nginx-secondary" > /usr/share/nginx/html/index.html
Implémentation de Keepalived pour la haute disponibilité
Configuration du nœud principal (NGINX01)
yum install -y keepalived
Configuration de Keepalived :
vrrp_script verify_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight 20
}
vrrp_instance K8S_VIP {
state MASTER
interface eth0
virtual_router_id 88
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass secure123
}
virtual_ipaddress {
10.192.27.117/24
}
track_script {
verify_nginx
}
}
Script de vérification NGINX :
#!/bin/bash
nginx_processes=$(pgrep -c nginx)
if [ $nginx_processes -eq 0 ]; then
systemctl stop keepalived
exit 1
fi
exit 0
Configuration du nœud secondaire (NGINX02)
vrrp_instance K8S_VIP {
state BACKUP
interface eth0
virtual_router_id 88
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass secure123
}
virtual_ipaddress {
10.192.27.117/24
}
track_script {
verify_nginx
}
}
Tests de basculement
# Test d'arrêt de NGINX sur le nœud principal
pkill nginx
# Vérification du transfert de l'IP virtuelle
ip addr show eth0 | grep 10.192.27.117
# Redémarrage des services
systemctl restart nginx keepalived
Configuration des nœuds worker pour utiliser le VIP
Modification des fichiers de configuration kubeconfig pour pointer vers l'IP virtuelle :
# Modification des endpoints API
sed -i 's/10.192.27.100:6443/10.192.27.117:6443/g' /opt/kubernetes/cfg/*.kubeconfig
# Redémarrage des services
systemctl restart kubelet kube-proxy
Vérification du trafic dans les logs NGINX :
tail -f /var/log/nginx/k8s-stream.log