쿠버네티스 디플로이먼트(Deployment)
☀️ 디플로이먼트 개념
쿠버네티스 디플로이먼트(Kubernetes Deployment)는 애플리케이션을 배포(Deploy)하고 관리하는 가장 중요한 리소스 중 하나입니다.
Deployment를 사용하면 Pod 및 ReplicaSet을 자동으로 생성, 업데이트, 롤백 및 확장할 수 있습니다.
쿠버네티스에서 Deployment는 애플리케이션의 선언적(Declarative) 방식의 배포 및 관리를 지원하여 운영 자동화를 가능하게 합니다.
1. 디플로이먼트의 주요 기능
(1) 애플리케이션 배포 자동화
- 새로운 버전의 애플리케이션을 쉽게 배포 가능.
(2) 롤링 업데이트(Rolling Update) 지원
- 애플리케이션을 중단 없이 새로운 버전으로 업데이트 가능.
(3 ) 자동 롤백 지원
- 업데이트 중 오류 발생 시 이전 버전으로 자동 복구 가능.
(4) 자동 스케일링(Scaling)
kubectl scale
또는HorizontalPodAutoscaler(HPA)
를 통해 자동 확장 가능.
(5) Self-healing(자가 복구)
- Pod 장애 발생 시 자동으로 새로운 Pod를 생성하여 애플리케이션 가용성을 보장.
2.디플로이먼트의 기본 구조
디플로이먼트는 ReplicaSet을 관리하며, ReplicaSet은 Pod를 관리하는 구조입니다.
- Deployment: 애플리케이션을 관리하는 최상위 리소스.
- ReplicaSet: 동일한 Pod의 복제본을 관리하고, Pod가 실패할 경우 자동으로 새로운 Pod를 생성.
- Pod: 컨테이너를 실행하는 최소 실행 단위.
3. 디플로이먼트 매니페스트 예제
아래는 Nginx 웹 서버를 배포하는 쿠버네티스 Deployment 매니페스트 예제입니다.
- File Name : nginx-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 # Pod 복제본 수 selector: matchLabels: app: nginx-deploy template: metadata: labels: app: nginx-deploy spec: containers: - name: nginx image: nginx:latest # 사용할 컨테이너 이미지 ports: - containerPort: 80 # 컨테이너 내부 포트
📌 설명
- replicas: 3 → 동일한 Pod 3개를 생성하여 가용성을 확보.
- selector.matchLabels.app: nginx-deploy→ Pod를 선택하는 기준.
- template.metadata.labels.app: nginx-deploy→ 생성할 Pod의 라벨 설정
- containers.image: nginx:latest → 사용할 컨테이너 이미지.
- ports.containerPort: 80 → 컨테이너 내부에서 사용할 포트 지정.
4. 디플로이먼트 명령어
✅ 디플로이먼트 생성
- 위 매니페스트 파일을 적용하여 Deployment를 생성.
✅ 디플로이먼트 조회
- 현재 배포된 Deployment, Pod, ReplicaSet 목록을 확인.
✅ 디플로이먼트 상세 정보 조회
nginx-deployment
의 상세 정보 확인.
✅ 디플로이먼트 삭제
nginx-deployment
를 삭제하여 관련된 모든 Pod 및 ReplicaSet 제거.
5. 디플로이먼트 업데이트 및 롤백
📌주요 kubectl set 과 rollout 명령어
kubectl set image deployment/<배포 이름> my-container=my-image:1.19.0 -> 배포의 컨테이너 이미지를 업데이트
kubectl rollout status deployment/<배포 이름> -> 배포의 현재 롤아웃 상태를 확인.
kubectl rollout history deployment/<배포 이름> -> 배포의 롤아웃 기록을 확인.
kubectl rollout undo deployment/<배포 이름> -> 배포를 이전 버전으로 롤백.
kubectl rollout restart deployment/<배포 이름> -> 배포를 재시작.
✅ 디플로이먼트 이미지 업데이트
Deployment는 애플리케이션을 무중단으로 업데이트할 수 있도록 롤링 업데이트(Rolling Update)를 지원합니다.
- 기존
nginx:latest
를nginx:1.19.0
으로 변경. - 쿠버네티스가 새로운 버전의 Pod를 점진적으로 배포(롤링 업데이트).
✅ 업데이트 상태 확인
- 롤링 업데이트의 진행 상황 확인.
✅ 업데이트 롤백
새로운 버전이 문제가 있을 경우 롤백할 수 있습니다.
- 이전 버전으로 즉시 롤백.
✅ 업데이트 기록 확인
6. 디플로이먼트 스케일링(Scaling)
✅ 수동 스케일링
- 기존
replicas: 3
에서replicas: 5
로 변경.
✅ 자동 스케일링 (HPA)
쿠버네티스는 HorizontalPodAutoscaler(HPA)
를 사용하여 CPU 사용량에 따라 자동으로 Pod 개수를 조정할 수 있습니다.
- CPU 사용률이 50%를 넘으면 최소 2개, 최대 10개까지 Pod를 자동 확장.
7. 디플로이먼트 전략
쿠버네티스는 Pod를 업데이트하는 방식으로 두 가지 전략을 제공합니다.
- RollingUpdate (기본값)
- 새 버전의 Pod를 점진적으로 생성하고, 기존 Pod를 하나씩 제거.
- 애플리케이션이 무중단 배포 가능.
- Recreate
- 기존 Pod를 모두 삭제한 후 새로운 버전의 Pod를 생성.
- 서비스 중단이 발생할 수 있음.
✅ RollingUpdate 전략 설정 예제
📌정리
기능 | 설명 |
---|---|
배포(Deploy) | 새로운 애플리케이션을 배포 |
스케일링(Scaling) | 애플리케이션의 가용성을 위해 Pod 개수 조정 |
업데이트(Update) | 롤링 업데이트를 통해 무중단 배포 지원 |
롤백(Rollback) | 문제 발생 시 이전 버전으로 복원 |
Self-healing | Pod 장애 발생 시 자동 복구 |
쿠버네티스 디플로이먼트는 애플리케이션의 배포와 업데이트를 자동으로 관리하는 핵심 요소입니다.
롤링 업데이트, 자동 롤백, 스케일링, Self-healing 기능을 통해 가용성을 보장하며, 지속적인 배포(CI/CD)에도 최적화되어 있습니다.
디플로이먼트를 효과적으로 활용하면 안정적이고 확장 가능한 애플리케이션 운영이 가능합니다.