PaaS/Kubernetes

Argo Rollout으로 배포한 Replica도 HPA를 탈까?

armyost 2023. 11. 21. 22:58
728x90

문득 Argo Rollout으로 배포한 ReplicaSet이 Deployment와 똑같은 매커니즘으로 HPA 적용을 받는지 의문이 들었다. 

 

일단 공식문서에는 적용된다고 설명이 되있긴 하다.

https://argo-rollouts.readthedocs.io/en/stable/features/hpa-support/

 

HPA - Argo Rollouts - Kubernetes Progressive Delivery Controller

Horizontal Pod Autoscaling Horizontal Pod Autoscaling (HPA) automatically scales the number of pods in owned by a Kubernetes resource based on observed CPU utilization or user-configured metrics. In order to accomplish this behavior, HPA only supports reso

argo-rollouts.readthedocs.io


우선 Rollout 리소스에 대해서 Container 자원 할당량을 주자

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollout-bluegreen
  namespace: argo-sample-app
spec:
  replicas: 2
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: rollout-bluegreen
  template:
    metadata:
      labels:
        app: rollout-bluegreen
    spec:
      containers:
      - name: rollouts-demo
        image: argoproj/rollouts-demo:blue
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        resources:  # 컨테이너에 대한 자원할당량을 주자. 필요하면 limits를 주어도 된다.
          requests:
            cpu: 500m

 

 

그리고 해당 어플리케이션에 대한 HPA를 생성해보자.

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: argo-sample-hpa             # HorizontalPodAutoscaler object 자신의 고유 정보를 입력
  namespace: argo-sample-app
spec:                               # HorizontalPodAutoscaler object가 수행하는 내용에 대한 설정
  maxReplicas: 4                    # 업스케일 시 생성할 수 있는 Pod의 최대수
  minReplicas: 1                    # 다운스케일 시 생성할 수 있는 Pod의 최소수
  scaleTargetRef:                   # HorizontalPodAutoscaler object가 동작할 대상에 대한 설정
    apiVersion: argoproj.io/v1alpha1
    kind: Rollout
    name: rollout-bluegreen
  targetCPUUtilizationPercentage: 60

 

Rollout에서 Replica 갯수를 2개로 했음에도 불구하고 HPA정책에 따라서 1개로 줄었다. 

※ Metric-Server는 사전에 설치되어 있어야 한다.

 

이제 Seige같은 벤치마크 툴로 부하를 주어보자.

 

HPA에서 설정한 최대치만큼 증가했다.


 

공식문서에 따르면 Argo Rollout은 매우 똑똑하다는 것을 알 수 있는데, 

 

Blue-Green 전략에서

첫번째로 Active Service에서 HPA에 맞추어 Scale-Out을 하고 Preview Service가 전환될 것이므로 두번째로 

Preview Service도 Active Service에 발맞추어 Scale-Out을 수행한다.

 

Canary 전략에서

Blue-Green과는 다르게 Canary는 Service가 직접 분기시킨다. 즉 Rollout Controller가 하는건 없다보니 그냥 Rollout에 관련된 ReplicaSet을 통째로 Scale-Out 시키는 방식이다.