Skip to main content

DaemonSets | Kubernetes

  • DaemonSets | Kubernetes

Um DaemonSet no Kubernetes é um tipo de objeto que garante que uma cópia específica de um pod seja executada em cada nó (ou em um subconjunto de nós) do cluster. Ele é especialmente útil para executar tarefas que precisam rodar em todos os nós, como coletores de logs, agentes de monitoramento ou ferramentas de segurança.

Funcionamento do DaemonSet

  • Propagação Automática: Quando um novo nó é adicionado ao cluster, o DaemonSet automaticamente cria um pod para rodar nele.
  • Escopo Específico: É possível configurar para que os pods do DaemonSet rodem apenas em nós específicos, usando seletores de rótulos (labels).
  • Gerenciamento Simples: Se o DaemonSet for atualizado, os pods associados são atualizados automaticamente.

Principais Casos de Uso

  1. Coleta de Logs:
    • Ferramentas como Fluentd, Logstash ou outros agentes de log.
  2. Monitoramento:
    • Agentes de monitoramento como Prometheus Node Exporter ou Datadog Agent.
  3. Segurança e Rede:
    • Agentes de segurança (como Falco) ou proxies de rede (como Cilium).

Criando um DaemonSet

Aqui está um exemplo de configuração YAML para criar um DaemonSet simples:

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: exemplo-daemonset
labels:
app: exemplo
spec:
selector:
matchLabels:
app: exemplo
template:
metadata:
labels:
app: exemplo
spec:
containers:
- name: exemplo-container
image: busybox
args:
- /bin/sh
- -c
- while true; do echo "Running on $(hostname)"; sleep 10; done

Explicação do Exemplo

  • kind: DaemonSet: Define o tipo de recurso como DaemonSet.
  • selector.matchLabels: Identifica os pods que pertencem ao DaemonSet.
  • template: Define o modelo do pod que será executado em cada nó.
  • containers: Especifica os contêineres e sua configuração, como a imagem usada e os argumentos para o contêiner.

Filtros com Node Selectors e Tolerations

  1. Node Selectors: Use seletores para direcionar os pods para nós específicos com base em rótulos.

    spec:
    template:
    spec:
    nodeSelector:
    tipo: especial
  2. Tolerations: Permite que o DaemonSet execute pods em nós que possuem taints.

    spec:
    template:
    spec:
    tolerations:
    - key: "dedicated"
    operator: "Equal"
    value: "logging"
    effect: "NoSchedule"

Comandos Úteis para Gerenciar DaemonSet

  1. Criar um DaemonSet:

    kubectl apply -f exemplo-daemonset.yaml
  2. Listar DaemonSets:

    kubectl get daemonset
  3. Visualizar os Pods Criados por um DaemonSet:

    kubectl get pods -o wide
  4. Descrever um DaemonSet:

    kubectl describe daemonset exemplo-daemonset
  5. Deletar um DaemonSet:

    kubectl delete daemonset exemplo-daemonset

Limitações do DaemonSet

  • Não possui suporte direto a escalonamento, já que o objetivo é garantir a execução de um pod por nó (ou conjunto de nós).
  • Deve ser usado com cautela em clusters grandes, para evitar sobrecarga, especialmente ao executar tarefas intensivas em recursos.