Alibaba Cloud ECI 탄력적 확장을 사용한 kodo-x¶
참고
ACK는 Pro 버전 클러스터여야 합니다.
개요¶
이 솔루션은 트래픽 변동이 큰 시나리오에 적합합니다. 가상 노드가 있으면 ACK 클러스터를 확장할 때 노드의 컴퓨팅 용량을 계획할 필요 없이 가상 노드 아래에서 필요에 따라 ECI를 생성할 수 있습니다. ECI와 클러스터의 실제 노드에 있는 Pod 간에는 네트워크가互通됩니다. 장기 실행 워크로드의 탄력적 트래픽 부분을 ECI로 스케줄링하는 것이 좋습니다. 이렇게 하면 탄력적 확장 시간을 단축하고, 확장 비용을 줄이며, 기존 리소스를 최대한 활용할 수 있습니다. 비즈니스 트래픽이 감소하면 ECI에 배포된 Pod를 빠르게 해제하여 사용 비용을 절감할 수 있습니다. kodo-x 확장/축소를 위해 Kubernetes의 HPA 기술을 사용합니다.
전제 조건¶
- 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