Deployment는 애플리케이션을 관리하고 자동으로 배포하는 객체로, 주로 애플리케이션의 상태를 선언적으로 정의하는 데 사용된다. Deployment는 애플리케이션의 여러 인스턴스를 안정적으로 운영하고, 롤링 업데이트, 롤백, 확장과 같은 작업을 간단하게 수행할 수 있도록 해 준다.
Deployment의 구성 요소
- Pod: 각 Deployment는 여러 개의 Pod를 관리한다.
- ReplicaSet: Deployment가 관리하는 Pod의 복제본을 유지하는 역할을 하며, 특정 수의 Pod가 항상 실행 중인지 보장한다.
- Label Selector: Deployment는 Label을 사용하여 어떤 Pod가 관리 대상인지를 지정한다.
Deployment의 주요 기능
- 애플리케이션 배포 및 관리:
- Deployment를 사용하면 애플리케이션의 복제본(Replicas)을 여러 개의 Pod로 생성하여 클러스터에 배포할 수 있다.
- 클러스터에 배포된 애플리케이션은 항상 사용자가 정의한 상태와 일치하도록 관리된다.
- 롤링 업데이트(Rolling Updates):
- Deployment를 사용하면 애플리케이션의 새로운 버전을 점진적으로 업데이트할 수 있다. 이는 서비스 중단 없이 새로운 버전을 배포할 수 있게 해준다.
- 업데이트 과정에서 문제가 발생할 경우, Kubernetes는 자동으로 롤백(이전 버전으로 되돌림)할 수 있다.
- 확장 및 축소(Scaling):
- Deployment는 애플리케이션의 트래픽이 증가하거나 감소함에 따라 Pod의 수를 동적으로 조정할 수 있다. 이로 인해 리소스 사용의 효율성을 높일 수 있다.
- 셀프힐링(Self-Healing):
- Deployment는 Pod가 비정상적으로 종료되거나 삭제될 경우, 새로운 Pod를 자동으로 생성하여 설정된 수의 복제본을 항상 유지하려고 한다.
Deployment 예시
이 예시에서 nginx-deployment라는 이름의 Deployment는 3개의 nginx 컨테이너를 가진 Pod를 생성하고 관리한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Deployment 배포
# Deployment 생성
$ kubectl create deployment deploy-nginx --image=nginx
deployment.apps/deploy-nginx created
# 생성된 파드 확인
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
deploy-nginx-74d7d6d848-jkvx8 1/1 Running 0 37s
# 파드 복제 (3개의 레플리카로 스케일링)
$ kubectl scale deployment deploy-nginx --replicas=3
deployment.apps/deploy-nginx scaled
# 스케일링 결과 확인
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
deploy-nginx-74d7d6d848-jkvx8 1/1 Running 0 4m20s
deploy-nginx-74d7d6d848-mnmln 1/1 Running 0 11s
deploy-nginx-74d7d6d848-wt9rq 1/1 Running 0 11s
728x90
'DevOps > K8S' 카테고리의 다른 글
[k8s] Volume (0) | 2024.09.02 |
---|---|
[k8s] 클러스터의 주요 구성 요소와 문제 발생 시 영향 (2) | 2024.08.29 |
[k8s] Pod (0) | 2024.08.29 |
[k8s] NodePort (0) | 2024.08.29 |
[k8s] Namespace (0) | 2024.08.28 |