[Kubernetes] 쿠버네티스 Deployment 란?

[Kubernetes] 쿠버네티스 Deployment 란?

안녕하세요? 정리하는 개발자 워니즈 입니다. 이번시간에는 kubernetes 의 Deployment라는 개념에 대해서 알아보는 시간을 갖도록 하겠습니다. 지난 시간까지는 Service 의 개념에 대해서 알아봤었는데요. 이번에는 Pod의 배포가 어떻게 되는지 확인해보도록 하겠습니다.

지난 글들은 아래를 참고 해주시면 됩니다.

1. ReplicaSet

먼저 Deployment의 개념중에서 가장 중요한것은 ReplicaSet입니다. Replication Controller의 새로운 버전으로 Label Selector를 통해 노드 상의 여러 Pod의 생성/복제/삭제 등의 라이프 싸이클을 관리합니다.

  1. 지정한 Replica의 숫자만큼 Pod 수 생성/유지
  2. Label Selector를 통한 Pod 타겟팅

2. Deployment

Kubernetes에서 어플리케이션 단위를 관리하는 Controller 이며 Kubernetes의 최소 유닛인 Pod에 대한 기준스펙을 정의한 Object이다.

Kubernetes에서는 각 Object를 독립적으로 생성하기 보다는 Deployment를 통해서 생성하는 것을 권장하고 있으며, Pod와 ReplicaSet의 기준정보를 지정할 수 있다.

이러한 Deployment는

  1. Pod의 scale in / out 되는 기준을 정의한다.
  2. Pod의 배포되고 update 되는 모든 버전을 추적할 수 있다.
  3. 배포된 Pod에 대한 rollback을 수행할 수 있다.

즉, 개념적으로 Deployment = ReplicaSet +Pod+history이며 ReplicaSet 을 만드는 것보다 더 윗 단계의 선언(추상표현)이다.

3. Templates

Deployment는 위에서 보았듯이 Deployment안에 ReplicaSet과 Pod를 담을 수 잇는 구조로 되어 있습니다.

4. 실습예제

그럼 위의 개념들을 기반으로 Deployment에 대한 실습을 진행해보도록 하겠습니다.

4-1. Deployment 파일 생성 및 배포

  • Deployment yaml파일 생성

  • Deployment 생성

  • 결과확인

  • DESIRED displays the desired number of replicas of the application, which you define when you create the Deployment. This is the desired state.
  • CURRENT displays how many replicas are currently running.
  • UP-TO-DATE displays the number of replicas that have been updated to achieve the desired state.
  • AVAILABLE displays how many replicas of the application are available to your users.
  • AGE displays the amount of time that the application has been running.

4-2. Delete Pod (장애 상황 표현)

장애가 발생한 상황을 가정하여 Pod한개를 삭제해보자

삭제를 하자마자 Deployment에서 선언한 replicas에 의해 신규로 1개의 pod가 생성었음을 알 수 있다.

4-3. Updating a Deployment

  • ReplicaSet Edit

ReplicaSet의 replicas의 숫자를 2에서 4로 변경해봅시다.

결과확인 – 위에서 변경한 갯수대로 변경되었는지 확인합니다.

  • Rolling Back a Deployment

이번에는 이미지를 다른 버전으로 업데이트하고 이전 버전의 이미지로 돌리는 과정을 실습해봅시다.

Pod의 이미지를 nginx:latest 에서 nginx:1.9.1으로 변경해봅니다.

변경에 대한 이력을 기록하기 위해 annotations에 change-cause을 추가할 수도 있습니다. 이것은 추후에 이력조회시 변경내용으로 조회되는 항목입니다.

Deployment 생성

결과확인

Deployment이력조회

그럼 이제 버전1로 롤백을 해봅시다.

4-4. Delete Deployment

위에서 언급했지만 Deployment 는 하위의 ReplicaSet과 Pod를 관리하는 리소스입니다. 따라서 Deployment를 삭제하면 하위의 ReplicaSet과 Pod이 함께 삭제됩니다.

5. 마치며..

이번시간에는 Pod의 ReplicaSet을 지정하며 배포를 해보고 해당 리비전으로 롤백해보고, 각 Deployment yaml 파일을 업데이트해서 재배포 해보는 내용을 정리해봤습니다. 확실히 쿠버네티스를 사용하면서 오케스트레이션의 강력함을 배우게 되는것 같습니다. 손쉽게 다수의 VM안에 docker container를 배포해주고 또 자동적으로 관리를 해주면서 해당 POD을 교체해주는 면에 있어서 정말로 편리한것 같습니다.

다음 이시간에는 Pod Configuration에 대해서 알아보는 시간을 갖겠습니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다