DevOps/K8S

[k8s] Deployment

kyoulho 2024. 8. 29. 19:56

Deployment는 애플리케이션을 관리하고 자동으로 배포하는 객체로, 주로 애플리케이션의 상태를 선언적으로 정의하는 데 사용된다. Deployment는 애플리케이션의 여러 인스턴스를 안정적으로 운영하고, 롤링 업데이트, 롤백, 확장과 같은 작업을 간단하게 수행할 수 있도록 해 준다.

 

Deployment의 구성 요소

  • Pod: 각 Deployment는 여러 개의 Pod를 관리한다.
  • ReplicaSet: Deployment가 관리하는 Pod의 복제본을 유지하는 역할을 하며, 특정 수의 Pod가 항상 실행 중인지 보장한다.
  • Label Selector: Deployment는 Label을 사용하여 어떤 Pod가 관리 대상인지를 지정한다.

 

Deployment의 주요 기능

  1. 애플리케이션 배포 및 관리:
    • Deployment를 사용하면 애플리케이션의 복제본(Replicas)을 여러 개의 Pod로 생성하여 클러스터에 배포할 수 있다.
    • 클러스터에 배포된 애플리케이션은 항상 사용자가 정의한 상태와 일치하도록 관리된다.
  2. 롤링 업데이트(Rolling Updates):
    • Deployment를 사용하면 애플리케이션의 새로운 버전을 점진적으로 업데이트할 수 있다. 이는 서비스 중단 없이 새로운 버전을 배포할 수 있게 해준다.
    • 업데이트 과정에서 문제가 발생할 경우, Kubernetes는 자동으로 롤백(이전 버전으로 되돌림)할 수 있다.
  3. 확장 및 축소(Scaling):
    • Deployment는 애플리케이션의 트래픽이 증가하거나 감소함에 따라 Pod의 수를 동적으로 조정할 수 있다. 이로 인해 리소스 사용의 효율성을 높일 수 있다.
  4. 셀프힐링(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

'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