Поиск по сайту:

Создайте набор демонов в Kubernetes


На этой странице

  1. Предварительные условия
  2. Что мы будем делать?
  3. Создание набора демонов
  4. Заключение

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

DaemonSet гарантирует, что на всех узлах будет запущена копия пода. Обычно узел, на котором работает модуль, выбирается планировщиком, но модули DaemonSet создаются и планируются контроллером DaemonSet.

Демонсет можно использовать:

  1. Чтобы запустить кластерное хранилище на каждом узле, например:  glusterd, ceph
  2. Чтобы запустить сбор журналов на каждом узле, например: fluentd, logstash
  3. Для запуска мониторинга узлов в любой заметке, например: Prometheus Node Exporter, collectd, агент Datadog.

Чтобы узнать больше о Daemonset, посетите kubernetes.io — официальную документацию Kubernetes.

В этой статье мы создадим набор демонов Fluent_elasticsearch. При этом на каждом узле в кластере будут созданы модули \fluent_elasticsearch\. Наш файл определения Daemonset будет иметь допуск к заражению главных узлов, чтобы позволить Pod планироваться на главном узле.

Предпосылки

  1. Кластер Kubernetes по крайней мере с 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на инстансах AWS Ubuntu EC2.

Что мы будем делать?

  1. Создание набора демонов

Создать набор демонов

Проверьте, существует ли набор демонов в пространстве имен по умолчанию и во всех пространствах имен.

kubectl get daemonsets #Get daemonsets from the default namespace
kubectl get daemonsets --all-namespaces #Get daemonsets from all namespace using --all-namespace option

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

Теперь получите модули, принадлежащие пространству имен \kube-system\.

kubectl  get pods -n kube-system #Get pods from the "kube-system" namespace

Все эти модули, показанные на скриншоте выше, относятся к набору компонентов кластера Daemonset.

Получите список прокси-модулей.

kubectl get pods -n kube-system | grep proxy #Get pods from the "kube-system" namespace and grep for proxy

Проверьте, что управляет пакетами прокси-серверов.

kubectl describe pod kube-proxy-s5vzp -n kube-system #Describe the pod from the "kube-system" namespace

Получите подробную информацию о наборе демонов, который управляет модулями прокси.

kubectl describe daemonset kube-proxy -n kube-system #Describe the daemonset from the "kube-system" namespace

Создайте файл со следующим определением набора демонов.

vim my-daemonset.yml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-fluentd-elasticsearch-daemonset
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

В приведенном выше определении у нас есть терпимость к порче главного узла. Это также позволит разместить модуль на главном узле.

Создайте набор демонов, используя файл определения, созданный на предыдущем шаге.

kubectl create -f my-daemonset.yml #Create a daemonset 
kubectl get daemonset -n kube-system #Get daemonset from the "kube-system" namespace

Этот набор deamont был создан в пространстве имен \kube-system\.

Опишите набор демонов, который мы только что создали, в пространстве имен \kube-system\.

kubectl  describe daemonset my-fluentd-elasticsearch-daemonset -n kube-system #Describe the daemonset from the "kube-system" namespace

На приведенном выше снимке экрана видно, что модули были развернуты на 2 узлах.

Теперь мы можем получить подробную информацию о модулях, которые развернуты как наборы демонов на 2 узлах.

kubectl get pods -n kube-system | grep my-fluentd-elasticsearch-daemonset #Get pods from the "kube-system" namespace and grep 
kubectl describe pod my-fluentd-elasticsearch-daemonset-4t9vs -n kube-system | grep Node #Describe the pods from the "kube-system" namespace and grep
kubectl describe pod my-fluentd-elasticsearch-daemonset-kxfjj -n kube-system | grep Node #Describe the pod from the "kube-system" namespace and grep

На приведенном выше снимке экрана видно, что модули были развернуты на рабочем узле «node01» и главном узле «master». Причина получения модуля, запланированного на главном узле, — терпимость к заражению главного узла.

Заключение

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