お題
勘違いしていた表題について。
NodeとPodの関係
k8sでの「Node」は、GKEでは「GCEインスタンス」になる。
GKEでクラスタ作成時に「クラスタサイズ」という形で確保する「Node」の数を決める。
で、以下のように、たしかに「Node」が3つあることがわかる。
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-my-cluster-1-min-default-pool-ea807978-8d2t Ready <none> 12h v1.9.7-gke.6
gke-my-cluster-1-min-default-pool-ea807978-hpqc Ready <none> 10h v1.9.7-gke.6
gke-my-cluster-1-min-default-pool-ea807978-ss7p Ready <none> 12h v1.9.7-gke.6
次に「Pod」。
レプリカ3つでDeployment作ると、以下のように「Pod」が3つできる。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
order1-deployment-bbd48b68f-cdhx2 1/1 Running 0 9s
order1-deployment-bbd48b68f-d9qt7 1/1 Running 0 9s
order1-deployment-bbd48b68f-jjg4x 1/1 Running 0 9s
「Node」と「Pod」は入れ子の関係(それ自体は正しい)で「1Node」に対して「複数Pod」が含まれる(これも見方によっては正しい)と考えていた。
勘違いポイントは、下記のように考えていたこと。(勝手に「Pod」を増殖させてた・・・)
【【【 ↓誤り↓ 】】】
+-------------------+ +-------------------+ +-------------------+
| [Node-8d2t] | | [Node-hpqc] | | [Node-ss7p] |
| | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
| | [Pod-cdhx2] | | | | [Pod-cdhx2] | | | | [Pod-cdhx2] | |
| | | | | | | | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
| +-------------+ | | +-------------+ | | +-------------+ |
| | [Pod-d9qt7] | | | | [Pod-d9qt7] | | | | [Pod-d9qt7] | |
| | | | | | | | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
| +-------------+ | | +-------------+ | | +-------------+ |
| | [Pod-jjg4x] | | | | [Pod-jjg4x] | | | | [Pod-jjg4x] | |
| | | | | | | | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
+-------------------+ +-------------------+ +-------------------+
【【【 ↓正解↓ 】】】
+-------------------+ +-------------------+ +-------------------+
| [Node-8d2t] | | [Node-hpqc] | | [Node-ss7p] |
| | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
| | [Pod-cdhx2] | | | | [Pod-d9qt7] | | | | [Pod-jjg4x] | |
| | | | | | | | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
+-------------------+ +-------------------+ +-------------------+
実際、「Pod」を格納「Node」付きで一覧表示すると明確にわかる。
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
order1-deployment-bbd48b68f-cdhx2 1/1 Running 0 57s 10.60.12.4 gke-my-cluster-1-min-default-pool-ea807978-8d2t
order1-deployment-bbd48b68f-d9qt7 1/1 Running 0 57s 10.60.13.8 gke-my-cluster-1-min-default-pool-ea807978-hpqc
order1-deployment-bbd48b68f-jjg4x 1/1 Running 0 57s 10.60.11.5 gke-my-cluster-1-min-default-pool-ea807978-ss7p
試しに「Pod」を5つに増やしてみると、こうなる。
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
order1-deployment-bbd48b68f-cdhx2 1/1 Running 0 2m 10.60.12.4 gke-my-cluster-1-min-default-pool-ea807978-8d2t
order1-deployment-bbd48b68f-d9qt7 1/1 Running 0 2m 10.60.13.8 gke-my-cluster-1-min-default-pool-ea807978-hpqc
order1-deployment-bbd48b68f-jjg4x 1/1 Running 0 2m 10.60.11.5 gke-my-cluster-1-min-default-pool-ea807978-ss7p
order1-deployment-bbd48b68f-lhvlx 1/1 Running 0 25s 10.60.12.5 gke-my-cluster-1-min-default-pool-ea807978-8d2t
order1-deployment-bbd48b68f-r2bkn 1/1 Running 0 25s 10.60.11.6 gke-my-cluster-1-min-default-pool-ea807978-ss7p
図で表すと、こうなる。(増えた分の「Pod」が適宜「Node」に割り当てられる。)
+-------------------+ +-------------------+ +-------------------+
| [Node-8d2t] | | [Node-hpqc] | | [Node-ss7p] |
| | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
| | [Pod-cdhx2] | | | | [Pod-d9qt7] | | | | [Pod-jjg4x] | |
| | | | | | | | | | | |
| +-------------+ | | +-------------+ | | +-------------+ |
| +-------------+ | | | | +-------------+ |
| | [Pod-lhvlx] | | | | | | [Pod-r2bkn] | |
| | | | | | | | | |
| +-------------+ | | | | +-------------+ |
+-------------------+ +-------------------+ +-------------------+
今度は「Pod」を1つに減らしてみる。
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
order1-deployment-bbd48b68f-d9qt7 1/1 Running 0 46m 10.60.13.8 gke-my-cluster-1-min-default-pool-ea807978-hpqc
図で表すと、こうなる。
+-------------------+ +-------------------+ +-------------------+
| [Node-8d2t] | | [Node-hpqc] | | [Node-ss7p] |
| | | | | |
| | | +-------------+ | | |
| | | | [Pod-d9qt7] | | | |
| | | | | | | |
| | | +-------------+ | | |
+-------------------+ +-------------------+ +-------------------+
「Pod」がなくなった「Node」は、どうなるのか? インスタンス消える?
単純に、しばらく待てど、消えない。
「クラスタサイズ=3」で指定されている以上、3を維持する?
クラスタオートスケーラーというのが関係しそう。
https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler?hl=ja
ここを「オン」にすれば、負荷に応じて「Node=GCEインスタンス」数が自動で増減するらしい。
(制限として「サービスの短い中断」の許容が必要らしいので注意。)