Déploiement d'un Cluster Kubernetes
Introduction
Configurer l'infrastructure de base et préparer l'environnement système pour un cluster Kubernetes sur AWS (Control Plane & Nodes). Cette documentation se concentre sur le provisionnement des instances EC2 et l'initialisation des composants bas niveau (Containerd, modules noyau, swap) nécessaires au bon fonctionnement de K8s.
1. Spécifications de l'Infrastructure AWS
2. Script de Préparation Système
Ce script doit être exécuté sur les trois instances pour préparer l'OS à recevoir Kubernetes.
#!/bin/bash
# 1. Désactivation du Swap (requis par K8s)
sudo swapoff -a
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables= 1
EOF
sudo sysctl --system
sudo apt-get update
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/'
/etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl restart kubelet
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /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.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
apt-cache policy kubelet | head -n 20
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl containerd
sudo systemctl status kubelet.service --no-pager
sudo systemctl status containerd.service --no-pager
sudo systemctl enable kubelet.service
sudo systemctl enable containerd.service
puis, sur l'instance master
kubeadmn init
et lire et exécuter l'output qui doit ressembler à ça :
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#ici flannel mais calico ou autre possible
kubectl apply -f https://github.com/flannel-io/flannel/rele
ases/latest/download/kube-flannel.yml
en cas d'échec
vérifier le réseau
- vérifier la version de l'API
- security group statefull all traffic 0.0.0.0/0
- stateless = il faut set up inbound et outbound
vérifier les configurations
sur le master, générer un nouveau token
kubeadm token create --print-join-command
sur chacun des nodes (ou au moins celui qui fail)
sudo kubeadm reset -f
sudo rm -rf /etc/kubernetes/kubelet.conf /etc/kubernetes/pk
i/ca.crt
kubeadmn join <nouveau token>
si toujours rien
sur le master
sudo ss -nltp | grep 6443
si rien ne s'affiche alors
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl restart kubelet
sudo ss -nltp | grep 6443
normalement : LISTEN 0 4096 *:6443 *:* users:(("kube-apiserver",pid=4xx,fd=x)
3. Étapes de validation
-
Vérification modules :
lsmod | grep -e br_netfilter -e overlay -
Vérification Cgroup : Vérifier que
SystemdCgroup = trueapparaît dans/etc/containerd/config.toml. -
Vérification API : Une fois
kubeadm initlancé sur le master, la commandess -nltp | grep 6443doit confirmer que l'API server écoute les requêtes.
No comments to display
No comments to display