Erstellen eines Daemonsets in Kubernetes

Ein DaemonSet sorgt dafür, dass auf allen Knoten im Kubernetes-Cluster eine Kopie eines Pods läuft. Jeder Knoten verfügt über eine Kopie des Pods. Wenn dem Cluster Knoten hinzugefügt werden, werden ihnen Pods hinzugefügt, und wenn Knoten aus dem Cluster entfernt werden, werden die Pods entfernt. Wenn wir ein DaemonSet löschen, werden die von ihm erstellten Pods bereinigt.

Ein DaemonSet stellt sicher, dass alle Knoten eine Kopie eines Pods ausführen. Normalerweise wird der Knoten, auf dem ein Pod läuft, vom Planer ausgewählt, aber DaemonSet-Pods werden vom DaemonSet-Controller erstellt und geplant.

Daemonset kann verwendet werden:

  1. Um Cluster-Speicher auf jedem Knoten auszuführen, wie z.B.: glusterd, ceph
  2. So führen Sie die Logsammlung auf jedem Knoten aus, z. B.: fluentd, logstash
  3. So führen Sie die Knotenüberwachung bei jeder Notiz aus, z. B: Prometheus-Knotenexporteur, gesammelt, Datadog-Agent

Um mehr über Daemonset zu erfahren, besuchen Sie kubernetes.io, die offizielle Dokumentation von Kubernetes.

In diesem Artikel werden wir ein Daemonset der „fluentd_elasticsearch“ erstellen. Dadurch werden Pods von „fluentd_elasticsearch“ auf jedem Knoten im Cluster erstellt. Unsere Daemonset-Definitionsdatei wird die Toleration for Taint der Master-Knoten enthalten, damit Pod auch auf dem Master-Knoten geplant werden kann.

Vorraussetzungen

  1. Kubernetes Cluster mit mindestens 1 Worker-Knoten.
    Wenn Sie lernen möchten, wie man einen Kubernetes Cluster erstellt, klicken Sie hier. Dieses Handbuch hilft Ihnen, einen Kubernetes-Cluster mit 1 Master- und 2 Worker-Knoten auf AWS Ubuntu 18.04 EC2-Instanzen zu erstellen.

Was werden wir tun?

  1. Erstellen eines Daemonsets

Ein Daemonset erstellen

Prüfen Sie, ob ein Dämonset im Standard-Namensraum und in allen Namensräumen vorhanden ist.

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

get-system-daemonsets

Im obigen Screenshot sehen Sie, dass einige wenige Daemonsets verfügbar sind. Alle diese Daemonsets sind für Cluster-Komponenten.

Besorgen Sie sich jetzt Pods, die zum Namensraum „kube-system“ gehören.

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

get-system-pods

Alle diese Pods, die im obigen Screenshot zu sehen sind, gehören zum Daemonset der Cluster-Komponenten.

Besorgen Sie eine Liste von Proxy-Pods.

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

Prüfen Sie, was Proxy-Pods steuert.

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

Erhalten Sie Details des Daemonsets, das die Proxy-Pods steuert.

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

check-pod-controlled-by-demonset

Erstellen Sie eine Datei mit der folgenden Daemonset-Definition darin.

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

my-daemonset-Definition

In der obigen Definition haben wir eine Toleration to the Taint des Master-Knotens. Dadurch wird der Pod auch auf dem Master-Knoten platziert.

Erstellen Sie ein Daemonset unter Verwendung der im obigen Schritt erstellten Definitionsdatei.

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

create-a-daemonset

Dieses Dämon-Set wurde im Namensraum „kube-system“ erstellt.

Beschreiben Sie das Dämonset, das wir gerade im Namensraum „kube-system“ erstellt haben.

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

get-daemonset-details

Auf dem obigen Screenshot ist zu sehen, dass die Pods auf 2 Knoten bereitgestellt wurden.

Jetzt können wir Einzelheiten zu den Pods erhalten, die als Daemonsets auf 2 Knoten bereitgestellt wurden.

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

get-pod-details-created-under-daemonset

In der obigen Abbildung ist zu sehen, dass die Pods auf dem Worker-Knoten „node01“ und auf dem Master-Knoten „master“ eingesetzt wurden. Der Grund dafür, dass die Pods auf dem Master-Knoten eingesetzt wurden, ist die Toleranz gegenüber der Belastung des Master-Knotens.

Schlussfolgerung

In diesem Artikel sahen wir die Schritte zur Erstellung eines Daemonsets und sahen, wie die Pods im Daemonset auf jedem Knoten im Kubernetes-Cluster bereitgestellt werden.

Das könnte dich auch interessieren …