水平ポッドオートスケーラー (HPA) 機能を有効にして、CPU使用率、メモリ使用量、またはその他のメトリックに基づいてポッドを自動的にスケーリングできます。 HPAは、複製されたポッドをすばやくスケールアウトして、ワークロードが急増したときに重いストレスに対処し、ワークロードが減少したときに適切にスケールインしてリソースを節約できます。 プロセス全体は自動化されており、人間の介入は必要ありません。 eコマースサービス、オンライン教育、金融サービスなど、サービスの変動が大きく、サービス数が多く、頻繁にスケーリングが必要な企業に最適です。
前提条件
ACKコンソールでHPAが有効になっているアプリケーションを作成する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、[イメージから作成] をクリックします。
[作成] ページで、HPAをサポートするデプロイメントを作成するためのプロンプトに従って、基本情報、コンテナー構成、サービス構成、およびスケーリング構成を入力します。
特定の手順と設定パラメーターの詳細については、「イメージからステートレスアプリケーションを作成する」をご参照ください。 次のリストに、主要なパラメーターについて説明します。
基本情報: レプリカの名前や数など、アプリケーションの情報を設定します。
コンテナー: イメージと必要なCPUおよびメモリリソースを選択します。
重要アプリケーションが必要とするリクエストリソースを設定します。 そうでない場合、HPAは有効になりません。
高度な:
[アクセス制御] セクションで、[サービス] の右側にある [作成] をクリックしてパラメーターを設定します。
[スケーリング] セクションで、[HPA] の [有効化] を選択し、条件と関連パラメーターを設定します。
メトリック: [CPU使用率] または [メモリ使用率] を選択します。これは、[必須リソース] フィールドで指定したものと同じである必要があります。 CPU使用率とメモリ使用率の両方が指定されている場合、いずれかのメトリックがスケーリングしきい値に達すると、HPAはスケーリング操作を実行します。
条件 :リソース使用量のしきい値を指定します。 HPAは、しきい値を超えるとスケーリングイベントをトリガーします。 水平ポッドの自動スケーリングの実行に使用されるアルゴリズムの詳細については、「アルゴリズムの詳細」をご参照ください。
マックス レプリカ: デプロイをスケーリングできるポッドの最大数を指定します。 このパラメーターの値は、レプリケートされるポッドの最小数より大きくなければなりません。
分。 レプリカ: デプロイで実行する必要のあるポッドの最小数を指定します。 このパラメーターの値は、1以上の整数である必要があります。
kubectlを使用してHPAが有効になっているアプリケーションを作成する
オーケストレーションテンプレートを使用してHPAを作成し、HPAを有効にするデプロイにHPAを関連付けることもできます。 次に、kubectlコマンドを実行してHPAを有効にします。 ワークロードに対してHPAが有効になっているアプリケーションを1つだけ作成することをお勧めします。 次の例では、NGINXアプリケーションでHPAが有効になっています。
nginx.ymlという名前のファイルを作成し、次の内容をファイルにコピーします。
重要アプリケーションに必要な
リクエストリソースを設定する必要があります。 それ以外の場合は、HPAを有効にできません。apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 # Replace it with your actual <image_name:tags>. ports: - containerPort: 80 resources: requests: # This parameter is required for running the HPA. cpu: 500m次のコマンドを実行して NGINX アプリケーションをインストールします。
kubectl apply -f nginx.ymlhpa.ymlという名前のファイルを作成し、次の内容をファイルにコピーしてHPAを作成します。
scaleTargetRefパラメーターを使用してHPAをnginxデプロイメントに関連付け、ポッド内のすべてのコンテナーの平均CPU使用率が50% に達したときにスケーリング操作をトリガーします。Kubernetesバージョンが1.24以降のクラスターのYAMLテンプレート
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # The minimum number of containers that must run for the Deployment. The value of this parameter must be an integer greater than or equal to 1. maxReplicas: 10 # The maximum number of containers to which the Deployment can be scaled. The value of this parameter must be greater than minReplicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 # The average utilization of the target resource, which is the ratio of the average value of resource usage to its request amount.Kubernetesバージョンが1.24より前のクラスターのYAMLテンプレート
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # Must be an integer greater than or equal to 1. maxReplicas: 10 # Must be greater than minReplicas. metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50CPUとメモリメトリクスの両方を指定する必要がある場合は、2つのHPAを作成する代わりに、
metricsフィールドでcpuとmemoryの両方のリソースタイプを指定できます。 HPAは、メトリックのいずれかがスケーリングしきい値に達したことを検出すると、スケーリング操作を実行します。metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 50次のコマンドを実行してHPAを作成します。
kubectl apply -f hpa.ymlこの時点で、
kubectl describe hpa <HPA name>コマンドを実行すると、次の出力と同様の警告が返され、HPAがまだデプロイ中であることを示します。 この例のHPA名はnginx-hpa.ymlです。kubectl get hpaコマンドを実行して、HPAのステータスを確認できます。Warning FailedGetResourceMetric 2m (x6 over 4m) horizontal-pod-autoscaler missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7 Warning FailedComputeMetricsReplicas 2m (x6 over 4m) horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5HPAが作成され、ポッドがスケーリング条件に達するまで待ちます。この例では、NGINXのポッドCPU使用率が50% を超えています。 次に、
kubectl describe hpa <HPA name>コマンドをもう一度実行して、水平スケーリングのステータスを確認します。次の出力が返された場合、HPAは期待どおりに実行されます。
Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 5m6s horizontal-pod-autoscaler New size: 1; reason: All metrics below target