いぶろぐのガジェット日記

いぶろぐのガジェット日記

ガジェットやOSS、その他興味のあるITニュースをぽつらぽつら投稿します。

kindをZFS上で利用する場合はおまじないが必要なんです

f:id:ibulog_iblog:20201225005058p:plain

ローカルにKubernetesクラスタをお手軽に構築できるのが「kind」さんです。「Kubernetes in Docker」でkind。

仕組みとしてはDockerコンテナをNodeとし、その中にPodを構築しているみたい。Dockerとkubectlがあれば動きます。

ひょんなことで利用する機会があったのですが、どーもうちの環境ではControl Planeの起動に失敗するようで…

調べてみるとおまじないが必要だったので、備忘録。


rootディスクがZFSだとなんかダメみたい

とりあえずエラーメッセージでググる

OSはUbuntu 20.04。VirtualBoxクリーンインストールしたUbuntuではControl Planeの起動に成功するのに、ベアメタルで実行した場合はなぜか失敗する…

エラーメッセージで検索すると、同じエラーに悩まされている人を発見。

github.com

ここには解決策はありませんでしたが、ヒントを掴むことはできました。

using a filesystem that doesn't work out of the box with docker in docker #1416 (comment)

Dockerコンテナの中でDockerコンテナを動かせないファイルシステムが存在する…?


ZFSとbtrfsはちょっと前までkindで問題が生じていた模様

github.com

ZFS/btrfs上でDocker in Dockerすると、overlayfsに問題が生じるらしい。

ただ、「問題は解決した」とあるので、もう少し調べてみました。


ZFSでもkindを使える解決策を発見

github.com

上記の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でも同じ問題が起こっていて、こちらが先に修正されていたようです。

github.com

てか、microk8sは自動でZFSを識別して挙動を変えるようになっているので、kindもそうすればよいのでは…


無事動いた

「kind create cluster --config config.yaml」で先ほどのオプションを読み込ませると、無事Control Planeが起動してClusterを構築できました。

めでたしめでたし。


P.S.

最近知ったLinuxのランチャー「Ulauncher」、かなりよい。

ulauncher.io