コンテンツにスキップ

Alibaba Cloud ECI を使用した kodo-x のオートスケーリング

注意

ACK は Pro 版クラスターである必要があります

はじめに

このソリューションはトラフィック変動の大きいシナリオ向けです。仮想ノードを利用することで、ACK クラスターのスケールアウト時にノードの計算容量を事前に計画する必要がなく、仮想ノード配下でオンデマンドに ECI を作成できます。ECI とクラスター内の実際のノード上の Pod 間はネットワークで相互接続されます。長時間実行されるワークロードの弾力性のあるトラフィック部分を ECI にスケジュールすることを推奨します。これにより、弾力性のあるスケールアウト時間を短縮し、スケールアウトコストを削減し、既存リソースを最大限に活用できます。ビジネストラフィックが減少したら、ECI 上にデプロイされた Pod を迅速に解放し、運用コストを削減できます。ここでは Kubernetes の HPA 技術を使用して kodo-x のスケーリングを実現します。

前提条件

環境情報

名称 説明
kodo-x ノード数 3
kodo-x 設定 16C 32G
kodo-x リソース request:
cpu: 15
men: 28G
limit:
cpu: 16
men: 28G
Kodo-x ノードラベル app: kodo-x
HPA 効果 Pod CPU 使用率が 85% に達した場合、kodo-x レプリカを最大 10 個まで追加

操作手順

手順 1:ResourcePolicy の設定

以下の YAML を実行します:

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: kodo-x-resourcepolicy
  namespace: forethought-kodo
spec:
  ignorePreviousPod: false
  ignoreTerminatingPod: true
  preemptPolicy: AfterAllUnits
  selector:
    app: deployment-forethought-kodo-kodo-x # これが kodo-x の場合は変更不要
  strategy: prefer
  units:
    - nodeSelector:
        app: kodo-x # 専有マシンのラベルをここに設定
      resource: ecs
    - resource: eci 

状態を確認します:

kubectl get ResourcePolicy -n forethought-kodo

結果:

NAME                    AGE
kodo-x-resourcepolicy   3h6m

手順 2:HorizontalPodAutoscaler の設定

以下の YAML を実行します:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: kodo-x-hpa
  namespace: forethought-kodo
spec:
  maxReplicas: 10 # 最大レプリカ数
  metrics:
    - resource:
        name: cpu
        target:
          averageUtilization: 85   # 平均使用率が 85% になったら
          type: Utilization
      type: Resource
  minReplicas: 3       # 最小レプリカ数(kodo-x ノードのノード数でもある)
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: kodo-x

状態を確認します:

kubectl get hpa -n forethought-kodo

手順 3:kodo-x の設定

  • kodo-x configmap パラメータの変更

「forethought-kodo」配下の cm kodo-x を変更し、workerslog_workerstracing_workers を調整します。その他のパラメータについてはアプリケーションサービス設定ガイドを参照してください。

global:
    workers: 16
    log_workers: 64
    tracing_workers: 32
  • 更新方式の変更

strategy オブジェクトを変更します。

...
  strategy:
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 0
...
  • ECI 用アノテーションの追加

alibabacloud.com/burst-resource: eci を追加します。

spec:
  ...
  template:
    metadata:
      annotations:
        alibabacloud.com/burst-resource: eci
  • リソース設定の変更
spec:
  template:
    spec:
      containers:
         ...
          ports:
            - containerPort: 9527
              name: 9527tcp02
              protocol: TCP
          resources:
            limits:
              cpu: '16'
              memory: 28G
            requests:
              cpu: '15'
              memory: 28G
          ...

検証とトラブルシューティング

  • 検証
kubectl get hpa -n forethought-kodo

NAME         REFERENCE           TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
kodo-x-hpa   Deployment/kodo-x   83%/90%   3         10        5          3h26m

kubectl get pod -n forethought-kodo -o wide -l app=deployment-forethought-kodo-kodo-x 
NAME                     READY   STATUS    RESTARTS   AGE    IP             NODE                            NOMINATED NODE   READINESS GATES
kodo-x-d89f78cf4-69j5l   1/1     Running   0          3h5m   10.103.4.233   cn-hangzhou.172.16.23.172       <none>           <none>
kodo-x-d89f78cf4-g5hx5   1/1     Running   0          3h8m   172.16.8.212   virtual-kubelet-cn-hangzhou-i   <none>           <none>
kodo-x-d89f78cf4-hrhpx   1/1     Running   0          3h8m   172.16.8.211   virtual-kubelet-cn-hangzhou-i   <none>           <none>
kodo-x-d89f78cf4-s7zsd   1/1     Running   0          3h5m   10.103.4.171   cn-hangzhou.172.16.23.173       <none>           <none>
kodo-x-d89f78cf4-txqh8   1/1     Running   0          3h5m   10.103.5.107   cn-hangzhou.172.16.23.174       <none>           <none>
  • トラブルシューティング
kubectl describe -n forethought-kodo hpa kodo-x-hpa 

Name:                     kodo-x-hpa
Namespace:                forethought-kodo
Labels:                   <none>
Annotations:              autoscaling.alpha.kubernetes.io/conditions:
                            [{"type":"AbleToScale","status":"True","lastTransitionTime":"2024-06-05T09:04:35Z","reason":"ReadyForNewScale","message":"recommended size...
                          autoscaling.alpha.kubernetes.io/current-metrics:
                            [{"type":"Resource","resource":{"name":"cpu","currentAverageUtilization":79,"currentAverageValue":"9481m"}}]
CreationTimestamp:        Wed, 05 Jun 2024 09:04:20 +0000
Reference:                Deployment/kodo-x
Target CPU utilization:   90%
Current CPU utilization:  79%
Min replicas:             3
Max replicas:             10
Deployment pods:          5 current / 5 desired
Events:
  Type    Reason             Age   From                       Message
  ----    ------             ----  ----                       -------
  Normal  SuccessfulRescale  35m   horizontal-pod-autoscaler  New size: 8; reason: All metrics below target
  Normal  SuccessfulRescale  34m   horizontal-pod-autoscaler  New size: 7; reason: All metrics below target
  Normal  SuccessfulRescale  33m   horizontal-pod-autoscaler  New size: 6; reason: All metrics below target
  Normal  SuccessfulRescale  15m   horizontal-pod-autoscaler  New size: 5; reason: All metrics below target

フィードバック

このページは役に立ちましたか?