<Docs>
디플로이먼트는 파드와 레플리카셋에 대한 선언적 업데이트를 제공한다. 디플로이먼트에서 의도하는 상태를 설명하고, 디플로이먼트 컨트롤러는 현재 상태에서 의도하는 상태로 비율을 조정하며 변경한다. 새 레플리카셋을 생성하는 디플로이먼트를 정의하거나 기존 디플로이먼트를 제거하고, 모든 리소스를 새 디플로이먼트에 적용할 수 있다.

디플로이먼트란

쿠버네티스에서 상태가 없는(stateless) 앱을 배포할 때 사용하는 가장 기본적인 컨트롤러

레플리카셋을 관리하며 앱 배포를 더 세밀하게 관리하는 것이다.

⇒ 레플리카셋 기능을 활용해 실행되는 파드(애플리케이션)을 무중단으로 업데이트하는 기능

디플로이먼트로 가능한 것.

  • Pod의 롤아웃, 롤백
  • 롤아웃 방식의 지정
  • 롤아웃 조건이나 속도 제어

컨테이너 이미지 버전업등의 업데이트가 있을 때 새로운 사양의 레플리카셋을 작성하고 순서대로 새로운 파드로 대체하여 롤아웃을 수행한다. 디플로이먼트는 이력을 관리하기 때문에 1세대 이전으로 돌리는 롤백이 가능하다.

기본적인 매니페스트 파일 작성

# deployment-nginx.yaml
# [1] 기본 항목
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx-deployment

#  [2] Deployment 스펙
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-deployment

 # [3] Pod 템플릿
  template:
    metadata:
      labels:
        app: nginx-deployment
    # [4] Pod 스펙
    spec:
      containers:
        - name: nginx-deployment
          image: nginx # 컨테이너 이미지 위치
          ports:
            - containerPort: 80 # 포트 번호

매니페스트 기본 항목

  • apiVersion: API버전, 존재하지 않는 값을 설정하면 오류가 난다고한다. ex) apps/v1
  • kind: 쿠버네티스 리소스의 종류 ex) Deployment
  • metadata: 레플리카셋의 이름이나 Label과 같은 메타데이터 ex) name: nginx-deployment
  • spec: 레플리카셋의 상세정보를 설정한다.

디플로이먼트 스펙

  • replicas: 클러스터 안에서 가동시킬 파드의 수, default = 1
  • selector: 어떤 파드를 가동시킬지에 대한 셀렉터, 파드의 템플릿에 설정된 라벨과 일치해야한다.
  • template: 실제 클러스터에서 동작하는 파드의 수가 replicas에 설정된 파드의 수를 만족시키지 않는 경우에 새로 작성되는 파드의 템플릿
  • 주의: Selector에 설정된 라벨과 Pod의 Template에 설정된 라벨은 일치해야한다.

Pod template

  • metadata: 템플릿의 이름이나 라벨과 같은 데이터
  • spec: 파드의 상세정보

디플로이먼트 사용

디플로이먼트 생성

  • 생성 코드: kubectl apply -f deploy-nginx.yaml
  • 확인을 위해서 다음 명령을 입력한다. kubectl get deploy,rs,pods
    • deploy = deployment, rs = replica set, pods = pod
  • 파드의 이름은 다음 형태로 구성된다.
    • deployment 이름 + replica set 이름 + 해시

디플로이먼트 수정

업데이트의 방법은 크게 세 가지가 존재한다.

  1. kubectl set 명령으로 직접 컨테이너 이미지를 지정
  2. kubectl edit 명령으로 현재 파드의 설정 정보를 연 다음 컨테이너 이미지 정보를 수정
  3. 처음 적용했던 템플릿의 컨테이너 이미지 정보를 수정한 다음 kubectl apply 명령을 이용

kubectl set 명령으로 직접 컨테이너 이미지를 지정

  • code: kubectl set image deployment/nginx-deployment nginx-deployment=nginx:1.9.1

디플로이먼트 롤백

  • 컨테이너 이미지 변경 내역 확인: kubectl rollout history deploy {deployment_name}

  • 만약에 버전이 변경된다면 버전2가 추가된다. ⇒ 2가 현재버전이 되는거!
  • 리비전 2의 상세 내용을 확인하는 코드: kubectl rollout history deploy {deployment_name} --version=1
  • 버전1로 롤백하는 코드: kubectl rollout undo deploy {deployment_name} —to-revision={revision_number}
  • 롤아웃 히스토리 확인: kubectl rollout history deploy {deployment_name}

참고 및 출처

https://kimjingo.tistory.com/133

 

[k8s] 디플로이먼트(Deployment)

디플로이먼트 디플로이먼트(Deployment)는 쿠버네티스에서 상태가 없는(stateless) 앱을 배포할 때 사용하는 가장 기본적인 컨트롤러입니다. 쿠버네티스가 처음 등장했을 때는 Replication Controller에서

kimjingo.tistory.com

https://huisam.tistory.com/entry/k8s-deployment

 

[k8s/쿠버네티스] - Deployment로 애플리케이션 배포

안녕하세요~ 오늘은 쿠버네티스 환경에서 Application을 배포하는 과정에 대한 설명으로 간단하게 Deployment 를 소개해드릴까 합니다 ㅎㅎ 제가 최근에 도커 이미지를 만들어보는 Dockerfile만들기라는

huisam.tistory.com

 

+ Recent posts