OMNI52
RKE2 Cheatsheet OMNI52™ GmbH

RKE2
auf einem Blatt.

Dichte Referenz für Senior Platform Engineers und SREs zu SUSE's hardened Kubernetes-Distribution. Architektur, HA-Installation, CIS-Hardening, etcd-Backup, Upgrades, Air-Gap, Diagnose und Anti-Patterns. Keine Einsteiger-Folien.

Vorschau (2 Seiten A4 quer + Brand-Rückseite)

RKE2 Cheatsheet Seite 1: Architektur, Installation, HA, Bundled Components
RKE2 Cheatsheet Seite 2: Security, etcd-Backup, Upgrades, Air-Gap, Diagnose, Anti-Patterns

PDF herunterladen

Direkter Download, keine Mail-Adresse nötig. CC BY-SA 4.0 — kopieren, drucken, weiterverteilen ist ausdrücklich erlaubt, solange die Quellenangabe sichtbar bleibt.

RKE2 Cheatsheet (PDF, ~100 KB)

Was drin steht

Architektur

rke2-server/rke2-agent als systemd-Units, embedded etcd, eigenes containerd (kein Docker), Control-Plane als static Pods, Default-CNI Canal.

Installation & HA

get.rke2.io, config.yaml (token, tls-san, cni, disable), ungerade Server-Zahl, Registration-Address, Port 9345, server:+token Join.

Bundled Components

HelmChart-CRs in server/manifests/, Customizing via HelmChartConfig, mitgelieferte Komponenten per disable: abschalten.

Hardening

CIS-Profil (profile: cis), SELinux, Pod Security Admission, Secrets-Encryption at rest by default. Kein Docker-Socket.

etcd & Upgrades

Automatische Snapshots, Off-Node via S3, cluster-reset-Restore. Upgrades via system-upgrade-controller + Plan-CRs oder Channels.

Air-Gap & Diagnose

Images-Tarball, private registries.yaml. journalctl, crictl, rke2-killall.sh / rke2-uninstall.sh. Anti-Patterns aus der Praxis.

Cheatsheet im Volltext

Derselbe Inhalt wie im PDF — zum Mitlesen, Durchsuchen und direkten Kopieren der YAML-Snippets. Stand: RKE2 v1.32 (Edition 2026.07).

Architektur

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).

CNI & Netzwerk

Default Canal (Calico-Policy + Flannel-VXLAN). Alternativen per cni:-Feld: Cilium, Calico, Multus (Multi-NIC, kombiniert mit einem Meta-CNI).

Bundled: CoreDNS, ingress-nginx, metrics-server, snapshot-controller — alle als HelmChart-CRs ausgerollt.

export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
export PATH=$PATH:/var/lib/rancher/rke2/bin
kubectl get nodes -o wide
systemctl status rke2-server

Installation

Server aufsetzen

Installer zieht Binary + systemd-Unit, startet aber nicht selbst: curl -sfL https://get.rke2.io | sh -, dann systemctl enable --now rke2-server.

Agent: INSTALL_RKE2_TYPE=agent vor dem Installer, dann rke2-agent aktivieren.

Wichtige Pfade

Config: /etc/rancher/rke2/config.yaml. kubeconfig: /etc/rancher/rke2/rke2.yaml. Binaries (kubectl, crictl, ctr): /var/lib/rancher/rke2/bin. Node-Token: /var/lib/rancher/rke2/server/node-token.

# /etc/rancher/rke2/config.yaml (erster Server)
token: <shared-secret>
tls-san:
  - rke2.example.com      # LB / VIP-Hostname
  - 10.0.0.10
write-kubeconfig-mode: "0640"
cni: canal
node-taint:
  - "CriticalAddonsOnly=true:NoExecute"
disable:
  - rke2-ingress-nginx

HA Control-Plane

Quorum & Registration

Ungerade Server-Zahl (3 oder 5) für etcd-Quorum. Feste Registration-Address (LB/VIP) vor allen Servern — muss in tls-san stehen, sonst x509-Fehler über den LB.

