Deployment 객체 이해하기

gclee·2024년 3월 19일

Kubernetes

목록 보기
2/7
post-thumbnail

쿠버네티스에서 애플리케이션의 배포 및 관리를 용이하게 만드는 핵심 리소스 중 하나는 Deployment입니다. Deployment 객체는 애플리케이션의 상태를 선언적으로 관리하며, 원하는 상태를 유지하기 위해 필요한 작업을 자동으로 수행합니다. 이 게시물에서는 Deployment의 기본 개념, 작동 방식, 그리고 사용법에 대해 알아봅니다.

Deployment란 무엇인가?

Deployment는 쿠버네티스에서 파드(Pod)와 레플리카셋(ReplicaSet)의 선언적 업데이트를 제공하는 객체입니다. 특히, 애플리케이션을 배포, 스케일링, 업데이트, 롤백하는 과정을 자동화합니다. Deployment는 개발자가 애플리케이션의 원하는 상태를 정의하면, 쿠버네티스 시스템이 현재 상태를 원하는 상태로 변경하는 데 필요한 조치를 취하게 됩니다.

Deployment의 주요 기능

  • 애플리케이션의 롤아웃과 롤백: Deployment는 새 버전의 애플리케이션을 안전하게 배포하고, 필요한 경우 이전 버전으로 롤백할 수 있습니다.
  • 워크로드의 선언적 업데이트: 애플리케이션의 설정 변경이나 새 이미지 버전으로의 업데이트 등, 원하는 상태의 변경 사항을 Deployment에 선언적으로 지정할 수 있습니다.
  • 스케일링: Deployment를 사용하여 애플리케이션의 인스턴스 수를 쉽게 늘리거나 줄일 수 있습니다.
  • 자가 치료(Self-healing): Deployment는 실패한 파드를 자동으로 교체하여 애플리케이션의 가용성을 보장합니다.

Deployment 구성요소

Deployment를 정의할 때 다음과 같은 정보를 포함해야 합니다:

  • API 버전: Deployment를 정의할 때 사용하는 API 버전 (예: apps/v1)
  • 메타데이터: Deployment의 이름, 네임스페이스, 레이블 등의 정보
  • 원하는 상태(Desired State): 배포하고자 하는 파드 템플릿 및 레플리카 수 등
  • 선택적 설정: 롤아웃 전략, 롤백 설정 등

Deployment 사용 예시

아래는 간단한 Deployment 정의의 예시입니다:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
  labels:
    app: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:1.0
        ports:
        - containerPort: 80

이 예시에서 spec.replicas는 원하는 파드 인스턴스의 수를 3으로 설정하고, spec.template은 파드가 실행할 컨테이너의 정보를 정의합니다.

kubectl을 사용한 Deployment 관리

kubectl 명령어 도구를 사용하여 쿠버네티스 클러스터에서 Deployment를 생성, 관리, 업데이트하는 과정은 간단하고 직관적입니다. 여기서는 kubectl을 이용한 Deployment의 배포 예시를 살펴보겠습니다.

Deployment 생성

  1. Deployment YAML 파일 작성: 먼저, 위의 예시와 같이 Deployment를 정의하는 YAML 파일을 작성합니다.

  2. Deployment 적용: 작성된 YAML 파일을 이용하여 Deployment를 생성합니다.

    kubectl apply -f my-app-deployment.yaml

    이 명령은 my-app-deployment.yaml 파일에 정의된 Deployment를 쿠버네티스 클러스터에 적용합니다.

  • CLI를 사용하여 생성
    kubectl create deployment my-app-deployment --image=my-app-deployment:1 -- [COMMAND] [args...] [options]

Deployment 조회

  • 특정 Deployment 정보 조회:
    kubectl get deployment my-app-deployment
    이 명령은 my-app-deployment Deployment의 세부 정보를 출력합니다.
  • 모든 Deployment 목록 조회:
    kubectl get deployments
    이 명령은 클러스터 내의 모든 Deployment들의 목록을 출력합니다.

Deployment 업데이트

  • 이미지 업데이트:이 명령은 my-app-deployment Deployment 내의 my-app 컨테이너를 my-app:2.0 이미지 버전으로 업데이트합니다.
    kubectl set image deployment/my-app-deployment my-app=my-app:2.0

Deployment 롤백

  • Deployment 롤백:이 명령은 my-app-deployment Deployment의 최근 업데이트를 롤백합니다.
    kubectl rollout undo deployment/my-app-deployment

Deployment 삭제

  • Deployment 삭제:이 명령은 my-app-deployment Deployment를 클러스터에서 삭제합니다.
    kubectl delete deployment my-app-deployment

0개의 댓글