#9 DevOps. Kubernetes. Что такое Namespace, Pod, Deployment и DaemonSet

Namespace разделяет ресурсы кластера между пользователями за счет квоты ресурсов. Позволяет изолировать объекты и ресурсы, а также ограничить доступ на уровне ИБ. Namespace не могут быть вложенными, а имена ресурсов должны быть уникальными в пределах одного namespace.

Полезная команда

kubectl get namespace

Про Pod уже говорили ранее, но есть что дополнить.

В Pod может быть 2 типа контейнеров:

  • Init
  • Runtime

Init нужны для начальной настройки и запускаются последовательно, перед основными контейнерами. Основной контейнер не запустится до тех пор, пока Init не завершит свою работу. 

Runtime это основной контейнер. Они запускаются одновременно, после Init контейнеров. 

Внутри Pod у контейнеров разная файловая система, но можно создать общую папку или другой Volume

Volume могут быть постоянными или временными.

  • Временные при перезапуске Pod очищаются
  • Постоянные остаются даже если Pod был удален

Состояние контейнеров в Pod можно мониторить с помощью Probes.

Есть 3 вида Probes:

  • startup probes — запускается первой чтобы понять правильно ли запустился процесс
  • liveness probes и readiness probes запускаются одновременно

Liveness нужна для проверки и перезапуска контейнера в случае проблем

Readiness позволяет приложению подготовиться к обслуживанию трафика пользователей и в случае проблем, убрать приложение из балансировки, чтобы клиент не попал на нерабочее приложение. 

Deployment — объект, в котором хранится описание Pods, количество реплик и алгоритм их замены при изменении параметров. Deployment следит за необходимым состоянием приложения, описанным в манифестах, создает, заменяет, удаляет Pods.

Кроме того, следит за количеством и статусом запущенных Pods и в случае необходимости пересоздает. Deployment масштабирует приложение в оба направления, хранит и позволяет обновить или откатить шаблон конфигурации Pod. Deployment работает поверх ReplicaSet.

Полезные команды

kubectl get deployments

ReplicaSet — объект, который отвечает за описание и контроль нескольких реплик (экземпляров) Pods на кластере. ReplicaSet следит за тем, чтобы указанное количество реплик Pod было запущено в данный момент.

Одновременно может быть запущено сразу несколько ReplicaSet (каждая со своим набором Pods). Как правило ReplicaSet создается при помощи Deployment и отдельно не используется.

DaemonSet — объект, который отвечает за то, чтобы на каждой ноде или ряде нод был запущен один экземпляр выбранного Pod. Как правило используется для системных целей, например сбора метрик нод. DaemonSet запускает Pod автоматически при подключении новой ноды. 

Полезные команды

kubectl get ds