web-dev-qa-db-fra.com

kubelet a échoué avec le pilote cgroup kubelet: "cgroupfs" est différent du pilote docker cgroup: "systemd"

Configuration pour cgroup driver a raison dans /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"

J'ai également vérifié le Environment avec cli

$ systemctl show --property=Environment kubelet | cat
Environment=KUBELET_KUBECONFIG_ARGS=--kubeconfig=/etc/kubernetes/kubelet.conf\x20--require-kubeconfig=true KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests\x20--allow-privileged=true KUBELET_NETWORK_ARGS=--network-plugin=cni\x20--cni-conf-dir=/etc/cni/net.d\x20--cni-bin-dir=/opt/cni/bin KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10\x20--cluster-domain=cluster.local KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook\x20--client-ca-file=/etc/kubernetes/pki/ca.crt KUBELET_CADVISOR_ARGS=--cadvisor-port=0 KUBELET_CGROUP_ARGS=--cgroup-driver=systemd

KUBELET_CGROUP_ARGS=--cgroup-driver=systemd

Comment le reproduire:

  • yum install -y docker-1.12.6
  • systemctl enable docker && systemctl start docker
  • setenforce 0
  • yum install -y kubelet kubeadm
  • systemctl enable kubelet && systemctl start kubelet
  • systemctl daemon-reload
  • systemctl redémarrer kubelet
  • journal de kubelet

Environnement:

  • Version de Kubernetes (utilisez kubectl version): 1.7.3
  • Fournisseur cloud ou configuration matérielle **: 4 core 16G RAM
  • Système d'exploitation (par exemple à partir de/etc/os-release): CentOS Linux 7 (Core)
  • Noyau (par exemple uname -a): Linux 10-8-108-92 3.10.0-327.22.2.el7.x86_64 # 1 SMP jeu 23 juin 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  • Installer les outils: kubeadm
6
Yuwen Yan

Cause possible

kubelet 1.7.3 ne lit pas le fichier de configuration /etc/systemd/system/kubelet.service.d/10-kubeadm.conf # 50748

Solution

Dépannage de kubeadm

Si vous utilisez CentOS et rencontrez des difficultés lors de la configuration du nœud maître, vérifiez que votre pilote Docker cgroup correspond à la configuration du kubelet:

docker info | grep -i cgroup
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Si le pilote Docker cgroup et la configuration de kubelet ne correspondent pas, modifiez la configuration de kubelet pour correspondre au pilote Docker cgroup. L'indicateur que vous devez modifier est --cgroup-driver. S'il est déjà défini, vous pouvez mettre à jour comme suit:

sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Cela peut être remplacé par:

CG=$(Sudo docker info 2>/dev/null | sed -n 's/Cgroup Driver: \(.*\)/\1/p')
sed -i "s/cgroup-driver=systemd/cgroup-driver=$CG/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
4
mon

Pour lancer un mini-cube sur un CentOS 7, je dois le démarrer avec un --extra-config=kubelet.cgroup-driver=systemd comme suggéré dans https://github.com/kubernetes/minikube/issues/2192 .

3
Jari Turkia

Il semble que le processus kubelet n'ait pas chargé les bons paramètres à partir du /etc/systemd/system/kubelet.service.d/10-kubeadm.conf dire à partir du message d'erreur.

Après avoir obtenu plus d'informations sur le chat, je pense qu'il existe plusieurs façons de procéder:

  1. Basculez à la fois le pilote cubelet et docker cgroup sur cgroupfs Téléchargez le docker à partir du référentiel ci-dessous qui utilise cgroupfs par défaut.

    [dockerrepo] 
    name=Docker Repository 
    baseurl=https://yum.dockerproject.org/repo/main/centos/7 
    enabled=1 
    gpgcheck=1 
    gpgkey=https://yum.dockerproject.org/gpg
    

    Et changez également le pilote cgroup dans kubelet conf. Vérifiez si l'erreur se reproduit et quel chargement de kubelet à partir de sa conf.

  2. Ajouter plus de journaux dans le code kubelet pour le déboguer

    This est la logique utilisée par le kubelet pour obtenir la conf des deux côtés

2
ichbinblau

Modifiez ce fichier /etc/systemd/system/kubelet.service.d/10-kubeadm.conf changer systemd en cgroupfs ". puis redémarrer le kubelet systemctl restart kubelet.

1
sfgroups

Cela est dû à une mauvaise configuration lors du démarrage initial. Par exemple, oublier de changer le pilote docker cgroup avant d'exécuter kubeadm init commande.

Pour y remédier sous CentOS, ouvrez /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf ou recherchez le fichier sous votre système d'exploitation. Localisez l'entrée avec EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env. Ouvrez ce fichier et modifiez la valeur de --cgroup-driver à systemd ou être identique au pilote docker cgroup. Ancien contenu:

KUBELET_KUBEADM_ARGS=--cgroup-driver=cgrouopfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1

Nouveau contenu:

KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1
0
MUNGAI NJOROGE

Installez d'abord le docker:

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm

[root@cgfs-dock ~]# docker info | grep -i cgroup
Cgroup Driver: cgroupfs

Ensuite, installez le kubelet, cela résoudrait votre problème.

0
suresh Palemoni

Dans mon environnement, cela n'a fonctionné que dans l'autre sens. La définition de systemd entraîne toujours une erreur. Voici ma configuration actuelle

OS: CentOS 7.6.1810 
Minikube Version v1.0.0
Docker Version  18.06.2-ce

La solution pour moi était: Vérifiez /etc/docker/daemon.json et changez systemd en cgroupfs

{
  "exec-opts": ["native.cgroupdriver=cgroupfs"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

Rechargez ensuite systemctl systemctl daemon-reload Tuez la configuration précédente du minikub minikube delete et redémarrez le minikube minikube start --vm-driver=none

Vérifiez maintenant la ligne de commande que la sortie doit trouver cgroupfs dans les deux sorties

docker info | grep -i cgroup
cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

À la fin, vous devriez voir

   kubectl is now configured to use "minikube"
=   Done! Thank you for using minikube!

Solution simple: Démarrez votre minikube avec le paramètre Extra onfig

--extra-config=kubelet.cgroup-driver=systemd

La commande complète pour démarrer le minikube est la ligne suivante

minikube start --vm-driver=none --extra-config=kubelet.cgroup-driver=systemd

Tout le meilleur et amusez-vous

0
Mchoeti