初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編パート2


背景

個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。

その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。

引用や参考と今回の自分の勉強用の書籍の紹介

技術評論社『Kubernetes実践入門』のサンプルコード
Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方

実際の学びについて

書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
この章の勉強は本当に書籍の写経が主になるかもしれません・・・

勉強開始

流れを理解する

kubectl edit で Deployment をスケールアウトし、調整ループの挙動を確認する

前回までの Deployment のレプリカ数を変更してどういう動きになるのかを確認していると思います。

$ kubectl edit deploy dive-mattermost-preview -v=6
〜〜 ファイルを編集 〜〜
I0416 21:11:36.616473   10158 round_trippers.go:438] GET https://kubernetes.docker.internal:6443/openapi/v2?timeout=32s 200 OK in 21 milliseconds
I0416 21:11:36.787119   10158 round_trippers.go:438] PATCH https://kubernetes.docker.internal:6443/apis/extensions/v1beta1/namespaces/default/deployments/dive-mattermost-preview 200 OK in 33 milliseconds

replicas を変更後のイベントを確認
Pod が作成されていることを確認

KIND         NAME                                       SOURCE                  REASON              MESSAGE
Deployment   dive-mattermost-preview.16064ba66c7717ec   deployment-controller   ScalingReplicaSet   Scaled up replica set dive-mattermost-preview-6b76f7944 to 2
ReplicaSet   dive-mattermost-preview-6b76f7944.16064ba676963f78   replicaset-controller   SuccessfulCreate    Created pod: dive-mattermost-preview-6b76f7944-ndfrv
Pod          dive-mattermost-preview-6b76f7944-ndfrv.16064ba67c1c6d28   default-scheduler       Scheduled           Successfully assigned default/dive-mattermost-preview-6b76f7944-ndfrv to docker-desktop
Pod          dive-mattermost-preview-6b76f7944-ndfrv.16064ba6cd721b28   kubelet                 Pulled              Container image "k8spracticalguide/mattermost-preview:4.10.2" already present on machine
Pod          dive-mattermost-preview-6b76f7944-ndfrv.16064ba6d5b0b920   kubelet                 Created             Created container mattermost-preview
Pod          dive-mattermost-preview-6b76f7944-ndfrv.16064ba6eb91e5e8   kubelet                 Started             Started container mattermost-preview

kubectl scale を使って ReplicaSet をスケールインし、セルフ・ヒーリングの挙動を確認する

現在の Pod 数を確認してみます。
これが kubectl scale コマンド後には変更するのを確認します。

$ kubectl get po -w | grep -e dive-mattermost -e NAME
NAME                                      READY   STATUS      RESTARTS   AGE
dive-mattermost-preview-6b76f7944-ndfrv   1/1     Running     0          7m26s
dive-mattermost-preview-6b76f7944-zbv99   1/1     Running     0          24h
$ kubectl get rs
NAME                                DESIRED   CURRENT   READY   AGE
dive-mattermost-preview-6b76f7944   2         2         2       24h
mattermost-preview-78bc8686ff       1         1         1       3d
my-deploy-76d698444c                3         3         3       6d1h
my-rs                               3         3         3       7d23h

$ kubectl get rs | grep dive-mattermost | awk '{print $1}'
dive-mattermost-preview-6b76f7944

$ kubectl scale rs $(kubectl get rs | grep dive-mattermost | awk '{print $1}') --replicas=1 -v=6 2>&1 | grep -e mattermost -e http
I0416 21:25:16.512779   10512 round_trippers.go:438] GET https://kubernetes.docker.internal:6443/apis/extensions/v1beta1/namespaces/default/replicasets/dive-mattermost-preview-6b76f7944 200 OK in 25 milliseconds
I0416 21:25:16.622778   10512 round_trippers.go:438] PUT https://kubernetes.docker.internal:6443/apis/extensions/v1beta1/namespaces/default/replicasets/dive-mattermost-preview-6b76f7944/scale 200 OK in 99 milliseconds
replicaset.extensions/dive-mattermost-preview-6b76f7944 scaled
$ kubectl get po -w | grep -e dive-mattermost -e NAME
NAME                                      READY   STATUS      RESTARTS   AGE
dive-mattermost-preview-6b76f7944-ndfrv   1/1     Running     0          7m26s
dive-mattermost-preview-6b76f7944-zbv99   1/1     Running     0          24h
dive-mattermost-preview-6b76f7944-ndfrv   1/1     Terminating   0          13m
dive-mattermost-preview-6b76f7944-7rtnv   0/1     Pending       0          0s
dive-mattermost-preview-6b76f7944-7rtnv   0/1     Pending       0          0s
dive-mattermost-preview-6b76f7944-7rtnv   0/1     ContainerCreating   0          0s
dive-mattermost-preview-6b76f7944-7rtnv   1/1     Running             0          3s
dive-mattermost-preview-6b76f7944-ndfrv   0/1     Terminating         0          14m
dive-mattermost-preview-6b76f7944-ndfrv   0/1     Terminating         0          14m
dive-mattermost-preview-6b76f7944-ndfrv   0/1     Terminating         0          14m
dive-mattermost-preview-6b76f7944-ndfrv   0/1     Terminating         0          14m

kubectl delete を使って Pod を削除し、セルフヒーリングの挙動を確認

Pod を削除してみて、その後 Pod の状態を確認し AGE の時間が直前だったらもとに戻っているはず

$ kubectl delete po --all -v=6 2>&1 | grep DELETE

I0416 21:33:17.794821   10594 round_trippers.go:438] DELETE https://kubernetes.docker.internal:6443/api/v1/namespaces/default/pods/dive-mattermost-preview-6b76f7944-7rtnv 200 OK in 58 milliseconds
I0416 21:33:17.955467   10594 round_trippers.go:438] DELETE https://kubernetes.docker.internal:6443/api/v1/namespaces/default/pods/dive-mattermost-preview-6b76f7944-zbv99 200 OK in 151 milliseconds
I0416 21:33:18.057367   10594 round_trippers.go:438] DELETE https://kubernetes.docker.internal:6443/api/v1/namespaces/default/pods/mattermost-preview-78bc8686ff-sx8ds 200 OK in 93 milliseconds

AGE が直後からになっていることを確認

# 実行前
$ kubectl get po | grep matter
dive-mattermost-preview-6b76f7944-7rtnv   1/1     Running     0          5m5s
dive-mattermost-preview-6b76f7944-zbv99   1/1     Running     0          24h
mattermost-preview-78bc8686ff-sx8ds       1/1     Running     0          3d

# 実行後
$ kubectl get po | grep matter
dive-mattermost-preview-6b76f7944-8fhr4   1/1     Running   0          93s
dive-mattermost-preview-6b76f7944-qn28g   1/1     Running   0          94s
mattermost-preview-78bc8686ff-wnkg7       1/1     Running   0          93s