Alibaba Cloud ECI を使用した kodo-x のオートスケーリング¶
注意
ACK は Pro 版クラスターである必要があります
はじめに¶
このソリューションはトラフィック変動の大きいシナリオ向けです。仮想ノードを利用することで、ACK クラスターのスケールアウト時にノードの計算容量を事前に計画する必要がなく、仮想ノード配下でオンデマンドに ECI を作成できます。ECI とクラスター内の実際のノード上の Pod 間はネットワークで相互接続されます。長時間実行されるワークロードの弾力性のあるトラフィック部分を ECI にスケジュールすることを推奨します。これにより、弾力性のあるスケールアウト時間を短縮し、スケールアウトコストを削減し、既存リソースを最大限に活用できます。ビジネストラフィックが減少したら、ECI 上にデプロイされた Pod を迅速に解放し、運用コストを削減できます。ここでは Kubernetes の HPA 技術を使用して kodo-x のスケーリングを実現します。
前提条件¶
- Kubernetes クラスターが ACK Pro であり、バージョンが 1.20.11 以上であること。アップグレード方法については、ACK クラスターの K8s バージョンのアップグレード を参照してください。
- ECI リソースを使用するには、ack-virtual-node がデプロイされている必要があります。具体的な手順については、ACK での ECI の使用 を参照してください。
環境情報¶
| 名称 | 説明 | |
|---|---|---|
| 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
状態を確認します:
結果:
手順 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
状態を確認します:
手順 3:kodo-x の設定¶
- kodo-x configmap パラメータの変更
「forethought-kodo」配下の cm kodo-x を変更し、workers、log_workers、tracing_workers を調整します。その他のパラメータについてはアプリケーションサービス設定ガイドを参照してください。
- 更新方式の変更
strategy オブジェクトを変更します。
- ECI 用アノテーションの追加
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