# Préparation et Installation

# Préparation  : 
*A Faire sur toutes les machines / VMs*

pour plus de simplicité je vais egalement ajouter les hotes dans le fichier hosts afin de faire de la résolution par nom et eviter les problème en cas de soucis de DNS : 


fichier /etc/hosts (pensez a l'adapter en fonction de chaque hote) :
```
#Cluster Kubernetes
192.168.20.240      k8s-m1
192.168.20.241      k8s-m2
192.168.20.242      k8s-m3
192.168.20.243      k8s-w1
192.168.20.244      k8s-w2
192.168.20.245      k8s-w3
```

### Désactivation du SWAP : 
Pour ce faire il faut executer ```nano /etc/fstab```

Ensuite il faut trouver la ligne ou le "SWAP" est mentionné et la commenté en mettant un # devant cette ligne. Suite a ça enregistré et redémarrer la machine.

### Régalge de la Timezone : 

```timedatectl set-timezone "Europe/Paris"```

### Installation de l'agent QEMU

```apt install qemu-guest-agent```

# Installation de Kubernetes

### Mise a jour des paquets : 
```apt update && apt dist-upgrade -y```
### Installation des dépendances : 

```apt-get install curl pgp -y```

Penser bien a changer le numéro de version avec la version actuelle que vous pouvez retrouver sur ce site : ```https://kubernetes.io/fr/releases/```

```echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list```

```curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg```

```apt install containerd curl -y```

```systemctl enable --now containerd```

```apt update```

### configuration de quelques fichier de containerd

#### Suppression de ```config.toml``` (Si nécessaire)

```
rm /etc/containerd/config.toml
systemctl restart containerd
```
Ensuite on crée le dossier containerd dans etc si il n'existe pas déjà : 

```sudo mkdir -p /etc/containerd```

Une fois cela fait ont crée la configuration : 

```containerd config default | sudo tee /etc/containerd/config.toml```

On edite la configuration pour modifié ce paramètres de "false" à "true" : 

```
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
```
vous pouvez également taper cette commande qui fait directement la modifications (c'est plus rapide) : ```sudo sed -i -E 's/^([[:space:]]*SystemdCgroup[[:space:]]*=[[:space:]]*)false/\1true/' /etc/containerd/config.toml```

puis on redémarre containerd : 

```systemctl restart containerd```

Ensuite on fait les deux manipulations suivantes : 

```
cat <<'EOF' | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
```

la deuxième : 

```
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
```

Puis on redémarre une nouvelle fois containerd : ```systemctl restart containerd```

Pour plus d'inforamtions voici la procédure que j'ai suivi : ```https://sayakm.me/deploying-a-ha-kubernetes-cluster-on-raspberry-pi-using-kubeadm/?utm_source=chatgpt.com```

### Installation de Kubernetes (Kubelet - Kubeadm - Kubectl) :  
 

```apt-get update && apt-get install kubelet kubeadm kubectl -y && apt-mark hold kubelet kubeadm kubectl```

La commande apt-mark permet de fixer la version a celle actuelle de cette manière si quelqu'un vient faire un upgrade du système ce paquet ne se mettra pas à jour.

pour vérifier l'installation vous pouvez taper la commande ```kubectl``` et vérifié les noeuds qui sont normalement au nombre de 1 actuellement en tapant : ```kubectl get nodes```

### Dernière vérifications (a vérifé si il faut le faire ?) : 

On va vérifié si les "cgroups mémoire" sont activer pour ce faire faire la commande : ```cat /proc/cgroups``` si enable est egal a "memory" ou à "1" alors c'est bon sinon editer le fichier ```/boot/firmware/cmdline.txt``` et ajouter : ```cgroup_enable=memory``` puis redémarrer votre hote.

### Installation via un Script : 

*Attention la configuration et le script est a vérifié et a adapter a votre besoin*

```
wget https://gitlab.antoninpomies.fr/antoninpomies/kubernetes/-/raw/main/get_k8s.sh
chmod +x get_k8s.sh
sudo ./get_k8s.sh
```