Nach der Installation von kubernetes mit containerd als container runtime sind sowohl der kube-proxy
als auch weave-net
(oder kube-flannelI
im Status CrashLoopBackOff
, was heisst die Container stürzen gleich nach dem starten wieder ab.
Grund ist, dass containerd standarmässig nicht systemd
als Cgroup
nimmt, was bei den meisten Linux Distributionen und kubernetes der Standard ist.
Das Problem äusser sich darin, dass der Befehl kubectl get pods –all-namespaces die Pods kube-proxy
und weave-net
im Status CrashLoopBackOff
anzeigt:
kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7c65d6cfc9-hssnb 1/1 Running 0 5d21h
kube-system coredns-7c65d6cfc9-pm98p 1/1 Running 0 5d21h
kube-system etcd-ewsh-kmstr01-stage 1/1 Running 0 5d21h
kube-system kube-apiserver-ewsh-kmstr01-stage 1/1 Running 0 5d21h
kube-system kube-controller-manager-ewsh-kmstr01-stage 1/1 Running 1 (4d10h ago) 5d21h
kube-system kube-proxy-4hpdj 0/1 CrashLoopBackOff 14 (3m18s ago) 63m
kube-system kube-proxy-8m4t7 0/1 CrashLoopBackOff 1355 (39s ago) 5d21h
kube-system kube-proxy-d8zxk 0/1 CrashLoopBackOff 17 (4m45s ago) 63m
kube-system kube-proxy-vktqj 0/1 CrashLoopBackOff 14 (4m33s ago) 63m
kube-system kube-scheduler-ewsh-kmstr01-stage 1/1 Running 1 (4d10h ago) 5d21h
kube-system weave-net-7wvn9 0/2 CrashLoopBackOff 35 (56s ago) 63m
kube-system weave-net-jvhkm 0/2 CrashLoopBackOff 2888 (2m22s ago) 5d19h
kube-system weave-net-m4z5q 0/2 CrashLoopBackOff 29 (17s ago) 63m
kube-system weave-net-zk7mt 0/2 CrashLoopBackOff 28 (63s ago) 63m
Um das Problem zu lösen muss man zuerst die default Konfigurationsdatei für containerd erstellen, dort die Option SystemdCgroup
auf true
setzen und dann die Pods löschen, damit diese neu erstellt werden.
Dies muss bei jedem node (Control Plane und Worker) gemacht werden:
mkdir -v /etc/containerd
containerd config default > /etc/containerd/config.toml
Nun die Datei /etc/containerd/config.toml
editieren und nach diesen Zeilen suchen:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = false
Dort den Wert von SystemdCgroup
auf true
setzen, speichern und containerd neustarten:
systemctl restart containerd
Nun auf dem Control Plane Node die Pods löschen:
kubectl delete pod kube-proxy-4hpdj --namespace kube-system
kubectl delete pod kube-proxy-8m4t7 --namespace kube-system
kubectl delete pod kube-proxy-d8zxk --namespace kube-system
kubectl delete pod kube-proxy-vktqj --namespace kube-system
kubectl delete pod weave-net-7wvn9 --namespace kube-system
kubectl delete pod weave-net-jvhkm --namespace kube-system
kubectl delete pod weave-net-m4z5q --namespace kube-system
kubectl delete pod weave-net-zk7mt --namespace kube-system
Danach werden diese automatisch neu erstellt und sollten laufen:
kubectl get pods --namespace kube-system
NAME READY STATUS RESTARTS AGE
coredns-7c65d6cfc9-hssnb 1/1 Running 0 6d
coredns-7c65d6cfc9-pm98p 1/1 Running 0 6d
etcd-ewsh-kmstr01-stage 1/1 Running 0 6d
kube-apiserver-ewsh-kmstr01-stage 1/1 Running 0 6d
kube-controller-manager-ewsh-kmstr01-stage 1/1 Running 1 (4d13h ago) 6d
kube-proxy-b5xm6 1/1 Running 3 (37m ago) 39m
kube-proxy-gcdsl 1/1 Running 3 (36m ago) 39m
kube-proxy-kqtnr 1/1 Running 0 40m
kube-proxy-z9lhv 1/1 Running 2 (36m ago) 39m
kube-scheduler-ewsh-kmstr01-stage 1/1 Running 1 (4d13h ago) 6d
weave-net-4pf4v 2/2 Running 0 35m
weave-net-9bq7t 2/2 Running 0 35m
weave-net-m6b8c 2/2 Running 0 36m
weave-net-mngfr 2/2 Running 0 36m