Skip to content

Kubernetes Deployment 소개

Deployment는 애플리케이션을 프로덕션 환경에 배포하는 데 필요한 다양한 기능을 제공합니다.

Deployment의 주요 기능

  • 다중 인스턴스 실행: 애플리케이션의 여러 인스턴스를 동시에 실행하여 고가용성을 보장합니다.
  • 롤링 업데이트: 새로운 버전의 애플리케이션을 순차적으로 업데이트하여 사용자 접근에 미치는 영향을 최소화합니다.
  • 롤백: 최근에 수행된 변경 사항을 취소할 수 있는 기능을 제공합니다.
  • 변경 일시 정지 및 재개: 환경에 여러 변경 사항을 적용할 때 변경 사항을 일시적으로 정지했다가 모든 변경이 완료된 후에 재개할 수 있습니다.

Deployment 생성 방법

Deployment 정의 파일을 만든 후 kubectl create 명령어를 사용하여 Deployment를 생성합니다. 정의 파일의 주요 구성 요소는 다음과 같습니다:

  • API 버전: apps/v1
  • 종류(Kind): Deployment
  • 메타데이터(Metadata): Deployment의 이름 및 레이블 포함
  • 사양(Spec): 템플릿, 복제본(replicas) 수, 셀렉터(selector) 포함

정의 파일 예시

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
  labels:
    app: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-container
          image: my-image

주요 명령어

kubectl create -f [파일명] 정의파일을 사용해 Deployment 생성
kubectl get deployment생성된 Deployment 목록 보기
kubectl get rsDeployment에 의해 생성된 ReplicaSet 보기
kubectl get podsDeployment와 연관된 Pod 보기
kubectl get all모든 Kubernetes 객체 보기

Deployment는 배포 과정을 관리하고, 롤링 업데이트, 롤백, 그리고 변경 사항의 일시 정지 및 재개와 같은 고급 기능을 통해 애플리케이션의 운영을 용이하게 합니다. 이러한 기능은 프로덕션 환경에서 애플리케이션을 안정적으로 운영하는 데 필수적입니다.

Deployment 활용

Deployment는 Kubernetes에서 복잡한 배포 및 운영 과제를 간소화합니다. 다음은 Deployment를 효과적으로 활용하는 몇 가지 시나리오입니다:

롤링 업데이트

Deployment를 사용하면 애플리케이션의 새 버전을 점진적으로 배포할 수 있습니다. 이는 서비스 중단 없이 애플리케이션을 업데이트할 수 있게 해주며, 새 버전의 문제가 발생할 경우 쉽게 이전 버전으로 롤백할 수 있습니다.

롤백

Deployment는 이전 배포 상태로 쉽게 되돌릴 수 있는 롤백 기능을 제공합니다. 이는 실패한 업데이트나 잘못된 변경 사항을 신속하게 복구하는 데 유용합니다.

변경 일시 정지 및 재개

Deployment를 사용하여 배포 프로세스를 일시 정지하고, 여러 변경 사항을 적용한 후 재개할 수 있습니다. 이를 통해 모든 변경 사항이 함께 적용되도록 할 수 있으며, 이는 복잡한 업데이트를 관리하는 데 도움이 됩니다.

확장성 및 관리 용이성

Deployment는 애플리케이션의 인스턴스 수를 쉽게 조절할 수 있게 해주며, 선언적 업데이트를 통해 애플리케이션의 상태를 원하는 구성으로 유지합니다. 이는 애플리케이션을 효율적으로 관리하고 확장하는 데 필수적입니다.

결론

Kubernetes의 Deployment는 복잡한 애플리케이션 배포 요구사항을 충족시키기 위한 강력한 도구입니다. 롤링 업데이트, 롤백, 변경 관리 기능을 통해 개발자와 운영팀은 애플리케이션의 릴리스 및 운영을 보다 안정적이고 효율적으로 수행할 수 있습니다.

K8s Reference Docs:

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/