Skip to main content

Initialisation de mon tout premier cluster HA

Architecture

Hostname
RAM
CPU
DISQUE
IP
FONCTION
k8s-master-1
16 go 4 60 SSD + 100 HDD (/opt) 192.168.1.101 etcd + control-plane
k8s-master-2 16 go 4 60 SSD + 100 HDD (/opt) 192.168.1.102 etcd + control-plane
k8s-master-3 16 go 4 60 SSD + 100 HDD (/opt) 192.168.1.103 etcd + control-plane
k8s-worker-1 16 go 4 60 SSD + 100 HDD (/opt) 192.168.1.104
k8s-worker-2 16 go 4 60 SSD + 100 HDD (/opt) 192.168.1.105
k8s-worker-3 16 go 4 60 SSD + 100 HDD (/opt) 192.168.1.106

Tous les noeuds sont sur debian 13.

Plan de déploiement du cluster :

  • Préparation du système
  • installation des prérequits
    • conainer.io
    • kubelet
    • kubeadm
    • kubectl
  • Préparation du cluster HA (KubeVip)
  • Initialisation du cluster
  • Configuration du cluster
  • Ajout des différents noeud au cluster


Préparation du système

Commandes à réaliser sur tous les noeuds

1) Désactivation de la swap
swapoff -a

Désactivation de la swap de manière pérenne : 

sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2) Configuration du kernel

Chargement au démarage des modules pour k8s : 

cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

Chargement immédiat des modules pour k8s : 

modprobe overlay
modprobe br_netfilter

Le module overlay permet le fonctionnement du système de fichier OverlayFS.
Le module br_netfiltrer permet d'appliquer les iptables à un bridge.

Configuration des paramètres réseaux :

cat <<EOF | 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

Permet aux bridges de faire appel au FW iptables
Permet d'active le routage

Application des paramètres : 

sysctl --system

installation des prérequits

Commandes à réaliser sur tous les noeuds

Installation des packets courrants :
apt-get update 
apt-get install -y ca-certificates curl gnupg lsb-release htop jq tcpdump ethtool
Installation de containerd.io
install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/debian bookworm stable" \
  | tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update

apt install -y containerd.io

Configuration de containerd : 

containerd config default | sudo tee /etc/containerd/config.toml

Activation de containerd : 

systemctl enable containerd

Activation de l'emploie de systemd comme gestionnaire de Cgroup : 

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

Redémarage de Containerd :

systemctl restart containerd
Installation de kubernet

Installation de kubelet kubeadm et kubectl :

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor | sudo tee /etc/apt/keyrings/kubernetes-apt-keyring.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /" | 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

Préparation du cluster HA (KubeVip)

Sur tous les noeuds master UNIQUEMENT

export VIP="192.168.1.100"
export INTERFACE="ens18"


Ici ens18 correspond à mon interface de prod et 192.168.1.100 correspondra à l'ip qui se "baladera" sur mes noeuds master selon leur disponiblité -> elle n'est pas fixée à un seul endroit.

KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases/latest | jq -r ".name")
echo "Version kube-vip : $KVVERSION"
sudo mkdir -p /etc/kubernetes/manifests/
# Pull de l'image kube-vip
sudo ctr image pull ghcr.io/kube-vip/kube-vip:$KVVERSION
# Génération du manifeste Static Pod
sudo ctr run --rm --net-host ghcr.io/kube-vip/kube-vip:$KVVERSION vip \
/kube-vip manifest pod \
--interface $INTERFACE \
--address $VIP \
--controlplane \
--services \
--arp \
--leaderElection | sudo tee /etc/kubernetes/manifests/kube-vip.yaml

Initialisation du cluster

dffd

Configuration du cluster

fddf

Ajout des différents noeud au cluster