Der erste Server bootstrappt (kein server:-Feld), weitere joinen über server: + gleichen token.

Ports

9345: RKE2 Supervisor/Registration (nicht 6443!) — darauf zeigt server:. 6443: kube-apiserver. 2379/2380: etcd client/peer.

# config.yaml (zweiter/dritter Server)
server: https://rke2.example.com:9345
token: <shared-secret>
tls-san:
  - rke2.example.com

Bundled Components

Auto-Deploy aus manifests/

Alles in /var/lib/rancher/rke2/server/manifests/ wird vom Deploy-Controller angewandt (HelmChart-CRs: rke2-canal, rke2-coredns, rke2-ingress-nginx, rke2-metrics-server). Nicht direkt editieren — beim Restart überschrieben.

Anpassen & Abschalten

Customizing über HelmChartConfig-CR (gleicher Name/Namespace, valuesContent wird gemergt).

Abschalten mitgelieferter Komponenten über disable: in der config.yaml (z.B. rke2-ingress-nginx, rke2-metrics-server).

apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-ingress-nginx
  namespace: kube-system
spec:
  valuesContent: |-
    controller:
      config:
        use-forwarded-headers: "true"
      allowSnippetAnnotations: "false"

Security & Hardening

CIS-Profil

profile: cis in der config.yaml aktiviert die CIS-Benchmark-Härtung: PSA restricted als Default (ausser System-Namespaces), NetworkPolicies für System-NS, strenge Datei-Rechte.

Host-Prereqs: etcd-User + Kernel-Sysctls (via rke2-cis-sysctl-Paket bzw. /etc/sysctl.d).

Weitere Defaults

Secrets-Encryption at rest: standardmässig an (AES-CBC), verwaltet via rke2 secrets-encrypt. SELinux: unterstützt (selinux: true + rke2-selinux Policy).

Pod Security Admission: Cluster-weite Default-Config im cis-Profil. Kein Docker: reduzierte Angriffsfläche, nur containerd.

rke2 secrets-encrypt status
rke2 secrets-encrypt rotate-keys   # Key-Rotation
kubectl get --raw='/readyz?verbose'

etcd Snapshot / Restore

Snapshots

Automatisch an by default: etcd-snapshot-schedule-cron (Default alle 12h), etcd-snapshot-retention (Default 5). Ablage: /var/lib/rancher/rke2/server/db/snapshots.

Off-node sichern: etcd-s3-Optionen (S3-Bucket) — sonst ist der Snapshot mit dem Node verloren.

rke2 etcd-snapshot save --name pre-upgrade
rke2 etcd-snapshot ls
# Restore (auf EINEM Server, andere vorher stoppen):
systemctl stop rke2-server
rke2 server \
  --cluster-reset \
  --cluster-reset-restore-path=/var/lib/rancher/rke2/server/db/snapshots/pre-upgrade-<ts>
systemctl start rke2-server

Restore-Ablauf

Restore läuft auf einem Server, alle anderen Server werden gestoppt und ihr db/-Verzeichnis geleert; danach re-joinen sie den zurückgesetzten Cluster über server: + token.

Upgrades

Zwei Wege

system-upgrade-controller (SUSE-Pattern): deklarative Plan-CRs, node-selektiert, Server zuerst, dann Agents.

Manuell: INSTALL_RKE2_VERSION setzen, Installer erneut laufen lassen, rke2-server neustarten. Channels: INSTALL_RKE2_CHANNEL (stable | latest | v1.32).

apiVersion: upgrade.cattle.io/v1
kind: Plan
metadata: {name: server-plan, namespace: system-upgrade}
spec:
  concurrency: 1
  nodeSelector:
    matchExpressions:
    - {key: node-role.kubernetes.io/control-plane, operator: Exists}
  serviceAccountName: system-upgrade
  cordon: true
  upgrade: {image: rancher/rke2-upgrade}
  version: v1.32.5+rke2r1

