Je me suis penché sur la question et il semble que le problème se situe au niveau de version de kubelet . Permettez-moi de développer ce point :
Les volumes SELinux ne sont pas réétiquetés dans la version 1.16 - Ce lien fournit plus de détails sur la question.
J'ai essayé de reproduire ce problème de coredns sur différentes versions de Kubernetes.
Le problème apparaît à partir de la version 1.16. Il semble fonctionner correctement avec SELinux activé sur la version 1.15.6.
Pour que cela fonctionne, vous aurez besoin d'un environnement CentOS et CRI-O fonctionnel.
Version CRI-O :
Version: 0.1.0
RuntimeName: cri-o
RuntimeVersion: 1.16.2
RuntimeApiVersion: v1alpha1
Pour déployer cette infrastructure, j'ai suivi ce site pour l'essentiel : KubeVirt
Kubernetes v1.15.7
Étapes de la reproduction :
- Désactiver SELinux et redémarrer la machine :
$ setenforce 0
$ sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config
$ reboot
- Vérifier si SELinux est désactivé en invoquant la commande :
$ sestatus
- Installer les paquets avec
$ yum install INSERT_PACKAGES_BELOW
- kubelet-1.15.7-0.x86_64
- kubeadm-1.15.7-0.x86_64
- kubectl-1.15.7-0.x86_64
- Initialiser le cluster Kubernetes avec la commande suivante
$ kubeadm init --pod-network-cidr=10.244.0.0/16
- Attendez que le cluster s'initialise correctement et suivez les instructions de kubeadm pour vous connecter au cluster.
- Appliquer la flanelle CNI
$ kubectl apply -f https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml
Vérifier que les pods coredns fonctionnent correctement avec la commande : $ kubectl get pods -A
Le résultat devrait être similaire à celui-ci :
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5c98db65d4-2c7lt 1/1 Running 2 7m59s
kube-system coredns-5c98db65d4-5dp9s 1/1 Running 2 7m59s
kube-system etcd-centos-kube-master 1/1 Running 2 7m20s
kube-system kube-apiserver-centos-kube-master 1/1 Running 2 7m4s
kube-system kube-controller-manager-centos-kube-master 1/1 Running 2 6m55s
kube-system kube-flannel-ds-amd64-mzh27 1/1 Running 2 7m14s
kube-system kube-proxy-bqll8 1/1 Running 2 7m58s
kube-system kube-scheduler-centos-kube-master 1/1 Running 2 6m58s
Pods Coredns dans un cluster kubernetes avec SELinux désactivé fonctionnent correctement.
Activer SELinux :
À partir du compte racine, invoquez les commandes pour activer SELinux et redémarrer la machine :
$ setenforce 1
$ sed -i s/^SELINUX=.*$/SELINUX=enforcing/ /etc/selinux/config
$ reboot
Vérifiez que les pods coredns fonctionnent correctement. Ils doivent ne pas obtenir l'erreur crashloopbackoff en cours d'exécution : kubectl get pods -A
Kubernetes v1.16.4
Étapes de la reproduction :
- Exécuter
$ kubeadm reset
si elle provient d'une autre version
- Supprimez les anciens paquets Kubernetes avec
$ yum remove OLD_PACKAGES
- Désactiver SELinux et redémarrer la machine :
$ setenforce 0
$ sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config
$ reboot
- Vérifier si SELinux est désactivé en invoquant la commande :
$ sestatus
- Installer les paquets avec
$ yum install INSERT_PACKAGES_BELOW
- kubelet-1.16.4-0.x86_64
- kubeadm-1.16.4-0.x86_64
- kubectl-1.16.4-0.x86_64
- Initialiser le cluster Kubernetes avec la commande suivante
$ kubeadm init --pod-network-cidr=10.244.0.0/16
- Attendez que le cluster s'initialise correctement et suivez les instructions de kubeadm pour vous connecter au cluster.
- Appliquer la flanelle CNI
$ kubectl apply -f https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml
Vérifier si les pods coredns fonctionnent correctement avec la commande : $ kubectl get pods -A
Le résultat devrait être similaire à celui-ci :
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5644d7b6d9-fgbkl 1/1 Running 1 13m
kube-system coredns-5644d7b6d9-x6h4l 1/1 Running 1 13m
kube-system etcd-centos-kube-master 1/1 Running 1 12m
kube-system kube-apiserver-centos-kube-master 1/1 Running 1 12m
kube-system kube-controller-manager-centos-kube-master 1/1 Running 1 12m
kube-system kube-proxy-v52ls 1/1 Running 1 13m
kube-system kube-scheduler-centos-kube-master 1/1 Running 1 12m
Activer SELinux :
À partir du compte racine, invoquez les commandes pour activer SELinux et redémarrer la machine :
$ setenforce 1
$ sed -i s/^SELINUX=.*$/SELINUX=enforcing/ /etc/selinux/config
$ reboot
Après le redémarrage, les pods coredns doit entrer dans l'état crashloopbackoff comme indiqué ci-dessous :
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-5644d7b6d9-fgbkl 0/1 CrashLoopBackOff 25 113m
kube-system coredns-5644d7b6d9-x6h4l 0/1 CrashLoopBackOff 25 113m
kube-system etcd-centos-kube-master 1/1 Running 1 112m
kube-system kube-apiserver-centos-kube-master 1/1 Running 1 112m
kube-system kube-controller-manager-centos-kube-master 1/1 Running 1 112m
kube-system kube-proxy-v52ls 1/1 Running 1 113m
kube-system kube-scheduler-centos-kube-master 1/1 Running 1 112m
Journaux du pod coredns-5644d7b6d9-fgbkl
spectacle :
plugin/kubernetes: open /var/run/secrets/kubernetes.io/serviceaccount/token: permission denied