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で問題が生じていたらしい
もう少し探すと、下記の記事がヒット。
Cannot create cluster in Arch Linux with ZFS Storage Driver · Issue #1121 · kubernetes-sigs/kind
ZFS/btrfs上でDocker in Dockerすると、overlayfsに問題が生じるらしい。
ただ、「問題は解決した」とあるので、もう少し調べます。
ZFSでもkindを使える解決策を発見
下記のissueに解決策がありました。
Create cluster fails - kind-control-plane does not work on zfs · Issue #1719 · kubernetes-sigs/kind
具体的には、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でも同じ問題が起こっていて、こちらが先に修正されていたようです。
Use native containerd snapshotter for ZFS (#1000) · canonical/microk8s@a5ec1f9
無事動いた
kind create cluster --config config.yaml
で先ほどのオプションを読み込ませると、無事Control Planeが起動してClusterを構築できました。
めでたしめでたし。
P.S.
最近知ったLinuxのランチャー「Ulauncher」、かなりよい。