Ein Binary, zwei Rollen
rke2-server / rke2-agent: je
eine systemd-Unit, ein statisch gelinktes Binary. Der
Supervisor startet und überwacht die eigene
containerd-Instanz, das kubelet und,
auf Servern, die Control-Plane als
statische Pods.
Kein Docker: eigenes containerd unter
/run/k3s/containerd, Socket containerd.sock.
Server-Node
embedded etcd: Default-Datastore (Raft), Quorum über ungerade Server-Zahl.
Control-Plane als static Pods: apiserver,
controller-manager, scheduler, etcd, cloud-controller, Manifeste in /var/lib/rancher/rke2/agent/pod-manifests,
vom kubelet gestartet (nicht in-process wie k3s). kube-proxy
läuft als static Pod auf allen Nodes.
Externer CCM (Hetzner, AWS, OpenStack …):
cloud-provider-name: external plus
disable-cloud-controller: true auf allen Servern. v1.36.0
bis v1.36.5, v1.37.0 und v1.37.1 starten sonst trotz
external den eingebauten CCM.
CNI & Netzwerk
Default Canal (Calico-Policy + Flannel-VXLAN).
Alternativen per cni:: Cilium,
Calico, Flannel (ohne
NetworkPolicy). Multus ist nur Meta-Plugin für
Multi-NIC, immer an erster Stelle neben einem primären CNI:
cni: [multus, canal].
Ingress per ingress-controller:
(traefik | none), Traefik ist seit 1.36
Default für neue Cluster. Ab 1.37 bricht ein explizites
ingress-controller: ingress-nginx allein den Start ab,
nginx ist nur noch im Dual-Betrieb mit Traefik wählbar
(Migration). Upgegradete Cluster ohne gesetzten Wert erkennen nginx
am vorhandenen Chart und behalten es (Community-Image
v1.14.5-hardened2; laut ADR-Entwurf ohne weitere
Updates, Chart entfällt in 1.38). Vor dem 1.37-Upgrade trotzdem
explizit [ingress-nginx, traefik] setzen, Traefik dabei
auf Ausweich-Ports (Migrationsdoku, Phase 1). traefik
allein entfernt nginx.
Dazu CoreDNS, metrics-server, snapshot-controller, ab 1.37
rke2-gateway-api-crd (Gateway API v1.6) und
rke2-security-responder, alle als HelmChart-CRs.
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml export PATH=$PATH:/var/lib/rancher/rke2/bin kubectl get nodes -o wide systemctl status rke2-server