CKA SimA 05 Kustomize로 HPA 오토스케일러 설정

1 개요[ | ]

kustomize를 활용한 HPA 구성
  • HPA를 base 레벨에 정의하고, overlay(staging/prod)에서 조건별로 오버라이드하는 방식 설명
  • ConfigMap 기반 수평 확장을 제거하고 HPA 리소스를 도입하여 CPU 기반 자동 확장 설정
  • 환경별로 최대 복제본 수(maxReplicas)를 다르게 설정

2 디렉터리 구조[ | ]

  • base: 공통 리소스 정의 (Deployment, ServiceAccount, HPA 기본값)
  • staging: base를 상속하며 네임스페이스 및 일부 속성 수정
  • prod: base를 상속하며 HPA maxReplicas 확장
# tree /opt/course/5/api-gateway
/opt/course/5/api-gateway
├── base
│   ├── api-gateway.yaml
│   └── kustomization.yaml
├── staging
│   ├── api-gateway.yaml
│   └── kustomization.yaml
└── prod
    ├── api-gateway.yaml
    └── kustomization.yaml

3 base 구성[ | ]

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - api-gateway.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-gateway
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: api-gateway
  minReplicas: 2
  maxReplicas: 4
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: api-gateway
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      id: api-gateway
  template:
    metadata:
      labels:
        id: api-gateway
    spec:
      serviceAccountName: api-gateway
      containers:
        - name: httpd
          image: httpd:2-alpine

4 staging 오버레이[ | ]

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../base

patches:
  - path: api-gateway.yaml

transformers:
  - |-
    apiVersion: builtin
    kind: NamespaceTransformer
    metadata:
      name: staging-ns-transformer
    namespace: api-gateway-staging
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-gateway
  labels:
    env: staging

5 prod 오버레이[ | ]

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../base

patches:
  - path: api-gateway.yaml

transformers:
  - |-
    apiVersion: builtin
    kind: NamespaceTransformer
    metadata:
      name: prod-ns-transformer
    namespace: api-gateway-prod
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: api-gateway
spec:
  maxReplicas: 6
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-gateway
  labels:
    env: prod

6 적용[ | ]

# k kustomize /opt/course/5/api-gateway/staging | k apply -f -
serviceaccount/api-gateway unchanged
deployment.apps/api-gateway unchanged
horizontalpodautoscaler.autoscaling/api-gateway created
# k kustomize /opt/course/5/api-gateway/prod | k apply -f -
serviceaccount/api-gateway unchanged
deployment.apps/api-gateway unchanged
horizontalpodautoscaler.autoscaling/api-gateway created

7 결과 확인[ | ]

# k -n api-gateway-staging get hpa api-gateway
NAME          REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
api-gateway   Deployment/api-gateway  0%/50%    2         4         2          1m
# k -n api-gateway-prod get hpa api-gateway
NAME          REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
api-gateway   Deployment/api-gateway  0%/50%    2         6         2          1m

8 마무리 정리[ | ]

  • 기존 ConfigMap horizontal-scaling-config은 더 이상 사용되지 않으므로 수동 삭제 필요
# k -n api-gateway-staging delete cm horizontal-scaling-config
configmap "horizontal-scaling-config" deleted
# k -n api-gateway-prod delete cm horizontal-scaling-config
configmap "horizontal-scaling-config" deleted
  • HPA가 관리하는 Deployment의 replicas: 설정은 HPA가 덮어쓰기 때문에 제거 가능

9 같이 보기[ | ]

10 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}