Alibaba Cloud Elastic Container Instance 上に構築された Serverless Kubernetes クラスター は、強力な弾性スケーリング機能を提供します。設定されたポリシーに基づき、Serverless Kubernetes クラスター の計算能力は短時間で数倍に増加したり、計算能力の需要が減少したときにコストを節約するために迅速にスケールインしたりできます。このトピックでは、クラスター内の Pod の数を直接制御する方法、または負荷に基づいて自動スケーリングポリシーを設定する方法について説明します。
このチュートリアルを完了するためのコストは、リソースの実行時間が 0.5 時間であると仮定して、約 0.5 米ドルです。チュートリアル完了後、速やかにリソースを解放することをお勧めします。
前提条件
Web アプリケーションがデプロイされていること。詳細については、「Nginx ベースの Web アプリケーションを迅速にデプロイする」をご参照ください。
ステップ 1: metrics-server コンポーネントをインストールする
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。
[ロギングとモニタリング] タブをクリックします。[metrics-server] カードを見つけ、右下隅にある [インストール] をクリックします。インストールが完了するまで待ちます。
ステップ 2: アプリケーションをスケーリングする
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
"nginx-deploy" という名前の [ステートレス] アプリケーションをクリックして、詳細ページに移動します。
右上隅にある [スケール] をクリックします。[スケール] パネルで、[Pod 数] を 10 に設定し、[OK] をクリックします。
ページを更新します。9 つの新しい Pod が作成されると、スケールアウトが成功したことを示します。
ステップ 4 を繰り返して、Pod の数を 1 に変更します。
ページを更新します。Pod の数が 1 に減少し、スケールインが成功したことを示します。
kubectl
次のコマンドを実行して、デプロイメントの詳細を表示します。
kubectl get deploy期待される出力:
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deploy 1/1 1 1 9m32s次のコマンドを実行して、デプロイメント内の Pod の数を 10 にスケールアウトします。
kubectl scale deploy nginx-deploy --replicas=10期待される出力:
deployment.extensions/nginx-deploy scaled次のコマンドを実行して、Pod を表示します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE nginx-deploy-55d8dcf755-8jlz2 1/1 Running 0 39s nginx-deploy-55d8dcf755-9jbzk 1/1 Running 0 39s nginx-deploy-55d8dcf755-bqhcz 1/1 Running 0 38s nginx-deploy-55d8dcf755-bxk8n 1/1 Running 0 38s nginx-deploy-55d8dcf755-cn6x9 1/1 Running 0 38s nginx-deploy-55d8dcf755-jsqjn 1/1 Running 0 38s nginx-deploy-55d8dcf755-lhp8l 1/1 Running 0 38s nginx-deploy-55d8dcf755-r2clb 1/1 Running 0 38s nginx-deploy-55d8dcf755-rchhq 1/1 Running 0 10m nginx-deploy-55d8dcf755-xspnt 1/1 Running 0 38s次のコマンドを実行して、デプロイメント内の Pod の数を 1 にスケールインします。
kubectl scale deploy nginx-deploy --replicas=1期待される出力:
deployment.extensions/nginx-deploy scaled次のコマンドを実行して、Pod を表示します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE nginx-deploy-55d8dcf755-bqhcz 1/1 Running 0 1m
ステップ 3: 負荷ベースの自動スケーリングを設定する
コンソール
アプリケーションの詳細ページで、[自動スケーリング] タブをクリックします。
[メトリックベースのスケーリング (HPA)] セクションで、[作成] をクリックします。
[作成] パネルで、次のサンプル値を入力し、[OK] をクリックします。
設定項目
サンプル値
名前
nginx-deploy
メトリック
[追加] をクリックして、次のメトリックを入力します:
メトリック: CPU 使用率
しきい値: 20%
Pod の最大数
10
Pod の最小数
1
kubectl
メトリックベースのスケーリングポリシーを作成します。
このポリシーは、デプロイメントに最小 1 つ、最大 10 の Pod があることを保証します。デプロイメントは、すべての Pod で平均 CPU 使用率を約 20% に維持するように自動的にスケーリングします。
kubectl autoscale deployment nginx-deploy --cpu-percent=20 --min=1 --max=10期待される出力:
horizontalpodautoscaler.autoscaling/nginx-deploy autoscaledメトリックベースのスケーリングポリシーに関する情報を表示します。
kubectl get hpa期待される出力:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-deploy Deployment/nginx-deploy 0%/20% 1 10 1 35s
ステップ 4 (任意): 自動スケーリングポリシーをテストする
クラスター内のコンテナーに負荷を追加することで、自動スケーリングポリシーをテストできます。コンテナーに負荷を追加するには、次のステップを実行します。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[Pod] ページで、テスト Pod を見つけ、[アクション] 列の 端末 をクリックします。テストコンテナーを選択して、コマンドラインインターフェイスを開きます。
次のコマンドは、コンテナー内で無限ループを実行して CPU 負荷を最大化します。サービスの中断を避けるため、このコマンドはテストコンテナーでのみ実行してください。
while : ; do : ; doneコンソールに戻ります。最初の Pod の [モニタリング] 列で、
アイコンをクリックしてコンテナーの CPU 負荷を監視します。数分待ってからページを更新します。4 つの新しい Pod が作成されます。
この時点で、1 つの Pod の CPU 負荷は 100% に達し、他の 4 つの Pod の CPU 負荷は約 0% です。デプロイメント内のすべての Pod の平均 CPU 負荷は約 20% になります。これは、スケールアウトが完了し、クラスターが安定していることを示します。
ステップ 3 で開いたコンテナターミナルページに戻ります。Ctrl+C を押してループを終了し、コンテナーの CPU 負荷を通常に戻します。
説明コンテナターミナルページを閉じてしまった場合は、
topコマンドを実行してプロセスを表示します。次に、kill -9 <PID>コマンドを実行して、CPU 負荷が 100% のプロセスを終了させます。コンソールに戻ります。5〜10 分後、ページを更新します。Pod の数が 1 に減少していることがわかります。
ステップ 5: リソースを解放する
クラスターを使用する必要がなくなった場合は、そのリソースを解放します。
作成したアプリケーションとサービスを削除する
Container Service for Kubernetes (ACK) コンソールの [クラスター] ページで、ターゲットクラスターの名前をクリックします。
左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。作成した NGINX アプリケーションを選択し、[一括削除] をクリックし、画面の指示に従って削除を確認します。
クラスターを削除する
Serverless Kubernetes クラスター はパブリックプレビュー中であり、無料トライアルを提供しています。ただし、Serverless Kubernetes クラスター で使用される他の Alibaba Cloud サービスについては、サービスの課金ルールに基づいて料金を支払う必要があります。料金はこれらの Alibaba Cloud サービスによって別途請求されます。設定が完了したら、次のいずれかの方法でクラスターを管理できます:
クラスターが不要になった場合は、ACK コンソールにログインします。[クラスター] ページで、クラスターの [アクション] 列で [その他] > [削除] を選択してクラスターを削除します。[クラスターの削除] ダイアログボックスで、[クラスターによって作成された ALB インスタンスを削除]、[クラスターによって作成された Alibaba Cloud DNS PrivateZone インスタンスを削除]、および [上記情報を理解し、指定したクラスターを削除します] を選択し、[OK] をクリックします。Serverless Kubernetes クラスター の削除方法の詳細については、「Serverless Kubernetes クラスターを削除する」をご参照ください。
クラスターを引き続き使用する場合は、無料トライアル期間が終了する少なくとも 1 時間前に Alibaba Cloud アカウントにチャージし、アカウントに少なくとも 100 元の残高があることを確認してください。ACK Serverless Pro クラスター で使用される Alibaba Cloud サービスの課金の詳細については、「クラウドサービス料金」をご参照ください。