結論: バグっぽくissueが立っている。
この問題を修正したPRはすでにマージされているが、修正されたイメージは降ってきていないので、今すぐ解決したい場合はv3.27.0のイメージを使うとよい。
--- a/k8s/system/network/calico.yaml +++ b/k8s/system/network/calico.yaml @@ -4848,7 +4848,7 @@ spec: # i.e. bpf at /sys/fs/bpf and cgroup2 at /run/calico/cgroup. Calico-node initialisation is executed # in best effort fashion, i.e. no failure for errors, to not disrupt pod creation in iptable mode. - name: "mount-bpffs" - image: docker.io/calico/node:v3.27.2 + image: docker.io/calico/node:v3.27.0 imagePullPolicy: IfNotPresent command: ["calico-node", "-init", "-best-effort"] volumeMounts: @@ -4874,7 +4874,7 @@ spec: # container programs network policy and routes on each # host. - name: calico-node - image: docker.io/calico/node:v3.27.2 + image: docker.io/calico/node:v3.27.0 imagePullPolicy: IfNotPresent envFrom: - configMapRef:
以下調査とか経緯。
自宅サーバ環境の再構築(N度目)をしていてk8sクラスタを組んでいた。 Workerノードとして2年前に買ったNanoPi R4Sを組み込んだのだが、なかなかcalico-nodeが起動してこなかった…。 そこでcalico-nodeのエラーログを見たところ以下のようなエラーを吐いていた。
Mar 12 18:09:24 kurimajima kubelet[10692]: E0312 18:09:24.027277 10692 pod_workers.go:1298] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"mount-bpffs\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=mount-bpffs pod=calico-node-jpftt_kube-system(d6cf290d-030f-443e-abdd-49cc6d5e476b)\"" pod="kube-system/calico-node-jpftt" podUID="d6cf290d-030f-443e-abdd-49cc6d5e476b"
最初 mount-bpffs
というところに着目してCalicoのeBPFサポートの機能周りで問題が起こっていると考えた*1。
しかし、そんなこともなくまたcgroupv2も問題なく機能していた。
$ mount | grep cgroup cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime) none on /run/calico/cgroup type cgroup2 (rw,relatime) $ mount | grep bpf bpf on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
なんだこれは…っとなっていたところChatGPTに質問していたら、以下のコマンドで特定コンテナのログを出力することができることを知った。
$ kubectl logs calico-node-jpftt -n kube-system -c mount-bpffs --previous calico-node: error while loading shared libraries: libpcap.so.0.8: cannot open shared object file: No such file or directory
libpcap.so.0.8 ??? eBPFにlibpcapが必要でライブラリがないから起動していない???? そもそもCalicoでeBPFを有効にしていないのに???? ちょっとよくわからんっとなり、ホストOS側にlibpcap0.8パッケージをいれるも解決せず。 しかたなく、containerdでcalico-nodeイメージを起動することにしたら理解ができた。
$ sudo ctr -n k8s.io run docker.io/calico/node:v3.27.2 test calico-node: error while loading shared libraries: libpcap.so.0.8: cannot open shared object file: No such file or directory Calico node failed to start
なるほど、イメージが壊れている… そして、冒頭のissueを見つけ原因を特定できたのでした。めでたしめでたし
*1:NanoPi R4Sのカーネルがちょっと特殊なのでeBPF関連の機能が有効になっていなそうだと思っていた