설명
HorizontalPodAutoscaler(HPA)는 관측한 지표에 따라 Deployment의 복제본 수를 조절합니다. 배포 도구가 고정된 spec.replicas를 반복 적용하면 HPA가 조정한 값을 덮어써 복제본 수가 불필요하게 오르내릴 수 있습니다. replicas가 선언되어 있다는 것만으로 HPA가 작동하지 않는 것은 아닙니다.
잠재적 영향
- 매니페스트 재적용 시 복제본 수가 줄어 가용성에 영향을 줄 수 있습니다.
- 서로 다른 관리 주체가 복제본 수를 바꾸어 확장과 변경 관리가 복잡해질 수 있습니다.
해결 방법
- HPA가 복제본을 관리하는 Deployment에서는 배포 도구의 replicas 관리 방식을 확인하고 불필요한 고정 값의 재적용을 중단하세요. 기존 필드 소유권을 변경할 때 복제본 수가 예상치 않게 초기화되지 않도록 전환을 계획하세요.
- HPA의 minReplicas, maxReplicas와 지표를 실제 용량 요구에 맞추세요. 지표 제공 기능과 필요한 리소스 요청을 준비하고 배포·부하 변화 중 복제본 수를 확인하세요.
예시
복제본 관리 설정만 비교하는 기존 발췌입니다. 실제 이미지와 지표 제공 기능은 별도 준비가 필요합니다. CPU 사용률 기반 HPA에는 CPU 요청이 필요하며, 이 예시에 생략된 컨테이너 리소스 요청도 실제 환경에 맞게 설정해야 합니다.
변경 전
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: example/web:v1
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 1
maxReplicas: 10
replicas: 1을 다시 적용하면 HPA가 늘린 복제본 수를 덮어쓸 수 있습니다. 이 값 자체가 HPA를 비활성화하지는 않습니다.
변경 후
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: example/web:v1
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 1
maxReplicas: 10
고정 replicas 선언을 생략합니다. 실제 배포 도구의 필드 관리와 HPA 지표가 올바르게 구성되어야 자동 확장이 유지됩니다.