DaemonSets
DaemonSets
Jeden pod na každém uzlu – automaticky, včetně uzlů, které přibudou později.
graph TB
DS[DaemonSet log-agent] --> P1[Pod na control01]
DS --> P2[Pod na worker01]
DS --> P3[Pod na worker02]
DS --> P4[Pod na worker03]
N[přidá se nový uzel] -.-> P5[pod vznikne automaticky]
Žádné pole replicas neexistuje. Počtem replik je seznam uzlů.
Typičtí uživatelé: CNI agenti, kube-proxy, sběrače logů, node exportery, storage
drivery. Váš cluster jich už několik provozuje – kubectl get ds -A.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-logger
spec:
selector:
matchLabels: { app: node-logger }
template:
metadata:
labels: { app: node-logger }
spec:
tolerations:
- key: node-role.kubernetes.io/control-plane
operator: Exists
effect: NoSchedule # bez toho na control plane pod nevznikne
containers:
- name: logger
image: busybox
command: ["sh", "-c", "while true; do date; sleep 30; done"]
Dvě věci lidi překvapí:
- Taints. Uzly control plane nesou taint
NoSchedule, takže je DaemonSet přeskočí, pokud ho netoleruje. Porovnejtekubectl get ds -Askubectl describe node control01 | grep -i taint. - Drain.
kubectl drainodmítá vystěhovat pody DaemonSetu, a proto je--ignore-daemonsetsna každém drainu, který kdy napíšete. Pod tam má být tak dlouho, dokud existuje uzel.
Omezit DaemonSet na část uzlů lze přes nodeSelector – například jen na uzly
s labelem storage=nfs.