Kubernetes sans Docker suite

 

Dans l'article précédent je mettais en place un cluster Kubernetes avec containerd, cette fois-ci j'ajoute des nœuds cri-o.

Merci à Yoan et Eric pour leur conférence cette semaine sur le même sujet : https://www.youtube.com/watch?v=HDWJcSEx6J0

Prérequis

Les prérequis sont les mêmes que pour des nœuds avec Docker et avec Containerd la seule différence c'est que les paquets Debian pour cri-o sont en Debian Testing, j'ai donc mis en place des nœuds avec la Debian 11 - Bullseye - vu que de toute façon cette version passe en freeze en ce moment.

On oublie pas bien sûr de supprimer le swap et de mettre à jour les règles sysctl :

net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6 = 1

Mise en place de cri-o

On prépare les variables :
export VERSION=1.18
export OS=Debian_Testing

On va ensuite installer les dépôts pour installer cri-o

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list

curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -

apt update
apt install cri-o cri-o-runc

systemctl enable crio
systemctl start crio

 

Attention j'ai eu cette erreur :
Feb 17 22:48:04 i-two-wk12 kubelet[404]: E0217 22:48:04.767089 404 remote_runtime.go:116] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = cri-o configured with systemd cgroup manager, but did not receive slice as parent: /kubepods/burstable/pod399d57a6-fd0c-4a35-b976-65d3c02e79c9

Pour la résoudre j'ai du modifier le fichier /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
remplacé par
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd"

Il faut ensuite redémarrer la vm ou kubelet.

Kubeadm et kubelet

Pas de modifications par rapport aux autres runtimes :

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
apt update
apt install cri-tools kubeadm kubelet kubectl -y

 

 

Plus qu'à rajouter ce nœud dans le cluster :
```bash
kubeadm join 192.168.72.101:6443 --ignore-preflight-errors=all --cri-socket "/var/run/crio/crio.sock" --token _token_ --discovery-token-ca-cert-hash sha256:_sha_alors_
```

Ce qui donne ceci :

$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
i-two-km01 Ready control-plane,master 11d v1.20.2 5.135.65.148 <none> Debian GNU/Linux 10 (buster) 5.9.0-0.bpo.5-amd64 containerd://1.4.3
i-two-wk01 Ready <none> 11d v1.20.2 192.168.72.211 <none> Debian GNU/Linux 10 (buster) 5.9.0-0.bpo.5-amd64 containerd://1.4.3
i-two-wk02 Ready <none> 11d v1.20.2 192.168.72.212 <none> Debian GNU/Linux 10 (buster) 5.9.0-0.bpo.5-amd64 containerd://1.4.3
i-two-wk03 Ready <none> 11d v1.20.2 192.168.72.213 <none> Debian GNU/Linux 10 (buster) 5.9.0-0.bpo.5-amd64 containerd://1.4.3
i-two-wk11 Ready <none> 23h v1.20.2 192.168.72.221 <none> Debian GNU/Linux bullseye/sid 5.10.0-3-amd64 cri-o://1.18.4
i-two-wk12 Ready <none> 4m24s v1.20.2 192.168.72.222 <none> Debian GNU/Linux bullseye/sid 5.10.0-3-amd64 cri-o://1.18.4
i-two-wk13 Ready <none> 24h v1.20.2 192.168.72.223 <none> Debian GNU/Linux bullseye/sid 5.10.0-3-amd64 cri-o://1.18.4

Et si on testait

On va vérifier que tout fonctionne normalement :

kubectl create deploy web --image=nginx
kubectl scale deploy/web --replicas=5

kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web-96d5df5c8-gt8lm 1/1 Running 0 24s 10.39.0.1 i-two-wk12 <none> <none>
web-96d5df5c8-l69sb 1/1 Running 0 24s 10.36.0.1 i-two-wk02 <none> <none>
web-96d5df5c8-pfbhm 1/1 Running 0 36s 10.40.0.1 i-two-wk11 <none> <none>
web-96d5df5c8-wcmnw 1/1 Running 0 24s 10.44.0.1 i-two-wk01 <none> <none>
web-96d5df5c8-wgkv5 1/1 Running 0 24s 10.42.0.1 i-two-wk03 <none> <none>

Les pods sont affectés sur tout les nœuds que ce soit les nœuds containerd ou cri-o bingo It's Works