← 목차
Week 3 · Phase 2 핵심 오브젝트

Worker Node와
핵심 오브젝트

워커 노드가 Pod를 실행하는 원리(kubelet·kube-proxy·containerd)와 Pod 생명주기·Probe·롤링 업데이트
학습 자료 · k8s-worker-components · (심화) containerd
산출물 · 3-tier 앱(Frontend/Backend/Cache) 배포

학습 목표

워커 노드에서 실제로 무슨 일이 일어나는가
  • 워커 3대 컴포넌트 — kubelet · kube-proxy · container runtime(containerd)의 역할을 이해한다
  • Pod 생명주기 — 상태·재시작 정책과 Liveness/Readiness Probe를 설명할 수 있다
  • Deployment — 롤링 업데이트와 롤백을 활용할 수 있다
  • 트러블슈팅 — crictl로 워커 노드에서 직접 진단한다

Worker Node 3대 컴포넌트

Control Plane의 명령을 받아 실제 컨테이너를 띄운다
API Server (Control Plane)→ 원하는 상태 전달 AGENTkubelet노드 대표 · PodSpec 받아컨테이너 생성·상태 보고Probe 실행·재시작 판단 NETWORKkube-proxyService → Pod 라우팅iptables / IPVS 규칙 관리로드밸런싱 RUNTIMEcontainerdCRI로 kubelet과 통신이미지 pull · 컨테이너 실행shim으로 프로세스 관리 kubelet ⇄ (CRI) ⇄ containerd ⇄ (OCI) ⇄ runc → 컨테이너 kubelet은 "무엇을", kube-proxy는 "어디로", containerd는 "어떻게 실행"을 담당

Pod 생명주기 & Probe

상태를 알고, 헬스체크로 자동 복구·트래픽 제어
Lifecycle

Pod 5가지 상태

  • Pending — 스케줄/이미지 pull 대기
  • Running — 컨테이너 정상 실행 중
  • Succeeded / Failed — 정상/비정상 종료
  • Unknown — 노드 통신 불가
  • 재시작 정책: Always · OnFailure · Never
Probe

Liveness vs Readiness

  • Liveness — 실패 시 컨테이너 재시작
  • Readiness — 실패 시 Service에서 제외(트래픽 차단)
  • 방식: httpGet · tcpSocket · exec
  • → 자동 복구 + 무중단 트래픽 라우팅

Deployment — 롤링 업데이트 & 롤백

무중단 배포와 즉시 되돌리기
v1.24 ×3기존 ReplicaSet rollout → v1.24×1 + v1.25×2점진 교체(무중단) → v1.25 ×3새 ReplicaSet rollout undo → 이전 버전으로 즉시 롤백
$ kubectl set image deployment/nginx nginx=nginx:1.25 $ kubectl rollout status deployment/nginx # 진행 확인 $ kubectl rollout undo deployment/nginx # 롤백

라이브 실습 — 핵심 오브젝트 & 트러블슈팅

스크립트로 학습하고, 워커에서 직접 진단
# 실습 1: 인터랙티브 학습 (Namespace→Pod→Deployment→Service→ConfigMap→Secret) $ ./k8s-learn.sh # 실습 2: Worker Node에서 직접 트러블슈팅 (crictl) $ sudo crictl ps # 컨테이너 목록 $ sudo crictl logs <id> # 컨테이너 로그 $ sudo systemctl status kubelet $ sudo journalctl -u kubelet -f

라이브 실습 — Probe 시나리오

헬스체크 동작을 직접 관찰
apiVersion: v1 kind: Pod metadata: {name: probe-demo} spec: containers: - name: app image: nginx livenessProbe: # 실패 → 재시작 httpGet: {path: /, port: 80} initialDelaySeconds: 5 readinessProbe: # 실패 → 트래픽 제외 tcpSocket: {port: 80}

과제 — 3-tier 앱 배포

배운 오브젝트를 실제 앱으로
Deploy

3-tier 애플리케이션

  • Frontend — Nginx Deployment
  • Backend — Node.js Deployment
  • Cache — Redis Deployment
  • → Deployment 3개로 구성
심화 과제

Probe · Config 실습

  • Liveness를 일부러 실패 → 재시작 횟수 관찰·분석
  • ConfigMap을 환경변수로
  • Secret을 볼륨 마운트로 같은 Pod에 사용

체크리스트 & 다음 주

이걸 할 수 있으면 Week 3 완료
  • kubelet · kube-proxy · container runtime의 역할을 설명할 수 있다
  • Pod의 5가지 상태(Pending/Running/Succeeded/Failed/Unknown)를 안다
  • crictl로 컨테이너 로그·상태를 확인할 수 있다
  • Deployment 롤백을 실행할 수 있다
→
다음 주(Week 4) — 네트워킹: Service 타입, Ingress 라우팅, CoreDNS, CNI 비교로 서비스를 노출합니다.