섹션 8-1: Deploying the Container Application with Kubernetes (32~34)

쌀과자AI·2025년 8월 26일

📌 강의 요약 (섹션 8: Deploying the Container Application with Kubernetes)

1. Kubernetes 개요

  • Kubernetes(K8s): 컨테이너화된 클라우드 네이티브 마이크로서비스 애플리케이션을 오케스트레이션하는 시스템 .
  • 주요 기능:
    • 애플리케이션 배포 및 관리
    • 자동 확장(Auto Scaling)
    • 자체 복구(Self-healing)
    • 무중단 롤링 업데이트(Rolling Update) & 롤백
  • 컨테이너화(Containerization): 애플리케이션과 종속성을 이미지로 묶어 실행하는 방식 (예: Docker).
  • 클라우드 네이티브: 퍼블릭 클라우드뿐 아니라 온프레미스 데이터센터에서도 Kubernetes 위에서 동일하게 실행 가능 .

2. Kubernetes 아키텍처

  • Cluster = Control Plane + Worker Nodes
    • Control Plane (두뇌 역할):
      • API Server: 모든 요청/응답을 처리하는 진입점
      • Scheduler: 워크로드를 어떤 워커 노드에 배치할지 결정
      • etcd: 클러스터 상태 저장소
      • Controller Manager: 애플리케이션 상태 관리, 오토스케일링/롤아웃 담당
      • Cloud Controller Manager: 클라우드 서비스와 연동
    • Worker Node (작업 실행부):
      • kubelet: 컨트롤 플레인과 통신하며 컨테이너 실행
      • kube-proxy: 네트워크 트래픽 라우팅
      • Container Runtime: 실제 컨테이너 실행(Docker, containerd 등)
  • Pod: 컨테이너 실행의 최소 단위. 보통 Deployment/ReplicaSet 같은 상위 컨트롤러를 통해 관리 .

3. Kubernetes 실습 (제공된 YAML/Dockerfile 기반)

  • Pod 생성 (pod.yaml)
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp
    spec:
      containers:
      - name: myapp
        image: manifoldailearning/custom-nginx
        ports:
        - containerPort: 80
    ``` [oai_citation:3‡pod.yaml](file-service://file-9T7Txjrbb2ybqcZeEQtdRs)
    → Nginx 기반 애플리케이션 컨테이너 실행.
  • Deployment & Service (deployment.yaml)
    • Deployment: 애플리케이션 복제(replica=2), 자원 제한, 포트 노출
    • Service (NodePort): 외부에서 접속 가능하도록 30002 포트 매핑 .
  • Rolling Update (rolling-update.yaml)
    • 전략: maxUnavailable=1, maxSurge=2
    • 이미지 버전(v2) 교체 시 무중단 배포 보장 .
  • Config & Secret 사용
    • ConfigMap (cm.yaml): 앱 환경변수를 외부 설정으로 관리 .
    • Secret (secret.yaml): MySQL Root Password 같은 민감 정보 저장 .
  • Service Local (svc-local.yaml): prod 환경 NodePort=30001 서비스 정의 .

4. Kubernetes 설치 및 실행

  • 로컬 환경: Docker Desktop에서 Kubernetes 옵션 활성화 → 단일 노드 클러스터 구축 가능 .
  • 확인 명령어:
    kubectl version --output=yaml

✅ 핵심 정리

  1. Kubernetes = 클라우드 운영체제

    → 클라우드 자원을 추상화하여 애플리케이션 배포/확장/복구를 자동화.

  2. 아키텍처: Control Plane(관리) + Worker Node(실행).

  3. Pod & Controller: Pod은 최소 실행 단위, Deployment 등 고수준 컨트롤러로 관리.

  4. 핵심 기능: Auto-scaling, Self-healing, Rolling Update.

  5. 실습 포인트:

    • Pod / Deployment / Service 정의
    • ConfigMap & Secret 관리
    • Rolling Update 전략 적용

📝 Kubernetes 문제 세트 (섹션 8 기반)

문항 1 (난이도: 하)

Kubernetes의 주요 기능으로 옳지 않은 것은?

① 애플리케이션 자동 배포

② 애플리케이션 자동 확장 (Auto-scaling)

③ 무중단 롤링 업데이트(Rolling Update)

④ 운영체제(OS) 커널 교체

⑤ 장애 발생 시 자체 복구(Self-healing)

✅ 정답: ④

💡 해설: Kubernetes는 컨테이너화된 애플리케이션의 배포, 확장, 복구 등을 관리하지만, OS 커널 교체 기능은 없다.


문항 2 (난이도: 하)

다음 중 클라우드 네이티브 애플리케이션의 특징으로 가장 적절한 것은?

① 반드시 퍼블릭 클라우드에서만 실행되어야 한다.

② 수동 확장만 가능하다.

③ 자동 확장, 무중단 업데이트, 자체 복구 기능을 갖춘다.

④ 로컬 환경에서 실행할 수 없다.

⑤ Windows에서만 동작한다.

✅ 정답: ③

💡 해설: 클라우드 네이티브 앱은 자동 확장, 무중단 롤링 업데이트, 자체 복구 등의 특성을 가지며, 퍼블릭 클라우드뿐 아니라 온프레미스 환경에서도 Kubernetes 위에서 실행할 수 있다.


문항 3 (난이도: 중)

Kubernetes 아키텍처의 Control Plane에 속하지 않는 컴포넌트는?

① API Server

② Scheduler

③ etcd

④ kube-proxy

⑤ Controller Manager

✅ 정답: ④

💡 해설: Control Plane에는 API Server, Scheduler, etcd, Controller Manager, Cloud Controller Manager 등이 포함된다.

반면 kube-proxyWorker Node의 네트워크 컴포넌트이다.


문항 4 (난이도: 중)

다음 YAML 코드에 대한 설명으로 올바른 것은?

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
  - name: myapp
    image: manifoldailearning/custom-nginx
    ports:
    - containerPort: 80

① Deployment를 정의한 매니페스트이다.

② myapp이라는 Pod를 생성하며, Nginx 컨테이너가 실행된다.

③ NodePort 서비스가 자동 생성된다.

④ Secret 기반 환경변수를 설정한다.

⑤ Pod의 replicas 수를 지정하고 있다.

✅ 정답: ②

💡 해설: kind: Pod로 정의된 리소스이며, myapp Pod 안에서 custom-nginx 이미지를 기반으로 컨테이너가 실행된다 .


문항 5 (난이도: 상)

다음 중 Kubernetes의 롤링 업데이트(Rolling Update) 전략에 대한 설명으로 옳은 것을 모두 고르시오.

ㄱ. maxUnavailable은 동시에 다운될 수 있는 Pod의 최대 개수를 의미한다.

ㄴ. maxSurge는 새롭게 추가 생성될 수 있는 Pod의 최대 개수를 의미한다.

ㄷ. 롤링 업데이트는 무중단 배포를 지원한다.

ㄹ. Pod 업데이트 시 반드시 모든 Pod를 종료한 후 새로 시작한다.

① ㄱ, ㄴ

② ㄱ, ㄷ

③ ㄱ, ㄴ, ㄷ

④ ㄴ, ㄷ, ㄹ

⑤ ㄷ, ㄹ

✅ 정답: ③

💡 해설: 롤링 업데이트는 무중단 배포를 지원하며(ㄷ), maxUnavailable과 maxSurge 값을 통해 Pod 교체 방식이 제어된다(ㄱ, ㄴ).

Pod를 모두 종료한 뒤 시작하는 방식은 Recreate 전략이다.

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

0개의 댓글