문득 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 시키는 방식이다.
'PaaS > Kubernetes' 카테고리의 다른 글
KubeAdmiral 이란? (1) | 2023.11.27 |
---|---|
솔루션 별 적합한 Kubernetes 배포 리소스는 어떤것이 있을까? (0) | 2023.11.23 |
Failed to scrape node .. because it doesn't contain any IP SANs 오류 해결 (0) | 2023.11.20 |
permission denied on key "vm.max_map_count", ignoring 오류 해결하기 (2) | 2023.11.19 |
SonarQube를 k8s에 컨테이너로 배포해보자 (1) | 2023.11.19 |