macOS 上で k0s と Lens を使ってみた
CNDO2021 で、ミランティス社の嘉門さんが Lens のセッション やってて、面白そうだったので試してみた。 macOS 上に multipass で VM 立てて、k0s で作った Kubernetesクラスタを Lens で操作。
検証環境
macOS :10.14.6
multipass :1.6.2
ubuntu :20.04 LTS
k0s :0.11.0
Lens :4.1.4
- 「multipass」Ubuntu 専用の仮想マシンマネージャ、VM立てるやつ
- 「k0s」Kubernetesディストリビューションの一つ、お手軽ワンバイナリ
- 「Lens」GUI で K8sクラスタを操作するアプリ
以下、手動でごちゃごちゃやっているけど、Ansible が入ってるなら playbook も公開されてるので、一発で k0s が入る:-P https://docs.k0sproject.io/latest/examples/ansible-playbook/
k0s によるクラスタ作成
mac 上のクラスタなら、いくら壊れても構わないので、お気軽に試せる。
(しかし、やってると、おうちK8sクラスタが欲しくなるなぁ、今更だけど。Raspi か NUC か…)
-
インスタンスの作成(3台)
multipass を使って、macOS 上に Ubuntu の VM を3つ立てる。node0 がコントロールプレーンで、 node1・node2 をワーカーノードとする。
echo 0 1 2 | xargs -n1 -IN multipass launch -n nodeN Launched: node0 Launched: node1 Launched: node2 multipass list Name State IPv4 Image node0 Running 192.168.64.10 Ubuntu 20.04 LTS node1 Running 192.168.64.3 Ubuntu 20.04 LTS node2 Running 192.168.64.4 Ubuntu 20.04 LTS
複数台に同じコマンド打つことが多いので、
echo 0 1 2 | xargs -n1 -IN
+「コマンド」みたいな形式を多用 (コマンド内の文字N
には echo の数字が入る)。 あと、multipass exec
を使って、VM上ではなく、すべて macOS上から操作している。 -
k0s のインストール
3台のインスタンスそれぞれに、k0s をインストールし、デフォルトの設定ファイルを設置。
$ echo 0 1 2 | xargs -n1 -IN multipass exec nodeN -- bash -c 'curl -sSLf https://get.k0s.sh | sudo sh' Downloading k0s from URL: https://github.com/k0sproject/k0s/releases/download/v0.11.0/k0s-v0.11.0-amd64 Downloading k0s from URL: https://github.com/k0sproject/k0s/releases/download/v0.11.0/k0s-v0.11.0-amd64 Downloading k0s from URL: https://github.com/k0sproject/k0s/releases/download/v0.11.0/k0s-v0.11.0-amd64 $ $ echo 0 1 2 | xargs -n1 -IN multipass exec nodeN -- sudo mkdir /etc/k0s $ echo 0 1 2 | xargs -n1 -IN multipass exec nodeN -- sudo sh -c 'k0s default-config > /etc/k0s/k0s.yaml'
-
コントロールプレーン(node0)の k0s を起動
install サブコマンドで、k0s の unitファイル(systemd)を作成し、起動。
multipass exec node0 -- sudo k0s install controller -c /etc/k0s/k0s.yaml INFO[2021-03-15 01:21:07] creating user: etcd INFO[2021-03-15 01:21:07] creating user: kube-apiserver INFO[2021-03-15 01:21:07] creating user: konnectivity-server INFO[2021-03-15 01:21:07] creating user: kube-scheduler INFO[2021-03-15 01:21:07] Installing k0s service multipass exec node0 -- sudo systemctl start k0scontroller multipass exec node0 -- sudo k0s status Version: v0.11.0 Process ID: 2642 Parent Process ID: 1 Role: controller Init System: linux-systemd
-
token の作成
ワーカーノード上の kubelet が使用する token を生成。 この token は、各ワーカーノードで必要なので、k0s の設定ファイルと同様に、/etc/k0s/ 配下に設置しておく。
multipass exec node0 -- sudo k0s token create --role=worker > token-worker echo 1 2 | xargs -n1 -IN multipass transfer token-worker nodeN:token-worker echo 1 2 | xargs -n1 -IN multipass exec nodeN -- sudo mv token-worker /etc/k0s/
ちなみにこの token は、base64 + gzip になっているので、こんな感じでデコード可能。
$ cat token-worker | base64 -D | gzip -d - apiVersion: v1 clusters: - cluster: server: https://192.168.64.10:6443 certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURBRENDQWVpZ0F3SUJBZ0lVUVBadXVoc2h6Tzh5Vlk2VE1YcmR3ZjFZZkRVd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0dERVdNQlFHQTFVRUF4TU5hM1ZpWlhKdVpYUmxjeTFqWVRBZUZ3MHlNVEF6TVRReE5qRTJNREJhRncwegpNVEF6TVRJeE5qRTJNREJhTUJneEZqQVVCZ05WQkFNVERXdDFZbVZ5Ym1WMFpYTXRZMkV3Z2dFaU1BMEdDU3FHClNJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFS0FvSUJBUUN2UUxDMXNzdnY2bVVwdXhLTEtjekEzOG9YOWZtZ0RsOEEKeU01dUpyTmpZdVJqTXFvaFJIQ3FPay83aHhuLzRaTmdrQ2U1Y1JQRXhyS2JCZkJEOXlhNXZqak1wU2VUSWd6Nwo2SlBBbnBwQityUTh6Z2pRaVBSeFRDcnI1MWZidjhkSjZjZmYrNWl1Q3E2eWI2VFNWdzZ0UkM2eGNvQ01aNGRIClZJRHpCdlY3OXhQV2VTeis1VkxpODNoalI0eGFGUkdTRDZsRXJoQng0Rmxnc2pFUVZkYVF6RktlN2RCZDJGeEgKZG1SVlg5SndESkZmaTVyT3pka3NYUnFJVGlrWWV4SEEzNUVFN05YV2Zsa0x4SWtOZ0hWMkpyeFRkaGRLVzBwMgpVUzJnZzBBWTR1UmQxNGRZeTQvS3dpdUVvTlNBQi9BaEVqUysrTE9RbHp0bzMvVllDMkFUQWdNQkFBR2pRakJBCk1BNEdBMVVkRHdFQi93UUVBd0lCQmpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJRd1Q4enUKMWxMZUMzRUJtSnVVRDk3N2JORkFMekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBcnFXbDNNY2J5YzFtYU5maQp0T0h6ZzZSbEVHVnEzdDFQNnN4TUsyaTByNXBmc2FjanFxZllqdFpXVkc1Mkw1SHJUNlJIbFVCWnhocU1GZzNBCkRaUXhYVUlWRzB0dWwvV0phVlAwVCtxcUFaS1FHcVZveWU2WUZ4ckRpRnhQK3k2SlI3cTVSbjJrQ2tldERJTHkKWFE2YWZXekI3Q2xMekxlNTliZkpQeURRNElHYWYwSzRyWW44b1ZoVWFaRnVPQXI5VWZ5eitzRnlYWUl1SEY4KwpVd0tWWGE3VUtoM05aRjBjNGV5bnNJc1o2bVdMNmlscVNHOUpGSTIxMTFKeThNRENWOFdxYzRINGhYaXF4WnY5CnBCWUpDSmNuR1F6RkVsamtwM1JSRjRKL3VkRDMxenl0aXBrSjdyUGNFWlBTU3Iwd3pzMmljZVRkN3NWelZYTVAKb29jV0ZnPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= name: k0s contexts: - context: cluster: k0s user: kubelet-bootstrap name: k0s current-context: k0s kind: Config preferences: {} users: - name: kubelet-bootstrap user: token: 1ew87q.nbbjnm39bqqzp1cw
-
ワーカーノード(node1・node2)の k0s を起動
前述の手順で作成した k0s.yaml と token-woker を指定して、k0s の unit ファイル(systemd)を作成し、起動。 k0s のバイナリは同じなので、起動時のオプションによって controll plane か worker node か変わる。便利。
echo 1 2 | xargs -n1 -IN multipass exec nodeN -- sudo k0s install worker -c /etc/k0s/k0s.yaml --token-file /etc/k0s/token-worker time="2021-03-15 01:25:38" level=info msg="Installing k0s service" time="2021-03-15 01:25:39" level=info msg="Installing k0s service" echo 1 2 | xargs -n1 -IN multipass exec nodeN -- sudo systemctl start k0sworker echo 1 2 | xargs -n1 -IN multipass exec nodeN -- sudo k0s status Version: v0.11.0 Process ID: 3357 Parent Process ID: 1 Role: worker Init System: linux-systemd Version: v0.11.0 Process ID: 3264 Parent Process ID: 1 Role: worker Init System: linux-systemd
Lens によるクラスタの操作
準備
- Lens のインストール
- github の releases からダウンロード
- kubeconfig の作成
- macOS 上に kubeconfig を作成する
multipass list | grep node0 node0 Running 192.168.64.10 Ubuntu 20.04 LTS ## localhost を node0 の IP に変更して作成 multipass exec node0 -- sudo cat /var/lib/k0s/pki/admin.conf | sed 's/localhost/192.168.64.10/' > k0s.conf ls $PWD/k0s.conf /Users/harasou/k0s/k0s.conf
k0s のクラスタを Lens に登録
上記の /Users/harasou/k0s/k0s.conf を指定して、クラスタを追加。
Lens 上の Terminal から ReplicaSet をデプロイ
ウィンドウ下の方にある「Terminal」をクリックして、ターミナルを起動。 ここで実行される kubectl は、クラスタのバージョンに合ったものになるらしい。
kubectl create deployment nginx –image=gcr.io/google-containers/nginx –replicas=5
Node の縮退
Cordon / Uncordon、Drain / Undrain などが、各ノードのメニューから 1クリックでできる。
Cordon
Drain
ちゃんと、移動されてる。
Pod への attach
各Pod のメニューから「Shell」を選択。新しいタブが開いて、コンソールが表示される。
Node への attach
各ノードのメニューから「Shell」を選択。新しいタブが開いて、コンソールが表示される。
Prometheus のインストール
Lens の設定画面から、1クリックするだけで Prometheus がインストールされ、CPUやメモリの情報が見れるようになる。
初期状態だと何も表示されていない。
ウィンドウ右上の歯車マークから設定を開くと、画面下部に Prometheus のインストールボタンがある。
クリックして、インストールすると、「lens-metrics」ネームスペースが作成され、prometheus や node-exporter などの pod が起動する。
リソース状況が表示された。めちゃくちゃ簡単。
後片づけ
起動した VM を削除。
multipass list
Name State IPv4 Image
node0 Running 192.168.64.10 Ubuntu 20.04 LTS
node1 Running 192.168.64.3 Ubuntu 20.04 LTS
10.244.166.128
node2 Running 192.168.64.4 Ubuntu 20.04 LTS
10.244.104.0
multipass delete --all
multipass list
Name State IPv4 Image
node0 Deleted -- Not Available
node1 Deleted -- Not Available
node2 Deleted -- Not Available
multipass purge
multipass list
No instances found.
プロダクション環境を GUI で操作するのはちょっと怖いけど、ちゃんと与えられた権限でしか動かないし、 k8s を勉強するには、全体の関連や操作が理解しやすいので、かなり便利と感じた。