Kubernetes - Как API Server / etcd узнает о состоянии каждого модуля?

Я это понимаю kubelet отвечает за получение PodSpecs (обычно с сервера API) и запуск Pod.

Компоненты Kubernetes> Компоненты узла> kubelet

"Kubelet принимает набор PodSpecs, которые предоставляются с помощью различных механизмов, и гарантирует, что контейнеры, описанные в этих PodSpecs, работают и работают".

Но как API-сервер отслеживает состояние каждого модуля (например, работает / не работает)? Есть ли kubelet отправлять регулярные запросы на сервер API? Или опрос сервера API kubelet регулярно? Или какой-то другой механизм?

1 ответ

Решение

Kubelet делает все на узле. Типичный процесс создания модуля будет следующим:

  1. По умолчанию kubelet подключается к api-серверу через эту "штуку", которая называется watch. Это своего рода паб / саб. Таким образом, kubelet будет подписан на событие "создать модуль", а api-сервер уведомит его о необходимости создания модуля.
  2. kubelet получит среду выполнения контейнера (docker или rkt) вместе с другими спецификациями модуля и создаст модуль.

Примечание: здесь задействовано больше компонентов, таких как планировщик и диспетчер контроллеров (упомянутых в вашем посте как различные механизмы), но я их пропущу.

  1. kubelet выполнит необходимые проверки жизнеспособности и готовности и сообщит api-серверу о состоянии. Скажи успех!
  2. Api-сервер обновит etcd (добавив метаданные модуля), чтобы отслеживать, что происходит в кластере.

На данный момент Kubelet будет отвечать за этот модуль. Если модуль выйдет из строя, kubelet сообщит об api-сервере, api-сервер даст команду убить модуль, включит новый и снова обновит сервер etcd.

Следует отметить, что все компоненты в k8s взаимодействуют напрямую с api-сервером. Таким образом, диспетчер контроллера или планировщик не говорят kubelet, что делать. Скорее они говорят это api-серверу, а api-серверу kubelet.

Другие вопросы по тегам