섹션 8-3: Deploying the Container Application with Kubernetes (38~43)

쌀과자AI·2025년 8월 26일

📌 강의 내용 요약 (섹션 8-3)

1. 애플리케이션 스케일링 (Scaling the Application)

  • 수동 스케일링: kubectl apply -f deployment.yaml을 통해 replicas 수를 변경.
    • 예: 5 → 10 (스케일 업), 5 → 2 (스케일 다운).
  • 검증 방법:
    • kubectl get pods → 실제 실행 중인 Pod 수 확인
    • kubectl get deploy → Desired / Current 상태 확인
  • 실제 운영 환경에서는 보통 Horizontal Pod Autoscaler (HPA)를 사용하여 자동 스케일링 수행.
  • 핵심: Deployment 오브젝트를 통해 셀프힐링(Self-healing)스케일링을 모두 지원한다.

2. 롤링 업데이트 (Performing Rolling Update)

  • 문제 상황: 기존 Pod(V1)을 모두 내려버리고 새 버전(V2)을 올리면 서비스 중단(downtime) 발생.
  • 해결 방법: Rolling Update 전략
    • 새 버전 Pod(V2)을 하나 띄움 → 정상 동작 확인 후 기존 Pod(V1) 제거 → 반복.
    • 항상 서비스가 지속되므로 무중단 배포(Zero downtime) 가능.
  • 구성 요소 (rolling-update.yaml):
    • minReadySeconds: 45 → Pod 업데이트 후 45초 대기(안정성 확보)
    • strategy.type: RollingUpdate
    • maxUnavailable: 1 → 업데이트 시 동시에 비활성화 가능한 Pod 수
    • maxSurge: 2 → 업데이트 중 동시에 추가로 생성할 수 있는 Pod 수
  • 명령어:
    • kubectl rollout status deployment myapp-deployment → 업데이트 진행 상황 확인
    • 결과: 서비스 중단 없이 V1 → V2 전환 완료

3. ConfigMaps

  • 정의: 애플리케이션의 설정값을 Key-Value 형태로 관리하는 Kubernetes 오브젝트.
  • 특징:
    • 코드와 설정 분리(Decoupling) → 애플리케이션을 재빌드/재배포하지 않고 설정 변경 가능
    • Immutable → 수정 시 새 ConfigMap 생성 필요
  • 활용 방법:
    • 환경변수로 주입: envFrom.configMapRef 사용
    • Volume으로 마운트 → 설정 파일로 사용 가능
  • 실습 예시:
    • kubectl create configmap app-config --from-literal=DB_URL=mysql://...
    • Pod에서 envFrom: configMapRef로 주입 → 컨테이너 내부 env 확인 시 반영됨

4. Secrets

  • 정의: 비밀번호, API 키, 인증서 같은 민감한 데이터를 안전하게 저장하는 오브젝트.
  • 특징:
    • ConfigMap과 달리 민감 데이터는 Base64로 인코딩되어 노출 최소화
    • 마찬가지로 Immutable (변경 시 새 Secret 생성)
  • 활용 방법:
    • 환경변수로 주입: env.valueFrom.secretKeyRef
    • Volume으로 마운트: Pod 내부 파일로 전달 가능
  • 실습 예시:
    • kubectl create secret generic db-secret --from-literal=DB_PASSWORD=pass123
    • Pod에서 MYSQL_ROOT_PASSWORD 환경변수로 사용

5. Kubernetes 워크플로우 요약

  1. 마이크로서비스 개발 → 독립적인 컨테이너로 패키징(Dockerfile, index.html)
  2. YAML 매니페스트 작성 → Pod, Deployment, Service, ConfigMap, Secret 등 정의
  3. Kubernetes에 배포 (kubectl apply -f ...)
  4. 고수준 컨트롤러 활용 → Deployment, DaemonSet, CronJob 등
  5. 확장/업데이트/보안 관리 → Scaling, Rolling Update, ConfigMap, Secret 활용

핵심 정리

  • Scaling: Deployment replicas 변경 (수동 vs HPA 자동)
  • Rolling Update: minReadySeconds, maxUnavailable, maxSurge 설정으로 무중단 배포
  • ConfigMaps: 설정값을 코드와 분리하여 관리 (환경변수/볼륨 주입 가능)
  • Secrets: 민감 데이터를 안전하게 관리 (환경변수/볼륨 주입, Base64 인코딩)
  • 전체 워크플로우: 코드 → 컨테이너 → YAML 매니페스트 → Kubernetes 배포

📘 Kubernetes (섹션 8-3) 문제 세트

문항 1) (난이도: 하)

다음 중 Kubernetes Deployment의 주요 기능으로 옳지 않은 것은 무엇인가? [3점]

① 애플리케이션 Pod의 자동 복구(Self-healing)

