背景
個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。
その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。
引用や参考と今回の自分の勉強用の書籍の紹介
技術評論社『Kubernetes実践入門』のサンプルコード
Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方
実際の学びについて
書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
この章の勉強は本当に書籍の写経が主になるかもしれません・・・
勉強開始
流れを理解する
OwnerRefference によるオブジェクトのガベージコレクションの仕組み
- 親オブジェクトは子オブジェクトを管理している
- 親が削除されたら子オブジェクトも削除される
- 紐付けは「OwerRefference」によって行われている
-
.meta.owerRefferences
の値から仕組みを提供している -
.meta.owerRefferences
が空の場合はガベージコレクションの対象にならない
-
$ kubectl get rs dive-mattermost-preview-6b76f7944 -o template --template='{{.metadata.owerRefferences}}'
<no value>
$ kubectl get rs dive-mattermost-preview-6b76f7944 -o template --template='{{.metadata.ownerReferences}}'
[map[apiVersion:apps/v1 blockOwnerDeletion:true controller:true kind:Deployment name:dive-mattermost-preview uid:2f365e99-83d3-46d0-8233-8b1d7d25dd9d]]
写経あるある(個人的)
typo でした。 「owner」の「n」に目が行かなかった・・・
- .metadata.owerRefferences
+ .metadata.ownerRefferences
deployment のみを削除する
$ kubectl delete deploy dive-mattermost-preview --cascade=false -v=8
0418 13:46:19.992556 13154 request.go:947] Request Body: {"propagationPolicy":"Orphan"}
I0418 13:46:19.992653 13154 round_trippers.go:416] DELETE https://kubernetes.docker.internal:6443/apis/extensions/v1beta1/namespaces/default/deployments/dive-mattermost-preview
deployment.extensions "dive-mattermost-preview" deleted
$ kubectl get rs dive-mattermost-preview-6b76f7944 -o template --template='{{.metadata.ownerReferences}}'
<no value>
$ kubectl get deploy,rs,po
NAME DESIRED CURRENT READY AGE
replicaset.extensions/dive-mattermost-preview-6b76f7944 1 1 1 16m
NAME READY STATUS RESTARTS AGE
pod/dive-mattermost-preview-6b76f7944-v62jk 1/1 Running 0 16m
$ kubectl get po dive-mattermost-preview-6b76f7944-v62jk -o template --template='{{.metadata.ownerReferences}}'
[map[apiVersion:apps/v1 blockOwnerDeletion:true controller:true kind:ReplicaSet name:dive-mattermost-preview-6b76f7944 uid:48d4232f-ac4e-4452-80b8-d3d8d0a80007]]
ReplicaSet を通常通りに削除して Pod も一緒に削除されることを確認
$ kubectl delete rs dive-mattermost-preview-6b76f7944 -v=8
I0418 13:58:58.635110 13360 request.go:947] Request Body: {"propagationPolicy":"Background"}
I0418 13:58:58.635317 13360 round_trippers.go:416] DELETE https://kubernetes.docker.internal:6443/apis/extensions/v1beta1/namespaces/default/replicasets/dive-mattermost-preview-6b76f7944
replicaset.extensions "dive-mattermost-preview-6b76f7944" deleted
$ kubectl get deploy,rs,po
No resources found.
curl で kubernetes API を叩いてみる
$ kubectl get deploy,rs,pod
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.extensions/mattermost-preview 1/1 1 1 12s
NAME DESIRED CURRENT READY AGE
replicaset.extensions/mattermost-preview-78bc8686ff 1 1 1 12s
NAME READY STATUS RESTARTS AGE
pod/mattermost-preview-78bc8686ff-tt7wk 1/1 Running 0 12s
$ curl -X DELETE http://localhost:8001/apis/apps/v1/namespaces/default/deployments/mattermost-preview
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Success",
"details": {
"name": "mattermost-preview",
"group": "apps",
"kind": "deployments",
"uid": "17ac54a2-dd4e-4c07-ac37-4c4070db551d"
}
$kubectl get deploy,rs,pod
NAME READY STATUS RESTARTS AGE
pod/mattermost-preview-78bc8686ff-tt7wk 1/1 Terminating 0 5m5s
$ kubectl get deploy,rs,pod
No resources found.
ここは多分削除中の場合にコマンドを実行したら上の結果で、しばらくしてからコマンドを叩いたら下の結果となりました
確認補足(DashBoard)
Deploy 削除したときのダッシュボード
削除前
削除後
次は 3.4 章をやっていきます。
- アプリケーションのマニュフェストを書く の章から始めたいと思います
3.3章は Dockerfile 関連の話になっていて、そこは別な写経シリーズで勉強していきたいと思います。
- softwareDesign で連載記事があったのを思い出しました。
- 定期購読したいけどできないので、お小遣いで毎月書店で購入(何回か抜けてるかも)があるかもしれませんが第1回〜やっていきたいと思います。
最後に
今回は OwnerReference の仕組みを体感してみました。
書籍にも書いてあるとおり、Label で紐付けられていてちゃんと書籍を読んで、自分でコマンドを叩いて、現象としての結果が現れて、改めて結果を見返して納得しながらやれたと思います。