Skip to main content

Load-Balancer et Initialisation (Keepalived et HAProxy) [OK]

Installation et Configuration de HAProxy :

Sur chaque master node

Installation

sudo apt -y install haproxy
sudo systemctl enable --now haproxy

Configuration :

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak && sudo nano /etc/haproxy/haproxy.cfg

global
  maxconn 4096
  log /dev/log local0
  daemon
  stats socket /var/lib/haproxy/stats

defaults
  mode                    http
  log                     global
  option                  httplog
  option                  dontlognull
  option http-server-close
  option forwardfor       except 127.0.0.0/8
  option                  redispatch
  retries                 3
  timeout http-request    10s
  timeout queue           1m
  timeout connect         10s
  timeout client          1m
  timeout server          1m
  timeout http-keep-alive 10s
  timeout check           10s
  maxconn                 3000

listen stats
  bind *:9000
  stats enable
  stats uri /stats
  stats refresh 2s
  stats auth admin:statspasswordforhaproxy


# API Kubernetes : 6443 en TCP (TLS passthrough)
listen kubernetes-apiserver-https
  bind *:6443
  mode tcp
  option log-health-checks
  timeout client 10m
  timeout server 10m
  balance roundrobin
  server k8s-m1 192.168.20.240:6443 check
  server k8s-m2 192.168.20.241:6443 check
  server k8s-m3 192.168.20.242:6443 check

Redémarrage de HAProxy pour appliquer les changements sudo systemctl restart haproxy

Test si on écoute bien sur le port 6443 sudo ss -lntp | grep 6443

Installation et Configuration de Keepalived :

Sur chaque master node

Installation

sudo apt -y install keepalived

Configuration

Pensez a adapter la configuration en fonction de l'hote en baissant la priorité et en modifiant le nom de l'interface si nécéssaire.

sudo nano /etc/keepalived/keepalived.conf

vrrp_script chk_haproxy {
  script "pidof haproxy"
  interval 2
  weight -50
}

vrrp_instance VI_API {
  state BACKUP
  interface ens18               # <-- remplace par ton NIC
  virtual_router_id 51
  priority 150                  # M1:150, M2:120, M3:100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass changeMe
  }
  virtual_ipaddress {
    192.168.20.100/24 dev ens18 # <-- ton VIP
  }
  track_script { chk_haproxy }

  # Bascules ARP propres (options documentées dans le man keepalived)
  garp_master_delay 1
  garp_master_repeat 5
  garp_lower_prio_no_advert
}

Activation et vérification de l'installation :

sudo systemctl enable --now keepalived
journalctl -u keepalived -n 50 --no-pager
ip a | grep -A2 192.168.20.100

Ont peut également vérifié que le port fonctionne bien :

nc -vz 192.168.20.100 6443

Initialisation du Cluster Kubernetes :

sudo kubeadm init \
  --control-plane-endpoint 192.168.20.100:6443 \
  --pod-network-cidr 10.244.0.0/16 \
  --upload-certs

Une fois le conteneur initialisé, mettez vous avec votre utilisateur classique et executer ça (comme recommandé suite a l'installation) :

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

Et si vous êtes en "root" alors cette commande ci : export KUBECONFIG=/etc/kubernetes/admin.conf