ReplicaSet

ReplicaSetとは

Podのレプリカを作成し、指定した数のPodを維持し続けるリソースです。

似たリソースにReplication Controllerがありますが、Replication Controllerの方が古い技術で今後はReplica Setに変わっていきます。

ReplicaSetの作成

1.ReplicaSetの定義ファイルの作成
ファイル名: rs-sample-1.yml
Podをレプリカ数3でスケールさせたReplicaSetを作成します。

apiVersion: apps/v1
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
          ports:
            - containerPort: 80

2.ReplicaSetの作成
コマンド: kubectl create -f 定義ファイル名
定義ファイルに定義されている情報をもとにReplicaSetを作成します。

$ kubectl create -f rs-sample-1.yml
replicaset.apps/sample-rs created

3.ReplicaSetの確認
コマンド: kubectl get replicasets -o wide
ReplicaSetの情報から3つのPodが起動していることが確認できます。
CURRENTがReplicaSetによって起動してたPodの数を示しています。

$ kubectl get replicaset -o wide
NAME        DESIRED   CURRENT   READY   AGE   CONTAINERS        IMAGES   SELECTOR
sample-rs   3         3         3       41s   nginx-container   nginx    app=sample-app

Podの一覧を確認してもreplicasで指定した通り、3つのPodが起動していることが確認できます。
Podが配置されているNODEについても2つのNODEに自動で分散されていることがわかります。

$ kubectl get pods -o wide
NAME              READY   STATUS    RESTARTS   AGE    IP            NODE                             NOMINATED NODE
sample-rs-7c4ww   1/1     Running   0          100s   10.244.1.14   yasuyuki03212c.mylabserver.com   <none>
sample-rs-b5nkf   1/1     Running   0          100s   10.244.1.13   yasuyuki03212c.mylabserver.com   <none>
sample-rs-trjwj   1/1     Running   0          100s   10.244.2.7    yasuyuki03213c.mylabserver.com   <none>
ReplicaSetで起動されたPodの名前は「ReplicaSet名」+ 「ランダムな文字列」となります。

セルフヒーリング

ReplicaSetは、NodeやPodに障害が発生した場合でも、Podがreplicasで指定された数を満たすように別ノードでPodを起動します。

1.Podの削除
Podを削除し、起動しているPod数を2にします。

$ kubectl delete pod sample-rs-7c4ww
pod "sample-rs-7c4ww" deleted

sample-rs-992lzがyasuyuki03213cで起動され、replicationsで指定した3つのPodが維持されます。

$ kubectl get pods -o wide
NAME              READY   STATUS    RESTARTS   AGE   IP            NODE                             NOMINATED NODE
sample-rs-992lz   1/1     Running   0          35s   10.244.2.8    yasuyuki03213c.mylabserver.com   <none>
sample-rs-b5nkf   1/1     Running   0          67m   10.244.1.13   yasuyuki03212c.mylabserver.com   <none>
sample-rs-trjwj   1/1     Running   0          67m   10.244.2.7    yasuyuki03213c.mylabserver.com   <none>

2.Nodeの停止
yasuyuki03213cを停止します。

# uname -n
yasuyuki03213c.mylabserver.com
# shutdown -h now
Connection to yasuyuki03213c.mylabserver.com closed by remote host.
Connection to yasuyuki03213c.mylabserver.com closed.

yasuyuki03212cでPodが起動され、replicationsで指定した3つのPodが維持されます。

$ kubectl get pods -o wide
NAME              READY   STATUS    RESTARTS   AGE   IP            NODE                             NOMINATED NODE
sample-rs-992lz   1/1     Unknown   0          17m   10.244.2.10   yasuyuki03213c.mylabserver.com   <none>
sample-rs-b5nkf   1/1     Running   0          83m   10.244.1.13   yasuyuki03212c.mylabserver.com   <none>
sample-rs-dcqrj   1/1     Running   0          39s   10.244.1.15   yasuyuki03212c.mylabserver.com   <none>
sample-rs-h2qb2   1/1     Running   0          39s   10.244.1.16   yasuyuki03212c.mylabserver.com   <none>
sample-rs-trjwj   1/1     Unknown   0          83m   10.244.2.9    yasuyuki03213c.mylabserver.com   <none>

スケーリング

ReplicaSetの設定を変更することで起動するPod数を変更することが可能です。
ReplicaSetの設定を変更する方法としては下記の2つの方法があります。
– 設定ファイルを書き換えて「kubectl apply -f」コマンドを実行する
– 「kubectl scale」コマンドを利用する

「kubectl scale」コマンドでPod数を変更しても設定ファイルには反映されませんので、設定ファイルを変更する方法がおすすめの方法となります。

1.設定ファイルを変更
ファイル名: rs-sample-2.yml
Podをレプリカ数5に変更します。

…
spec:
  replicas: 5
…

設定ファイルの適用
コマンド: kubectl apply -f 設定ファイル

$ kubectl apply -f rs-sample-2.yml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
replicaset.apps/sample-rs configured

ReplicaSetの情報から5つのPodが起動していることが確認できます。

$ kubectl get replicaset -o wide
NAME        DESIRED   CURRENT   READY   AGE    CONTAINERS        IMAGES   SELECTOR
sample-rs   5         5         5       145m   nginx-container   nginx    app=sample-app

2.「kubectl scale」コマンド
コマンド: kubectl scale rs sample-rs –replicas Pod数
Podの数を5→3に変更します。

$ kubectl scale rs sample-rs --replicas 3
replicaset.extensions/sample-rs scaled

ReplicaSetの情報から3つのPodが起動していることが確認できます。

$ kubectl get replicaset -o wide
NAME        DESIRED   CURRENT   READY   AGE     CONTAINERS        IMAGES   SELECTOR
sample-rs   3         3         3       3h10m   nginx-container   nginx    app=sample-app

コメント