Post

Kubernetes 101: DaemonSets

Fala galera! Seis tão baum?

Bora pra mais um capítulo da nossa série “Kubernetes 101”! Hoje vamos falar sobre um recurso essencial para administrar containers que devem estar em todos os nós do cluster: o DaemonSet.

O DaemonSet é uma maneira prática de garantir que certas aplicações ou serviços essenciais sejam executados em cada nó do cluster. Isso é particularmente útil para tarefas de monitoramento, registro (logging), e outras funções de infraestrutura que precisam cobrir todos os nós.

O que é um DaemonSet?

Um DaemonSet é um tipo de controlador no Kubernetes que assegura que uma cópia específica de um Pod seja executada em cada nó do cluster. Diferente de um Deployment, que escala aplicações entre nós, o DaemonSet cria um Pod em cada nó assim que ele entra no cluster.

Casos de Uso para DaemonSets

Os DaemonSets são ideais para tarefas como:

  • Monitoramento: Ferramentas como Prometheus Node Exporter e Fluentd são frequentemente implantadas como DaemonSets para coletar métricas de desempenho e logs de cada nó.
  • Gerenciamento de rede: Controladores de rede, como o CNI, podem ser executados como DaemonSets para manter a configuração de rede em cada nó.
  • Segurança: Agentes de segurança (como o Falco) monitoram atividades suspeitas e são executados em cada nó para garantir cobertura total.

Como criar um DaemonSet

Você pode criar um DaemonSet usando arquivos YAML de maneira declarativa. Vamos ver como isso funciona com um exemplo básico.

Exemplo Declarativo

Aqui está um exemplo simples de YAML para um DaemonSet que executa o nginx em cada nó do cluster:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: meu-daemonset
spec:
  selector:
    matchLabels:
      app: meu-daemon
  template:
    metadata:
      labels:
        app: meu-daemon
    spec:
      containers:
      - name: meu-container
        image: nginx

Esse DaemonSet criará um Pod com o container nginx em cada nó do cluster.

1
kubectl apply -f meu-daemonset.yaml

Gerenciamento de DaemonSets

Ao trabalhar com DaemonSets, é importante entender como gerenciar o ciclo de vida desses Pods em relação aos nós no cluster.

Atualizando um DaemonSet

Quando um DaemonSet é atualizado, o Kubernetes reinicia automaticamente os Pods em cada nó para aplicar a nova configuração. Contudo, vale lembrar que as atualizações não são tão rápidas quanto em Deployments, pois o objetivo principal é manter cada nó com uma cópia única e atualizada do Pod.

DaemonSets vs. Deployments

É comum haver dúvidas sobre quando usar um DaemonSet em vez de um Deployment. Aqui estão algumas diferenças principais:

DaemonSetDeployment
Garante 1 Pod por nóDistribui réplicas de Pods entre nós
Uso ideal para monitoramento e segurançaUso ideal para aplicações web ou APIs
Adiciona Pods automaticamente em novos nósEscalabilidade configurável pelo usuário

Testando e monitorando um DaemonSet

Depois de implantar um DaemonSet, é fundamental garantir que ele esteja funcionando conforme esperado.

Comando para verificar o status

Para verificar o status de um DaemonSet e visualizar em quais nós ele foi implantado, o número de Pods em execução e possíveis erros, você pode usar o comando:

1
kubectl get daemonset meu-daemonset -o wide

Exemplo de output

1
2
NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
meu-daemonset    3         3         3       3            3           <none>          5m

Para obter mais detalhes específicos sobre os Pods e os nós em que estão executando, você pode listar os Pods relacionados ao DaemonSet:

1
kubectl get pods -l app=meu-daemonset -o wide

Exemplo de output detalhado

1
2
3
4
NAME                   READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
meu-daemonset-abc123   1/1     Running   0          5m    192.168.1.1  node-1         <none>           <none>
meu-daemonset-def456   1/1     Running   0          5m    192.168.1.2  node-2         <none>           <none>
meu-daemonset-ghi789   1/1     Running   0          5m    192.168.1.3  node-3         <none>           <none>

Explicação dos campos

  • DESIRED: Quantos Pods o DaemonSet deveria estar executando (um por nó).
  • CURRENT: Quantos Pods foram realmente criados.
  • READY: Quantos Pods estão prontos e funcionando corretamente.
  • NODE: O nome do nó onde o Pod do DaemonSet está em execução.
  • STATUS: O estado atual do Pod (por exemplo, Running, CrashLoopBackOff se houver problemas).

Conclusão

Os DaemonSets são uma ferramenta poderosa e versátil no Kubernetes para gerenciar serviços essenciais que precisam estar em cada nó. Com DaemonSets, você pode manter um controle confiável de agentes de monitoramento, logging, segurança e muito mais.

E, como sempre, não se esqueça de consultar a documentação oficial do Kubernetes para mais detalhes e práticas recomendadas sobre o uso de DaemonSets!

Você pode acessar a documentação oficial aqui: DaemonSets

É isso, galera! Se você gostou do artigo, comenta ou mande pra galera que também quer aprender Kubernetes!

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!

Forte Abraço!

Este post está licenciado sob CC BY 4.0 e pelo autor.