「Kubernetes完全ガイド」 を元に、Workloadsリソースの動作確認を行った結果をまとめます。
実行環境 / 参考情報
Kubernetes / kubectl version : 1.5.2
CentOS 7.4
※構築手順1、構築手順2
※Kubernetes Workloadsリソースについて
ReplicaSet
Podのレプリカを作成、維持するリソース
出典:「Kubernetes完全ガイド」
ReplicaSetの作成
sample-rs.yaml
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: sample-rs
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.12
ports:
- containerPort: 80
作成すると指定したレプリカ数(例:3つ)分、Podが起動
[root@master ~]# kubectl apply -f sample-rs.yaml
replicaset "sample-rs" created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
sample-rs-1n0r5 1/1 Running 0 47s
sample-rs-2kgsb 1/1 Running 0 47s
sample-rs-2q7z4 1/1 Running 0 47s
[root@master ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
sample-rs 3 3 3 1m
各レプリカは、耐障害性の観点でmaster / workerノードに分散されている事が確認出来る
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
sample-rs-1n0r5 1/1 Running 0 21m 172.17.0.2 worker
sample-rs-2kgsb 1/1 Running 0 21m 172.17.0.130 master
sample-rs-2q7z4 1/1 Running 0 21m 172.17.0.3 worker
Podの停止と自己修復
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
sample-rs-2kgsb 1/1 Running 0 28m 172.17.0.130 master
sample-rs-2q7z4 1/1 Running 0 28m 172.17.0.3 worker
sample-rs-pz8fv 1/1 Running 0 25s 172.17.0.131 master
Podを1台停止すると、ReplicaSetによりPodが新規に作成される
[root@master ~]# kubectl delete pod sample-rs-pz8fv
pod "sample-rs-pz8fv" deleted
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
sample-rs-2kgsb 1/1 Running 0 28m 172.17.0.130 master
sample-rs-2q7z4 1/1 Running 0 28m 172.17.0.3 worker
sample-rs-d91nh 1/1 Running 0 2s 172.17.0.2 worker
ReplicaSetのラベル
ReplicaSetは、Podのラベル名を監視してレプリカ数を維持
上の例ではspec.selector.matchLabels.appに、Podの監視対象のラベル名を指定 → 実際にコンテナに付与されるラベル名(例:spec.template.metadata.labels)と合わせないとエラーとなる
また、別のPod(ReplicaSet以外)で同じラベル名のものを立てた場合、ReplicaSetにより、新規に作成された同一ラベル名のPodが削除されてしまう。
ラベル名は固有なものを維持するようにする