kubelet не может получить статистику cgroup для сервисов docker и kubelet

Я использую kubernetes на голом железе Debian (3 мастера, 2 рабочих, пока PoC). Я следил за k8s-the-hard-way, и на моем kubelet столкнулся со следующей проблемой:

Не удалось получить статистику системного контейнера для «/system.slice/docker.service»: не удалось получить статистику группы для «/system.slice/docker.service»: не удалось получить статистику группы для «/system.slice/docker.service» ": не удалось получить информацию о контейнере для" /system.slice/docker.service ": неизвестный контейнер" /system.slice/docker.service "

И у меня такое же сообщение для kubelet.service.

У меня есть несколько файлов об этих контрольных группах:

$ ls /sys/fs/cgroup/systemd/system.slice/docker.service
cgroup.clone_children  cgroup.procs  notify_on_release  tasks

$ ls /sys/fs/cgroup/systemd/system.slice/kubelet.service/
cgroup.clone_children  cgroup.procs  notify_on_release  tasks

И cadvisor сообщает мне:

$ curl http://127.0.0.1:4194/validate
cAdvisor version: 

OS version: Debian GNU/Linux 8 (jessie)

Kernel version: [Supported and recommended]
    Kernel version is 3.16.0-4-amd64. Versions >= 2.6 are supported. 3.0+ are recommended.


Cgroup setup: [Supported and recommended]
    Available cgroups: map[cpu:1 memory:1 freezer:1 net_prio:1 cpuset:1 cpuacct:1 devices:1 net_cls:1 blkio:1 perf_event:1]
    Following cgroups are required: [cpu cpuacct]
    Following other cgroups are recommended: [memory blkio cpuset devices freezer]
    Hierarchical memory accounting enabled. Reported memory usage includes memory used by child containers.


Cgroup mount setup: [Supported and recommended]
    Cgroups are mounted at /sys/fs/cgroup.
    Cgroup mount directories: blkio cpu cpu,cpuacct cpuacct cpuset devices freezer memory net_cls net_cls,net_prio net_prio perf_event systemd 
    Any cgroup mount point that is detectible and accessible is supported. /sys/fs/cgroup is recommended as a standard location.
    Cgroup mounts:
    cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
    cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
    cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpu,cpuacct 0 0
    cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
    cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
    cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
    cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_cls,net_prio 0 0
    cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
    cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0


Managed containers: 
    /kubepods/burstable/pod76099b4b-af57-11e7-9b82-fa163ea0076a
    /kubepods/besteffort/pod6ed4ee49-af53-11e7-9b82-fa163ea0076a/f9da6bf60a186c47bd704bbe3cc18b25d07d4e7034d185341a090dc3519c047a
            Namespace: docker
            Aliases:
                    k8s_tiller_tiller-deploy-cffb976df-5s6np_kube-system_6ed4ee49-af53-11e7-9b82-fa163ea0076a_1
                    f9da6bf60a186c47bd704bbe3cc18b25d07d4e7034d185341a090dc3519c047a
    /kubepods/burstable/pod76099b4b-af57-11e7-9b82-fa163ea0076a/956911118c342375abfb7a07ec3bb37451bbc64a1e141321b6284cf5049e385f

ИЗМЕНИТЬ

Отключение порта cadvisor на kubelet (--cadvisor-port=0) этого не исправляет.


person Jérôme Pin    schedule 13.10.2017    source источник
comment
какой драйвер Cgroup для вашего докера? Должен быть включен в вывод docker info.   -  person Ethan    schedule 24.10.2017


Ответы (5)


Попробуйте запустить кубелет с

--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice

Я использую это решение на RHEL7 с Kubelet 1.8.0 и Docker 1.12

person angeloxx    schedule 15.10.2017

Обходной путь angeloxx работает также с образом AWS по умолчанию для kops (k8s-1.8-debian-jessie-amd64-hvm-ebs-2017-12-02 (ami-bd229ec4))

sudo vim /etc/sysconfig/kubelet

добавьте в конец строки DAEMON_ARGS:

 --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice

наконец:

sudo systemctl restart kubelet
person mercantiandrea    schedule 30.12.2017
comment
В CentOS7 мне пришлось отредактировать другой файл: /etc/systemd/system/kubelet.service.d/10-kubeadm.conf - person Serp C; 06.02.2018
comment
Используя этот шаблон, я отправил PR, чтобы тот же метод /etc/sysconfig/kubelet можно было использовать в системах RHEL на основе systemd. github.com/kubernetes/kubernetes/pull/61633 - person Brian Topping; 24.03.2018

Мне пришлось сделать yum update в дополнение к этому изменению, чтобы оно работало. Может быть полезно другим, попробовавшим обходной путь.

person György Novák    schedule 25.10.2017
comment
Да, сработало. Это спасло мне день даже в 2019 году. - person user2376546; 05.07.2019

Спасибо, angeloxx!

Я следую руководству Kubernetes: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/setup-ha-etcd-with-kubeadm/

В инструкции у вас есть файл: /usr/lib/systemd/system/kubelet.service.d/20-etcd-service-manager.conf

со строкой:

ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd

Я взял ваш ответ и добавил его в конец строки ExecStart:

ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=systemd --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice

Я пишу это на случай, если это поможет кому-то другому

@ wolmi Спасибо за редактирование!

Еще одно замечание: приведенная выше конфигурация предназначена для моего кластера etcd, а НЕ для узлов kubernetes. Такой файл, как 20-etcd-service-manager.conf на узле, переопределит все настройки в файле «10-kubeadm.conf», вызывая все виды пропущенных конфигураций. Используйте файл "/var/lib/kubelet/config.yaml" для узлов и / или /var/lib/kubelet/kubeadm-flags.env.

person Happy-Harry    schedule 20.04.2020
comment
Для ubuntu я запустил kubelet --pod-manifest-path = / etc / kubernetes / manifestests --cgroup-driver = systemd --runtime-cgroups = / systemd / system.slice --kubelet-cgroups = / systemd / system.slice и это сработало! - person valem; 29.08.2020

Для тех, кто продвинулся немного дальше, в kops AMI kope.io/k8s-1.8-debian-jessie-amd64-hvm-ebs-2018-02-08, как указано выше, мне пришлось добавить:

добавьте в конец строки DAEMON_ARGS:

--runtime-cgroups=/lib/systemd/system/kubelet.service --kubelet-cgroups=/lib/systemd/system/kubelet.service

а затем: sudo systemctl restart kubelet

но я обнаружил, что все еще получаю:

Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system.slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service"

перезапуск dockerd разрешил эту ошибку: sudo systemctl restart docker

Спасибо

Немного покопавшись, я нашел лучшее разрешение, чтобы добавить это в конфигурацию kops:

https://github.com/kubernetes/kops/issues/4049

person Jürgen    schedule 26.03.2018
comment
Я также получаю такую ​​же ошибку при перезапуске kubelet, и докер мне не помог - person Ashish Karpe; 20.04.2020