콘텐츠로 이동

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 

상태 확인:

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를 수정하여 workers, log_workers, tracing_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

문서 평가

이 페이지가 도움이 되었나요?