I DaemonSet in Ku­ber­ne­tes fa­ci­li­ta­no la gestione delle ap­pli­ca­zio­ni o dei servizi che devi eseguire su ciascun nodo del cluster. La con­fi­gu­ra­zio­ne e le modifiche di un DaemonSet si applicano au­to­ma­ti­ca­men­te a tutti i nodi.

Che cosa sono i DaemonSet in Ku­ber­ne­tes?

I DaemonSet in Ku­ber­ne­tes sono risorse che ga­ran­ti­sco­no l’ese­cu­zio­ne di almeno un’istanza di un de­ter­mi­na­to pod su ciascun nodo del cluster. L’ap­pli­ca­zio­ne o il servizio sono quindi presenti glo­bal­men­te nell’intero ambiente cluster. Essi sono par­ti­co­lar­men­te utili per attività quali mo­ni­to­rag­gio, tenuta dei registri o servizi di rete, che devono esistere su ogni nodo del cluster. Un notevole vantaggio dei DaemonSet è la loro sca­la­bi­li­tà, poiché avviano au­to­ma­ti­ca­men­te i pod ed eliminano quelli già esistenti quando i nodi pre­sen­ta­no errori o vengono rimossi. In questo modo i DaemonSet mi­glio­ra­no l’af­fi­da­bi­li­tà e sem­pli­fi­ca­no la gestione dei cluster.

Consiglio

Con la soluzione cloud Managed Ku­ber­ne­tes di IONOS puoi trarre vantaggio dall’im­po­sta­zio­ne au­to­ma­tiz­za­ta dei cluster, con elevate pre­sta­zio­ni per i carichi di lavoro e sicurezza in caso di anomalie.

Con­fi­gu­ra­zio­ne di DaemonSet in Ku­ber­ne­tes

La di­stri­bu­zio­ne dei pod è con­trol­la­bi­le in modo granulare sulla base delle proprietà dei nodi, dei requisiti delle risorse o di altri criteri definiti dall’utente. Nelle parti seguenti ti spie­ghia­mo come con­fi­gu­ra­re e uti­liz­za­re un DaemonSet.

Creazione di un file YAML per il DaemonSet

In­nan­zi­tut­to, devi definire la con­fi­gu­ra­zio­ne del DaemonSet in un file YAML, con­te­nen­te in­for­ma­zio­ni come il nome del DaemonSet, il tipo di pod uti­liz­za­to e le im­po­sta­zio­ni spe­ci­fi­che per il po­si­zio­na­men­to sui nodi.

Quello che segue è un esempio di file YAML che crea un pod con un container NGINX su ciascun nodo:

apiVersion: apps/v1
kind: DaemonSet
metadata:
    name: nginx-daemonset
spec:
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: nginx-container
                image: nginx:latest
yaml

At­ti­va­zio­ne della con­fi­gu­ra­zio­ne YAML

Apri la riga di comando e accedi alla cartella in cui si trova il file YAML del DaemonSet. Quindi esegui il comando kubectl apply per applicare la con­fi­gu­ra­zio­ne sul tuo cluster Ku­ber­ne­tes:

kubectl apply -f daemonset.yaml
shell

Questo comando comunica al cluster Ku­ber­ne­tes di creare o ag­gior­na­re le risorse definite nel file YAML.

Verifica del DaemonSet in Ku­ber­ne­tes

Controlla che i pod de­si­de­ra­ti siano stati avviati cor­ret­ta­men­te su ciascun nodo.

kubectl get daemonset
shell

Il risultato di questo comando contiene in­for­ma­zio­ni im­por­tan­ti, tra cui:

  • DESIRED: il numero di pod de­si­de­ra­ti che devono essere creati da DaemonSet.
  • CURRENT: il numero effettivo di pod messi a di­spo­si­zio­ne.
  • READY: il numero di pod messi a di­spo­si­zio­ne e operativi.
  • UP-TO-DATE: il numero di pod che at­tual­men­te si trovano allo stato più ag­gior­na­to per quanto riguarda la con­fi­gu­ra­zio­ne DaemonSet.
  • AVAILABLE: il numero di pod operativi che non sono limitati da altre risorse, ad esempio affinità o tol­le­ran­ze.
  • NODE SELECTOR: etichette per i nodi su cui deve essere eseguito il DaemonSet (se con­fi­gu­ra­to).
  • AGE: il tempo trascorso dalla creazione del DaemonSet.

Nel nostro esempio puoi notare come il DaemonSet di Ku­ber­ne­tes nginx-daemonset contenga tre pod richiesti e come at­tual­men­te ci siano tre pod in ese­cu­zio­ne sui nodi.

NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
nginx-daemonset              3         3        3         3            3          <none>       5m
shell

Verifica dei pod

Per ottenere una pa­no­ra­mi­ca più det­ta­glia­ta sui pod creati, utilizza questo comando:

kubectl get pods
shell

L’output mostra lo stato dei pod con in­for­ma­zio­ni su di­spo­ni­bi­li­tà, integrità e tempo di ese­cu­zio­ne.

NAME                      READY   STATUS    RESTARTS       AGE
nginx-daemonset-abcde     1/1      Running      0          5m
nginx-daemonset-fghij     1/1      Running      0          5m
nginx-daemonset-klmno     1/1      Running      0          5m
shell

Eli­mi­na­zio­ne di DaemonSet

Per prima cosa devi con­trol­la­re quali DaemonSet sono presenti nel tuo cluster. Inserisci il comando kubectl delete daemonset, seguito dal nome del DaemonSet che desideri eliminare dalla console. Ad esempio:

kubectl delete daemonset nginx-daemonset
shell

Re­stri­zio­ne di DaemonSet in Ku­ber­ne­tes a de­ter­mi­na­ti nodi

Per eseguire i DaemonSet solo su nodi specifici di un cluster Ku­ber­ne­tes puoi uti­liz­za­re i selettori di nodo o le affinità nella con­fi­gu­ra­zio­ne del DaemonSet. In questo modo puoi spe­ci­fi­ca­re i nodi su cui creare i pod dei DaemonSet.

apiVersion: apps/v1
kind: DaemonSet
metadata:
    name: nginx-daemonset
spec:
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            nodeSelector:
                custom-label: special-node
            containers:
            - name: nginx-container
                image: nginx:latest
yaml

In questo esempio, DaemonSet è con­fi­gu­ra­to per girare solo sui nodi con l’etichetta custom-label: special-node.

Co­mu­ni­ca­zio­ne con i pod del DaemonSet

La co­mu­ni­ca­zio­ne con i pod Daemon in Ku­ber­ne­tes può avvenire in vari modi a seconda delle esigenze della tua ap­pli­ca­zio­ne.

  • Push: in questo scenario, i pod del DaemonSet inviano at­ti­va­men­te dati o ag­gior­na­men­ti a un servizio esterno. Questo servizio esterno può essere, ad esempio, un database sta­ti­sti­co oppure un sistema di log cen­tra­liz­za­to. I pod del DaemonSet non pos­sie­do­no client di per sé e non ini­zia­liz­za­no alcuna con­nes­sio­ne in entrata.
  • NodeIP e porta nota: con questo metodo, ogni pod del DaemonSet utilizza una porta specifica sul nodo per essere rag­giun­gi­bi­le. I client conoscono l’elenco degli IP dei nodi di­spo­ni­bi­li e accedono ai pod at­tra­ver­so l’IP e la porta del nodo cor­ri­spon­den­ti.
  • DNS: uti­liz­zan­do un __headless service__ con lo stesso selettore pod del DaemonSet di Ku­ber­ne­tes puoi abilitare la ri­so­lu­zio­ne DNS per ogni singolo pod. I client possono quindi co­mu­ni­ca­re con i pod del DaemonSet uti­liz­zan­do la risorsa endpoint o ri­chia­man­do record di tipo A dal DNS.
  • Service: la creazione di un servizio regolare di Ku­ber­ne­tes con lo stesso selettore pod consente ai client di accedere ai pod del DaemonSet. Questa ope­ra­zio­ne viene eseguita tramite l’indirizzo IP del cluster del servizio. Ricorda che questa pos­si­bi­li­tà non ga­ran­ti­sce il rag­giun­gi­men­to di un nodo specifico. Il servizio inoltrerà invece la richiesta a uno dei pod di­spo­ni­bi­li del DaemonSet.

Per in­for­ma­zio­ni det­ta­glia­te sulla gestione dei cluster per prin­ci­pian­ti consulta il tutorial di Ku­ber­ne­tes nella nostra guida.

Managed Ku­ber­ne­tes
Or­che­stra­zio­ne sicura dei carichi di lavoro dei container
  • Con­fi­gu­ra­zio­ne au­to­ma­ti­ca dei cluster Ku­ber­ne­tes
  • Ar­chi­via­zio­ne per­si­sten­te com­ple­ta­men­te integrata
  • As­si­sten­za clienti 24/7
Vai al menu prin­ci­pa­le