Obsah článku
title: "Zabránenie plánovania podov na špecifické uzly v K3s (nodeAffinity)"
slug: "k3s-node-affinity-exclude-nodes"
technologies: ["Kubernetes", "K3s", "DaemonSet", "nodeAffinity", "Labels", "Taints"]
tags: ["kubernetes", "k3s", "scheduling", "daemonset", "gpu-operator", "resource-management"]
date_solved: "2025-08-21"
Projekt/Téma: Zabránenie plánovania podov na špecifické uzly v K3s (nodeAffinity)
-
Cieľ / Problém na vyriešenie: DaemonSet (napr.
gpu-operator-node-feature-discovery-worker) sa automaticky snaží spustiť na všetkých uzloch v klastri. Na nízko-výkonných uzloch (Raspberry Pi Zero 2 W) tento pod spôsobuje extrémne vysokú záťaž a zaseknutie uzla. Cieľom je zabrániť plánovaniu tohto DaemonSetu na špecifické, nevhodné uzly. -
Použité technológie a nástroje:
- Orchestrácia: Kubernetes (K3s)
- Nástroj:
kubectl - Koncepty:
DaemonSet,Labels,Taints,nodeAffinity
-
Kľúčové postupy a konfiguračné kroky:
- Identifikovať nízko-výkonné uzly, ktoré chceme vylúčiť (napr.
z1,z2,z3). - Pridať na tieto uzly unikátne označenie (Label). Toto je kľúč, podľa ktorého budeme filtrovať.
kubectl label nodes z1 Arch=rpi-zero kubectl label nodes z2 Arch=rpi-zero kubectl label nodes z3 Arch=rpi-zero - Otvoriť na úpravu YAML definíciu problémového DaemonSetu.
kubectl edit daemonset gpu-operator-node-feature-discovery-worker -n default - Do špecifikácie podu (
spec.template.spec) pridať sekciuaffinity, ktorá definuje pravidlo pre plánovanie. - Uložiť zmeny. Kubernetes automaticky ukončí pody na uzloch, ktoré už nespĺňajú nové pravidlá.
- Identifikovať nízko-výkonné uzly, ktoré chceme vylúčiť (napr.
-
Výsledné kódy a skripty: YAML snippet, ktorý sa pridá do
spec.template.specv DaemonSete:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: Arch operator: NotIn values: - rpi-zero -
Zistené problémy a riešenia (Gotchas):
- Problém: Použitie
Taints(kubectl taint nodes ...) nemusí stačiť. Niektoré systémové DaemonSety majú všeobecné tolerancie, ktoré im umožňujú bežať aj na "pošpinených" uzloch. - Riešenie:
nodeAffinityje silnejší a explicitnejší mechanizmus. Pravidlooperator: NotInje ideálne na vylúčenie skupiny uzlov na základe ich označenia (label).
- Problém: Použitie
-
Finálny výsledok / Záver: Problémový DaemonSet sa už neplánuje na nízko-výkonné uzly Raspberry Pi Zero, čím sa uvoľnili ich zdroje. Uzly sa stabilizovali a mohli sa úspešne pripojiť do klastra.