レプリケーションとノード#

スケーリングに関わる要素として、replicasetリソースというものがありました。 deploymentの配下として動き、実際にPodの数を調整していく立場にあるものでした。 ではreplicasetはどの程度までPodを増やしていけるのでしょうか…

コマンドラインでのスケーリング#

マニフェストに書くことで、適用すればその値になるようにとはたらきますが、一時的に変更したいというレベルであれば、コマンドライン上でもスケーリングの設定は可能です。

Listing 33 スケーリングのコマンドライン呼び出し例#
# 初期状態でデプロイ(デプロイ済の方はそのまま使って結構です)
PS> kubectl apply -f deploy1.yml
# スケーリングのコマンドライン呼び出し
PS> kubectl scale deploy/frontend --replicas=4

kubectl scaleコマンドにより、指定したリソースオブジェクトに対し、複製数を設定できるようになります。 マニフェストにおける spec.replicas を直接指定するようなものです。 この場合、作成したい複製を4を目標とさせることになります。 なおこの値は便宜上 レプリカ数 と表現しておきます。

うまくできたかはデプロイ状態とポッド状態で確認できます。

Listing 34 スケーリングの状況を確認(レプリカ数4で設定)#
PS> kubectl get deploy # デプロイメント
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
frontend   4/4     4            4           22h
PS> kubectl get pods # ポッド
NAME                        READY   STATUS    RESTARTS   AGE
frontend-675c86d757-fhwlg   1/1     Running   0          10m
frontend-675c86d757-thlcn   1/1     Running   0          21s
frontend-675c86d757-vjjgb   1/1     Running   0          12m
frontend-675c86d757-wjpnz   1/1     Running   0          21s

Caution

スケーリングの指示を出したあと、順次不足しているポッドの起動を行うため、すぐ反映されません。 ちまちまと上がっていくような感じなので、意識して少し間を置いてから確認するか、ちょこちょこ起動して眺めてください。

Tip

スケールを0にすることも可能です。デプロイメントは存在しますが、起動するポッドの数が指示通り0になります。 あとでまた使うためデプロイメントを残しておきたいときに使うことがあります。

Listing 35 レプリカ数0の場合#
PS> kubectl scale deploy/frontend --replicas 0
deployment.apps/frontend scaled
PS> kubectl get deploy
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
frontend   0/0     0            0           22h

マニフェストでのスケーリング#

デプロイメントのマニフェストであれば、レプリカ数を変更することで恒常的に変更が可能です。 たとえば以下のように修正してみたとします。

Listing 36 レプリカ数を変更する#
--- /work/codes/deploy1.yml
+++ /work/codes/deploy2.yml
@@ -3,8 +3,8 @@
 metadata:
   name: frontend
 spec:
-  # レプリカ数は初期値1なので実は書かなくてもOK(明示)
-  replicas: 1
+  # レプリカ数を変更
+  replicas: 2
   selector:
     matchLabels:
       app: frontend

このマニフェストを適用することでレプリカ数を2にすることになります。 実際に適用して状況を確認してみましょう。

PS> kubectl get pods
PS> kubectl apply -f deploy1.yml
PS> kubectl get pods # 少し様子を見ながら繰り返し確認する

やがて2つになると思います。スケーリングを最初から想定している場合は、レプリカ数をマニフェストに書いておけば忘れずに対応が入ることになります。