エラーの内容
最近あまりにも余裕がないのですが、最低限、検証はしなければ!(⇦ 事務仕事から逃げる言い訳)と
Kubernetesクラスタを作ろうと思ってテケトーにやってると kubeadmが failしてしまいます……
yasuo@m1:~$ sudo kubeadm init --config new-config.yaml
[init] Using Kubernetes version: v1.24.3
[preflight] Running pre-flight checks
[WARNING SystemVerification]: missing optional cgroups: blkio
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: E0809 20:26:55.688131 10079 remote_runtime.go:925] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
今回は、このTrouble Shootingの話です。
Solution?
環境は以下です。
- Debian 11.4
- kernel: 5.10.0-16-amd64
- containerd.io: 1.6.7-1
- Kubernetes 1.24.3
Googleで検索すると2年ぐらい前から config.toml 消しやがれ って話がたくさん出てきて、今も1それが Solutionになってる。
ただ、config.toml 消すと cgroup driver 関連おかしくならん?と思ったので、
config.tomlを消した形で構成して見てみると system.slice 配下に podが散らかってました。
Control group /:
-.slice
| ~~省略~~
`-system.slice
|-kubepods-burstable-pod257eb0ac8a2f0cfcc2960c78f8c8a611.slice:cri-containerd:00d5d3e1c22fe100bfecdc23e7c62a3b09be595>
| `-16919 kube-apiserver --advertise-address=192.168.255.100 --allow-privileged=true --authorization-mode=Node,RBAC ->
|-kubepods-burstable-pod75c6738c774970f2bb9f57f5698d94ab.slice:cri-containerd:fce0ea0a42dd5917fd9e38329bbab26a1246597>
| `-16797 /pause
|-containerd.service ...
| |-16542 /usr/bin/containerd
| |-16690 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 388ec98f35c5f555d5b48c8d0d50013dd6dc9f891ce8aed0e6ad>
| |-16699 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id cad683f46d742bb80f4b7093c1526189f30b62d696a20f54efda>
| |-16734 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id af42adb1ef15516d5fc3719476208bee57772aa33234e283bbc9>
| `-16747 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id fce0ea0a42dd5917fd9e38329bbab26a1246597d6e23e8300fa6>
なんとなく、これでは いかんのでは?って気がします。
エラーが出る原因
結論から言うと、これが起きた理由は config.tomlの余計な場所を書き換えていたことが原因でした。
containerdのconfigの編集は、通常以下の様な形でdefaultを変更するようにしています。
containerd config default > config.toml
vi config.toml
cat config.toml | sudo tee /etc/containerd/config.toml
なんとなく記憶を頼りに config.tomlを systemd_cgroup を trueにすんだよなと思ってGoogleで検索すると、日本語のページがヒットします。
あー、これこれ!と思って以下を true
に書き換えたのですが……
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
systemd_cgroup = false
ここを書き換えると件のエラーになってしまいます
Solution
というわけなので、英語のページを見ます。
あれ、書き換えてる場所違うじゃんと。
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
[plugins."io.containerd.grpc.v1.cri".containerd]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
runcのoptions側の設定 SystemdCgroup だけ書き換えろ ってなってます。
結果
設定を変更して、systemd_cgroup = false
かつ SystemdCgroup = true
にしてやると /etc/containerd/config.toml
があっても kubeadm init
が通る様になります。
そして、ちゃんと kubepodsのsliceの下に podが まとまる形になりました。
Control group /:
-.slice
| ~~省略~~
`-kubepods.slice
|-kubepods-burstable.slice
| |-kubepods-burstable-pod56fc75382b1ac6b3f13f20d4cdf8a364.slice
| | |-cri-containerd-c67aaae2f743aa7e3f3df7269c38b155824f0fd18b37db002b4e8bfabd90b1f0.scope ...
| | | `-23148 /pause
| | `-cri-containerd-9e39dc8e269da3912aae883aa7d2eacf4d371f525e4d296e4f9b6a53d7c93903.scope ...
| | `-23278 kube-scheduler --authentication-kubeconfig=/etc/kubernetes/scheduler.conf --authorization-kubeconfig=/e
| |-kubepods-burstable-pod75c6738c774970f2bb9f57f5698d94ab.slice
なぜ こうなるのかをちゃんと確認した上で、日本語ドキュメントの修正依頼を出すべきだなと思ったのですが、時間がないので 今回はここまでで……orz