AKS / ReplicaSet で複数の Pod を管理する

今回は ReplicaSet を使って、クラスターの中で動かす Pod の数を維持する方法を見ていきます。ReplicaSet を使用すると、アプリケーションエラーや Node 障害時に Pod が停止していまった場合でも自動的に新しい Pod を立ち上げてくれるので非常に便利です。
前回までの環境を前提としています。-> https://qiita.com/komiyasa/items/e63c89859a5d37fe4f3a

#マニフェストファイル作成
下記の様なマニフェストファイルを使用します。

```replicasetsample.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: photoview-rs

spec:
  replicas: 5
  selector: 
    matchLabels:
      app: photoview

  template:
    metadata:
      labels:
        app: photoview
        env: prod

    spec:
      containers:
      - image: XXXXXXXXXXXXXXXXXXXXX.azurecr.io/photo-view:v1.0
        name: photoview-container
        ports:
          - containerPort: 80
```

マニフェストファイルの `kind: ReplicaSet` で作成する ReplicaSet を定義しています。その中の `replicas` の部分で常に動かす Pod の数を定めます。その下の `Templete` ではこれまで見てきたように、Pod を Temple から作成しています。Container は作成した ACR の値を代入します。

#Pod を作成する
`kubectl apply -f replicasetsample.yaml` を実行し、そのあとで作成された Pod を確認します。

```
$ kubectl get pod --show-labels
NAME                 READY   STATUS    RESTARTS   AGE   LABELS
photoview-rs-68nfv   1/1     Running   0          72s   app=photoview,env=prod
photoview-rs-9h6v7   1/1     Running   0          72s   app=photoview,env=prod
photoview-rs-gdcmd   1/1     Running   0          72s   app=photoview,env=prod
photoview-rs-n8hkt   1/1     Running   0          72s   app=photoview,env=prod
photoview-rs-wcj5s   1/1     Running   0          72s   app=photoview,env=prod
```

出力結果を確認すると、5つの Pod が作成されたのが分かります。これは ReplicaSet として定義をした Pod が作成された結果です。

#マニフェストファイルを変更して実行してみる。
先ほどは ReplicaSet で定義した Pod の数は5つでした。今回はマニフェストファイルで定義する Pod の数を 10 に定義します。※変更する前に `kubectl delete -f replicasetsample.yaml` を実行し作成した Pod を削除しておきましょう。
変更後のマニフェストファイルは以下になります。

```replicasetsample.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: photoview-rs

spec:
  replicas: 10
  selector: 
    matchLabels:
      app: photoview

  template:
    metadata:
      labels:
        app: photoview
        env: prod

    spec:
      containers:
      - image: XXXXXXXXXXXXXXXXXXXXX.azurecr.io/photo-view:v1.0
        name: photoview-container
        ports:
          - containerPort: 80
```

このマニフェストファイルを先ほどと同様に `kubectl apply -f replicasetsample.yaml` を実行し Pod を作成します。作成できたら、先ほどと同様に `kubectl get pod --show-label` にて Pod を確認します。

```
$ kubectl get pod --show-labels
NAME                 READY   STATUS    RESTARTS   AGE   LABELS
photoview-rs-6m2vx   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-7gjn2   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-7jr5b   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-c82ck   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-kcnpp   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-lw8ld   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-rg9lx   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-t5tpc   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-vvzmz   1/1     Running   0          7s    app=photoview,env=prod
photoview-rs-xb6cs   1/1     Running   0          7s    app=photoview,env=prod
```

マニフェストファイルで定義をした 10個の Pod が ReplicaSet としてデプロイされました。このようにして ReplicaSet を定義することで Node が不具合が起きた場合や Application に不具合が起きる場合に定義した Pod 数を保つことができるので非常に便利です。オーケストレーションの良さがだんだんわかってきました。

#参考
ReplicaSet
https://kubernetes.io/ja/docs/concepts/workloads/controllers/replicaset/