【k8s】NodeとPodの関係

# お題
勘違いしていた表題について。

# NodeとPodの関係
k8sでの「Node」は、GKEでは「GCEインスタンス」になる。
GKEでクラスタ作成時に「クラスタサイズ」という形で確保する「Node」の数を決める。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/180599/ad9df4df-ec58-ea0a-4412-6a0aafaca020.png)

で、以下のように、たしかに「Node」が３つあることがわかる。

```
$ 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」。
レプリカ３つでDeployment作ると、以下のように「Pod」が３つできる。

```
$ 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」は入れ子の関係（それ自体は正しい）で「１Node」に対して「複数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」を５つに増やしてみると、こうなる。

```
$ 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」を１つに減らしてみる。

```
$ 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」は、どうなるのか？　インスタンス消える？
単純に、しばらく待てど、消えない。
「クラスタサイズ＝３」で指定されている以上、３を維持する？
クラスタオートスケーラーというのが関係しそう。
https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-autoscaler?hl=ja
![02.png](https://qiita-image-store.s3.amazonaws.com/0/180599/87b3668a-1ec9-64bf-d2f0-6ee3431b5857.png)

ここを「オン」にすれば、負荷に応じて「Node=GCEインスタンス」数が自動で増減するらしい。
（制限として「サービスの短い中断」の許容が必要らしいので注意。）