9강예상 3분중급
[요약] Part 2. 쿠버네티스를 움직이는 4가지 핵심 요소
Part 2. 쿠버네티스의 항해술의 핵심 내용(Pod, Deployment, Service, Ingress)을 불릿 포인트로 정리하는 요약 회차입니다.
지금까지 우리는 쿠버네티스라는 거대한 배를 움직이는 가장 필수적인 4가지 톱니바퀴를 살펴보았습니다. 실무에서 쿠버네티스를 다룬다는 것은 결국 이 4가지 컴포넌트(Pod, Deployment, Service, Ingress)의 YAML 파일을 작성하고 엮어내는 과정이라고 해도 과언이 아닙니다. 이번 회차에서는 Part 2의 핵심 내용들을 한눈에 복습하고 암기하기 쉽게 요약해 보겠습니다.
1. 파드 (Pod): 쿠버네티스의 최소 배포 단위
- 가장 작은 실행 단위: 쿠버네티스는 컨테이너를 직접 실행하지 않고, 파드(Pod)라는 껍질로 감싸서 배포합니다.
- 자원 공유: 같은 파드 안에 있는 컨테이너들은 네트워크(IP, `localhost`)와 스토리지(Volume)를 공유하며 긴밀하게 협력합니다.
- 일시적인 존재 (Ephemeral): 파드는 오류가 나면 언제든 삭제되고 새로운 IP와 함께 재생성되는 소모품(Cattle)입니다.
- 무상태 설계 (Stateless): 언제 죽을지 모르므로, 파드 내부의 임시 디스크에 중요한 사용자 데이터를 저장해서는 안 됩니다.
2. 디플로이먼트 (Deployment): 강력한 자가 치유와 배포 관리
- 파드의 수호자: 개별 파드를 직접 띄우지 않고, 반드시 디플로이먼트를 통해 파드를 간접적으로 생성하고 관리해야 합니다.
- 레플리카셋 (ReplicaSet) 내장: 사용자가 원하는 파드의 개수(Replicas)를 항상 유지하도록 끊임없이 감시하고 복구합니다.
- 자가 치유 (Self-Healing): 특정 노드가 죽어 파드가 소실되어도, 다른 건강한 노드에 새로운 파드를 자동으로 생성해 냅니다.
- 무중단 배포 지원: 애플리케이션 버전을 업데이트할 때, 구버전 파드와 신버전 파드를 교차하며 중단 없이 교체하는 롤링 업데이트(Rolling Update)를 수행합니다.
3. 서비스 (Service): 고정된 접속 진입점 제공
- IP 변경 문제 해결: 파드는 재생성될 때마다 IP가 바뀌므로, 클라이언트가 직접 파드의 IP를 추적하여 통신할 수 없습니다.
- 단일 간판 역할: 서비스는 뒷단의 파드들이 죽고 살아나기를 반복해도 절대 변하지 않는 '고정된 가상 주소'를 제공합니다.
- 라벨 셀렉터 매칭: 서비스 설정의 `selector`와 파드의 `label`을 매칭하여, 트래픽을 받을 목적지 파드들을 동적으로 추적합니다.
- 서비스 타입 분류:
- `ClusterIP`: 클러스터 내부용 기본 통신
- `LoadBalancer`: 외부 클라우드 장비와 연동하여 퍼블릭 IP 할당
4. 인그레스 (Ingress): 외부 트래픽의 지능형 길잡이
- 비용과 관리의 효율성: 서비스마다 개별 로드밸런서를 달면 비용이 급증하므로, 클러스터 앞단에 단일 진입점을 두어 통합 관리합니다.
- L7 기반 스마트 라우팅: HTTP 요청의 '도메인 이름(Host)'과 'URL 경로(Path)'를 꼼꼼히 분석하여 알맞은 백엔드 서비스로 트래픽을 쪼개줍니다.
- 예: `/api` 경로는 API 서비스로, `/` 경로는 프론트엔드 서비스로 분기.
- 인그레스 컨트롤러 필수: 인그레스 YAML은 단순한 '이정표'이며, 실제로 트래픽을 받아 분산 처리하려면 Nginx 등의 '인그레스 컨트롤러'를 별도로 설치해야 합니다.
4대 천왕 종합 매니페스트 예시
# 파드 생성을 보장하는 디플로이먼트
apiVersion: apps/v1
kind: Deployment
metadata: { name: web-deploy }
spec:
replicas: 3
selector: { matchLabels: { app: web } }
template: # 이하 Pod 정의
metadata: { labels: { app: web } }
spec:
containers: [{ name: nginx, image: nginx:latest }]
---
# 고정 IP를 부여하는 서비스
apiVersion: v1
kind: Service
metadata: { name: web-service }
spec:
selector: { app: web }
ports: [{ port: 80, targetPort: 80 }]
---
# 도메인 기반 라우팅을 담당하는 인그레스
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: { name: web-ingress }
spec:
rules:
- host: my-shop.com
http:
paths:
- path: /
pathType: Prefix
backend:
service: { name: web-service, port: { number: 80 } }위 코드는 파드(Deployment 내포) -> 서비스 -> 인그레스로 이어지는 전체 트래픽 흐름의 기본 뼈대입니다.
개념 퀴즈
퀴즈 답을 맞춰야 학습 완료가 됩니다.다음 중 쿠버네티스의 4가지 핵심 컴포넌트와 그 역할이 올바르게 짝지어지지 않은 것은?
3줄 요약
- 1Pod와 Deployment는 애플리케이션을 띄우고 안정적인 개수로 유지(자가 치유)하는 '실행과 관리'의 영역입니다.
- 2Service는 변하는 파드 IP를 감추고 고정된 진입점을 만들어주는 '연결'의 영역입니다.
- 3Ingress는 외부의 트래픽을 분석해 적절한 서비스로 분배해 주는 '스마트 라우팅'의 영역입니다.