Bon voilà j'ai reproduit la procédure sur 2 nœuds, restera plus qu'a manipuler plus loin. J'espère pouvoir enfin utiliser les cgroupv2, ainsi que de réactiver selinux par la suite.
Donc voici le descriptif de ce que j'ai fait pour rendre fonctionnel kubernetes avec cri-o :
C'est à faire sur tout les nœuds,
sauf la partie :
Et on lance l'initialisation de notre kubernetes sur le premier nœud (master de base):
kubeadm init --pod-network-cidr=10.244.0.0/16
Il est nécessaire de rajouter "sudo" aux commande si vous n'êtes pas avec le compte root "su -"!
Étape 1 : installation de cri-o et préparation de la machine :
dnf module install cri-o:1.17/default -y
dnf install fuse*overlay* -y
grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"
On édite le crio.conf :
vi /etc/crio/crio.conf
On modifie le storage_driver et on rajoute storage_option :
# Storage driver used to manage the storage of images and containers. Please
# refer to containers-storage.conf(5) to see all available storage drivers.
storage_driver = "overlay"
# List to pass options to the storage driver. Please refer to
# containers-storage.conf(5) to see all available storage options.
#storage_option = [
#]
storage_option = [ "overlay2.override_kernel_check=1" ]
Mais aussi :
[crio.network]
# Path to the directory where CNI configuration files are located.
#network_dir = "/etc/cni/net.d"
network_dir = "/etc/crio/net.d/"
Ainsi que :
# Cgroup management implementation used for the runtime.
cgroup_manager = "cgroupfs"
On modifie la valeur du Storage Driver dans :
vi /etc/containers/storage.conf
# Default Storage Driver
driver = "overlay2"
On désactive selinux :
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
On ajoute les ports nécessaires au pare feu :
[root@kube02 ~]# firewall-cmd --permanent --add-port={6443,2379,2380,10250,10251,10252}/tcp --add-port=30000-32767/tcp && firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload
On désactive le swap (je n'aime pas, ce n'est pas nécessaire, mais il est nécessaire de rajouter une option à chaque fois pour ne pas que kubeadm bloque):
swapoff -a
Ne pas oublier de commenter la ligne qui concerne le swap dans /etc/fstab
On active le mode bridge et autres options pour sysctl :
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
On active br_netfilter et overlay :
modprobe br_netfilter
echo br_netfilter > /etc/modules-load.d/br_netfilter.conf
modprobe overlay
echo overlay > /etc/modules-load.d/overlay.conf
On dit à sysctl de tout prendre en compte :
sysctl -p/etc/sysctl.d/99-kubernetes-cri.conf
Perso je préfère directement faire un :
sysctl --system
On crée le fichier /etc/default/kubelet avec ce qui suit :
vi /etc/default/kubelet
KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false,RunAsGroup=true" --container-runtime=remote --cgroup-driver=cgroupfs --container-runtime-endpoint='unix:///var/run/crio/crio.sock' --runtime-request-timeout=5m
On ajoute le dépôt kubernetes :
vi /etc/yum.repos.d/kubernetes.repo
Avec :
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
On importe la clef :
rpm --import https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
on renomme le fichier des paramètres réseaux de crio :
mv /etc/cni/net.d/100-crio-bridge.conf /etc/cni/net.d/10-crio-bridge.conf
On modifie le fichier :
sed -i 's/10.88.0.0/10.244.0.0/g' /etc/cni/net.d/10-crio-bridge.conf
On copie le dossier net.d dans :
cp -r -f /etc/cni/net.d /etc/crio/
on reboot :
reboot
Une fois rebooté :
systemctl enable --now crio
dnf install kubelet kubeadm kubectl
systemctl enable --now kubelet
On active l'autocompletion pour kubectl :
echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl completion bash >/etc/bash_completion.d/kubectl
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -F __start_kubectl k' >>~/.bashrc
On ajoute nos hosts dans /etc/hosts par exemple (à faire sur tout les noeuds si l'on a pas de serveur DNS ):
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.122.125 kube.localdomain kube
192.168.122.126 kube02.localdomain kube02
Et on lance l'initialisation de notre kubernetes sur le premier nœud (master de base):
kubeadm init --pod-network-cidr=10.244.0.0/16
On copie le résultat dans un fichier texte ou autres à la fin, par exemple :
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.122.125:6443 --token zbbipu.24zaez8ua3egofz7 \
--discovery-token-ca-cert-hash sha256:f24883015c05ba7f35fe33a1cf90caa5f485aed0e4bb3dd5cac1acddf308fce4
Le kubeadm join permettra de rajouter des noeuds à notre cluster kubernetes.
C'est donc à faire en plus, exemple :
kubeadm join 192.168.122.125:6443 --token zbbipu.24zaez8ua3egofz7 \
--discovery-token-ca-cert-hash sha256:f24883015c05ba7f35fe33a1cf90caa5f485aed0e4bb3dd5cac1acddf308fce4
Ne reste plus qu'a faire :
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
On lance la commande "kubectl get nodes" pour vérifier que notre/nos noeud(s) sont bien prit en compte :
[root@kube ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube.localdomain Ready master 9m17s v1.18.0
[root@kube ~]#
Voilà, a savoir que c'est une installation "primaire", il reste pas mal de travail à fournir pour avoir quelque chose de complet. Mais bon en l'état c'est déjà un bon début.
Je n'ai pas trouvé de solution pour utiliser la version fourni par Fedora directement. Je pense qu'il y a un gros travail sur le paramètrage à faire pour que ce soit fonctionnel. A voir si avec les différentes modification apporté à la procédure ci-dessus n'est pas la piste à suivre.
J'espère que cela aidera les personnes qui souhaitent mettre cela en place, si il y du monde je pense créer une doc quand j'aurai plus d'experience sur le sujet.