kubernetesを学ぶ～その６：デプロイメントコントローラ～

# 目次
1. 前回のあらすじ
2. デプロイメントコントローラ
    1. スケール機能
    2. ロールアウト機能
    3. ロールバック機能
    4. 自己回復機能
3. 用語
4. あとがき

# 前回のあらすじ
　前回の[kubernetesを学ぶ～その５～](https://qiita.com/shintoshin_se/items/4faae38fbfdad797f8fd)は、ヘルスチェックについて学んだ。ノード内に限った話であるので、機能がどの範囲であり、どういったチェックができるのか把握する必要があるのと同時に、「あー他（ノードとか）にも同じような機能があるんだろうなー。学ぶことやっぱり多いなー」と長旅の覚悟を決めた回でした。

# デプロイメントコントローラ
　[kubernetesを学ぶ～その４～](https://qiita.com/shintoshin_se/items/361905156b20eb275e91)の時に、ReplicaSetについて少し触れましたが、その他にも機能があるのでこの機会に押させておきたいと思います。

デプロイメントコントローラは単独で動作するのではなくて、レプリカセットと連携してポッドを制御します。イメージは↓こんな感じかな。
![04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759548/5fa0278e-22df-ff26-2ec5-34f48843e09a.png)

```:各ノードで動作するコンポーネントリスト
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get pods --all-namespaces --sort-by=.spec.nodeName -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name,IMAGE:.spec.containers[0].image
NODE     NAME                                         IMAGE
master   dashboard-metrics-scraper-69fcc6d9df-jrcn2   kubernetesui/metrics-scraper:v1.0.1
master   cluster-admin-74867ffb65-k6txp               kubernetesui/dashboard:v2.0.0-beta6
master   kube-proxy-75l8x                             k8s.gcr.io/kube-proxy:v1.14.10
master   kube-scheduler-master                        k8s.gcr.io/kube-scheduler:v1.14.10
master   kube-flannel-ds-amd64-s7kgq                  quay.io/coreos/flannel:v0.10.0-amd64
master   coredns-6dcc67dcbc-fc5tf                     k8s.gcr.io/coredns:1.3.1
master   coredns-6dcc67dcbc-s7bxw                     k8s.gcr.io/coredns:1.3.1
master   etcd-master                                  k8s.gcr.io/etcd:3.3.10
master   kube-apiserver-master                        k8s.gcr.io/kube-apiserver:v1.14.10
master   kube-controller-manager-master               k8s.gcr.io/kube-controller-manager:v1.14.10
node1    kube-flannel-ds-amd64-cc5z6                  quay.io/coreos/flannel:v0.10.0-amd64
node1    metrics-server-586b95bc44-6xd77              k8s.gcr.io/metrics-server-amd64:v0.3.6
node1    web-deploy-6b5f67b747-vs924                  nginx:latest
node1    web-deploy-6b5f67b747-nprjn                  nginx:latest
node1    web-deploy-6b5f67b747-mw6fl                  nginx:latest
node1    kube-proxy-sxd7h                             k8s.gcr.io/kube-proxy:v1.14.10
node2    kube-proxy-2z75j                             k8s.gcr.io/kube-proxy:v1.14.10
node2    kube-flannel-ds-amd64-mnjxq                  quay.io/coreos/flannel:v0.10.0-amd64
node2    web-deploy-6b5f67b747-5hqdb                  nginx:latest
node2    readiness-check                              nginx
```

その他の機能が、次の通りあるので概要と検証をしてみようと思います。

* スケール機能
* ロールアウト機能
* ロールバック機能
* 自己回復機能

## スケール機能
　こちらは何度もやっているスケール機能です。

```yml:環境用yml
apiVersion: apps/v1 
kind: Deployment
metadata: 
 name: web-deploy  #デプロイメントの名前
spec: 
 replicas: 4       #ポッドの数
 selector:         #レプリカセットとポッドを紐付けるためのラベル定義
  matchLabels:     #一致した場合の条件　他にもmatchExpressionsがある
   app: web        #ラベル名
 template:         #↓ポッドの定義
  metadata:        
   labels: 
    app: web       #レプリカセットとポッドを紐つけるためのポッド側ラベル名
  spec: 
   containers: 
   - name: nginx
     image: nginx:latest
```

※マニフェストでの検証は何度もやっているので省略。

```:kubectlで増強する場合

現状確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po,deploy
NAME                              READY   STATUS    RESTARTS   AGE
pod/readiness-check               1/1     Running   0          4d1h
pod/web-deploy-6b5f67b747-5hqdb   1/1     Running   0          62m
pod/web-deploy-6b5f67b747-mw6fl   1/1     Running   0          59m
pod/web-deploy-6b5f67b747-nprjn   1/1     Running   0          62m
pod/web-deploy-6b5f67b747-vs924   1/1     Running   0          62m

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/web-deploy   4/4     4            4           62m

４→２へ変更
D:\Repository\kubernetes\vagrant-kubernetes>kubectl scale --replicas=2 deployment.extensions/web-deploy
deployment.extensions/web-deploy scaled

確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po,deploy
NAME                              READY   STATUS    RESTARTS   AGE
pod/readiness-check               1/1     Running   0          4d1h
pod/web-deploy-6b5f67b747-5hqdb   1/1     Running   0          64m
pod/web-deploy-6b5f67b747-vs924   1/1     Running   0          64m

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/web-deploy   2/2     2            2           64m
```

## ロールアウト機能
　ロールアウトはコンテナの更新を意味しています。ロールアウトをするには、変更したイメージをビルドした後、リポジトリに登録する必要があります。登録したリポジトリ名とタグ名をマニフェストに記載して、kubectl apply -f で適用します。
　しかし、稼働中であればシステムを止めてアプリの更新！って中々出来ないです。得にデータベースが絡んだり、キャッシュを管理したりと要検討が必要です。とはいえ、軽微な改修などでシステム止めずにできないかなーと思うのですが、K8s出来るそうです。やった！

　どうやるか？ロールアウトを徐々に進めていく方法です。クライアントからのリクエストに対処するポッドと停止して作り変えるポッドの数を指定して徐々に入れ替えて、これを繰り返して最終的にすべて新しくするというやり方です。

上の方で書いたマニフェストのnginxのバージョンを変更した２つのファイルを用意しました。

```:ファイル比較
D:\Repository\kubernetes\vagrant-kubernetes>fc deployment_old.yml deployment_new.yml
ファイル deployment_old.yml と DEPLOYMENT_NEW.YML を比較しています
***** deployment_old.yml
   - name: nginx
     image: nginx:1.17
***** DEPLOYMENT_NEW.YML
   - name: nginx
     image: nginx:1.18
*****
```

検証してみましょう。

```
oldを適用
D:\Repository\kubernetes\vagrant-kubernetes>kubectl apply -f deployment_old.yml
deployment.apps/web-deploy configured

確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get deploy
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
web-deploy   3/4     2            3           110m

詳細確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl describe deploy
Name:                   web-deploy
Namespace:              default
CreationTimestamp:      Fri, 12 Feb 2021 14:01:48 +0900
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 2
Selector:               app=web
Replicas:               4 desired | 2 updated | 5 total | 3 available | 2 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=web
  Containers:
   nginx:
    Image:        nginx:1.17
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  web-deploy-6b5f67b747 (3/3 replicas created)
NewReplicaSet:   web-deploy-69987c56dc (2/2 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  47m   deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 2
  Normal  ScalingReplicaSet  30s   deployment-controller  Scaled up replica set web-deploy-6b5f67b747 to 4
  Normal  ScalingReplicaSet  29s   deployment-controller  Scaled up replica set web-deploy-69987c56dc to 1
  Normal  ScalingReplicaSet  29s   deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 3
  Normal  ScalingReplicaSet  29s   deployment-controller  Scaled up replica set web-deploy-69987c56dc to 2
```

完全に完了していないけど、説明メモ。
describeの結果にある、

```
RollingUpdateStrategy:  25% max unavailable, 25% max surge
```

これが、ポッド最大２５％停止を許容しまーす。最大２５％の稼働超過も許容しまーす！ということらしい。

なので、replicas=4にしていたので
ポッド最大停止許容数＝4-(4*0.25)＝3.00 ということで最小で３個ポッドを維持
ポッド稼働超過許容数＝4+(4*0.25)＝5.00 ということで最大で５個ポッドを維持
をしながら切り替えを進めるのですね。

```
新しいマニフェスト適用
D:\Repository\kubernetes\vagrant-kubernetes>kubectl apply -f deployment_new.yml
deployment.apps/web-deploy configured

詳細
D:\Repository\kubernetes\vagrant-kubernetes>kubectl describe deploy
Name:                   web-deploy
Namespace:              default
CreationTimestamp:      Fri, 12 Feb 2021 14:01:48 +0900
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               app=web
Replicas:               4 desired | 2 updated | 5 total | 3 available | 2 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=web
  Containers:
   nginx:
    Image:        nginx:1.18
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  web-deploy-69987c56dc (3/3 replicas created)
NewReplicaSet:   web-deploy-5c87b8bff6 (2/2 replicas created)
Events:
  Type    Reason             Age                From                   Message
  ----    ------             ----               ----                   -------
  Normal  ScalingReplicaSet  98s                deployment-controller  Scaled up replica set web-deploy-6b5f67b747 to 4
  Normal  ScalingReplicaSet  97s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 1
  Normal  ScalingReplicaSet  97s                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 3
  Normal  ScalingReplicaSet  97s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 2
  Normal  ScalingReplicaSet  46s (x2 over 48m)  deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 2
  Normal  ScalingReplicaSet  46s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 3
  Normal  ScalingReplicaSet  41s                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 1
  Normal  ScalingReplicaSet  41s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 4
  Normal  ScalingReplicaSet  37s                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 0
  Normal  ScalingReplicaSet  3s (x3 over 3s)    deployment-controller  (combined from similar events): Scaled up replica set web-deploy-5c87b8bff6 to 2

確認　最大５個（readiness-checkは無視、別検証で使ったポッド）まで
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po
NAME                          READY   STATUS              RESTARTS   AGE
readiness-check               1/1     Running             0          4d2h
web-deploy-5c87b8bff6-ks6qz   0/1     ContainerCreating   0          19s
web-deploy-5c87b8bff6-l9jxh   0/1     ContainerCreating   0          19s
web-deploy-69987c56dc-2sxj2   1/1     Running             0          62s
web-deploy-69987c56dc-drssl   1/1     Running             0          113s
web-deploy-69987c56dc-qrhr5   1/1     Running             0          113s

確認　稼働中を最低３つ守りつつ切り替え中
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po
NAME                          READY   STATUS              RESTARTS   AGE
readiness-check               1/1     Running             0          4d2h
web-deploy-5c87b8bff6-4mlqg   1/1     Running             0          7s
web-deploy-5c87b8bff6-ks6qz   1/1     Running             0          30s
web-deploy-5c87b8bff6-l9jxh   1/1     Running             0          30s
web-deploy-5c87b8bff6-m9vsz   0/1     ContainerCreating   0          4s
web-deploy-69987c56dc-drssl   0/1     Terminating         0          2m4s
web-deploy-69987c56dc-qrhr5   0/1     Terminating         0          2m4s

無事切り替わり
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
readiness-check               1/1     Running   0          4d2h
web-deploy-5c87b8bff6-4mlqg   1/1     Running   0          15s
web-deploy-5c87b8bff6-ks6qz   1/1     Running   0          38s
web-deploy-5c87b8bff6-l9jxh   1/1     Running   0          38s
web-deploy-5c87b8bff6-m9vsz   1/1     Running   0          12s

詳細
D:\Repository\kubernetes\vagrant-kubernetes>kubectl describe deploy web-deploy
Name:                   web-deploy
Namespace:              default
CreationTimestamp:      Fri, 12 Feb 2021 14:01:48 +0900
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               app=web
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=web
  Containers:
   nginx:
    Image:        nginx:1.18
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   web-deploy-5c87b8bff6 (4/4 replicas created)
Events:
  Type    Reason             Age                  From                   Message
  ----    ------             ----                 ----                   -------
  Normal  ScalingReplicaSet  3m23s                deployment-controller  Scaled up replica set web-deploy-6b5f67b747 to 4
  Normal  ScalingReplicaSet  3m22s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 1
  Normal  ScalingReplicaSet  3m22s                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 3
  Normal  ScalingReplicaSet  3m22s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 2
  Normal  ScalingReplicaSet  2m31s (x2 over 50m)  deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 2
  Normal  ScalingReplicaSet  2m31s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 3
  Normal  ScalingReplicaSet  2m26s                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 1
  Normal  ScalingReplicaSet  2m26s                deployment-controller  Scaled up replica set web-deploy-69987c56dc to 4
  Normal  ScalingReplicaSet  2m22s                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 0
  Normal  ScalingReplicaSet  79s (x8 over 108s)   deployment-controller  (combined from similar events): Scaled down replica set web-deploy-69987c56dc to 0
```

ポッドには終了要求が送られているのでクライアントからのリクエストを返さずに終わる可能性が高いです。なので、アプリケーションの設計ではステートレスな設計が必須ですね。キャッシュを別に保管するとか。

## ロールバック機能
　新しくリリースした！！って後に、バグやんけ！！！切り戻ししないと！！という時、いつも吐きそうになります。そんな時に、簡単に元に戻せたらなーって思うのですが、そんな機能があるそうです。まじか！
　ロールバック機能はロールアウト前のコンテナへ戻すためにポッドを入れ替えることとあります。ロールアウトと同じくクライアントからの要求に答えながら戻していく機能です。データベースのテーブル構造が変わったりする場合は別途検討が必要ですが。何度も言うけど。

やってみよう。

```:もどす
これだけ！
D:\Repository\kubernetes\vagrant-kubernetes>kubectl rollout undo deployment web-deploy
deployment.extensions/web-deploy rolled back

確認（ポッドを３個稼働は維持していますね）
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po
NAME                          READY   STATUS              RESTARTS   AGE
readiness-check               1/1     Running             0          4d2h
web-deploy-5c87b8bff6-4mlqg   1/1     Terminating         0          31m
web-deploy-5c87b8bff6-ks6qz   1/1     Terminating         0          31m
web-deploy-5c87b8bff6-l9jxh   1/1     Running             0          31m
web-deploy-69987c56dc-2ksnw   1/1     Running             0          6s
web-deploy-69987c56dc-b5dxf   0/1     ContainerCreating   0          0s
web-deploy-69987c56dc-h7vkk   1/1     Running             0          6s
web-deploy-69987c56dc-ns8np   0/1     ContainerCreating   0          0s

確認
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po
NAME                          READY   STATUS    RESTARTS   AGE
readiness-check               1/1     Running   0          4d2h
web-deploy-69987c56dc-2ksnw   1/1     Running   0          19s
web-deploy-69987c56dc-b5dxf   1/1     Running   0          13s
web-deploy-69987c56dc-h7vkk   1/1     Running   0          19s
web-deploy-69987c56dc-ns8np   1/1     Running   0          13s

詳細（バージョンもどってる）
D:\Repository\kubernetes\vagrant-kubernetes>kubectl describe deploy
Name:                   web-deploy
Namespace:              default
CreationTimestamp:      Fri, 12 Feb 2021 14:01:48 +0900
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 4
Selector:               app=web
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=web
  Containers:
   nginx:
    Image:        nginx:1.17
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   web-deploy-69987c56dc (4/4 replicas created)
Events:
  Type    Reason             Age                From                   Message
  ----    ------             ----               ----                   -------
  Normal  ScalingReplicaSet  33m                deployment-controller  Scaled up replica set web-deploy-6b5f67b747 to 4
  Normal  ScalingReplicaSet  33m                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 3
  Normal  ScalingReplicaSet  32m (x2 over 79m)  deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 2
  Normal  ScalingReplicaSet  32m                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 1
  Normal  ScalingReplicaSet  32m                deployment-controller  Scaled down replica set web-deploy-6b5f67b747 to 0
  Normal  ScalingReplicaSet  31m (x8 over 31m)  deployment-controller  (combined from similar events): Scaled down replica set web-deploy-69987c56dc to 0
  Normal  ScalingReplicaSet  23s (x2 over 33m)  deployment-controller  Scaled up replica set web-deploy-69987c56dc to 2
  Normal  ScalingReplicaSet  23s                deployment-controller  Scaled down replica set web-deploy-5c87b8bff6 to 3
  Normal  ScalingReplicaSet  23s (x2 over 33m)  deployment-controller  Scaled up replica set web-deploy-69987c56dc to 1
  Normal  ScalingReplicaSet  17s (x2 over 32m)  deployment-controller  Scaled up replica set web-deploy-69987c56dc to 4
  Normal  ScalingReplicaSet  17s (x2 over 32m)  deployment-controller  Scaled up replica set web-deploy-69987c56dc to 3
  Normal  ScalingReplicaSet  17s                deployment-controller  Scaled down replica set web-deploy-5c87b8bff6 to 2
  Normal  ScalingReplicaSet  17s                deployment-controller  Scaled down replica set web-deploy-5c87b8bff6 to 1
  Normal  ScalingReplicaSet  12s                deployment-controller  Scaled down replica set web-deploy-5c87b8bff6 to 0
```

ちなみにデフォルトで戻せる履歴は１０個までです。
>kubectl rollout history deploy デプロイメントコントローラ名

で確認できます。

## 自己回復機能
　デプロイメントコントローラはポッドが喪失した場合に自己回復機能があります。ハード障害でノードが死亡した時かなと思います。
ノードを停止させてポッドがどうなっていくのか確認します。

```
現状
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   10d   v1.14.10
node1    Ready    <none>   10d   v1.14.10
node2    Ready    <none>   10d   v1.14.10

D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po -o wide
NAME                          READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
readiness-check               1/1     Running   0          4d3h   10.244.2.29   node2   <none>           <none>
web-deploy-69987c56dc-2ksnw   1/1     Running   0          16m    10.244.2.36   node2   <none>           <none>
web-deploy-69987c56dc-b5dxf   1/1     Running   0          16m    10.244.1.24   node1   <none>           <none>
web-deploy-69987c56dc-h7vkk   1/1     Running   0          16m    10.244.1.23   node1   <none>           <none>
web-deploy-69987c56dc-ns8np   1/1     Running   0          16m    10.244.2.37   node2   <none>           <none>

node2を停止
D:\Repository\kubernetes\vagrant-kubernetes>vagrant halt node2
==> node2: Attempting graceful shutdown of VM...

少し時間を空ける
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get node
NAME     STATUS     ROLES    AGE   VERSION
master   Ready      master   10d   v1.14.10
node1    Ready      <none>   10d   v1.14.10
node2    NotReady   <none>   10d   v1.14.10

node1で稼働　Terminatingのままだった。Statusがunknownになると思っていたのだが。
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po -o wide
NAME                          READY   STATUS        RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
readiness-check               1/1     Terminating   0          4d3h   10.244.2.29   node2   <none>           <none>
web-deploy-69987c56dc-2ksnw   1/1     Terminating   0          36m    10.244.2.36   node2   <none>           <none>
web-deploy-69987c56dc-6h99r   1/1     Running       0          12m    10.244.1.25   node1   <none>           <none>
web-deploy-69987c56dc-b5dxf   1/1     Running       0          36m    10.244.1.24   node1   <none>           <none>
web-deploy-69987c56dc-h7vkk   1/1     Running       0          36m    10.244.1.23   node1   <none>           <none>
web-deploy-69987c56dc-ns8np   1/1     Terminating   0          36m    10.244.2.37   node2   <none>           <none>
web-deploy-69987c56dc-t6wn8   1/1     Running       0          12m    10.244.1.26   node1   <none>           <none>

node2起動
D:\Repository\kubernetes\vagrant-kubernetes>vagrant up node2

通信したので情報が更新された。Terminatingのポッドは消えましたね。
D:\Repository\kubernetes\vagrant-kubernetes>kubectl get po -o wide
NAME                          READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
web-deploy-69987c56dc-6h99r   1/1     Running   0          17m   10.244.1.25   node1   <none>           <none>
web-deploy-69987c56dc-b5dxf   1/1     Running   0          40m   10.244.1.24   node1   <none>           <none>
web-deploy-69987c56dc-h7vkk   1/1     Running   0          40m   10.244.1.23   node1   <none>           <none>
web-deploy-69987c56dc-t6wn8   1/1     Running   0          17m   10.244.1.26   node1   <none>           <none>
```
node1で指定したポッド数4が起動していました。
ゆっくり時間をかけて起動していたので不安定な状態を防ぐためかなと思います。

# 用語

・ステートレス
　サーバがクライアントのセッション状態を保持しないこと。

# あとがき
　手動でポッドの数を変えたりと試しては見たものの、放ったらかしでも安定してポッドの稼働数確保ができるのはいいのですが、システムを安定させるという意味では他にキャッシュやDBなど検討することがあるので頭いたすです。
　次回は、DBを絡めた構成を検証してみようかな。

## 参考文献
[15Stepで習得Dockerから入るKubernetes](https://www.amazon.co.jp/dp/4865941614)
[API OVERVIEW](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#daemonset-v1-apps)