Набор демонов (DaemonSet)

Автор Itworkroom

В статье пойдет речь о запуске только одного модуля на каждом узле с помощью набора демонов (DaemonSet).

Наборы реплик (ReplicaSet) используются для запуска определенного количества модулей, развернутых в кластерной инфраструктуре Kubernetes. Но существуют случаи, когда требуется, чтобы модули связанные с обеспечением работы инфраструктуры, выполняющие операции системного уровня работали на каждом узле в кластере. Например, когда требуется на каждом узле запустить сборщик логов или монитор ресурсов. Еще одним хорошим примером является собственный процесс kube-proxy системы Kubernetes, который должен работать на всех узлах, чтобы заставлять службы работать. Наборы демонов (DaemonSet) запускают только одну реплику модуля на каждом узле, в то время как наборы реплик (replicaset) разбрасывают их по всему кластеру случайным образом.

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

Объяснение наборов демонов на примере

Развернем демон ssd-monitor, который должен работать на всех узлах, содержащих твердотельный накопитель (SSD). Создадим объект DaemonSet, который запускает этот демон на всех узлах, помеченных как имеющие SSD. Подразумевается, что администраторы кластера добавили метку disk=ssd во все такие узлы, поэтому создадим объект DaemonSet с помощью селектора узлов, который выбирает только узлы с этой меткой.

Создание YAML-определения ресурса DaemonSet (создайте файл с именем ssd-monitor-daemonset.yaml):

apiVersion: apps/v1beta2
kind: DaemonSet
metadata:
 name: ssd-monitor
spec:
 selector:
  matchLabels:
   app: ssd-monitor
 template:
  metadata:
   labels:
    app: ssd-monitor
  spec:
   nodeSelector:
    disk: ssd
   containers:
   – name: main
    image: vasya/ssd-monitor

Вы определяете объект DaemonSet, который будет запускать модуль с одним контейнером на основе образа контейнера vasya/ssd-monitor. Экземпляр этого модуля будет создан для каждого узла, имеющего метку disk=ssd.

Теперь чтобы создать набор демонов выполните команду $ kubectl create -f ssd-monitor-daemonset.yaml и поставим метку узла командой $ kubectl label node minikube disk=ssd. Посмотреть результат командой:

$ kubectl get ds и $ kubectl get po.

Удаление необходимой метки из узла производится командой:

$ kubectl label node minikube disk=hdd –overwrite.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *