kindをZFS上で利用する場合はおまじないが必要なんです
ローカルにKubernetesクラスタをお手軽に構築できるのが「kind」さんです。「Kubernetes in Docker」でkind。
仕組みとしてはDockerコンテナをNodeとし、その中にPodを構築しているみたい。Dockerとkubectlがあれば動きます。
ひょんなことで利用する機会があったのですが、どーもうちの環境ではControl Planeの起動に失敗するようで…
調べてみるとおまじないが必要だったので、備忘録。
rootディスクがZFSだとなんかダメみたい
とりあえずエラーメッセージでググる
OSはUbuntu 20.04。VirtualBoxにクリーンインストールしたUbuntuではControl Planeの起動に成功するのに、ベアメタルで実行した場合はなぜか失敗する…
エラーメッセージで検索すると、同じエラーに悩まされている人を発見。
ここには解決策はありませんでしたが、ヒントを掴むことはできました。
using a filesystem that doesn't work out of the box with docker in docker #1416 (comment)
Dockerコンテナの中でDockerコンテナを動かせないファイルシステムが存在する…?
ZFSとbtrfsはちょっと前までkindで問題が生じていた模様
ZFS/btrfs上でDocker in Dockerすると、overlayfsに問題が生じるらしい。
ただ、「問題は解決した」とあるので、もう少し調べてみました。
ZFSでもkindを使える解決策を発見
上記のissueに解決策がありました。
具体的には、kind実行時に指定するconfigファイルを以下のように書けばOK。
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 containerdConfigPatches: - |- [plugins."io.containerd.grpc.v1.cri".containerd] snapshotter = "native"
キモは「 snapshotter = "native"」で、ZFSを使ってsnapshotを取るようにしている点。これを指定しないとsnapshotを取得するストレージドライバーにoverlayfsが使われてしまい問題が発生する模様。
microk8sでも同じ問題が起こっていて、こちらが先に修正されていたようです。
てか、microk8sは自動でZFSを識別して挙動を変えるようになっているので、kindもそうすればよいのでは…
無事動いた
「kind create cluster --config config.yaml」で先ほどのオプションを読み込ませると、無事Control Planeが起動してClusterを構築できました。
めでたしめでたし。
P.S.
最近知ったLinuxのランチャー「Ulauncher」、かなりよい。