Створення базового DaemonSet

Ця сторінка демонструє, як створити базовий DaemonSet, який запускає Pod на кожному вузлі в кластері Kubernetes. Вона охоплює простий випадок монтування файлу з хоста, запису його вмісту за допомогою контейнера ініціалізації та використання контейнера паузи.

Перш ніж ви розпочнете

Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:

Кластер Kubernetes з принаймні двома вузлами (один вузол панелі управління та один робочий вузол), щоб продемонструвати поведінку DaemonSets.

Визначення DaemonSet

У цьому завданні створюється базовий DaemonSet, який забезпечує, що копія Pod запланована на кожному вузлі. Pod буде використовувати контейнер ініціалізації для читання та запису вмісту /etc/machine-id з хосту, у той час, як основний контейнер буде контейнером pause, який підтримує роботу Pod.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: example-daemonset
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: example
  template:
    metadata:
      labels:
        app.kubernetes.io/name: example
    spec:
      containers:
      - name: pause
        image: registry.k8s.io/pause
      initContainers:
      - name: log-machine-id
        image: busybox:1.37
        command: ['sh', '-c', 'cat /etc/machine-id > /var/log/machine-id.log']
        volumeMounts:
        - name: machine-id
          mountPath: /etc/machine-id
          readOnly: true
        - name: log-dir
          mountPath: /var/log
      volumes:
      - name: machine-id
        hostPath:
          path: /etc/machine-id
          type: File
      - name: log-dir
        hostPath:
          path: /var/log
  1. Створіть DaemonSet на основі (YAML) маніфесту:

    kubectl apply -f https://k8s.io/examples/application/basic-daemonset.yaml
    
  2. Після застосування ви можете перевірити, що DaemonSet запускає Pod на кожному вузлі в кластері:

    kubectl get pods -o wide
    

    Вивід покаже один Pod на кожному вузлі, подібно до:

    NAME                                READY   STATUS    RESTARTS   AGE    IP       NODE
    example-daemonset-xxxxx             1/1     Running   0          5m     x.x.x.x  node-1
    example-daemonset-yyyyy             1/1     Running   0          5m     x.x.x.x  node-2
    
  3. Ви можете перевірити вміст записаного файлу /etc/machine-id, перевіривши теку журналів, змонтований з хоста:

    kubectl exec <pod-name> -- cat /var/log/machine-id.log
    

    Де <pod-name> - це імʼя одного з ваших Pod.

Очищення

Щоб видалити DaemonSet, виконайте цю команду:

kubectl delete --cascade=foreground --ignore-not-found --now daemonsets/example-daemonset

Цей простий приклад DaemonSet вводить ключові компоненти, такі як контейнери ініціалізації та томи шляху хосту, які можна розширити для складніших випадків використання. Для отримання додаткової інформації зверніться до DaemonSet.

Що далі