前提
以下の条件の組み合わせで使用する場合のトラブルに対するTIPS。
- Kubernetes 1.29.0以降
- containerd
- Ubuntu 22.04 (cgroup driverがsystemdのディストロは同様にハマるはず)
具体的な症状としては、必要なpod(例えばkube-apiserver)が起動しないため、nc 127.0.0.1 6443 -v
などを実行するとConnection refused
と表示される。
ちなみに、containerdの代わりにDockerを使ってKubernetesクラスタを構築する場合、cgroup driverの自動識別がされるため、気にしなくていいらしい[1]。
結論
containerdの事前設定が必要。
具体的には以下のコマンドを実行する必要がある。
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
その後kubeletを再起動すれば良い。
systemctl daemon-reload
systemctl restart kubelet
まとめ
Kubernetesクラスタを構築すために初めて自分でkubeadmでKubernetesクラスタを構築しようとした。
古いドキュメントや参考文献をもとにクラスタの構築をしようとしたが、これが間違えだった。
Kubernetesはバージョンごとに導入・更新の注意点があるのできちんと最新版のドキュメントの注意事項を読みつつ、導入をすべきだった。