Aide-mémoire CKAD
exemple YAML DaemonSet k8s
Un DaemonSet pose un Pod sur chaque nœud matching. Nouveau nœud → nouveau Pod. Nœud parti → Pod parti.
kubectl create deploy agent --image=nginx:1.27 -o yaml --dry-run=client > ds.yaml
# kind: DaemonSet — delete replicas and strategy
kubectl apply -f ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: agent
namespace: default
spec:
selector:
matchLabels:
app: agent
template:
metadata:
labels:
app: agent
spec:
containers:
- name: nginx
image: nginx:1.27
spec:
template:
spec:
nodeSelector:
disk: ssd
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule
containers:
- name: shipper
image: busybox:1.36
command: ["sleep", "1d"]
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
hostPath:
path: /var/log
kubectl set image ds/agent nginx=nginx:1.28
kubectl rollout status ds/agent
kubectl rollout history ds/agent
kubectl rollout undo ds/agent
kubectl get ds,po -l app=agent -o wide
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data
Champs
- selector
- Doit matcher template.metadata.labels. Immuable après create.
- template
- Le Pod. Pas de champ replicas — un par nœud matching.
- nodeSelector
- Seuls les nœuds matching reçoivent un Pod. L’omettre = chaque nœud Ready.
- tolerations
- Les nœuds tainted (control-plane) restent vides sans ça.
- updateStrategy
- RollingUpdate est le défaut. OnDelete attend que vous supprimiez chaque Pod.
- hostPath
- Le système de fichiers du nœud. Typique pour un agent de logs. Le path est sur le nœud, pas dans l’image.
- replicas
- Pas un champ DaemonSet. À supprimer si vous dry-run un Deployment.
- kubectl create deploy
- Pas de générateur DaemonSet. Dry-run un Deployment, puis kind: DaemonSet et enlever replicas.
- kubectl rollout
- Marche sur un DaemonSet comme sur un Deployment.
Pièges
- Pas de champ replicas. Un Pod par nœud matching. Un nouveau nœud en reçoit un ; un nœud parti le perd.
- selector.matchLabels et template.metadata.labels doivent matcher. Le selector est immuable après create.
- Pas de kubectl create daemonset. Dry-run un Deployment, kind: DaemonSet, supprimer replicas et strategy.
Doc officielle DaemonSets