k8sに入門した(その1)「LXD上のmicrok8sにデモをdeployする」
lxd上のmicrok8sでk8sを試してみて、k8sとは何なのか理解する。
thinkpad x230のubuntu server上でk8sを試してみる。
ubuntu serverのダウンロード: https://jp.ubuntu.com/download してインストールする。
パソコンを閉じてもスリープにならないように設定。
HandleLidSwitch=ignore
https://microk8s.io/docs/lxd を参考にlxdコンテナでmicrok8sクラスタを作ってみる。
lxdのインストール
snap install lxd
lxdを初期化
lxd init --minimal
lxcのprofileを設定
wget https://raw.githubusercontent.com/ubuntu/microk8s/master/tests/lxc/microk8s.profile -O microk8s.profile
lxc profile create microk8s
cat microk8s.profile | lxc profile edit microk8s
rm microk8s.profile
コンテナの起動
lxc launch -p default -p microk8s ubuntu:20.04 microk8s
コンテナ内にmicrok8sをインストール
lxc exec microk8s -- sudo snap install microk8s --classic
コンテナ内に入る。
lxc shell microk8s
謎の設定
cat > /etc/rc.local <<EOF
#!/bin/bash
apparmor_parser --replace /var/lib/snapd/apparmor/profiles/snap.microk8s.*
exit 0
EOF
chmod +x /etc/rc.local
exit
これでlxdのコンテナ内でmicrok8sを動かせるようになった。
早速用意した環境内でmicrobot(https://hub.docker.com/r/dontrebootme/microbot)を動かして遊んでみる。
最初に起動してるコンテナの確認方法
lxc exec microk8s -- microk8s kubectl get all
早速、microbotのデプロイ
lxc exec microk8s -- sudo microk8s kubectl create deployment microbot --image=dontrebootme/microbot:v1
Port 80番を外に晒す。
lxc exec microk8s -- sudo microk8s kubectl expose deployment microbot --type=NodePort --port=80 --name=microbot-service
今回は、32370
が割り当てられた。
lxcの設定をして32370
を外に出す。
lxc config device add microk8s port_forward proxy listen=tcp:0.0.0.0:32370 connect=tcp:127.0.0.1:32370 bind=host
microbotにアクセス出来る。
複数立ち上げる
lxc exec microk8s -- microk8s kubectl scale --replicas=2 deployment microbot
複数立ち上がってることを確認
for i in $(seq 1000); do w3m -dump http://localhost:32370/ | grep hostname; done | sort | uniq -c
2つに分散してアクセス出来ている。
アップデートしてみる
lxc exec microk8s -- microk8s kubectl set image deployments/microbot microbot=dontrebootme/microbot:v2
アクセスすると画像が変わる。
ロールバック
lxc exec microk8s -- microk8s kubectl rollout undo deployments/microbot
前のバージョンに戻せる。
片方だけpodを消してみる
lxc exec microk8s -- microk8s kubectl delete pod microbot-756d595588-7vkp5
自動で新しいのが起動する。
環境を綺麗に消す。
lxc exec microk8s -- microk8s reset --destroy-storage
microk8sを止める
lxc exec microk8s -- microk8s reset --destroy-storage
実験用コンテナの削除
lxc stop microk8s
lxc delete microk8s
これで綺麗サッパリ元通り。
lxdってすごい便利だ。
k8sとはコンテナのアップデートとかデプロイとかレプリカとかの管理を自動化するツールってことがわかった。LXDはすごい便利だ。Macで使えないのかな。
次の目標
- 複数ノード環境の作成
- もっと実用的なコンテナのデプロイ
- dashboard等のGUI管理ツールを試す。