18.9. チュートリアル: アプリケーションのスケーリング
18.9.1. スケーリング
Horizontal Pod Autoscaler (HPA) を使用すると、Pod を手動または自動でスケーリングできます。クラスターノードをスケーリングすることもできます。
18.9.1.1. Pod の手動スケーリング
次のいずれかの方法を使用して、アプリケーションの Pod を手動でスケーリングできます。
- ReplicaSet またはデプロイメント定義の変更
- コマンドラインの使用
- Web コンソールの使用
このワークショップでは、まず 1 つの Pod だけをマイクロサービスに使用します。デプロイメント定義でレプリカを 1
に定義すると、Kubernetes レプリケーションコントローラーが 1 つの Pod を維持しようとします。次に、Horizontal Pod Autoscaler (HPA) を使用して Pod の自動スケーリングを定義する方法を説明します。HPA は、高負荷が発生した場合に、負荷に応じて、最初の定義を超えて Pod をスケールアウトします。
前提条件
- アクティブな ROSA クラスター
- デプロイ済みの OSToy アプリケーション
手順
- OSToy アプリケーションで、ナビゲーションメニューの Networking タブをクリックします。
"Intra-cluster Communication" セクションで、"Remote Pods" の下にある、色がランダムに変化するボックスを見つけます。ボックス内に、マイクロサービスの Pod 名が表示されます。この例では、マイクロサービスの Pod が 1 つしかないため、ボックスは 1 つしかありません。
次のコマンドを実行して、マイクロサービスに対して実行されている Pod が 1 つだけであることを確認します。
$ oc get pods
出力例
NAME READY STATUS RESTARTS AGE ostoy-frontend-679cb85695-5cn7x 1/1 Running 0 1h ostoy-microservice-86b4c6f559-p594d 1/1 Running 0 1h
- ostoy-microservice-deployment.yaml をダウンロードし、ローカルマシンに保存します。
次の例を使用して、デプロイメント定義を 1 Pod から 3 Pod に変更します。
spec: selector: matchLabels: app: ostoy-microservice replicas: 3
次のコマンドを実行してレプリカの変更を適用します。
$ oc apply -f ostoy-microservice-deployment.yaml
注記OpenShift Web コンソールで Workloads > Deployments > ostoy-microservice > YAML タブに移動して、
ostoy-microservice-deployment.yaml
ファイルを編集することもできます。次のコマンドを実行して、Pod が 3 つあることを確認します。
$ oc get pods
出力から、マイクロサービスの Pod が 1 つではなく 3 つあることがわかります。
出力例
NAME READY STATUS RESTARTS AGE ostoy-frontend-5fbcc7d9-rzlgz 1/1 Running 0 26m ostoy-microservice-6666dcf455-2lcv4 1/1 Running 0 81s ostoy-microservice-6666dcf455-5z56w 1/1 Running 0 81s ostoy-microservice-6666dcf455-tqzmn 1/1 Running 0 26m
CLI または Web UI を使用してアプリケーションをスケーリングします。
CLI で次のコマンドを実行して、Pod の数を
3
から2
に減らします。$ oc scale deployment ostoy-microservice --replicas=2
- OpenShift Web コンソール UI のナビゲーションメニューから、Workloads > Deployments > ostoy-microservice をクリックします。
- ページの左側で、中心に "3 Pod" というラベルがある青い円を見つけます。
円の横にある矢印を選択すると、Pod の数が増加します。下矢印を選択して
2
にします。
検証
CLI、Web UI、または OSToy アプリケーションを使用して Pod の数を確認します。
CLI から次のコマンドを実行して、マイクロサービスに 2 つの Pod が使用されていることを確認します。
$ oc get pods
出力例
NAME READY STATUS RESTARTS AGE ostoy-frontend-5fbcc7d9-rzlgz 1/1 Running 0 75m ostoy-microservice-6666dcf455-2lcv4 1/1 Running 0 50m ostoy-microservice-6666dcf455-tqzmn 1/1 Running 0 75m
Web UI で、Workloads > Deployments > ostoy-microservice を選択します。
OSToy アプリケーションのナビゲーションメニューで Networking を選択して、2 つの Pod が使用されていることを確認することもできます。2 つの Pod の色付きボックスが 2 つがあるはずです。
18.9.1.2. Pod の自動スケーリング
Red Hat OpenShift Service on AWS は、Horizontal Pod Autoscaler (HPA) を備えています。HPA はメトリクスを使用して、必要に応じて Pod の数を増減します。
手順
Web UI のナビゲーションメニューから、Pod Auto Scaling を選択します。
次のコマンドを実行して HPA を作成します。
$ oc autoscale deployment/ostoy-microservice --cpu-percent=80 --min=1 --max=10
このコマンドは、ostoy-microservice デプロイメントによって制御される Pod のレプリカを 1 - 10 個の間で維持する HPA を作成するものです。HPA は、デプロイメント全体のレプリカの数を増減して、すべての Pod の平均 CPU 使用率を 80% および 40 ミリコアに保ちます。
Pod Auto Scaling > Horizontal Pod Autoscaling ページで、Increase the load を選択します。
重要負荷が増加すると、が発生するため、ページが応答しなくなる可能性があります。これは予想どおりの反応です。Increase the Load は 1 回だけクリックしてください。プロセスの詳細は、このマイクロサービスの GitHub リポジトリー を参照してください。
数分後、ページに新しい Pod が色付きのボックスで表示されます。
注記ページに遅延が発生する可能性があります。
検証
次のいずれかの方法で Pod 数を確認します。
OSToy アプリケーションの Web UI で、Remote Pods ボックスを確認します。
Pod は 1 つしかないため、ワークロードを増やすと Pod も増加するはずです。
CLI で、次のコマンドを実行します。
oc get pods --field-selector=status.phase=Running | grep microservice
出力例
ostoy-microservice-79894f6945-cdmbd 1/1 Running 0 3m14s ostoy-microservice-79894f6945-mgwk7 1/1 Running 0 4h24m ostoy-microservice-79894f6945-q925d 1/1 Running 0 3m14s
OpenShift Cluster Manager から自動スケーリングを確認することもできます。
- OpenShift Web コンソールのナビゲーションメニューで、Observe > Dashboards をクリックします。
ダッシュボードで、Kubernetes / Compute Resources / Namespace (Pods) と namespace ostoy を選択します。
CPU とメモリーのリソース使用状況を示すグラフが表示されます。上のグラフは Pod ごとの最近の CPU 消費量を示し、下のグラフはメモリー使用量を示しています。グラフ内の記号の意味は次のとおりです。
- 負荷が増加しました (A)。
- 2 つの新しい Pod が作成されました (B および C)。
- 各グラフの幅は CPU 消費量を表し、どの Pod がより多くの負荷を処理したかを示しています。
負荷が減少し (D)、Pod が削除されました。
18.9.1.3. ノードの自動スケーリング
Red Hat OpenShift Service on AWS では、ノードの自動スケーリング を使用できます。ここでは、クラスターが処理できない大きなワークロードを持つジョブを含む新しいプロジェクトを作成します。自動スケーリングが有効な場合、負荷が現在の容量を超えたときに、クラスターが負荷を処理するために新しいノードを自動的に作成します。
前提条件
- マシンプールで自動スケーリングが有効になっている。
手順
次のコマンドを実行して、
autoscale-ex
という新しいプロジェクトを作成します。$ oc new-project autoscale-ex
次のコマンドを実行してジョブを作成します。
$ oc create -f https://raw.githubusercontent.com/openshift-cs/rosaworkshop/master/rosa-workshop/ostoy/yaml/job-work-queue.yaml
数分後、次のコマンドを実行して Pod を確認します。
$ oc get pods
出力例
NAME READY STATUS RESTARTS AGE work-queue-5x2nq-24xxn 0/1 Pending 0 10s work-queue-5x2nq-57zpt 0/1 Pending 0 10s work-queue-5x2nq-58bvs 0/1 Pending 0 10s work-queue-5x2nq-6c5tl 1/1 Running 0 10s work-queue-5x2nq-7b84p 0/1 Pending 0 10s work-queue-5x2nq-7hktm 0/1 Pending 0 10s work-queue-5x2nq-7md52 0/1 Pending 0 10s work-queue-5x2nq-7qgmp 0/1 Pending 0 10s work-queue-5x2nq-8279r 0/1 Pending 0 10s work-queue-5x2nq-8rkj2 0/1 Pending 0 10s work-queue-5x2nq-96cdl 0/1 Pending 0 10s work-queue-5x2nq-96tfr 0/1 Pending 0 10s
-
Pending
状態の Pod が多数あるため、このステータスによってオートスケーラーがトリガーされ、マシンプールにさらにノードが作成されます。これらのワーカーノードが作成されるまで待ちます。 数分後、次のコマンドを使用して、現在のワーカーノードの数を確認します。
$ oc get nodes
出力例
NAME STATUS ROLES AGE VERSION ip-10-0-138-106.us-west-2.compute.internal Ready infra,worker 22h v1.23.5+3afdacb ip-10-0-153-68.us-west-2.compute.internal Ready worker 2m12s v1.23.5+3afdacb ip-10-0-165-183.us-west-2.compute.internal Ready worker 2m8s v1.23.5+3afdacb ip-10-0-176-123.us-west-2.compute.internal Ready infra,worker 22h v1.23.5+3afdacb ip-10-0-195-210.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-196-84.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-203-104.us-west-2.compute.internal Ready worker 2m6s v1.23.5+3afdacb ip-10-0-217-202.us-west-2.compute.internal Ready master 23h v1.23.5+3afdacb ip-10-0-225-141.us-west-2.compute.internal Ready worker 23h v1.23.5+3afdacb ip-10-0-231-245.us-west-2.compute.internal Ready worker 2m11s v1.23.5+3afdacb ip-10-0-245-27.us-west-2.compute.internal Ready worker 2m8s v1.23.5+3afdacb ip-10-0-245-7.us-west-2.compute.internal Ready worker 23h v1.23.5+3afdacb
ワークロードを処理するためにワーカーノードが自動的に作成されたことがわかります。
次のコマンドを入力して、OSToy アプリケーションに戻ります。
$ oc project ostoy