Kubernetes - Как API Server / etcd узнает о состоянии каждого модуля?
Я это понимаю kubelet
отвечает за получение PodSpecs (обычно с сервера API) и запуск Pod.
Компоненты Kubernetes> Компоненты узла> kubelet
"Kubelet принимает набор PodSpecs, которые предоставляются с помощью различных механизмов, и гарантирует, что контейнеры, описанные в этих PodSpecs, работают и работают".
Но как API-сервер отслеживает состояние каждого модуля (например, работает / не работает)? Есть ли kubelet
отправлять регулярные запросы на сервер API? Или опрос сервера API kubelet
регулярно? Или какой-то другой механизм?
1 ответ
Kubelet делает все на узле. Типичный процесс создания модуля будет следующим:
- По умолчанию kubelet подключается к api-серверу через эту "штуку", которая называется watch. Это своего рода паб / саб. Таким образом, kubelet будет подписан на событие "создать модуль", а api-сервер уведомит его о необходимости создания модуля.
- kubelet получит среду выполнения контейнера (docker или rkt) вместе с другими спецификациями модуля и создаст модуль.
Примечание: здесь задействовано больше компонентов, таких как планировщик и диспетчер контроллеров (упомянутых в вашем посте как различные механизмы), но я их пропущу.
- kubelet выполнит необходимые проверки жизнеспособности и готовности и сообщит api-серверу о состоянии. Скажи успех!
- Api-сервер обновит etcd (добавив метаданные модуля), чтобы отслеживать, что происходит в кластере.
На данный момент Kubelet будет отвечать за этот модуль. Если модуль выйдет из строя, kubelet сообщит об api-сервере, api-сервер даст команду убить модуль, включит новый и снова обновит сервер etcd.
Следует отметить, что все компоненты в k8s взаимодействуют напрямую с api-сервером. Таким образом, диспетчер контроллера или планировщик не говорят kubelet, что делать. Скорее они говорят это api-серверу, а api-серверу kubelet.