Перезапустить 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 - номерной под не сможет запуститься на другой ноде, пока он не завершится полностью на “мёртвой”
- https://github.com/kubernetes/kubernetes/issues/72226
- https://github.com/kubernetes/kubernetes/issues/74689
Закончится место на диске
С точки зрения 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) и по сути нода перестаёт работать