O Ku­ber­ne­tes DaemonSet sim­pli­fica o ge­ren­ci­a­mento das apli­ca­ções ou serviços ne­ces­sá­rios para executar cada nó no cluster. As con­fi­gu­ra­ções e al­te­ra­ções em um DaemonSet são aplicadas au­to­ma­ti­ca­mente a todos os nós.

O que é Ku­ber­ne­tes DaemonSet?

Ku­ber­ne­tes DaemonSet é um recurso que assegura que pelo menos uma instância de um pod es­pe­cí­fico seja executada em cada nó no cluster. Assim, a aplicação ou serviço tem uma presença global em todo o ambiente do cluster. Da­e­mon­Sets são es­pe­ci­al­mente adequados para a execução de tarefas como mo­ni­to­ra­mento, registro ou serviços de rede que precisam ficar dis­po­ní­veis em todos os nós no cluster. Uma grande vantagem do Ku­ber­ne­tes DaemonSet é sua es­ca­la­bi­li­dade, pois ele inicia au­to­ma­ti­ca­mente novos pods e exclui os exis­ten­tes quando os nós falham ou são removidos. Como resultado, o DaemonSet aumenta o nível de con­fi­a­bi­li­dade e facilita o ge­ren­ci­a­mento de clusters.

Dica

Com a solução Managed Ku­ber­ne­tes da IONOS, você desfruta de uma con­fi­gu­ra­ção de clusters to­tal­mente au­to­ma­ti­zada, alto de­sem­pe­nho nas cargas de trabalho e proteção contra falhas.

Como con­fi­gu­rar o Ku­ber­ne­tes DaemonSet

A dis­tri­bui­ção de pods é con­tro­lada de maneira granular tomando como base as pro­pri­e­da­des dos nós, re­qui­si­tos de recursos ou outros critérios definidos pelo usuário. A seguir, ex­pli­ca­re­mos como con­fi­gu­rar e usar um Ku­ber­ne­tes DaemonSet.

Criar arquivo YAML DaemonSet

Primeiro, você defina a con­fi­gu­ra­ção do DaemonSet em um arquivo YAML. Esse tipo de arquivo contém in­for­ma­ções como o nome do DaemonSet, o tipo de pod usado e as con­fi­gu­ra­ções es­pe­cí­fi­cas de po­si­ci­o­na­mento para os nós.

Este é um exemplo de arquivo YAML que cria um pod com um contêiner NGINX em cada nó:

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

Ativar con­fi­gu­ra­ção pelo YAML

Abra a linha de comando e acesse o diretório em que o seu arquivo YAML DaemonSet foi salvo. Em seguida, execute o comando kubectl apply para aplicar a con­fi­gu­ra­ção no seu cluster do Ku­ber­ne­tes:

kubectl apply -f daemonset.yaml
shell

Esse comando informa ao cluster do Ku­ber­ne­tes para criar ou atualizar os recursos definidos no arquivo YAML.

Verificar Ku­ber­ne­tes DaemonSet

Verifique se os pods desejados foram iniciados com sucesso em cada nó.

kubectl get daemonset
shell

O resultado desse comando contém in­for­ma­ções re­le­van­tes, incluindo:

  • DESIRED: O número desejado de pods a serem criados pelo DaemonSet.
  • CURRENT: O número real de pods fornecido.
  • READY: O número de pods dis­po­ní­veis e prontos para operação.
  • UP-TO-DATE: O número de pods atu­a­li­za­dos de acordo com a con­fi­gu­ra­ção do DaemonSet.
  • AVAILABLE: O número de pods ope­ra­ci­o­nais não afetados por outros recursos, como afi­ni­da­des ou to­le­rân­cias.
  • NODE SELECTOR: Marcações (labels) para os nós em que o DaemonSet será executado (se con­fi­gu­rado).
  • AGE: O tempo decorrido desde que o DaemonSet foi criado.

No nosso exemplo, observe que o Ku­ber­ne­tes DaemonSet chamado nginx-daemonset tem três pods desejados e três pods em execução nos nós.

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

Verificar pods

Para obter uma visão mais detalhada dos pods criados, use o seguinte comando:

kubectl get pods
shell

O resultado exibirá a situação atual dos pods, incluindo se eles estão prontos para operação, qual é seu status e há quanto tempo eles são exe­cu­ta­dos.

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

Excluir Ku­ber­ne­tes DaemonSet

Primeiro, verifique quais Da­e­mon­Sets estão presentes no seu cluster. Depois, insira o comando kubectl delete daemonset seguido pelo nome do DaemonSet que será excluído no console. Por exemplo:

kubectl delete daemonset nginx-daemonset
shell

Limitar Ku­ber­ne­tes DaemonSet a nós es­pe­cí­fi­cos

Para executar um DaemonSet em nós es­pe­cí­fi­cos de um cluster do Ku­ber­ne­tes, você pode usar seletores de nós ou afi­ni­da­des nas con­fi­gu­ra­ções do DaemonSet. Essas de­fi­ni­ções pos­si­bi­li­tam es­pe­ci­fi­car em quais nós os pods do DaemonSet serão criados.

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

Nesse exemplo, o DaemonSet foi con­fi­gu­rado para ser executado somente em nós com a label custom-label: special-node.

Comunicar-se com pods do DaemonSet

Existem di­fe­ren­tes formas de se comunicar com os pods de um Ku­ber­ne­tes DaemonSet, de­pen­dendo dos re­qui­si­tos da sua aplicação.

  • Push: Os pods do DaemonSet enviam dados ou atu­a­li­za­ções para um serviço externo, como um banco de dados de es­ta­tís­ti­cas ou sistema central de logs. Os pods do DaemonSet não têm clientes e não iniciam conexões de entrada.
  • IP do nó e porta conhecida: Com esse método, cada pod do DaemonSet usa uma porta es­pe­cí­fica no nó para se tornar acessível. Os clientes conhecem a lista de IPs dos nós dis­po­ní­veis e acessam os pods por meio do IP e da porta do res­pec­tivo nó.
  • DNS: Ao usar a fer­ra­menta __headless service__ com o mesmo seletor de pods que o Ku­ber­ne­tes DaemonSet, você habilita a resolução de DNS in­di­vi­dual para os pods. Os clientes conseguem se comunicar com os pods do DaemonSet usando o recurso “Endpoints” ou con­sul­tando múltiplos registros DNS do tipo A.
  • Serviço: A criação de um serviço no Ku­ber­ne­tes com o mesmo seletor de pods oferece aos clientes acesso aos pods do DaemonSet. O pro­ce­di­mento ocorre por meio do endereço IP do cluster do serviço. Observe que esse processo não garante que um nó es­pe­cí­fico será alcançado. Em vez disso, o serviço en­ca­mi­nhará a so­li­ci­ta­ção para um dos pods dis­po­ní­veis do DaemonSet.

Você encontra in­for­ma­ções de­ta­lha­das sobre o ge­ren­ci­a­mento de clusters no tutorial de Ku­ber­ne­tes no nosso Digital Guide.

Managed Ku­ber­ne­tes da IONOS
O jeito mais simples de gerenciar cargas de trabalho em con­têi­ne­res.

Ins­ta­la­ção de clusters Ku­ber­ne­tes to­tal­mente au­to­ma­ti­zada, vi­si­bi­li­dade máxima e controle de clusters K8s.

Ir para o menu principal