• kubernetes
  • certification

쿠버네티스 기본 오브젝트: Pod, ReplicaSet, Deployment, Service

CKA를 준비하며 Pod, ReplicaSet, Deployment, Service의 역할과 서로의 관계를 매니페스트와 함께 정리한다.

시리즈 · Kubernetes1 / 4
  1. 쿠버네티스 기본 오브젝트: Pod, ReplicaSet, Deployment, Service
  2. 쿠버네티스 Volume: PV, PVC, StorageClass
  3. kubeadm으로 쿠버네티스 클러스터 업그레이드하기
  4. CKA 2025 개정 시험 합격 후기

CKA를 준비하며 Pod, ReplicaSet, Deployment, Service의 개념을 정리했다. 하나씩 보면 헷갈리고, 같이 놓고 봐야 관계가 이해된다.

Pod

  • 쿠버네티스에서 만들 수 있는 가장 작은 배포 단위이다.
  • 1개 이상의 컨테이너로 구성되며, 같은 Pod 안의 컨테이너끼리는 네트워크와 스토리지를 공유한다. 서로 localhost로 접근할 수 있다.
  • 다중 컨테이너 구성도 가능하지만 흔하지는 않다.

nginx:1.14.2 이미지를 실행하는 컨테이너 하나로 구성된 Pod는 다음과 같다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

명령어로 바로 실행해도 된다.

kubectl run nginx --image=nginx:1.14.2

ReplicaSet

  • Pod의 실행 개수를 안정적으로 유지하는 역할을 한다. 명시한 개수만큼 동일한 Pod가 떠 있도록 보장한다.
  • 특정 Label을 기준으로 관리할 Pod를 고른다.
  • 개수는 보장하지만 업데이트는 지원하지 않는다. 템플릿을 수정해도 기존 Pod는 그대로이고, 삭제 후 다시 만들어져야 반영된다. 그래서 단독으로 쓰기보다는 Deployment의 일부로 사용된다.
  • ReplicationController와 동작은 같지만, ReplicaSet은 더 풍부한 표현식의 selector를 지원한다.

ReplicaSet이 selector의 matchLabels와 일치하는 라벨을 가진 Pod를 관리하는 구조

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 3 # 유지할 Pod의 수
  selector: # 어떤 Pod를 관리할 것인지
    matchLabels:
      tier: frontend
  template: # 어떤 Pod를 만들 것인지
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3

template으로 Pod를 만들고 selector로 관리 대상을 고르므로, selector.matchLabels와 template.metadata.labels는 일치해야 한다.

kubectl get rs
kubectl replace -f replicaset-definition.yml   # 수정된 yml 파일 적용
kubectl scale --replicas=6 <type> <name>       # replica 수 변경

Deployment

  • Pod와 ReplicaSet에 대한 선언적 업데이트를 제공한다. 원하는 상태를 선언하면 그 상태에 맞게 Pod와 ReplicaSet이 변경된다.
  • 애플리케이션 배포와 업데이트를 관리하는 상위 오브젝트로, ReplicaSet을 관리하는 컨트롤러 역할을 한다.
  • 롤링 업데이트와 롤백을 지원한다.

Deployment가 ReplicaSet을, ReplicaSet이 Pod를 관리하는 계층 구조

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Service

  • Pod는 각자 독립된 네트워크와 스토리지를 갖는다.
  • Pod끼리 통신하거나 외부 트래픽이 Pod에 접근할 수 있도록 연결해 주는 네트워킹 오브젝트가 Service이다.
  • 타입으로는 ClusterIP, NodePort, LoadBalancer가 있다.

참고