環境
Ubuntu 20.04
kubeadm initをしようとすると…
大学やバイトで忙しく全くサーバーを触れていなかったので、久しぶりにK8Sを使って遊ぼうと思いkubeadm init
でクラスタを初期化しようとしたらエラーが出ました。
ubuntu@instance:~$ sudo kubeadm init
[init] Using Kubernetes version: v1.26.1
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time="2023-02-04T07:30:18Z" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
せっかく久しぶりに開いたのに最初に迎えてくれたのはエラーでした。最悪です。
解決策
ランタイムのバージョンが古すぎることが原因だったようです。
Dockerリポジトリから最新のcontainerdを導入することで解決します。
リポジトリの導入
Dockerリポジトリの導入方法に関するドキュメントを参照しながらGPGキーを追加し、リポジトリを追加します。
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
古いcontainerdの削除
いつも通りにaptを用いて削除します。別のパッケージマネージャを用いてる場合は適宜読み替えてください。
$ sudo apt remove containerd
$ sudo mv /etc/containerd/config.toml /etc/containerd/config.toml.bak
configファイルをconfig.toml.bakに改名しています。
もしconfigを変更している場合新たに生成されたconfig.tomlを変更してください。
containerdの導入
$ sudo apt install containerd.io
$ sudo systemctl restart containerd
結果
正常にkubeadm init
できるようになった!やったね!
$ sudo kubeadm init
Your Kubernetes control-plane has initialized successfully!