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 — локальная установка не требуется.
Все уроки этого курса
- StatefulSets для приложений с состоянием
- DaemonSets для задач на узлах
- Разбор операторов Kubernetes
- Определения пользовательских ресурсов (CRD)