클라우드응용SW개발

[Cloud] 12주차-3. Kubernetes Deployment 실습

tryinto_gmlt 2026. 6. 4. 03:23

⭐ 핵심 개념 정리

Deployment

Pod와 ReplicaSet에 대한 관리를 제공하는 단위다. 단순히 Pod를 실행하는 것을 넘어, 아래와 같은 기능을 포함한다.

  • Self-healing : Pod가 삭제되거나 죽으면 자동으로 다시 생성한다
  • Scaling : replica 수를 조정해 Pod 개수를 동적으로 늘리거나 줄인다
  • Rollout : 서비스 중단 없이 새로운 버전으로 업데이트한다

Service

쿠버네티스에 배포한 Pod를 외부에서 접근하기 쉽게 추상화한 리소스다.

  • Pod는 생성될 때 IP를 할당받지만, 죽었다가 다시 살아나는 과정에서 IP가 재할당되기 때문에 고정된 IP로 접근할 수 없다
  • 따라서 클러스터 외부 또는 내부에서 Pod에 접근할 때는 Pod IP가 아닌 Service를 통해 접근한다
  • Service는 고정된 IP를 가지며, 하나 또는 여러 개의 Pod와 매칭된다

 

⭐ Deployment YAML 파일 작성하기

1) Deployment를 정의할 YAML 파일을 작성한다.

vi deployment.yaml을 실행해 vi 편집기를 열고, i를 눌러 입력 모드로 들어간 뒤 아래 내용을 입력한다.

nginx 컨테이너를 실행하는 Pod를 3개 생성하도록 설정한 코드이다.

vi deployment.yaml
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

 

입력 후 Esc:wq를 입력해 저장하고 종료한다.

 

2) 작성한 deployment.yaml 파일 내용이 제대로 저장되었는지 확인한다.

cat deployment.yaml

 

⭐ 클러스터 시작 및 Deployment 생성하기

1) Docker 드라이버를 사용하여 minikube 클러스터를 시작한다.

minikube start --driver=docker

 

2) deployment.yaml 파일을 클러스터에 적용하여 Deployment를 생성한다.

kubectl apply -f deployment.yaml

 

3) Pod 생성 상태를 확인한다. replicas: 3 설정이 반영되어 nginx Pod 3개가 생성되는 것을 확인할 수 있다.

kubectl get pod

 

⭐ Self-healing 확인하기

1) 실행 중인 Pod 중 하나를 삭제한다. Pod 이름은 kubectl get pod로 확인한 이름을 사용한다.

kubectl delete pod {삭제할 Pod 이름}

 

2) 삭제 직후 Pod 목록을 다시 확인한다.

Deployment가 삭제된 Pod를 자동으로 새로 생성해 총 3개의 Pod가 Running 상태로 유지되는 것을 확인할 수 있다.

kubectl get pod

 

Deployment는 지정된 replica 수를 항상 유지하기 위해 삭제된 Pod를 자동으로 다시 생성한다.
이것이 Self-healing이다.

 

⭐ Replica 수 조정하기 (Scale)

1) Replica 수를 10개로 확장한다.

kubectl scale deployment/nginx-deployment --replicas=10

 

2) Deployment와 Pod 상태를 확인한다. Deployment가 10/10 READY 상태가 되고, Pod 10개가 Running 상태로 확인된다.

kubectl get deployment
kubectl get pod

 

3) Replica 수를 1개로 축소한다.

kubectl scale deployment/nginx-deployment --replicas=1

 

4) Pod 상태를 확인한다. 불필요해진 Pod들이 Terminating 상태를 거친 뒤, 최종적으로 Pod 1개만 Running 상태로 남는다.

kubectl get pod

 

5) Pod 상태 변화를 실시간으로 확인한다. 종료 시 Ctrl + C를 누른다.

kubectl get pod -w

 

⭐ Deployment 삭제하기

1) nginx-deployment를 삭제하고, Pod가 정상적으로 종료되는지 실시간으로 확인한다.

Deployment를 삭제하면 해당 Deployment가 관리하던 Pod도 함께 종료된다.

kubectl delete deployment nginx-deployment
kubectl get pod -w

 

2) 모든 Pod가 종료되었는지 최종 확인한다.

kubectl get pod