0Pricing
DevOps Bootcamp · Урок

DaemonSets для задач на узлах

Используйте DaemonSets для запуска копии Pod на всех или выбранных узлах кластера при выполнении операций на уровне кластера.

«DaemonSets для задач на узлах» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Что такое DaemonSets

Представьте, что Вам нужно запускать определенный инструмент или службу на каждом сервере кластера. Например, агент ведения журналов, который собирает журналы с каждой машины.

Именно здесь применяются DaemonSets! В отличие от развертываний, которые стремятся поддерживать определенное количество работающих подов где-либо в кластере, DaemonSet гарантирует запуск копии пода на всех узлах или на выбранных узлах.

Распространенные применения DaemonSets

DaemonSets идеально подходят для задач, которые должны выполняться на уровне узлов. Вот несколько распространенных примеров:

  • Агенты ведения журналов: инструменты вроде Fluentd или Logstash для сбора журналов с каждого узла.
  • Агенты мониторинга: Prometheus Node Exporter для сбора показателей с каждого сервера.
  • Демоны хранилища: службы вроде GlusterFS или Ceph, предоставляющие распределенное хранилище на каждом узле.
  • Сетевые прокси: собственный Kube-proxy в Kubernetes работает как DaemonSet и управляет сетевыми правилами.

Базовый манифест DaemonSet

Определение DaemonSet очень похоже на определение Deployment. Основное отличие — kind: DaemonSet. Рассмотрим базовую структуру:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset
spec:
  selector:
    matchLabels:
      app: my-daemonset-app
  template:
    metadata:
      labels:
        app: my-daemonset-app
    spec:
      containers:
      - name: my-container
        image: busybox
        command: ["sh", "-c", "echo 'Hello from DaemonSet on node $(NODE_NAME)'; sleep 3600"]
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName

Основные части YAML

Разберем важные разделы нашего манифеста DaemonSet:

  • kind: DaemonSet: сообщает Kubernetes, что мы хотим управлять подами, связанными с узлами.
  • spec.selector: крайне важный раздел! Он определяет, как DaemonSet находит поды и управляет ими с помощью меток.
  • spec.template: это само определение пода. Оно почти идентично шаблону пода, который используется в Deployment. В нем описываются контейнеры, тома и другие настройки пода, запускаемого на каждом узле.

Развертывание на всех узлах

Ниже приведен простой DaemonSet, который запускает контейнер busybox на каждом подходящем узле. Он выведет сообщение с указанием узла, на котором работает.

Это распространенный шаблон для агентов, работающих во всем кластере.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-hello-daemon
spec:
  selector:
    matchLabels:
      app: node-hello
  template:
    metadata:
      labels:
        app: node-hello
    spec:
      containers:
      - name: hello-container
        image: busybox
        command: ["sh", "-c", "while true; do echo 'Hello from node: $(NODE_NAME)'; sleep 5; done"]
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName

Запуск DaemonSet

Чтобы создать DaemonSet в кластере Kubernetes, используйте знакомую команду kubectl apply с показанным ранее YAML-файлом:

kubectl apply -f node-hello-daemonset.yaml

После этого Kubernetes обеспечит планирование пода на каждом узле, соответствующем критериям DaemonSet.

Проверка состояния DaemonSet

После применения манифеста можно проверить состояние DaemonSet и созданных им подов:

  • Чтобы просмотреть DaemonSet: kubectl get ds
  • Чтобы просмотреть отдельные поды, работающие на каждом узле: kubectl get pods -l app=node-hello -o wide

Параметр -o wide помогает определить, на каком узле запланирован каждый под.

DaemonSets на выбранных узлах

Что делать, если Вы хотите запускать DaemonSet только на части узлов? Например, только на узлах с GPU или на узлах, выделенных для хранения данных.

Для этого можно использовать nodeSelector. Это поле в spec пода (в шаблоне DaemonSet) позволяет указать метки узлов, которыми должен обладать узел, чтобы под был запланирован на нем.

Использование селекторов узлов в YAML

Изменим предыдущий DaemonSet так, чтобы он запускался только на узлах с меткой disktype: ssd. Сначала необходимо пометить узлы, например командой kubectl label node <node-name> disktype=ssd.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ssd-monitor-daemon
spec:
  selector:
    matchLabels:
      app: ssd-monitor
  template:
    metadata:
      labels:
        app: ssd-monitor
    spec:
      nodeSelector:
        disktype: ssd # Only runs on nodes with this label
      containers:
      - name: monitor-container
        image: busybox
        command: ["sh", "-c", "while true; do echo 'Monitoring SSD on node: $(NODE_NAME)'; sleep 10; done"]
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName

Возможности DaemonSet

Вы узнали, как работают DaemonSets. Проверьте свои знания!

DaemonSets: основные выводы

Отличная работа! Вы успешно изучили DaemonSets в Kubernetes.

  • DaemonSets обеспечивают запуск пода на каждом подходящем узле.
  • Они необходимы для операций на уровне узлов, таких как ведение журналов, мониторинг и работа агентов хранилища.
  • Для выбора определенных узлов можно использовать nodeSelector.
  • DaemonSets определяются с помощью kind: DaemonSet и используют шаблон пода, подобно развертываниям.

Далее Вы изучите StatefulSets для управления приложениями с состоянием!

Часто задаваемые вопросы

Урок «DaemonSets для задач на узлах» бесплатный?

Да — полный текст урока «DaemonSets для задач на узлах» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «DaemonSets для задач на узлах»?

Используйте DaemonSets для запуска копии Pod на всех или выбранных узлах кластера при выполнении операций на уровне кластера. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «DaemonSets для задач на узлах»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. StatefulSets для приложений с состоянием
  2. DaemonSets для задач на узлах
  3. Разбор операторов Kubernetes
  4. Определения пользовательских ресурсов (CRD)
← Назад к DevOps Bootcamp