Ответ вслух Middle Архитектура Kubernetes спрашивают часто обновлено

Что происходит после kubectl apply

Вопрос

Расскажи по шагам, что происходит в кластере после kubectl apply -f deployment.yaml до работающего контейнера.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

kubectl отправляет манифест в API server. Тот проверяет, кто я (аутентификация), можно ли мне это (RBAC), прогоняет admission-контроллеры, которые могут дополнить объект и проверить политики, и сохраняет его в etcd.

Что должно прозвучать в ответе

  • kubectl отправляет объект в API server; аутентификация, авторизация RBAC, admission (мутации и валидация), запись в etcd

  • Контроллер Deployment создаёт ReplicaSet, контроллер ReplicaSet создаёт Pod без узла

  • Scheduler фильтрует и ранжирует узлы, записывает `nodeName`

  • kubelet выбранного узла видит под через watch, скачивает образ, запускает контейнеры через CRI, CNI выдаёт IP, монтируются тома

  • kubelet обновляет статус; после readiness probe под попадает в EndpointSlice сервиса и получает трафик

  • Все общаются только через API server и watch, напрямую друг друга не вызывают

Что могут спросить следом

  • Где здесь может застрять под и как это увидеть?
  • Что такое admission webhook?
  • Как Deployment делает rolling update?

Разбор

kubectl отправляет манифест в API server. Тот проверяет, кто я (аутентификация), можно ли мне это (RBAC), прогоняет admission-контроллеры, которые могут дополнить объект и проверить политики, и сохраняет его в etcd. Контроллер Deployment через watch видит новый объект и создаёт ReplicaSet с хешем шаблона. Контроллер ReplicaSet видит, что подов меньше, чем нужно, и создаёт объекты Pod, пока без узла. Scheduler замечает поды без nodeName, отбрасывает узлы без ресурсов или с неподходящими taints и affinity, ранжирует остальные и привязывает под к узлу. kubelet на этом узле получает под, через CRI просит containerd скачать образ и запустить контейнеры, CNI выдаёт поду IP, монтируются тома, стартуют init-контейнеры, затем основные. kubelet выполняет probes и пишет статус. Когда readiness probe проходит, контроллер EndpointSlice добавляет IP пода в сервис, и kube-proxy начинает слать на него трафик. Застрять можно на каждом шаге: Pending у scheduler, ImagePullBackOff у kubelet, CrashLoopBackOff у самого приложения, всё это видно в kubectl describe и events.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме