今回は ReplicaSet を使って、クラスターの中で動かす Pod の数を維持する方法を見ていきます。ReplicaSet を使用すると、アプリケーションエラーや Node 障害時に Pod が停止していまった場合でも自動的に新しい Pod を立ち上げてくれるので非常に便利です。
前回までの環境を前提としています。-> https://qiita.com/komiyasa/items/e63c89859a5d37fe4f3a
マニフェストファイル作成
下記の様なマニフェストファイルを使用します。
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 を削除しておきましょう。
変更後のマニフェストファイルは以下になります。
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/