Alibaba Cloud Container Service は、コンテナーリソースの自動スケーリング実現のために、コンソール上で HPA を有効化したアプリケーションの迅速な作成をサポートしています。 HPA (Horizontal Pod Autoscaling) の yaml 設定を定義して、HPA を有効化したアプリケーションを設定することもできます。
前提条件
- Kubernetes クラスターが作成されている必要があります。 詳細は、「Kubernetes クラスターの作成」をご参照ください。
- Kubernetes クラスターのマスターノードに正常に接続されている必要があります。
方法 1: Container Service コンソールでの HPA アプリケーションの作成
HPA は Alibaba Cloud Container Service と連携しています。 Container Service コンソールを使用して HPA を簡単に作成できます。
- Container Service コンソール にログインします。
- Container Service-Kubernetes の左側のナビゲーションウィンドウで、 を選択します。 右上隅の [イメージによる作成] をクリックします。
- アプリケーション名を入力し、クラスターおよび名前空間を選択して、[次へ] をクリックします。
- アプリケーションを設定します。 次に、レプリカ数を設定します。自動スケーリングの [有効化] チェックボックスを選択し、スケールリングの設定を行います。
- メトリック: CPU およびメモリーです。 必要に応じて、リソースタイプを設定します。
- トリガ条件: リソース使用率のパーセンテージの値です。 コンテナーは、リソース使用率がこの値を上回ったときに拡張を始めます。
- 最大レプリカ: デプロイが拡張できるレプリカの最大数です。
- 最小レプリカ: デプロイが縮小できるレプリカの最少数です。
- コンテナーを設定します。 イメージを選択し、必要なリソースを設定します。 [次へ] をクリックします。
注 デプロイに関する必要なリソースを設定する必要があります。 設定しない場合、コンテナーの自動スケーリングは行われません。
- [アクセス制御] ページで、このページの例の設定をしないでください。 直接 [作成] をクリックします。
これで、HPA をサポートするデプロイが作成されました。 デプロイの詳細から、自動スケーリンググループを参照できます。
- 実際の環境では、アプリケーションは CPU 負荷によりスケーリングされます。 テスト環境で自動スケーリングを確認することもできます。 ポッドで CPU 負荷テストを実行することで、ポッドが 30 秒以内に水平拡張を完了できることがわかります。
方法 2: kubectl コマンドを使用したコンテナーの自動スケーリングの設定
オーケストレーションテンプレートを使用して手動で HPA を作成し、作成した HPA を、スケーリングするデプロイオブジェクトにバインドできます。 kubectl コマンドを使用して、コンテナー自動スケーリング設定を完了します。
Nginx アプリケーションの例は、以下のとおりです。 kubectl create -f xxx.yml コマンドを実行し、以下のようなデプロイ用のオーケストレーションテンプレートを作成します。
apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
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 exactly <image_name:tags>
ports:
- containerPort: 80
resources:
requests: ##This parameter must be configured. Otherwise, the HPA cannot operate.
cpu: 500m
HPA を作成します。 scaleTargetRef を使用して、現在の HPA がバインドされているオブジェクトを設定します。 このページの例では、オブジェクトは "nginx" という名称のデプロイです。
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: default
spec:
scaleTargetRef: ##Bind the HPA to a deployment named nginx
apiVersion: apps/v1beta2
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
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-75675f5
HPA の作成後、kubectl describe hpa [name] コマンドをもう一度実行します。 以下のようなメッセージを確認できます。これは、HPA が正常に実行していることを示しています。
Normal SuccessfulRescale 39s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
Nginx ポッドの使用率がこのページの例で設定した 50% に達した場合、コンテナーは水平的に拡張します。 Nginx ポッドの使用率が 50% を下回った場合、コンテナーは縮小します。