MicroK8s in LXDでKubernetesを触ってみた
やること
- LXDにMicroK8s入れる
- LXDを複数立ち上げクラスタ組んでみる
- アプリのデプロイ
- スケールの変更
- デプロイしたアプリのアップデート
- デプロイしたアプリのロールバック
- ノードの増減確認
内容的に
と ですのでこちらを参照したほうが参考になると思いますLXDにMicroK8s入れる
MicroK8s用のプロファイル作成
LXDでMicroK8sを立ち上げるためのプロファイルがUbuntuから公開されているので
それをローカルにmk8sという名前で保存します。
wgetで取得しているプロファイルはzfs用なのでext4の人は違うの必要
$ lxc profile create mk8s
Profile mk8s created
$ wget -O - -q https://raw.githubusercontent.com/ubuntu/microk8s/master/tests/lxc/microk8s-zfs.profile | lxc profile edit mk8s
プロファイル適用してMicroK8sのインストール
取得したプロファイルを適用してMicroK8sをインストールします
$ lxc launch -p default -p mk8s ubuntu:20.04 mk8s1
Creating mk8s1
Starting mk8s1
$ lxc exec mk8s1 -- snap install microk8s --classic
microk8s (1.20/stable) v1.20.5 from Canonical✓ installed
$ lxc exec mk8s1 -- snap alias microk8s.kubectl kubectl
Added:
- microk8s.kubectl as kubectl
起動確認
起動するまで待ちます
$ lxc exec mk8s1 -- microk8s status -w
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
〜略〜
AppAromerプロファイルの適用
$ lxc shell mk8s1
$ 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
ここまでの状態のイメージを保存して共有する
クラスタを作成するにあたり同じ状態のコンテナを複数用意する必要があるためここまで適用したコンテナイメージをローカルリポジトリにpushして同じコンテナの追加を容易に出来るようにします。
これによりイメージ保存時と最初のlaunch時には時間がかかりますがそれ以降はキャッシュされるためコンテナの追加・削除はスムーズに進むようになります。
$ lxc stop mk8s1
$ lxc publish mk8s1 --alias mk8s
$ lxc start mk8s1
$ lxc image edit mk8s
プロファイルの編集が始まるので最終行に以下を追記してMicroK8s用のプロファイルをデフォルトで適用するようにしておきます。
- mk8s
LXDを複数立ち上げクラスタ組んでみる
3台追加で立ち上げ
合計4台でクラスタを作るため先程保存したイメージをベースに3台追加で起動します。
$ lxc launch mk8s mk8s2
Creating mk8s2
Starting mk8s2
$ lxc exec mk8s2 -- microk8s status --wait-ready | head -n4
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
$ lxc launch mk8s mk8s3 && lxc exec mk8s3 -- microk8s status --wait-ready | head -n4
Creating mk8s3
Starting mk8s3
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
$ lxc launch mk8s mk8s4 && lxc exec mk8s4 -- microk8s status --wait-ready | head -n4
Creating mk8s4
Starting mk8s4
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
クラスタを組む
追加される側にて
microk8s add-node
で追加するためのトークンを発行して
追加したいノードでそのトークンで追加しに行きます。
4台にしたのは3台目を追加した時点でhigh-availabilityが有効になり
4台目を追加した時点でスタンバイノードが追加される動きになるのでどうせなら全部有効にしたいというだけです。
$ lxc exec mk8s1 -- microk8s add-node
From the node you wish to join to this cluster, run the following:
microk8s join 10.116.214.200:25000/5c1093b09cb55c249e93c8c756c85b25
If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join 10.116.214.200:25000/5c1093b09cb55c249e93c8c756c85b25
$ lxc exec mk8s2 -- microk8s join 10.116.214.200:25000/5c1093b09cb55c249e93c8c756c85b25
Contacting cluster at 10.116.214.200
Waiting for this node to finish joining the cluster. ..
$ lxc exec mk8s1 -- microk8s add-node | tail -n1 | xargs lxc exec mk8s3 --
Contacting cluster at 10.116.214.88
Waiting for this node to finish joining the cluster. ..
$ lxc exec mk8s1 -- microk8s add-node | tail -n1 | xargs lxc exec mk8s4 --
Contacting cluster at 10.116.214.88
Waiting for this node to finish joining the cluster. ..
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s2 Ready <none> 4m45s v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s3 Ready <none> 2m18s v1.20.5-34+40f5951bd9888a 10.116.214.66 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s1 Ready <none> 35m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s4 Ready <none> 34s v1.20.5-34+40f5951bd9888a 10.116.214.223 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
アプリのデプロイ
microbotのデプロイ
microbotというエンドポイントを表示するだけのdockerイメージをデプロイします。
$ lxc exec mk8s1 -- kubectl create deployment microbot --image=dontrebootme/microbot:v1
deployment.apps/microbot created
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-5f5499d479-ckmxg 1/1 Running 0 12s 10.1.217.193 mk8s3 <none> <none>
mk8s3のノードで実行されているようです。
microbotにアクセスする
microbotがLXD内からしかアクセスできないのでポートを外部に公開します
$ lxc exec mk8s1 -- kubectl expose deployment microbot --type=NodePort --port=80 --name=microbot-service
service/microbot-service exposed
$ lxc exec mk8s1 -- kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 40m <none>
microbot-service NodePort 10.152.183.99 <none> 80:32278/TCP 7s app=microbot
32278ポートで公開されました
この状態であればmk8s1〜mk8s4のどのIPに対してhttpアクセスしてもこのポートならmicrobotに到達されるようです。
mk8s3で実行されているので別のmk8s1のIPに対してアクセスして表示されるか確認してみます。
IPは
kubectl get nodes -o wide
を実行した時に表示されています。
スケールの変更
折角クラスタを組んでるので複数立ち上げるようにしてみます
$ lxc exec mk8s1 -- kubectl scale --replicas=8 deployment microbot
deployment.apps/microbot scaled
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-5f5499d479-ckmxg 1/1 Running 0 6m6s 10.1.217.193 mk8s3 <none> <none>
microbot-5f5499d479-nnxgx 1/1 Running 0 16s 10.1.217.194 mk8s3 <none> <none>
microbot-5f5499d479-bts25 1/1 Running 0 16s 10.1.217.195 mk8s3 <none> <none>
microbot-5f5499d479-dgwqq 1/1 Running 0 16s 10.1.238.131 mk8s1 <none> <none>
microbot-5f5499d479-27mbj 1/1 Running 0 16s 10.1.115.129 mk8s2 <none> <none>
microbot-5f5499d479-qzkpf 1/1 Running 0 16s 10.1.236.129 mk8s4 <none> <none>
microbot-5f5499d479-xhznz 1/1 Running 0 16s 10.1.115.130 mk8s2 <none> <none>
microbot-5f5499d479-v7v6k 1/1 Running 0 16s 10.1.236.130 mk8s4 <none> <none>
分散されたようなので分散してアクセスされるか確認します
$ for i in $(seq 20);do w3m -dump http://10.116.214.88:32278/ | grep hostname ; done | sort | uniq -c
2 Container hostname: microbot-5f5499d479-27mbj
3 Container hostname: microbot-5f5499d479-bts25
2 Container hostname: microbot-5f5499d479-ckmxg
2 Container hostname: microbot-5f5499d479-dgwqq
2 Container hostname: microbot-5f5499d479-nnxgx
2 Container hostname: microbot-5f5499d479-qzkpf
3 Container hostname: microbot-5f5499d479-v7v6k
4 Container hostname: microbot-5f5499d479-xhznz
分散されてますね
デプロイしたアプリのアップデート
microbot:v1からmicrobot:v2へアップデート
microbotはv1からv2にすることで表示される画像が変わるのでアップデートの確認が出来ます。
$ lxc exec mk8s1 -- kubectl set image deployments/microbot microbot=dontrebootme/microbot:v2
deployment.apps/microbot image updated
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-5f5499d479-ckmxg 1/1 Running 0 8m9s 10.1.217.193 mk8s3 <none> <none>
microbot-5f5499d479-dgwqq 1/1 Running 0 2m19s 10.1.238.131 mk8s1 <none> <none>
microbot-5f5499d479-qzkpf 1/1 Running 0 2m19s 10.1.236.129 mk8s4 <none> <none>
microbot-5f5499d479-bts25 1/1 Terminating 0 2m19s 10.1.217.195 mk8s3 <none> <none>
microbot-5f5499d479-nnxgx 1/1 Terminating 0 2m19s 10.1.217.194 mk8s3 <none> <none>
microbot-6456dc47db-76ltk 1/1 Running 0 9s 10.1.236.131 mk8s4 <none> <none>
microbot-6456dc47db-czzts 1/1 Running 0 9s 10.1.238.132 mk8s1 <none> <none>
microbot-5f5499d479-xhznz 1/1 Terminating 0 2m19s 10.1.115.130 mk8s2 <none> <none>
microbot-5f5499d479-v7v6k 1/1 Terminating 0 2m19s 10.1.236.130 mk8s4 <none> <none>
microbot-6456dc47db-zkgj8 0/1 ContainerCreating 0 1s <none> mk8s2 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Running 0 9s 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-zb4w8 0/1 ContainerCreating 0 1s <none> mk8s4 <none> <none>
microbot-5f5499d479-27mbj 1/1 Terminating 0 2m19s 10.1.115.129 mk8s2 <none> <none>
microbot-6456dc47db-5kpj2 0/1 Pending 0 1s <none> <none> <none> <none>
microbot-6456dc47db-bxpj5 1/1 Running 0 9s 10.1.217.196 mk8s3 <none> <none>
起動していたコンテナがTerminatingされて新たにv2のコンテナがPending,ContainerCreatingのステータスで作られていきます。
確証は無いのですがアプリのデプロイ時に均一に実行されなかったのはこういったアップデート時にすばやく新たなコンテナを立ち上げるために余力を残したノードを作っているのではないでしょうか
しばらくしてからもう一度確認すると
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-76ltk 1/1 Running 0 2m15s 10.1.236.131 mk8s4 <none> <none>
microbot-6456dc47db-czzts 1/1 Running 0 2m15s 10.1.238.132 mk8s1 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Running 0 2m15s 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-bxpj5 1/1 Running 0 2m15s 10.1.217.196 mk8s3 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 0 2m7s 10.1.115.132 mk8s2 <none> <none>
microbot-6456dc47db-zb4w8 1/1 Running 0 2m7s 10.1.236.132 mk8s4 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 0 2m6s 10.1.238.134 mk8s1 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 0 2m7s 10.1.238.133 mk8s1 <none> <none>
$ for i in $(seq 20);do w3m -dump http://10.116.214.88:32278/ | grep hostname ; done | sort | uniq -c
3 Container hostname: microbot-6456dc47db-5kpj2
1 Container hostname: microbot-6456dc47db-76ltk
3 Container hostname: microbot-6456dc47db-bxpj5
3 Container hostname: microbot-6456dc47db-czzts
2 Container hostname: microbot-6456dc47db-p2kmg
4 Container hostname: microbot-6456dc47db-wx77v
2 Container hostname: microbot-6456dc47db-zb4w8
2 Container hostname: microbot-6456dc47db-zkgj8
新しいmicrobotコンテナにアクセスされるようになってそうですね
画像で確認してみます。
画像が入れ替わっているのでアップデートが出来ている事を確認できました。
デプロイしたアプリのロールバック
アップデート前の状態に戻せるようなので戻してみましょう
$ lxc exec mk8s1 -- kubectl rollout undo deployments/microbot
deployment.apps/microbot rolled back
$ lxc exec mk8s1 -- kubectl describe deployments/microbot
Name: microbot
Namespace: default
CreationTimestamp: Fri, 16 Apr 2021 05:04:32 +0000
Labels: app=microbot
Annotations: deployment.kubernetes.io/revision: 3
Selector: app=microbot
Replicas: 8 desired | 8 updated | 10 total | 6 available | 4 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=microbot
Containers:
microbot:
Image: dontrebootme/microbot:v1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
OldReplicaSets: microbot-6456dc47db (2/2 replicas created)
NewReplicaSet: microbot-5f5499d479 (8/8 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 7s deployment-controller Scaled up replica set microbot-5f5499d479 to 2
Normal ScalingReplicaSet 7s deployment-controller Scaled down replica set microbot-6456dc47db to 6
Normal ScalingReplicaSet 7s deployment-controller Scaled up replica set microbot-5f5499d479 to 4
Normal ScalingReplicaSet 3s deployment-controller Scaled down replica set microbot-6456dc47db to 5
Normal ScalingReplicaSet 3s deployment-controller Scaled up replica set microbot-5f5499d479 to 5
Normal ScalingReplicaSet 3s deployment-controller Scaled down replica set microbot-6456dc47db to 2
Normal ScalingReplicaSet 3s deployment-controller Scaled up replica set microbot-5f5499d479 to 8
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-p5m7x 1/1 Terminating 1 73m 10.1.115.137 mk8s2 <none> <none>
microbot-6456dc47db-qz48s 1/1 Terminating 1 87m 10.1.115.136 mk8s2 <none> <none>
microbot-5f5499d479-jk8g5 1/1 Running 0 23s 10.1.236.132 mk8s4 <none> <none>
microbot-5f5499d479-29qd4 1/1 Running 0 24s 10.1.236.129 mk8s4 <none> <none>
microbot-5f5499d479-449wq 1/1 Running 0 23s 10.1.236.130 mk8s4 <none> <none>
microbot-5f5499d479-sv6fp 1/1 Running 0 24s 10.1.236.131 mk8s4 <none> <none>
microbot-6456dc47db-wx77v 1/1 Terminating 2 99m 10.1.238.142 mk8s1 <none> <none>
microbot-6456dc47db- 1/1 Terminating 1 99m 10.1.115.140 mk8s2 <none> <none>
microbot-6456dc47db-qbcm5 1/1 Terminating 1 73m 10.1.115.139 mk8s2 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Terminating 1 100m 10.1.115.138 mk8s2 <none> <none>
microbot-5f5499d479-rpztb 1/1 Running 0 20s 10.1.236.133 mk8s4 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Terminating 2 99m 10.1.238.141 mk8s1 <none> <none>
microbot-5f5499d479-tsb59 1/1 Running 0 20s 10.1.115.141 mk8s2 <none> <none>
microbot-6456dc47db-czzts 1/1 Terminating 2 100m 10.1.238.140 mk8s1 <none> <none>
microbot-5f5499d479-fj2sw 1/1 Running 0 20s 10.1.238.144 mk8s1 <none> <none>
microbot-5f5499d479-f5ggt 1/1 Running 0 20s 10.1.238.143 mk8s1 <none> <none>
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-5f5499d479-jk8g5 1/1 Running 0 99s 10.1.236.132 mk8s4 <none> <none>
microbot-5f5499d479-29qd4 1/1 Running 0 100s 10.1.236.129 mk8s4 <none> <none>
microbot-5f5499d479-449wq 1/1 Running 0 99s 10.1.236.130 mk8s4 <none> <none>
microbot-5f5499d479-sv6fp 1/1 Running 0 100s 10.1.236.131 mk8s4 <none> <none>
microbot-5f5499d479-rpztb 1/1 Running 0 96s 10.1.236.133 mk8s4 <none> <none>
microbot-5f5499d479-tsb59 1/1 Running 0 96s 10.1.115.141 mk8s2 <none> <none>
microbot-5f5499d479-fj2sw 1/1 Running 0 96s 10.1.238.144 mk8s1 <none> <none>
microbot-5f5499d479-f5ggt 1/1 Running 0 96s 10.1.238.143 mk8s1 <none> <none>
起動中のコンテナが入れ替わったようなので画面を確認します。
戻ってますね
ノードの増減確認
折角クラスタにしてるので破壊して遊んでみましょう
クラスタから外す
まずは普通にmk8s4をクラスタから外します
$ lxc exec mk8s4 -- microk8s leave
Generating new cluster certificates.
Waiting for node to start.
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s3 Ready <none> 21m v1.20.5-34+40f5951bd9888a 10.116.214.66 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s2 Ready <none> 23m v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s1 Ready <none> 55m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s4 NotReady <none> 19m v1.20.5-34+40f5951bd9888a 10.116.214.223 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
$ lxc exec mk8s1 -- microk8s remove-node mk8s4
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s3 Ready <none> 23m v1.20.5-34+40f5951bd9888a 10.116.214.66 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s2 Ready <none> 26m v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s1 Ready <none> 57m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-czzts 1/1 Running 0 11m 10.1.238.132 mk8s1 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Running 0 11m 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-bxpj5 1/1 Running 0 11m 10.1.217.196 mk8s3 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 0 11m 10.1.115.132 mk8s2 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 0 11m 10.1.238.134 mk8s1 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 0 11m 10.1.238.133 mk8s1 <none> <none>
microbot-6456dc47db-zb4w8 1/1 Running 0 11m 10.1.236.132 mk8s4 <none> <none>
microbot-6456dc47db-76ltk 1/1 Running 0 11m 10.1.236.131 mk8s4 <none> <none>
microk8sコマンドでノードをremoveしても
すぐにはk8s側で検知されないようでmk8s4でpodが動いてる風に見えます
ただ暫くしてからもう一度podsを確認すると違うノードで新しく実行されるようになっていたのでそれほど問題は無さそうです。
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-czzts 1/1 Running 0 13m 10.1.238.132 mk8s1 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Running 0 13m 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-bxpj5 1/1 Running 0 13m 10.1.217.196 mk8s3 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 0 13m 10.1.115.132 mk8s2 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 0 13m 10.1.238.134 mk8s1 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 0 13m 10.1.238.133 mk8s1 <none> <none>
microbot-6456dc47db-qz48s 1/1 Running 0 77s 10.1.115.133 mk8s2 <none> <none>
microbot-6456dc47db-r6pgr 1/1 Running 0 77s 10.1.217.197 mk8s3 <none> <none>
クラスタ破壊
次はmk8s3のコンテナ自体をいきなり強制削除するとどうなるかやってみます。
$ lxc delete -f mk8s3
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s3 Ready <none> 33m v1.20.5-34+40f5951bd9888a 10.116.214.66 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s2 Ready <none> 36m v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s1 Ready <none> 67m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s2 Ready <none> 36m v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s1 Ready <none> 67m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s3 NotReady <none> 34m v1.20.5-34+40f5951bd9888a 10.116.214.66 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
すぐには検知されませんでしたがちょっと時間をおいてからノードを確認するとNotReady状態に移行していました
ただノード情報は残り続けるので削除しないといけません今回はleaveせずにノードを削除したので--forceが必要になります。
$ lxc exec mk8s1 -- microk8s remove-node mk8s3 --force
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s2 Ready <none> 49m v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s1 Ready <none> 80m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-czzts 1/1 Running 0 35m 10.1.238.132 mk8s1 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Running 0 35m 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 0 35m 10.1.115.132 mk8s2 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 0 35m 10.1.238.134 mk8s1 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 0 35m 10.1.238.133 mk8s1 <none> <none>
microbot-6456dc47db-qz48s 1/1 Running 0 22m 10.1.115.133 mk8s2 <none> <none>
microbot-6456dc47db-r6pgr 1/1 Terminating 0 22m 10.1.217.197 mk8s3 <none> <none>
microbot-6456dc47db-bxpj5 1/1 Terminating 0 35m 10.1.217.196 mk8s3 <none> <none>
microbot-6456dc47db-qbcm5 1/1 Running 0 8m11s 10.1.115.134 mk8s2 <none> <none>
microbot-6456dc47db-p5m7x 1/1 Running 0 8m11s 10.1.115.135 mk8s2 <none> <none>
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-czzts 1/1 Running 0 35m 10.1.238.132 mk8s1 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Running 0 35m 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 0 35m 10.1.115.132 mk8s2 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 0 35m 10.1.238.134 mk8s1 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 0 35m 10.1.238.133 mk8s1 <none> <none>
microbot-6456dc47db-qz48s 1/1 Running 0 23m 10.1.115.133 mk8s2 <none> <none>
microbot-6456dc47db-qbcm5 1/1 Running 0 8m39s 10.1.115.134 mk8s2 <none> <none>
microbot-6456dc47db-p5m7x 1/1 Running 0 8m39s 10.1.115.135 mk8s2 <none> <none>
podに関してはノード情報が残ってる間はずっとTerminatingで残りそうですねノード情報を削除してしばらく待つとTerminatingの行が消えました。
ノード再起動
急な再起動が入るとどうなるかやってみます
$ lxc restart mk8s1
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-p2kmg 1/1 Running 0 46m 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 0 46m 10.1.115.132 mk8s2 <none> <none>
microbot-6456dc47db-qz48s 1/1 Running 0 34m 10.1.115.133 mk8s2 <none> <none>
microbot-6456dc47db-qbcm5 1/1 Running 0 19m 10.1.115.134 mk8s2 <none> <none>
microbot-6456dc47db-p5m7x 1/1 Running 0 19m 10.1.115.135 mk8s2 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 1 46m 10.1.238.136 mk8s1 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 1 46m 10.1.238.138 mk8s1 <none> <none>
microbot-6456dc47db-czzts 1/1 Running 1 46m 10.1.238.137 mk8s1 <none> <none>
何事も無かったかのように復旧しましたがPodのRESTARTSが1になってますね
取り外したノードの再追加
最初に外したノードを再度追加してみます。
クラスタを組んだときと同じ手順で問題無さそうでした
$ lxc exec mk8s1 -- microk8s add-node | tail -n1 | xargs lxc exec mk8s4 --
Contacting cluster at 10.116.214.88
Waiting for this node to finish joining the cluster. ..
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s4 Ready <none> 25m v1.20.5-34+40f5951bd9888a 10.116.214.223 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s2 Ready <none> 94m v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s1 Ready <none> 125m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-p2kmg 1/1 Running 0 80m 10.1.115.131 mk8s2 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 0 80m 10.1.115.132 mk8s2 <none> <none>
microbot-6456dc47db-qz48s 1/1 Running 0 67m 10.1.115.133 mk8s2 <none> <none>
microbot-6456dc47db-qbcm5 1/1 Running 0 53m 10.1.115.134 mk8s2 <none> <none>
microbot-6456dc47db-p5m7x 1/1 Running 0 53m 10.1.115.135 mk8s2 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 1 80m 10.1.238.136 mk8s1 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 1 80m 10.1.238.138 mk8s1 <none> <none>
microbot-6456dc47db-czzts 1/1 Running 1 80m 10.1.238.137 mk8s1 <none> <none>
全てのノードを停止してから再開するとどうなるか
興味本位ですが一旦全て停止して再起動してみました
$ lxc stop mk8s{1,2,4}
$ lxc list
+-------+---------+------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------+---------+------+------+-----------+-----------+
| mk8s1 | STOPPED | | | CONTAINER | 0 |
+-------+---------+------+------+-----------+-----------+
| mk8s2 | STOPPED | | | CONTAINER | 0 |
+-------+---------+------+------+-----------+-----------+
| mk8s4 | STOPPED | | | CONTAINER | 0 |
+-------+---------+------+------+-----------+-----------+
$ lxc start mk8s{1,2,4}
$ lxc exec mk8s4 -- microk8s status --wait-ready | head -n4
microk8s is running
high-availability: yes
datastore master nodes: 10.116.214.88:19001 10.116.214.195:19001 10.116.214.223:19001
datastore standby nodes: none
$ lxc exec mk8s1 -- kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mk8s1 NotReady <none> 132m v1.20.5-34+40f5951bd9888a 10.116.214.88 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s4 NotReady <none> 32m v1.20.5-34+40f5951bd9888a 10.116.214.223 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
mk8s2 NotReady <none> 101m v1.20.5-34+40f5951bd9888a 10.116.214.195 <none> Ubuntu 20.04.2 LTS 5.4.0-71-generic containerd://1.3.7
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-wx77v 0/1 Unknown 1 87m <none> mk8s1 <none> <none>
microbot-6456dc47db-czzts 1/1 Running 2 87m 10.1.238.140 mk8s1 <none> <none>
microbot-6456dc47db-qz48s 0/1 Unknown 0 75m <none> mk8s2 <none> <none>
microbot-6456dc47db-p5m7x 0/1 Unknown 0 60m <none> mk8s2 <none> <none>
microbot-6456dc47db-p2kmg 0/1 Unknown 0 87m <none> mk8s2 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 2 87m 10.1.238.141 mk8s1 <none> <none>
microbot-6456dc47db-qbcm5 0/1 Unknown 0 60m <none> mk8s2 <none> <none>
microbot-6456dc47db-zkgj8 0/1 Unknown 0 87m <none> mk8s2 <none> <none>
$ lxc exec mk8s1 -- kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
microbot-6456dc47db-czzts 1/1 Running 2 88m 10.1.238.140 mk8s1 <none> <none>
microbot-6456dc47db-5kpj2 1/1 Running 2 87m 10.1.238.141 mk8s1 <none> <none>
microbot-6456dc47db-zkgj8 1/1 Running 1 87m 10.1.115.140 mk8s2 <none> <none>
microbot-6456dc47db-qbcm5 1/1 Running 1 60m 10.1.115.139 mk8s2 <none> <none>
microbot-6456dc47db-p5m7x 1/1 Running 1 60m 10.1.115.137 mk8s2 <none> <none>
microbot-6456dc47db-p2kmg 1/1 Running 1 88m 10.1.115.138 mk8s2 <none> <none>
microbot-6456dc47db-qz48s 1/1 Running 1 75m 10.1.115.136 mk8s2 <none> <none>
microbot-6456dc47db-wx77v 1/1 Running 2 87m 10.1.238.142 mk8s1 <none> <none>
何事も無かったかのように復旧しました🤗
今回は一旦ここまで
前々から興味がありつつもクラスタ組むのが面倒くさそうなのと直接入れるのが嫌だったので敬遠していたk8sでしたがLXDで動くMicroK8sの存在を知ったので触り始めてみました。
独習するにあたりZennのscrap機能も初めて使ってみたのですがいいですねこれラバーダッキング法ってこんな感じなんでしょうか。
これからも独習を進めて知見が貯まったら記事にして残していきたいと思います。
しゃみしゃっきり〜
P.S.
私の仕事は平成初期のレガシー開発がそのまま続いてるような仕事なので使うことは無いでしょうが使い捨ての派遣社員という職業柄いつ文明開化した現場に島流しされるかもわかりません
何も勉強してない状態でそんな所行ったらきっと
「無駄に歳食ったせいで単金だけ肥大化した無能ロートルじじい」
とか絶対言われると思います
というか言われてる人よく見ますしね
自分の経験だけで言うのもなんですがSESで複数人セットで送り込まれてくる時の現場責任者的な立場につく人やフリーランスで職務経歴書が数ヶ月単位で転々としてる人に多い気がします。。。
自分が手を動かすこと無く声だけでかくて部下を怒鳴り散らしてた人は
「俺は嫌われるのが仕事なんだよ」
ってキメ顔で言ってましたがあれが私の上司ならサクッと逃げてますね。
なので終わった技術と共に沈没しないように興味のある技術に関してはキャッチアップして時間のあるときに学んでいきたいと思います。
プログラマなのに興味あることばかり調べてたら全くプログラミング方面の勉強出来てないのがヤバイ気はしてる🤔
Discussion