Невозможно получить метрики cpu pod, k8s- containerd - containerd-shim-runsc-v1 - gvisor

Я перешел с gvisor-containerd-shim (Shim V1) на containerd-shim-runsc-v1 (Shim V2). Сервер метрик и Horizontal Pod Autoscaler работали нормально в случае gvisor-containerd-shim.

Но теперь, с containerd-shim-runsc-v1, я продолжаю получать показатели ЦП и памяти для узлов и модулей runc, но получаю показатели памяти только для модулей runsc (gvisor).

Например, я развернул PHP-сервер в модуле gvisor с помощью containerd-shim-runsc-v1. Я получаю следующие показатели:

kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         10        1          68s


kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
snf-877559   549m         13%    2327Mi          39%


kubectl top pods
NAME                                 CPU(cores)   MEMORY(bytes)
php-apache-gvisor-6f7bb6cf84-28qdk   0m           52Mi

После отправки некоторой нагрузки модулю php-apache-gvisor я могу увидеть прирост использования ЦП и памяти для узла и модуля runc (генератор нагрузки). Я также вижу, что объем памяти php-apache-gvisor увеличен с 52 до 72 Мбайт, но загрузка ЦП остается на уровне 0%. Почему загрузка процессора остается на уровне 0%?

Я также пробовал использовать разные образы контейнеров, но получаю те же результаты.

С нагрузкой я получаю следующие показатели:

kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         10        1          68s


kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
snf-877559   946m         23%    2413Mi          41%


kubectl top pods
NAME                             CPU(cores)   MEMORY(bytes)
load-generator-7d549cd44-xmbqw   3m           1Mi
php-apache-gvisor-6f7bb6cf84-28qdk      0m           72Mi

Дополнительная информация:

kubeadm, kubernetes 1.15.3, containerd 1.3.3, runsc nightly / 2019-09-18, фланель

kubectl logs metrics-server-74657b4dc4-8nlzn -n kube-system
I0728 09:33:42.449921       1 serving.go:312] Generated self-signed cert (/tmp/apiserver.crt, /tmp/apiserver.key)
I0728 09:33:44.153682       1 secure_serving.go:116] Serving securely on [::]:4443
E0728 09:35:24.579804       1 reststorage.go:160] unable to fetch pod metrics for pod default/php-apache-gvisor-6f7bb6cf84-28qdk: no metrics known for pod
E0728 09:35:39.940417       1 reststorage.go:160] unable to fetch pod metrics for pod default/php-apache-gvisor-6f7bb6cf84-28qdk: no metrics known for pod

/etc/containerd/config.toml (containerd-shim-runsc-v1)

subreaper = true
oom_score = -999
disabled_plugins = ["restart"]


[debug]
    level = "debug"

[metrics]
    address = "127.0.0.1:1338"

[plugins.linux]
    runtime = "runc"
    shim_debug = true


[plugins.cri.containerd.runtimes.runsc]
  runtime_type = "io.containerd.runsc.v1"

/etc/containerd/config.toml (gvisor-containerd-shim)

subreaper = true
oom_score = -999
disabled_plugins = ["restart"]


[debug]
    level = "debug"

[metrics]
    address = "127.0.0.1:1338"

[plugins.linux]
    runtime = "runc"
    shim_debug = true
    shim = "/usr/local/bin/gvisor-containerd-shim"


[plugins.cri.containerd.runtimes.runsc]
  runtime_type = "io.containerd.runtime.v1.linux"
  runtime_engine = "/usr/local/bin/runsc"
  runtime_root = "/run/containerd/runsc"

Yaml сервера метрик основан на https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml со следующими аргументами

....
      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.6
        imagePullPolicy: IfNotPresent
        args:
          - --kubelet-preferred-address-types=InternalIP
          - --kubelet-insecure-tls
          - --cert-dir=/tmp
          - --secure-port=4443
....

Текущее развертывание имеет раздел ресурсов ниже

  resources:
    limits:
      cpu: 500m
    requests:
      cpu: 200m

person virt    schedule 28.07.2020    source источник
comment
Какая у вас была конфигурация контейнера для конфигурации только для gVisor? Что вы добавили для настройки runc?   -  person Rico    schedule 28.07.2020
comment
Спасибо за ваш комментарий. Для конфигурации containerd я использовал файл /etc/containerd/config.toml (вы можете увидеть его в моем вопросе). Я также использовал RuntimeClass для gvisor. При установке я использовал это руководство - ›github.com/google/gvisor-containerd-shim/blob/master/docs/. Пожалуйста, дайте мне знать, если я неправильно понял ваш вопрос.   -  person virt    schedule 28.07.2020
comment
да, но изначально вы сказали, что у вас есть gVisor. Затем вы добавляете runc и gVisor вместе. Что вы меняли в конфигах?   -  person Rico    schedule 28.07.2020
comment
Спасибо. В обоих случаях я запускал контейнеры runc и runsc. В первом случае я использовал gvisor-containerd-shim, а во втором - containerd-shim-runsc-v1. Чтобы перейти от gvisor-containerd-shim к containerd-shim-runsc-v1, я удалил развертывания, изменил файл /etc/containerd/config.toml, перезапустил containerd и kubelet, а затем снова развернул сервер метрик и пример развертывания. . Более того, я развернул containerd-shim-runsc-v1 в новом кластере и на этот раз получил те же результаты. Я обновил свой ответ, чтобы вы могли увидеть исходный файл конфигурации.   -  person virt    schedule 28.07.2020


Ответы (1)


В настоящее время gVisor сообщает только о памяти и идентификаторах пакетов для каждого модуля. См .: https://github.com/google/gvisor/blob/add40fd/runsc/boot/events.go#L62-L68

Мы планируем экспортировать больше статистики, и проблема для отслеживания этой работы находится здесь: https://gvisor.dev/issue/172

person Ian Lewis    schedule 01.09.2020