Kubelet в Kubernetes

Kate

Administrator
Команда форума
Kubelet — это агент, который работает на каждом узле в кластере Kubernetes. Он отвечает за то, чтобы контейнеры в Pod'ах были запущены и функционировали в соответствии с предоставленными спецификациями PodSpec. Kubelet непрерывно общается с сервером API Kubernetes, чтобы проверять и поддерживать состояние узлов и контейнеров. Без Kubelet, управление контейнерами стало бы нестабильным и непредсказуемым, так как он обеспечивает регулярную проверку состояния и восстановление контейнеров, управляет их жизненным циклом и реагирует на изменения в конфигурации.

Как работает Kubelet​

Kubelet функционирует как основной агент узла, который запускается на каждом узле кластера Kubernetes. Он регистрирует узел в API сервере Kubernetes, используя либо имя хоста, либо флаг для переопределения имени хоста, либо специальную логику для облачного провайдера.

Основная задача Kubelet — следить за тем, чтобы контейнеры в подах были запущены и работали в соответствии с PodSpecs, которые предоставляются через API сервер. Kubelet получает эти спецификации и обеспечивает выполнение контейнеров, описанных в них. Поды могут быть предоставлены Kubelet через файлы на диске или HTTP-эндпоинт, и Kubelet периодически проверяет эти места на наличие обновлений.

Kubelet использует различные конфигурации и флаги для настройки своей работы: IP-адрес для обслуживания, параметры безопасности и тайм-ауты для кеширования ответов аутентификационных веб-хуков.

Настройка​

Процесс настройки начинается с создания файла конфигурации в форматах JSON или YAML, который представляет собой структурированное описание параметров, которые должен использовать Kubelet.

Основные параметры конфигурации:

Address и Port: указывают IP-адрес и порт, на которых Kubelet будет слушать входящие запросы.

Eviction policies: параметры вытеснения помогают управлять поведением Kubelet при нехватке ресурсов, например, определяя пороги для доступной памяти memory.available, доступного места на файловой системе узла nodefs.available и файловой системе образов imagefs.available.

Resource management: включает настройки, касающиеся распределения и лимитов ресурсов, таких как CPU и память для контейнеров.

Пример:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
address: "192.168.0.8"
port: 20250
serializeImagePulls: false
evictionHard:
memory.available: "100Mi"
nodefs.available: "10%"
nodefs.inodesFree: "5%"
imagefs.available: "15%"
Здесь Kubelet настроен на работу по IP-адресу 192.168.0.8 и порту 20250, с дополнительными настройками для параллельной загрузки изображений и политик вытеснения.

Можно также настроить более специфические аспекты поведения Kubelet, такие как:

Также есть такие настройки:

  1. hairpinMode - определяет, как Kubelet должен настраивать сетевой мост контейнера для обработки пакетов hairpin, может принимать значения: promiscuous-bridge, hairpin-veth или none. По умолчанию используется promiscuous-bridge, что предполагает наличие моста контейнеров cbr0.
  2. maxPods - максимальное количество подов, которое может быть запущено на данном Kubelet. Значение по умолчанию — 110.
  3. podPidsLimit - ограничение на количество PID в любом поде. По умолчанию не установлено (-1), что означает отсутствие ограничения.
  4. resolvConf - файл конфигурации резолвера, используемый в качестве основы для настройки разрешения DNS в контейнерах. По умолчанию используется /etc/resolv.conf.
  5. cpuCFSQuota - включает или отключает квоты CPU CFS для контейнеров, которые указывают лимиты CPU. По умолчанию включено.
  6. runtimeRequestTimeout - таймаут для всех запросов к runtime, кроме длительных запросов, таких как pull, logs, exec и attach. Значение по умолчанию — 2 минуты.
  7. contentType - MIME-тип содержимого запросов, отправляемых на apiserver. По умолчанию используется application/vnd.kubernetes.protobuf.
  8. kubeAPIQPS и kubeAPIBurst - эти параметры контролируют скорость и интенсивность запросов к API Kubernetes.
  9. cpuManagerPolicy: определяет политику управления CPU, которая может быть настроена для оптимизации использования CPU в зависимости от типа задач.
  10. topologyManagerPolicy: управляет распределением ресурсов с учетом топологии оборудования.
При использовании kubeadm для инициализации кластера параметры Kubelet могут быть заданы непосредственно через команду kubeadm init с использованием флага --config для указания пути к файлу конфигурации.

Мониторинг и логирование Kubelet​

Prometheus и Grafana юзают для мониторинга в Kubernetes. Prometheus собирает метрики с помощью HTTP(S), обходя узлы и собирая информацию, которую затем можно визуализировать с помощью Grafana. Prometheus может мониторить различные компоненты Kubernetes, включая Kubelet, с помощью exporters, таких как Node exporter и Kube-state-metrics, которые собирают инфу о состоянии узлов и кластера соответственно.

Для логирования Kubelet в Kubernetes обычно используются стандартные потоки вывода и ошибок. Kubernetes автоматом агрегирует эти логи и перенаправляет их во внешние системы логирования.

В Kubernetes также есть возможность запроса логов узлов с помощью Kubelet API. Например, можно запросить логи Kubelet с определенного узла, используя команды типа:

kubectl get --raw "/api/v1/nodes/<node-name>/proxy/logs/?query=kubelet"

 
Сверху