Deployment 란?

작성자 이호영 수정일 2022-10-14 15:39

#deployment, #rollout, #rollback, #replicaset

들어가며

  • kubernetes에서 많이 사용하는 deployment에 대해 알아보겠습니다.



Deployment 란?

   - replicaset을 생성하는 것을 정의 할 수 있고 배포 작업을 좀 더 세분화하여 조작할 수 있는 기능입니다.

           * replicaset :  pod의 수를 보장해주는 Object입니다.


  • Deployment의 구조

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.14.2
            ports:
            - containerPort: 80
    - metadata.name 필드에 따라 deployment가 생성됩니다.
    - metadata.labels 필드를 사용해 app:nginx label을 붙입니다.
    - spec.replicaset 필드에 따라 deployment는 replica pod를 생성합니다.
    - spec.selector 필드는 deploymnet가 관리할 pod를 찾는 방법을 정의합니다.
    - template.sepc 필드는 nginx:1.14.2 버전 이미지를 실행하는 nginx container 1개를 실행하는 것을 나타냅니다.

  • Deployment 조회

    kubectl get deployment,replicaset
    NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.extensions/devai                           1/1     1            1           68d
    deployment.extensions/devai-monitor                   1/1     1            1           68d
    deployment.extensions/devai-service-mariadb           1/1     1            1           68d
    deployment.extensions/devai-svc                       1/1     1            1           68d
    deployment.extensions/jupyterhub-1-2-7-21             1/1     1            1           68d
    deployment.extensions/jupyterhub-sscd-v4-0-0-7-22     1/1     1            1           40d
    deployment.extensions/nginx-ingress-controller        1/1     1            1           103d
    deployment.extensions/nginx-ingress-default-backend   1/1     1            1           103d
    deployment.extensions/tiller-deploy                   1/1     1            1           103d
    
    NAME                                                             DESIRED   CURRENT   READY   AGE
    replicaset.extensions/devai-7c8449f664                           1         1         1       68d
    replicaset.extensions/devai-monitor-59c45c5c9b                   1         1         1       68d
    replicaset.extensions/devai-service-mariadb-6b8cc7855d           1         1         1       68d
    replicaset.extensions/devai-svc-68c467bcb9                       1         1         1       68d
    replicaset.extensions/jupyterhub-1-2-7-21-558f96fbd9             1         1         1       68d
    replicaset.extensions/jupyterhub-sscd-v4-0-0-7-22-5b6657c44c     1         1         1       40d
    replicaset.extensions/nginx-ingress-controller-594c98858         1         1         1       103d
    replicaset.extensions/nginx-ingress-default-backend-76f7b59c87   1         1         1       103d
    replicaset.extensions/tiller-deploy-7848f5cf7c    


  • Deployment 업데이트 

    • 업데이트 할 deployment의 yaml을 확인하여 deployment-name과 container-name, image-version 확인합니다.
      kubectl edit deploy nginx-ingress-controller
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-deployment
        labels:
          app: nginx
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
              - containerPort: 80


    • 변경할 이미지의 버전으로 변경합니다.
      kubectl set image deployment/nginx-ingress-controller nginx-ingress-controller=nginx:0.30.0


    • 변경 후 정상 운영 되는지 확인해 봅니다.
      kubectl get pod
      NAME                                             READY   STATUS    RESTARTS   AGE
      devai-7c8449f664-fkk4g                           1/1     Running   2          68d
      devai-monitor-59c45c5c9b-t98dm                   1/1     Running   2          68d
      devai-service-mariadb-6b8cc7855d-zslv5           2/2     Running   10         68d
      devai-svc-68c467bcb9-tqjvp                       1/1     Running   2          68d
      gitlab-server-gitlab-k9phj                       1/1     Running   2          103d
      gitlab-server-postgresql-jdjxh                   1/1     Running   6          103d
      gitlab-server-redis-zpndp                        1/1     Running   5          103d
      jupyterhub-1-2-7-21-558f96fbd9-b6fxf             2/2     Running   4          68d
      jupyterhub-sscd-v4-0-0-7-22-5b6657c44c-ltkjl     2/2     Running   4          41d
      nginx-ingress-controller-594c98858-5x8l9         1/1     Running   0          10s
      nginx-ingress-default-backend-76f7b59c87-xtm8s   1/1     Running   2          103d
      tiller-deploy-7848f5cf7c-9cmkf                   1/1     Running   2          103d



  • Deployment rollback 및 rollback 기록 조회

           - deployment를 이용하여 이전 작업으로 되돌아가거나, 작업했던 기록을 살펴볼 수 있습니다.

            

  • rollout 기록 조회
    kubectl rollout history deployment nginx-ingress-controller
    deployment.extensions/nginx-ingress-controller 
    REVISION  CHANGE-CAUSE
    2         <none>
    3         <none>

    - CHANGE-CAUSE : 변경 사항에 대한 설명으로 별도의 입력이 없으면 'none'으로 표시됩니다.
    - REVISION : 가장 최근에 한 작업이 3번이라는 것을 확인 할 수 있습니다.



  • rollback 
    - 이전에 했던 작업 버전으로 되돌리는 작업

    kubectl rollout undo deployment [deployment name] --to-revision=[number]
  • rollout.CHANGE-CAUSE 기록 남기기

    kubectl edit deployment [deployment name]

    apiVersion: apps/v1

    kind: Deployment

    metadata:

      annotations:

            kubernetes.io/change-cause: version change 0.30.0

      name: nginx-deployment

      labels:

        app: nginx

    spec:

      replicas: 3

      selector:

        matchLabels:

          app: nginx

      template:

        metadata:

          labels:

            app: nginx

        spec:

          containers:

          - name: nginx

            image: nginx:1.14.2

            ports:

            - containerPort: 80

    - 해당 라인을 추가하여 준 뒤 yaml 파일을 저장합니다.

  • 기록 조회

    kubectl rollout history deployment nginx-ingress-controller
    deployment.extensions/nginx-ingress-controller 
    REVISION  CHANGE-CAUSE
    2         <none>
    3         version change 0.30.0

마무리

  • deployment로 생성한 pod를 scale 명령어로 수를 늘릴 수 있지만 deployment의 spec을 사용하여 생성 시점부터 원하는 개수로 deployment를 생성할 수 있습니다.
  • deployment를 사용하여 기록 관리를 할 수 있습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300