Grunderna i Kubernetes · Lektion

DaemonSets för nodspecifika uppgifter

Använd DaemonSets för att köra en kopia av en Pod på alla eller utvalda noder i klustret för åtgärder på klusternivå.

Lektion 2 av 411 steg

DaemonSets för nodspecifika uppgifter är en gratis lektion i Grunderna i Kubernetes på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i Kubernetes, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i Kubernetes innehåller totalt 4 lektioner.

Vad är DaemonSets?

Föreställ Er att Ni behöver köra ett visst verktyg eller en viss tjänst på varje server i klustret. Det kan till exempel vara en loggningsagent som samlar in loggar från varje maskin.

Det är här DaemonSets kommer in! Till skillnad från Deployments, som försöker hålla ett visst antal Poddar körande någonstans i klustret, ser en DaemonSet till att en kopia av en Pod körs på alla noder (eller på utvalda noder).

Vanliga användningsområden för DaemonSets

DaemonSets passar perfekt för uppgifter som behöver köras på nodnivå. Här är några vanliga exempel:

  • Loggningsagenter: Verktyg som Fluentd eller Logstash för att samla in loggar från varje nod.
  • Övervakningsagenter: Prometheus Node Exporter för att samla in mätvärden från varje server.
  • Lagringsdemoner: Tjänster som GlusterFS eller Ceph som tillhandahåller distribuerad lagring på varje nod.
  • Nätverksproxyer: Kubernetes egen Kube-proxy körs som en DaemonSet för att hantera nätverksregler.

Grundläggande DaemonSet-manifest

Definitionen av en DaemonSet liknar i hög grad en Deployment. Den viktigaste skillnaden är kind: DaemonSet. Här är en grundläggande struktur:

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

Viktiga delar av YAML-filen

Låt oss gå igenom de viktiga avsnitten i vårt DaemonSet-manifest:

  • kind: DaemonSet: Detta talar om för Kubernetes att vi vill hantera nodspecifika Poddar.
  • spec.selector: Avgörande! Det definierar hur DaemonSet hittar och hanterar sina Poddar med hjälp av etiketter.
  • spec.template: Detta är själva Pod-definitionen. Den är nästan identisk med den Pod-mall som finns i en Deployment. Den beskriver containrar, volymer och andra inställningar för Podden som ska köras på varje nod.

Distribuera till alla noder

Här är en enkel DaemonSet som kör en busybox-container på varje behörig nod. Den skriver ut ett meddelande som visar vilken nod den körs på.

Detta är ett vanligt mönster för agenter som ska köras i hela klustret.

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

Starta Er DaemonSet

För att skapa DaemonSet i Kubernetes-klustret använder Ni det välbekanta kommandot kubectl apply med YAML-filen som Ni nyss såg:

kubectl apply -f node-hello-daemonset.yaml

Kubernetes ser sedan till att en Pod schemaläggs på varje nod som uppfyller DaemonSetens kriterier.

Kontrollera DaemonSetens hälsa

När Ni har tillämpat konfigurationen kan Ni kontrollera statusen för DaemonSet och de Poddar som den skapade:

  • Visa DaemonSet: kubectl get ds
  • Visa de enskilda Poddar som körs på varje nod: kubectl get pods -l app=node-hello -o wide

Alternativet -o wide hjälper Er att se vilken nod varje Pod har schemalagts på.

DaemonSets på utvalda noder

Vad gör Ni om Ni bara vill köra DaemonSet på en delmängd av Era noder? Till exempel endast på noder med en GPU eller noder som är avsedda för lagring.

Det kan Ni åstadkomma med nodeSelector. Detta fält i Poddens spec (i DaemonSetens mall) gör att Ni kan ange nodetiketter som en nod måste ha för att Podden ska schemaläggas där.

Använda nodväljare i YAML

Låt oss ändra vår tidigare DaemonSet så att den bara körs på noder med etiketten disktype: ssd. Först behöver Ni märka Era noder, till exempel med 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-funktioner

Ni har lärt Er hur DaemonSets fungerar. Låt oss testa Er förståelse!

DaemonSets: Viktiga slutsatser

Bra jobbat! Ni har nu lärt Er om Kubernetes DaemonSets.

  • DaemonSets ser till att en Pod körs på varje behörig nod.
  • De är avgörande för åtgärder på nodnivå, till exempel loggnings-, övervaknings- och lagringsagenter.
  • Ni kan använda nodeSelector för att rikta in Er på specifika noder.
  • DaemonSets definieras med kind: DaemonSet och använder en Pod-mall, på samma sätt som Deployments.

Nästa steg är att utforska StatefulSets för hantering av stateful-applikationer!

Gratis att börja

Lär dig Grunderna i Kubernetes med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”DaemonSets för nodspecifika uppgifter” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i Kubernetes, inklusive ”DaemonSets för nodspecifika uppgifter”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i Kubernetes innehåller totalt 4 lektioner.

Vad lär jag mig i ”DaemonSets för nodspecifika uppgifter”?

Använd DaemonSets för att köra en kopia av en Pod på alla eller utvalda noder i klustret för åtgärder på klusternivå. Ni övar på Grunderna i Kubernetes med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Grunderna i Kubernetes?

Du behöver inga förkunskaper. Utbildningen i Grunderna i Kubernetes på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”DaemonSets för nodspecifika uppgifter”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Grunderna i Kubernetes-lektionen?

Ja. Varje Grunderna i Kubernetes-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. StatefulSets för tillståndsfulla appar
  2. DaemonSets för nodspecifika uppgifter
  3. Förstå Kubernetes Operators
  4. Custom Resource Definitions (CRD:er)
← Tillbaka till Grunderna i Kubernetes