Kubernetes. Что произойдёт, если...

Перезапустить kubelet

Контейнеры продолжают работать, но в момент синхронизации состояния подов с api-server поды могут переходить в состояние 0/1 Running, когда трафик на них перестаёт направляться

Остановить kubelet

Нода переходит в состояние NotReady, никаких событий на подах не происходит - они продолжают пребывать в состоянии 1/1 Running, но трафик на них перестаёт идти (из endpoint’ов сервисов удаляются IP адрес подов, которые находятся на “мёртвой” ноде).

Спустя указанный pod-eviction-timeout (5m по-умолчанию) для kube-controller-manager поды переходят в статус Terminating и начинают запускаться на живых воркерках. Поды будут продолжать находиться в статусе Terminating либо до старта kubelet, либо до удаления ноды из кластера. При этом не выгоняются поды DaemonSet и поды, поднятые kubelet’ом(kube-proxy, nginx-proxy, kube-flannel, nodelocaldns и т.п.)

Перезапустить docker

Все контейнеры перезапускаются по событию Pod sandbox changed, it will be killed and re-created

Остановить docker

Kubelet не может обратиться к сокету docker, нода переходит в статус NotReady. Далее происходит то же самое, что при остановке kubelet (pod-eviction-timeout). Есть проблема, если используется statefulSet - номерной под не сможет запуститься на другой ноде, пока он не завершится полностью на “мёртвой”

Закончится место на диске

С точки зрения kubelet существует разделение на 2 файловые системы:

  • nodefs - используется для томов (volumes), логов демона kubelet и тому подобное (обычно root раздел)
  • imagefs - используется для хранения образов и слоёв контейнеров (/var/lib/docker)

Если imagefs не смонтирован отдельно, то считается, что он находится там же, где nodefs

По-умолчанию действуют 4 Hard Eviction правила (нода получит состояние DiskPressure)

  • memory.available<100Mi
  • nodefs.available<10%
  • nodefs.inodesFree<5%
  • imagefs.available<15%

При срабатывании части этих правил kubelet попробует освободить место на диске:

  • imagefs <15% Available: очистка неиспользуемых образов
  • nodefs <10% Available: удаление мёртвых подов и их контейнеров

Если не удаётся освободить место, то поды выгоняются (Evicted) и стартуют на других нодах. Основная проблема в том, что выгоняются в том числе системные поды (типа kube-flannel) и по сути нода перестаёт работать