Air-Gap

Images & Binary

Images-Tarball (rke2-images.linux-amd64.tar.zst) nach /var/lib/rancher/rke2/agent/images/ legen — RKE2 importiert ihn beim Start in containerd.

Binary + install.sh offline via INSTALL_RKE2_ARTIFACT_PATH.

Private Registry

/etc/rancher/rke2/registries.yaml: Mirror-Endpunkte + Auth + TLS. Gilt für System-Images und Workloads.

# /etc/rancher/rke2/registries.yaml
mirrors:
  docker.io:
    endpoint:
      - "https://registry.internal:5000"
configs:
  registry.internal:5000:
    auth: {username: robot, password: <token>}
    tls: {ca_file: /etc/ssl/registry-ca.pem}

Diagnose

Werkzeuge

journalctl -u rke2-server -f (bzw. rke2-agent). crictl unter /var/lib/rancher/rke2/bin — Container/Images direkt am Node (containerd, nicht Docker). Static-Pod-Logs: crictl logs oder /var/log/pods.

export CRI_CONFIG_FILE=/var/lib/rancher/rke2/agent/etc/crictl.yaml
/var/lib/rancher/rke2/bin/crictl ps
/var/lib/rancher/rke2/bin/crictl logs <container-id>
journalctl -u rke2-server --no-pager | tail -50

Reset & Removal

rke2-killall.sh: stoppt alle rke2-Prozesse + Container, lässt Daten liegen. rke2-uninstall.sh: vollständige Entfernung (Binaries, Daten, Unit).

Anti-Patterns

Was du nicht tun solltest

Gerade Server-Zahl (2/4): kein Quorum-Gewinn, Split-Brain-Risiko — immer 3 oder 5.

Snapshots nur on-node: Node-Verlust = etcd-Verlust. S3/off-node konfigurieren.

Docker erwarten: RKE2 hat ein eigenes containerd; kein Docker-Socket, kein docker ps. Nutze crictl.

tls-san vergessen: API-Zertifikat kennt den LB/VIP-Namen nicht — x509-Fehler, sobald kubectl über den LB geht.

Server als Worker ohne Taint in Prod: Workloads konkurrieren mit etcd/Control-Plane — CriticalAddonsOnly-Taint setzen.

manifests/ direkt editieren: beim Restart überschrieben — HelmChartConfig statt Datei-Patch.

Aus der OMNI52 Cheatsheet-Fabrik

Verwandte Sheets in dichter Senior-Qualität:
rancher-cheatsheet.de — Rancher-Management
kubernetes-cheatsheet.de — Kubernetes Core
k8s-cheatsheet.de — Kubernetes-Kurzref
istio-cheatsheet.de — Service-Mesh-Layer (Istio in der Tiefe)

Lizenz & Weiterverteilung

CC BY-SA 4.0. Du darfst dieses Cheatsheet kopieren, weiterverteilen, ausdrucken und in eigenen Materialien zitieren. Bedingung: Quellenangabe „RKE2 Cheatsheet — OMNI52 GmbH, rke2-cheatsheet.de“ bleibt sichtbar, und abgeleitete Werke stehen unter der gleichen Lizenz (Share-Alike).

Nicht erlaubt: Logo, Marken oder den Eindruck zu vermitteln, dass der Inhalt von dir/euch stammt oder dass OMNI52 GmbH die Weiterverwendung sponsort.

Volltext der Lizenz: creativecommons.org/licenses/by-sa/4.0/deed.de.

RKE2 and Rancher are trademarks of SUSE LLC. Kubernetes is a registered trademark of The Linux Foundation. OMNI52™ is a trademark of OMNI52 GmbH (filed, not yet registered). This website is operated by OMNI52 GmbH and is not affiliated with, endorsed by, or sponsored by SUSE LLC or The Linux Foundation. “RKE2” and “Rancher” are used in a nominative / descriptive sense to indicate the technology this cheatsheet documents.