Lab 7.2 - DaemonSet para Monitoramento
Objetivos do Lab
Ao final deste lab, você será capaz de:
- Compreender o conceito de DaemonSet.
- Criar um DaemonSet para implantar um agente de monitoramento.
- Verificar que o DaemonSet está rodando em todos os nós.
- Entender os casos de uso dos DaemonSets.
- Gerenciar DaemonSets (atualização, remoção).
Duração Estimada
45-60 minutos
Pré-requisitos
- kubectl instalado e configurado.
- Cluster Kubernetes local funcional (minikube ou kind).
- Conhecimento sobre DaemonSets (Capítulo 7.2).
Parte 1: Compreendendo os DaemonSets
Um DaemonSet garante que uma cópia de um Pod seja executada em cada nó (ou em um subconjunto de nós). Isso é ideal para:
- Agentes de monitoramento (ex: node-exporter)
- Agentes de logging (ex: Fluentd, Fluent Bit)
- Agentes de segurança
- Coletores de métricas
Etapa 1.1: Verificar os Nós
Verifique os nós do seu cluster:
kubectl get nodes
Para um cluster local (minikube/kind), geralmente haverá apenas um nó.
Parte 2: Criação de um DaemonSet Simples
Vamos criar um DaemonSet que simula um agente de monitoramento simples.
Etapa 2.1: Criar o DaemonSet
Crie um arquivo daemonset-monitoring.yaml:
# daemonset-monitoring.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-monitor
labels:
app: node-monitor
spec:
selector:
matchLabels:
app: node-monitor
template:
metadata:
labels:
app: node-monitor
spec:
containers:
- name: monitor-agent
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
while true; do
echo "$(date): Node $(hostname) - CPU: $(cat /proc/loadavg | awk '{print $1}') - Memory: $(free -m | grep Mem | awk '{print $3}')MB used"
sleep 30
done
resources:
requests:
cpu: 100m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
volumeMounts:
- name: proc
mountPath: /proc
readOnly: true
- name: sys
mountPath: /sys
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
Explicação:
- O DaemonSet cria um Pod em cada nó.
- O container monta
/proce/sysdo nó para acessar métricas do sistema. - O container exibe periodicamente informações do nó.
Aplique o DaemonSet:
kubectl apply -f daemonset-monitoring.yaml
Parte 3: Verificação do DaemonSet
Etapa 3.1: Verificar os Pods Criados
Verifique se os Pods foram criados:
kubectl get pods -l app=node-monitor
Você deve ver um Pod por nó. Para um cluster com apenas um nó, verá um Pod.
Verifique em quais nós os Pods estão rodando:
kubectl get pods -l app=node-monitor -o wide
Etapa 3.2: Verificar o Status do DaemonSet
Verifique o status do DaemonSet:
kubectl get daemonset node-monitor
# ou
kubectl get ds node-monitor
Você deve ver:
DESIRED: Número de nós onde o Pod deveria rodarCURRENT: Número de Pods atualmente criadosREADY: Número de Pods prontosUP-TO-DATE: Número de Pods atualizados com o templateAVAILABLE: Número de Pods disponíveis
Etapa 3.3: Verificar os Logs
Verifique os logs de um Pod para ver as métricas coletadas:
kubectl logs -l app=node-monitor --tail=10
Você deve ver mensagens periódicas com as informações do nó.
Parte 4: Teste de Adição de Nó (Simulação)
Se você tivesse vários nós, o DaemonSet criaria automaticamente um Pod em cada novo nó. Para um cluster local, vamos simular isso verificando o comportamento.
Etapa 4.1: Verificar o Comportamento
O DaemonSet monitora automaticamente os nós. Se um novo nó for adicionado ao cluster, um Pod será criado automaticamente nesse nó.
Verifique a descrição do DaemonSet para ver os detalhes:
kubectl describe daemonset node-monitor
Parte 5: Atualização do DaemonSet
Etapa 5.1: Atualizar a Imagem
Altere o DaemonSet para mudar a frequência de coleta:
# daemonset-monitoring-updated.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-monitor
labels:
app: node-monitor
spec:
selector:
matchLabels:
app: node-monitor
template:
metadata:
labels:
app: node-monitor
spec:
containers:
- name: monitor-agent
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
while true; do
echo "$(date): [UPDATED] Node $(hostname) - Monitoramento ativo"
sleep 10 # Alterado de 30 para 10 segundos
done
resources:
requests:
cpu: 100m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
Aplique a atualização:
kubectl apply -f daemonset-monitoring-updated.yaml
Etapa 5.2: Observar a Atualização
Os Pods do DaemonSet são atualizados de forma rolling (um por vez):
kubectl get pods -l app=node-monitor -w
Você verá os Pods antigos sendo removidos e os novos sendo criados.
Verifique os novos logs:
kubectl logs -l app=node-monitor --tail=5
Você deve ver as mensagens com "[UPDATED]" e uma frequência maior.
Parte 6: Node Selectors e Taints
Etapa 6.1: Usar um Node Selector (Opcional)
Você pode limitar os nós onde o DaemonSet roda usando um nodeSelector:
spec:
template:
spec:
nodeSelector:
kubernetes.io/os: linux # Executa apenas em nós Linux
containers:
# ...
Etapa 6.2: Tolerar Taints (Opcional)
Se alguns nós tiverem taints, você pode adicionar tolerations ao DaemonSet:
spec:
template:
spec:
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
containers:
# ...
Parte 7: Limpeza
Remova o DaemonSet:
kubectl delete daemonset node-monitor
# ou
kubectl delete -f daemonset-monitoring.yaml
Todos os Pods criados pelo DaemonSet serão removidos automaticamente.
Resumo do Lab
Neste lab, você explorou os DaemonSets para monitoramento. Você aprendeu a criar um DaemonSet que roda em todos os nós, verificar seu comportamento, atualizá-lo e entender os casos de uso típicos (monitoramento, logging, segurança).
Próximos Passos
O próximo lab mostrará como usar Jobs e CronJobs para executar tarefas pontuais e agendadas.
Lab 7.3: Jobs e CronJobs
Lab criado em: Dezembro 2024