水平ポッドオートスケーラー (HPA) 機能を有効にして、CPU使用率、メモリ使用量、またはその他のメトリックに基づいてポッドを自動的にスケーリングできます。 HPAは、複製されたポッドをすばやくスケールアウトして、ワークロードが急増したときに重いストレスに対処し、ワークロードが減少したときに適切にスケールインしてリソースを節約できます。 プロセス全体は自動化されており、人間の介入は必要ありません。 eコマースサービス、オンライン教育、金融サービスなど、サービスの変動が大きく、サービス数が多く、頻繁にスケーリングが必要な企業に最適です。
前提条件
ACKコンソールでHPAが有効になっているアプリケーションを作成する
ACKコンソールにログインします。
ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックします。
- [詳細] ウィザードページで、HPAの [有効化] を選択し、スケーリングしきい値と関連する設定を設定します。
- メトリック: CPU使用率またはメモリ使用率を選択します。 選択したリソースタイプは、[必須リソース] フィールドで指定したものと同じである必要があります。
- 条件 :リソース使用量のしきい値を指定します。 HPAは、しきい値を超えるとスケーリングイベントをトリガーします。 水平ポッドの自動スケーリングの実行に使用されるアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
- マックス レプリカ: デプロイをスケーリングできるポッドの最大数を指定します。
- 分。 レプリカ: デプロイで実行する必要のあるポッドの最小数を指定します。
kubectlを使用してHPAが有効になっているアプリケーションを作成する
オーケストレーションテンプレートを使用してHPAを作成し、HPAを有効にするデプロイにHPAを関連付けることもできます。 次に、kubectlコマンドを実行してHPAを有効にします。 ワークロードに対してHPAが有効になっているアプリケーションを1つだけ作成することをお勧めします。 次の例では、NGINXアプリケーションでHPAが有効になっています。
nginx.ymlという名前のファイルを作成し、次の内容をファイルにコピーします。
重要アプリケーションに必要な
リクエスト
リソースを設定する必要があります。 それ以外の場合は、HPAを有効にできません。 リソースプロファイリング機能を使用して、リソース使用量の履歴データを分析し、コンテナリクエストと制限を設定するための推奨事項を取得できます。 詳細については、「リソースプロファイリング」をご参照ください。次のコマンドを実行して NGINX アプリケーションをインストールします。
kubectl apply -f nginx.yml
hpa.ymlという名前のファイルを作成し、次の内容をファイルにコピーしてHPAを作成します。
scaleTargetRef
パラメーターを使用してHPAをnginx
デプロイメントに関連付け、ポッド内のすべてのコンテナーの平均CPU使用率が50% に達したときにスケーリング操作をトリガーします。Kubernetesバージョンが1.24以降のクラスターのYAMLテンプレート
apiVersion: autoscaling/v2 種類: HorizontalPodAutoscaler メタデータ: 名前: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1# 展開のために実行する必要があるコンテナーの最小数。 このパラメーターの値は、1以上の整数である必要があります。 maxReplicas: 10# Deploymentをスケーリングできるコンテナーの最大数。 このパラメーターの値はminReplicasより大きくなければなりません。 metrics: - type: Resource resource: name: cpu ターゲット: タイプ: Utilization averageUtilization: 50# 対象リソースの平均使用率。リソース使用量の平均値とリクエスト量の比です。
Kubernetesバージョンが1.24より前のクラスターのYAMLテンプレート
CPUとメモリメトリクスの両方を指定する必要がある場合は、2つのHPAを作成する代わりに、
metrics
フィールドでcpu
とmemory
の両方のリソースタイプを指定できます。 HPAは、メトリックのいずれかがスケーリングしきい値に達したことを検出すると、スケーリング操作を実行します。メトリック: - type: Resource resource: name: cpu ターゲット: タイプ: Utilization averageUtilization: 50 - type: Resource resource: name: memory ターゲット: タイプ: Utilization averageUtilization: 50
次のコマンドを実行してHPAを作成します。
kubectl apply -f hpa.yml
この時点で、
kubectl describe hpa <HPA name>
コマンドを実行すると、次の出力と同様の警告が返され、HPAがまだデプロイ中であることを示します。 この例のHPA名はnginx-hpa.ymlです。kubectl get hpa
コマンドを実行して、HPAのステータスを確認できます。警告FailedGetResourceMetric 2m (x6 over 4m) pod-autoscalerがポッドのデフォルト /nginx-deployment-basic-75675f5897-mqzs7のコンテナnginxでcpuのリクエストを欠落しています 警告FailedComputeMetricsReplicas 2m (x6 over 4m) horizontal-pod-autoscalerがcpu使用率を取得できませんでした: pod default/nginx-deployment-basic-75675f5
HPAが作成され、ポッドがスケーリング条件に達するまで待ちます。この例では、NGINXのポッドCPU使用率が50% を超えています。 次に、
kubectl describe hpa <HPA name>
コマンドをもう一度実行して、水平スケーリングのステータスを確認します。次の出力が返された場合、HPAは期待どおりに実行されます。
メッセージからのタイプ理由年齢 ---- ------ ---- ---- ------- 通常のSuccessfulRescale 5m6s horizontal-pod-autoscaler新しいサイズ: 1; 理由: すべてのメトリック以下のターゲット