② 애플리케이션 버전 무중단 배포(Rolling Update)

③ 애플리케이션 설정값 관리(Config 저장)

④ 애플리케이션 수평 확장(Scaling)

정답:

해설: Config 저장은 Deployment의 기능이 아니라 ConfigMap/Secret의 역할이다. Deployment는 Self-healing, Scaling, Rolling Update 등을 제공한다.


문항 2) (난이도: 하)

Kubernetes에서 ConfigMapSecret에 대한 설명으로 옳은 것을 모두 고르시오. [3점]

ㄱ. ConfigMap은 Key-Value 형태로 일반 설정을 저장한다.

ㄴ. Secret은 ConfigMap과 달리 Base64 인코딩을 통해 민감정보를 안전하게 저장한다.

ㄷ. ConfigMap과 Secret은 모두 수정 시 새로운 객체를 생성해야 한다.

ㄹ. Secret은 오직 환경 변수로만 사용할 수 있다.

① ㄱ, ㄴ

② ㄱ, ㄷ

③ ㄴ, ㄷ

④ ㄱ, ㄴ, ㄷ

⑤ ㄱ, ㄴ, ㄷ, ㄹ

정답:

해설: ㄱ, ㄴ, ㄷ은 모두 올바르다. 하지만 ㄹ은 틀렸다. Secret은 환경 변수뿐만 아니라 Volume으로도 주입 가능하다.


문항 3) (난이도: 중)

다음은 rolling-update.yaml의 일부이다. maxUnavailable과 maxSurge의 의미를 각각 올바르게 설명한 것은 무엇인가? [4점]

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1  
    maxSurge: 2

① maxUnavailable: 동시에 업데이트 가능한 Pod의 최대 개수, maxSurge: 동시에 추가 생성할 수 있는 Pod의 최대 개수

② maxUnavailable: 삭제될 수 있는 Pod의 최대 개수, maxSurge: 노드 확장 시 생성 가능한 Pod 수

③ maxUnavailable: 동시에 유지되는 최소 Pod 수, maxSurge: Pod가 실행되는 최대 시간

④ maxUnavailable: Pod 업데이트 대기 시간, maxSurge: 동시에 배포되는 ReplicaSet의 수

정답:

해설: Rolling Update 전략에서 maxUnavailable=1은 업데이트 중 동시에 비활성화될 수 있는 Pod 수, maxSurge=2는 원하는 개수보다 추가로 생성 가능한 Pod 수를 의미한다 .


문항 4) (난이도: 중)

아래 cm.yaml을 적용했을 때, Pod 내부에서 env 명령어를 실행하면 확인할 수 있는 환경 변수 값으로 올바른 것은 무엇인가? [4점]

apiVersion: v1
kind: Pod
metadata:
  name: app-pod
spec:
  containers:
  - name: app-container
    image: nginx
    envFrom:
    - configMapRef:
        name: app-config

① ConfigMap의 키-값 쌍이 Pod의 환경 변수로 로드된다.

② Pod의 모든 환경 변수가 Secret에서 가져온 값으로 대체된다.

③ ConfigMap 데이터는 Volume으로만 접근 가능하다.

④ Pod 내부에서는 ConfigMap을 참조할 수 없다.

정답:

해설: envFrom.configMapRef는 ConfigMap의 Key-Value를 Pod 환경 변수로 주입한다 .


문항 5) (난이도: 상)

다음 <보기>는 Kubernetes 수동 스케일링자동 스케일링(HPA)에 대한 설명이다. 옳은 것을 모두 고르시오. [4점]

<보기>

ㄱ. 수동 스케일링은 kubectl apply -f deployment.yaml에서 replicas 값을 변경하여 수행한다.

ㄴ. HPA(Horizontal Pod Autoscaler)는 CPU, 메모리 등의 리소스 사용량을 기준으로 Pod 개수를 자동 조절한다.

ㄷ. 수동 스케일링은 운영 환경에서 더 자주 사용되며, 자동 스케일링은 실습 환경에서만 사용된다.

ㄹ. HPA는 Deployment나 ReplicaSet과 같은 컨트롤러 리소스를 기반으로 동작한다.

① ㄱ, ㄴ

② ㄱ, ㄷ

③ ㄱ, ㄴ, ㄷ

④ ㄱ, ㄴ, ㄹ

⑤ ㄱ, ㄷ, ㄹ

정답:

해설: ㄱ은 강의 대본에서 소개된 방식 , ㄴ은 HPA 정의, ㄹ은 HPA의 실제 동작 방식이다. ㄷ은 반대로 설명되어 틀렸다. 실제 운영 환경에서는 자동 스케일링이 일반적이다.


profile
AI에 관심이 많은 23살 대학생입니다.

0개의 댓글