Какие уникальные характеристики есть у pod в Kubernetes
Что проверяют
Понимаете ли вы pod как отдельную абстракцию, а не «контейнер в Kubernetes». Главное: что общего у контейнеров внутри pod и почему pod эфемерен. Следом спрашивают, зачем тогда Deployment и Service и когда в один pod кладут несколько контейнеров.
Как отвечать
- единица планирования: планировщик размещает pod целиком, все его контейнеры всегда оказываются на одном узле;
- общая сеть: у pod один IP-адрес и одно пространство портов. Контейнеры общаются через
localhostи не могут слушать один порт; - общие тома:
volumesописываются на уровне pod и монтируются в нужные контейнеры.emptyDirживёт ровно столько, сколько pod; - эфемерность: pod не переезжает и не лечится сам. Если узел умер или pod удалили, контроллер создаёт новый, с другим именем и IP. Поэтому к pod обращаются через Service, который выбирает их по меткам;
- перезапуск контейнеров, а не pod:
restartPolicy(Alwaysпо умолчанию,OnFailure,Never) перезапускает контейнеры внутри того же pod на том же узле; - фазы:
Pending,Running,Succeeded,Failed,Unknown. Готовность к трафику определяет readiness-проба, а не фаза; - init-контейнеры и сайдкары: init-контейнеры отрабатывают по очереди до старта основных. Нативный сайдкар объявляется как init-контейнер с
restartPolicy: Alwaysи живёт всё время работы pod; - ресурсы и QoS:
requestsиlimitsзадаются по контейнерам, из них выводится класс pod:Guaranteed,BurstableилиBestEffort. От класса зависит, кого узел выселит первым при нехватке памяти.
Руками pod почти не создают: им управляют Deployment, StatefulSet, Job или DaemonSet.
Где спотыкаются
Говорят, что pod масштабируется. Масштабируется контроллер: HPA меняет число реплик у Deployment, а каждый pod остаётся одиночным экземпляром.
Путают перезапуск контейнера с пересозданием pod и думают, что после сбоя узла pod вернётся с тем же IP.
Складывают в один pod приложение и базу ради удобства. Несколько контейнеров оправданы, только если они должны жить и масштабироваться вместе: прокси, сборщик логов, агент.