DaemonSet per attività specifiche dei nodi
Utilizzi i DaemonSet per eseguire una copia di un Pod su tutti i nodi del cluster o su una selezione di essi, per operazioni a livello di cluster.
DaemonSet per attività specifiche dei nodi è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.
Cosa sono i DaemonSet?
Immagini di dover eseguire uno strumento o un servizio specifico su ogni server del cluster. Ad esempio, un agente di logging che raccolga i log da ogni macchina.
È qui che entrano in gioco i DaemonSet! A differenza dei Deployment, che puntano a mantenere in esecuzione un determinato numero di Pod in una posizione qualsiasi del cluster, un DaemonSet garantisce l'esecuzione di una copia di un Pod su tutti i nodi, o su quelli selezionati.
Usi comuni dei DaemonSet
I DaemonSet sono ideali per le attività che devono essere eseguite a livello di nodo. Ecco alcuni esempi comuni:
- Agenti di logging: strumenti come Fluentd o Logstash per raccogliere i log da ogni nodo.
- Agenti di monitoraggio: Prometheus Node Exporter per raccogliere metriche da ogni server.
- Daemon per lo storage: servizi come GlusterFS o Ceph che forniscono storage distribuito su ogni nodo.
- Proxy di rete: Kube-proxy, incluso in Kubernetes, viene eseguito come DaemonSet per gestire le regole di rete.
Manifest di base di un DaemonSet
La definizione di un DaemonSet è molto simile a quella di un Deployment. La differenza fondamentale è kind: DaemonSet. Vediamo una struttura di base:
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.nodeNameSezioni principali del file YAML
Analizziamo le sezioni importanti del nostro manifest DaemonSet:
kind: DaemonSet: indica a Kubernetes che desideriamo gestire Pod specifici per nodo.spec.selector: è essenziale: definisce come il DaemonSet individua e gestisce i propri Pod tramite le label.spec.template: è la definizione del Pod vera e propria. È quasi identica al modello di Pod presente in un Deployment. Descrive i container, i volumi e le altre impostazioni del Pod che verrà eseguito su ogni nodo.
Deployment su tutti i nodi
Ecco un semplice DaemonSet che esegue un container busybox su ogni nodo idoneo. Stamperà un messaggio che indica su quale nodo è in esecuzione.
Questo è un modello comune per gli agenti a livello di cluster.
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.nodeNameAvvio del Suo DaemonSet
Per creare il DaemonSet nel cluster Kubernetes, utilizzi il familiare comando kubectl apply con il file YAML appena esaminato:
kubectl apply -f node-hello-daemonset.yaml
Kubernetes garantirà quindi che un Pod venga pianificato su ogni nodo che soddisfa i criteri del DaemonSet.
Verifica dello stato del DaemonSet
Dopo l'applicazione, può verificare lo stato del DaemonSet e dei Pod che ha creato:
- Per visualizzare il DaemonSet:
kubectl get ds - Per visualizzare i singoli Pod in esecuzione su ogni nodo:
kubectl get pods -l app=node-hello -o wide
L'opzione -o wide consente di vedere su quale nodo è stato pianificato ciascun Pod.
DaemonSet su nodi selezionati
Che cosa succede se desidera eseguire il DaemonSet solo su un sottoinsieme di nodi? Ad esempio, solo sui nodi dotati di GPU o sui nodi dedicati allo storage.
Può farlo usando nodeSelector. Questo campo nello spec del Pod, all'interno del modello del DaemonSet, consente di specificare le label che un nodo deve avere affinché il Pod venga pianificato su di esso.
Utilizzo dei selettori di nodo nel file YAML
Modifichiamo il DaemonSet precedente in modo che venga eseguito solo sui nodi contrassegnati con disktype: ssd. Prima dovrà applicare una label ai nodi, ad esempio con 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.nodeNameFunzionalità dei DaemonSet
Ha imparato come funzionano i DaemonSet. Verifichiamo la Sua comprensione!
DaemonSet: concetti fondamentali
Ottimo lavoro! Ha imparato a conoscere i DaemonSet di Kubernetes.
- I DaemonSet garantiscono l'esecuzione di un Pod su ogni nodo idoneo.
- Sono fondamentali per le operazioni a livello di nodo, come gli agenti di logging, monitoraggio e storage.
- Può usare
nodeSelectorper indirizzare Pod verso nodi specifici. - I DaemonSet sono definiti con
kind: DaemonSete utilizzano un modello di Pod, in modo simile ai Deployment.
Successivamente esplorerà gli StatefulSet per la gestione delle applicazioni stateful!
Domande Frequenti
La lezione «DaemonSet per attività specifiche dei nodi» è gratuita?
Sì — il testo completo di «DaemonSet per attività specifiche dei nodi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.
Cosa imparerò in «DaemonSet per attività specifiche dei nodi»?
Utilizzi i DaemonSet per eseguire una copia di un Pod su tutti i nodi del cluster o su una selezione di essi, per operazioni a livello di cluster. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare DevOps Bootcamp?
Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «DaemonSet per attività specifiche dei nodi»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?
Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- StatefulSet per app stateful
- DaemonSet per attività specifiche dei nodi
- Comprendere gli Operator di Kubernetes
- Custom Resource Definitions (CRD)