Why
multipass を使って microk8s 環境を作ればマルチプラットフォームで kubernetes のテスト環境を手早く構築できる。
でもいつも zsh/oh-my-zsh/powerlevel10k
のCLI環境で作業している自分にとって素のbashがとても使いにくい。
それに kubectl
のcompletionやもろもろのツールのインストールや設定が面倒
そこで、multipass では--cloud-init
フラグで cloud-init が使えるので、これを使用してプロビジョニングする。
(あ…これ全部 canonical のプロダクトやん)
Prerequisite(前提条件)
各環境に合わせて multipass をインストールしてください。
リンク: https://multipass.run/docs
TL;DR
適当なディレクトリに移動して以下のコマンドを実行すれば環境構築完了です。
$ wget https://raw.githubusercontent.com/cashewnuts/multipass-env/master/microk8s/cloud-config.yaml
$ multipass launch -n microk8s-vm --cloud-init cloud-config.yaml --mem 4G --disk 40G
用語解説
multipass
ローカルにlinuxインスタンスを作成するツール
いつでも最新のubuntu環境を気軽に試せて、ホストのファイルシステムのマウントも簡単にできる。
Windows Subsystem for Linux のマルチプラットフォーム版、あるいは Docker を普段使い用にお手軽にしたようなツール
microk8s
kubernetes の環境をまるごと1つのパッケージとしてまとめたもの
cloud-init
クラウドインスタンス(AWSのEC2など)のプロビジョニング方法としてデファクトスタンダードとなっているツール
ほとんどのIaaS のクラウドプロバイダーでは cloud-init を使ったプロビジョニング方法を用意している。
デファクトの割にドキュメントが充実してない。
cloud-config.yamlの解説
追記予定
成果物
うまくいくと以下のようにzsh
やもろもろのツールを含むCLI環境が構築された microk8s 用インスタンスが作成されます。
このソース(?)は github 上にあります。
https://github.com/cashewnuts/multipass-env
以下メモ書き
cloud-init のデバッグ方法
cloud-init のデバッグの仕方がよくわからなくて苦労した。
結論として、multipass shell <instance-name>
でログインしたあと以下のファイルを見ることで、どこで失敗したのかが確認できた。
# cloud-initが内部で実行しているpythonのデバッグログ
/var/log/cloud-init.log
# cloud-initの設定ファイル(yaml)をもとに実行されたbashスクリプトのログ
/var/log/cloud-init-output.log