スケール
複数インスタンスの起動
https://kubernetes.io/docs/tutorials/kubernetes-basics/scale-intro/
目標
- kubectlを使ったスケール
アプリケーションのスケーリング
以前の章でDeploymentを作成し、Serviceを使って公開しました。 Deploymentはアプリケーションのために1つだけPodを作成しました。 トラフィックが増えた時、アプリケーションを稼働しつづけるためにスケールする必要があります。
スケーリングはDeploymentのReplicaの数を変えることで達成できます。
スケーリング概要
Deploymentのスケールアップ1は利用可能なりソースを使って新しいPodが作成されることとNodeにスケジュールされることを約束します。 スケールダウンは期待される状態までPodの数を減らします。 KubernetesはPodのオートスケールもサポートしていますが、このチュートリアルでは説明しません。 ゼロにスケールすることもできますが、指定されたDeploymentのすべてのPodが終了します。
アプリケーションの複数インスタンスの起動はすべてにトラフィックが分散されるような方法が必要です。 Serviceは公開されたDeploymentのすべてのPodにネットワークトラフィックを分散することが可能なロードバランサを統合しています。 Serviceは起動中のPodのエンドポイントを監視し、生きているPodにのみトラフィックを送信します。
一度あるアプリケーションを複数インスタンスで実行したら、ダウンタイムなしでのローリングアップデートが可能です。 次章で扱います。
1. Podのスケールアウト ↩
インタラクティブチュートリアル
https://kubernetes.io/docs/tutorials/kubernetes-basics/scale-interactive/
Step 1: Deploymentのスケーリング
Deploymentを一覧表示するためにget deployments
を使います。
kubectl get deployments
1つのPodがあることを確認できます。
結果の意味はそれぞれ次のようになります。
DESIRED
- 設定されたReplica数CURRENT
- 現在起動中のReplica数UP-TO-DATE
- 設定された状態と一致させるために変更されたReplica数AVAILABLE
- 実際に利用可能なReplica数
次に、Deploymentを4つのReplicaにスケールさせましょう。
kubectl scale
コマンドを使います。
引数にはDeploymentの種類と名前、期待するReplica数をとります。
kubectl scale deployments/kubernetes-bootcamp --replicas=4
再びget deployments
を使ってDeploymentの一覧を表示してください。
kubectl get deployments
変更が適用され、アプリケーションに4つのインスタンスがあります。 Podの数を確認してみましょう。
kubectl get pods -o wide
異なるIPの4つのPodが確認できます。 変更はDeploymentのイベントログに登録されています。 describeコマンドで確認してみましょう。
kubectl describe deployments/kubernetes-bootcamp
Step 2: ロードバランシング
Serviceがトラフィックを分散させているか確認してみましょう。 公開されているIPとポートを確認するために前章で学んだdescribe serviceを使います。
kubectl describe services/kubernetes-bootcamp
NODE_PORT環境変数にNodeポートを格納しましょう。
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports0).nodePort}}')
echo NODE_PORT=$NODE_PORT
何度かcurl
コマンドでリクエストしてみてください。
curl host01:$NODE_PORT
毎回異なるPodにアクセスしています。負荷分散されています。
Step 3: スケールダウン
2つのReplicaになるようにスケールダウンしましょう。
再びscale
コマンドを使います。
kubectl scale deployments/kubernetes-bootcamp --replicas=2
変更が適用されたかどうか確認するためget deployments
コマンドでDeploymentの一覧を表示しましょう。
kubectl get deployments
Replica数が2に減っています。
get pods
でPod一覧を表示して確認しましょう。
kubectl get pods -o wide
2つのPodが終了したことを確認できます。