Skip to main content

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

Paramètre Valeur
Nombre d'instances 3 (1 Master, 2 Workers)
AMI Ubuntu 24.04 LTS
Type d'instance t2.large (2 vCPU, 8GB RAM)
Stockage 15 GB EBS (Type : gp3)
Réseau IP Publique activée
Sécurité (SG) SSH (Port 22) ouvert sur 0.0.0.0/0
Rôle IAM

LabInstanceProfile

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 = true apparaît dans /etc/containerd/config.toml.

  • Vérification API : Une fois kubeadm init lancé sur le master, la commande ss -nltp | grep 6443 doit confirmer que l'API server écoute les requêtes.