[Kubernetes] Application Lifecycle Management (Rolling Updates and Rollbacks, ConfigMap, Secret, Multi/Init/SideCar Containers, HPA, VPA)

Xabi·2025년 9월 3일

kubernetes

목록 보기
12/20

Rolling Updates and Rollbacks

Create

kubectl create -f deployment.yaml

Get

kubectl get deployments

Update

kubectl edit deploy myapp-deployment (yaml 기준 -> 수정 후 대기하면 자동 재배포)
kubectl apply -f deployment.yaml (파일 기준)
kubectl set image deployment/myapp-deployment nginx=nginx:1.9.1 (명령어)

Status

kubectl rollout status deployment/myapp-deployment
kubectl rollout history deployment/myapp-deployment

Rollback

kubectl rollout undo deployment/myapp-deployment

Rollout

kubectl rollout status deployment/myapp-deployment
kubectl rollout history deployment/myapp-deployment

ConfigMap / Secret

Create configmaps or secrets and inject into Pod

Secret

Secret 주의 사항

RBAC - Role Based Access Control

Multi Containers

하나의 파드에 여러 개의 컨테이너들이 동시에 프로세스가 수행되는 형태이다.
Log 메트릭 수집용 SideCar 컨테이너도 여기에 포함된다.

kubectl -n elastic-tack exec -it 'pod-name' -- cat /log/pod.log

Init Containers

하나의 파드에 주 컨테이너를 시작하기 전 가장 먼저 시작하는 컨테이너로 프로세스가 끝난 뒤에 메인 컨테이너가 동작한다.

멀티 SideCar Container

시험에서 사이드카 컨테이너가 나오면 전통적 방식대로 멀티 컨테이너 구조로 작성한다. containers:에 같이 실행되는 보조 컨테이너로 작성한다.

전통 사이드카 구현

containers:
- name: sidecar-log-shipper

신규 알파 init container 구현

initContainers:
- name: my-sidecar
  image: busybox
  restartPolicy: Always

Init Container vs Sidecar Container 요약

기본 개념

  • Init Container: 메인 컨테이너 시작 전 실행 → 반드시 종료 → 메인 컨테이너 시작
  • Sidecar Container: 메인 컨테이너와 함께 실행되는 보조 컨테이너

Init Container의 특징

  • 순차 실행: 여러 개 있으면 하나씩 순서대로
  • 반드시 종료: 종료되지 않으면 메인 컨테이너 시작 안됨
  • 용도: 초기화, 의존성 체크, DB 마이그레이션 등

새로운 Sidecar 패턴 (K8s 1.29+)

initContainers:
- name: sidecar
  image: logging-agent
  restartPolicy: Always  # 핵심!
  • 먼저 시작 + 계속 실행 = 완벽한 사이드카
  • 시작 순서 보장하면서도 지속적으로 실행

핵심 차이점

구분기존 Init새로운 Sidecar기존 Sidecar
시작 시점메인 앞메인 앞메인과 동시
생명주기종료계속 실행계속 실행
순서 보장

결론: restartPolicy: Always를 가진 Init Container = 순서 보장되는 Sidecar

(2025) HPA, VPA

CKA 시험 대비: HPA & VPA 완벽 정리

CKA(Certified Kubernetes Administrator) 시험에서 자주 출제되는 HPA(Horizontal Pod Autoscaler)VPA(Vertical Pod Autoscaler)에 대해 쉽게 정리. 또한, metrics-server나 VPA 설치가 안 된 경우 어떻게 대처해야 하는지도 포함.


1. HPA (Horizontal Pod Autoscaler)

📌 개념

  • Pod의 개수를 자동으로 늘리거나 줄이는 기능
  • CPU/메모리 사용량 또는 Custom Metrics를 기준으로 동작
  • 워크로드의 가로 확장(Scale Out / Scale In) 담당

📌 동작 원리

  1. metrics-server가 Pod의 리소스 사용량 수집
  2. HPA가 목표치와 비교
  3. Deployment/ReplicaSet의 replicas 값 조정 → Pod 개수 변화

📌 YAML 예시

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

➡ CPU 평균 사용량이 50%를 넘으면 Pod를 늘리고, 미만이면 줄임.


📌 명령어 예시

kubectl autoscale deployment myapp --cpu-percent=50 --min=2 --max=10
kubectl get hpa

2. VPA (Vertical Pod Autoscaler)

📌 개념

  • Pod 개수는 그대로 두고, CPU/Memory 리소스 요청(requests/limits)을 자동 조정
  • 워크로드의 세로 확장(Scale Up / Scale Down) 담당

📌 모드 종류

  • Off : 추천만 제공 (Pod에는 적용 X)
  • Initial : Pod 생성 시에만 적용
  • Auto : 자동으로 Pod 재시작하며 리소스 값 적용

📌 YAML 예시

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: myapp-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind: Deployment
    name: myapp
  updatePolicy:
    updateMode: "Auto"   # Off, Initial, Auto 가능

➡ 위 설정은 myapp Deployment의 Pod 리소스를 VPA가 자동 조정하도록 설정.


3. HPA vs VPA 비교

구분HPA (가로 확장)VPA (세로 확장)
대상Pod 개수Pod 리소스(CPU/Memory)
동작replicas 조정requests/limits 조정
특징Metrics Server 필요별도 설치 필요
장점트래픽 급증 시 확장 용이리소스 부족/낭비 방지
단점Pod당 리소스는 그대로Pod 재시작 필요, HPA와 충돌 가능

4. metrics-server, VPA 설치 안 되어있을 때

📌 metrics-server 미설치 시

  • kubectl top nodes / kubectl top pods가 안 되면 metrics-server 없음
  • HPA 동작 불가 → 설치 필요
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl -n kube-system get pods | grep metrics-server
kubectl top nodes

👉 문제에서 설치 지시가 없으면, 설치 대신 HPA YAML 작성만 요구될 수 있음.


📌 VPA 미설치 시

  • VPA는 기본 포함 X → CRD 설치 필요
  • 문제에서 설치 지시가 있으면 제공된 manifest 사용
kubectl apply -f vpa-install.yaml
kubectl get crd | grep vpa

👉 CRD(verticalpodautoscalers.autoscaling.k8s.io) 확인 후 사용.
👉 설치 지시 없으면 리소스 정의 작성만 하면 됨.


5. 시험 전략 요약

  • HPA

    • metrics-server 필요
    • kubectl autoscale / kubectl get hpa 자주 출제
  • VPA

    • 별도 설치 필요
    • updateMode: Off, Initial, Auto 반드시 기억

✅ 정리:

  • HPA = Pod 개수 조절
  • VPA = Pod 리소스 조절
  • 설치 여부는 문제 지시사항에 따라 달라짐
profile
롱런하는 개발자!

0개의 댓글