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
- Coleta de Logs:
- Ferramentas como Fluentd, Logstash ou outros agentes de log.
- Monitoramento:
- Agentes de monitoramento como Prometheus Node Exporter ou Datadog Agent.
- 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
-
Node Selectors: Use seletores para direcionar os pods para nós específicos com base em rótulos.
spec:
template:
spec:
nodeSelector:
tipo: especial -
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
-
Criar um DaemonSet:
kubectl apply -f exemplo-daemonset.yaml -
Listar DaemonSets:
kubectl get daemonset -
Visualizar os Pods Criados por um DaemonSet:
kubectl get pods -o wide -
Descrever um DaemonSet:
kubectl describe daemonset exemplo-daemonset -
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.