Ошибка kubelet с драйвером cgroup kubelet: cgroupfs отличается от драйвера cgroup docker: systemd

Конфигурация для cgroup driver находится прямо в /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

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

Я также проверил Environment с помощью 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

Как это воспроизвести:

  • yum install -y докер-1.12.6
  • systemctl включить докер && systemctl запустить докер
  • setenforce 0
  • yum install -y kubelet kubeadm
  • systemctl включить kubelet && systemctl start kubelet
  • systemctl демон-перезагрузка
  • systemctl перезапустить kubelet
  • кубелет бревно

Окружающая среда:

  • Версия Kubernetes (используйте kubectl version): 1.7.3
  • Облачный провайдер или конфигурация оборудования **: 4 ядра 16 ГБ ОЗУ
  • ОС (например, из / etc / os-release): CentOS Linux 7 (Core)
  • Ядро (например, uname -a): Linux 10-8-108-92 3.10.0-327.22.2.el7.x86_64 # 1 SMP Чт 23 июня 17:05:11 UTC 2016 x86_64 x86_64 x86_64 GNU / Linux
  • Инструменты установки: kubeadm

person Yuwen Yan    schedule 16.08.2017    source источник


Ответы (7)


Возможная причина

kubelet 1.7.3 не читает файл конфигурации /etc/systemd/system/kubelet.service.d/10- kubeadm.conf # 50748

Решение

Устранение неполадок kubeadm

Если вы используете CentOS и столкнулись с трудностями при настройке главного узла, убедитесь, что ваш драйвер контрольной группы Docker соответствует конфигурации kubelet:

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

Если драйвер cgroup Docker и конфигурация kubelet не совпадают, измените конфигурацию kubelet, чтобы она соответствовала драйверу cgroup Docker. Вам нужно изменить флаг --cgroup-driver. Если он уже установлен, вы можете обновить его следующим образом:

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

Его можно заменить на:

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
person mon    schedule 14.12.2017

Чтобы запустить minicube на CentOS 7, мне нужно запустить его с --extra-config=kubelet.cgroup-driver=systemd, как предлагается в https://github.com/kubernetes/minikube/issues/2192.

person Jari Turkia    schedule 11.06.2018
comment
привет спасибо, у меня сработало с minikube на rhel7.5 - person Ijaz Ahmad Khan; 29.03.2019

В моем окружении это работало только наоборот. Установка systemd всегда приводит к ошибке. Вот моя текущая настройка

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

Решение для меня было: проверить /etc/docker/daemon.json и сменить systemd на 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"
  ]
}

Затем перезагрузите systemctl systemctl daemon-reload Убейте предыдущую конфигурацию minikub minikube delete и снова запустите minikube minikube start --vm-driver=none

Теперь проверьте командную строку, результат должен найти cgroupfs на обоих выходах.

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

В конце концов вы должны увидеть

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

Простое решение: запустите свой мини-куб с дополнительным параметром конфигурации.

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

Полная команда для запуска minikube - это следующая строка

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

Всего наилучшего и получайте удовольствие

person Mchoeti    schedule 27.04.2019

Похоже, что процесс kubelet не загрузил правильные настройки из /etc/systemd/system/kubelet.service.d/10-kubeadm.conf сообщения об ошибке.

После получения дополнительной информации из чата, я думаю, есть несколько возможных путей:

  1. Переключите драйвер cgroup для kubelet и docker на cgroupfs Загрузите докер из репозитория ниже, который по умолчанию использует cgroupfs.

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

    И также измените драйвер cgroup в kubelet conf. Проверьте, повторяется ли ошибка снова и какой кубелет загружается из своей конфигурации.

  2. Добавьте больше логов в код kubelet для его отладки

    person ichbinblau    schedule 16.08.2017

comment
Я так не думаю, информация об ошибке говорит, что cgroup-driver кублета уже является cgroupfs, что отличается от докера. - person Yuwen Yan; 16.08.2017
comment
@YuwenYan Какой у вас драйвер cgroup для докеров? sudo docker info | grep Cgroup - person ichbinblau; 16.08.2017
comment
Я прошу, потому что по умолчанию docker 1.12.6 использует cgroupfs в Centos 7. - person ichbinblau; 16.08.2017
comment
это systemd, я не менял его раньше, поэтому я думаю, что конфигурация докера по умолчанию тоже systemd - person Yuwen Yan; 16.08.2017
comment
нет, я просто установил его из официального репо, в чем разница? - person Yuwen Yan; 16.08.2017
comment
и я думаю, что проблема не в докере, а в кубелете, поскольку конфигурация кубелета правильная, но это просто НЕ влияет. - person Yuwen Yan; 16.08.2017
comment
@YuwenYan Я использую ту же версию kubelet, что и вы получили из официального репозитория, но kubelet не имеет проблем с загрузкой конфигураций. Итак, я предполагаю, что если бы основной причиной был kubelet, по крайней мере драйвер cgroup cgroupfs мог бы быть загружен без каких-либо проблем. - person ichbinblau; 16.08.2017
comment
Docker использует драйвер cgroups, нам нужно обновить kubelet, чтобы использовать cgroupfs. - person sfgroups; 05.10.2017

Это вызвано неправильной конфигурацией во время первоначального запуска. Например, вы забыли сменить драйвер docker cgroup перед выполнением команды kubeadm init.

Чтобы исправить это в CentOS, откройте /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf или найдите файл в своей операционной системе. Найдите запись с EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env. Откройте этот файл и измените значение --cgroup-driver на systemd или на то же, что и в драйвере cgroup docker. Старое содержание:

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

Новый контент:

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

Может быть лучше сделать наоборот и заставить kubelet использовать systemd

На сайте Kubernetes они рекомендуют использовать systemd https://kubernetes.io/docs/setup/production-environment/container-runtimes/ Подробнее здесь

И вы можете изменить kubelet на использование systemd, следуя https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ добавив это в / etc / sysconfig / kubelet


cat /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd
person Alex Punnen    schedule 11.03.2020
comment
Это то, что наконец сработало для меня. После нескольких часов поиска он нашел это внизу ответа stackoverflow, который наконец заставил все работать. - person Anish Aralikatti; 13.04.2021

Отредактируйте этот файл /etc/systemd/system/kubelet.service.d/10-kubeadm.conf измените systemd на cgroupfs ". Затем перезапустите kubelet systemctl restart kubelet.

person sfgroups    schedule 05.10.2017