2023. 5. 19. 05:06ㆍ부트캠프/DevOps (TIL)
쿠버네티스에서 Deployment는 한글로 번역하지 않습니다. 흔히 우리는 배포라고 하면 서비스의 노출을 떠올리지만, 쿠버네티스의 Deployment는 서비스 노출의 의미가 아닙니다. 쿠버네티스에서의 Deployment는 파드의 교체/배치(placement)와 관련된 명세입니다. 조금 더 자세히 알아봅시다.
쿠버네티스에서는 사실 직접 사용자가 개별 파드를 만들 일이 그리 많지 않습니다. 왜냐하면 파드는 일시적이고, 언제나 삭제될 수 있음을 감안하고 만들기 때문입니다. 예를 들어, 파드가 실행되는 공간인 노드가 만일 실패하는 경우, 그 안에서 실행되는 파드 역시 사용할 수 없게 됩니다.
사실 컨테이너를 수동으로 만들고 관리하는 것은, 그냥 도커만 단독으로 사용해도 충분히 할 수 있는 일입니다. 쿠버네티스의 핵심은 컨테이너를 오케스트레이션하는 것으로, 파드 장애 시 자동 복구하거나, 복제하거나 하는 등의 일을 자동으로 처리하는 데에 있습니다. AWS로 따지면 ECS(Elastic Container Service)가 하는 일과 비슷합니다. 이 둘은, 컨테이너의 로드 밸런싱과 오토 스케일링과 같은 일을 담당합니다.
결론적으로, 파드는 디플로이먼트, 스테이트풀셋, 데몬셋을 이용해 관리하는 것이 바람직합니다. 해당 워크로드 리소스는 파드 템플릿을 항상 포함하고 있습니다.
아래는 디플로이먼트의 예시입니다.
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
# 여기까지 파드 템플릿이다
디플로이먼트는 파드를 업데이트하기 위한 선언적 명세입니다.
디플로이먼트 리소스를 통해 다음을 할 수 있습니다.
애플리케이션의 여러 복제본이 존재할 경우, 이 각각의 복제본을 새 버전으로 업데이트하는 방법으로 다음과 같은 배포 전략이 있음을 배웠습니다.
디플로이먼트는 파드의 복제본을 자동으로 업데이트하게 해주는 명세이므로, 쿠버네티스가 지원하는 배포 전략으로는 재생성(Recreate)과 롤링 배포(RollingUpdate) 방식을 선택할 수 있습니다.
Q. 디플로이먼트가 지원하는 배포 전략에서 블루/그린이나 카나리는 찾아볼 수 없습니다. 어떻게 블루/그린이나 카나리 배포를 할 수 있을까요?
블루/그린 배포와 카나리 배포는 디플로이먼트의 내장된 기능은 아니지만, Kubernetes에서 이러한 배포 전략을 구현할 수 있는 다양한 방법이 있습니다. 여기에서는 블루/그린 배포와 카나리 배포를 구현하는 일반적인 접근 방법을 소개하겠습니다.
1. 블루/그린 배포:
2. 카나리 배포:
이러한 배포 전략을 구현하기 위해 Kubernetes에서는 다음과 같은 방법을 사용할 수 있습니다:
1. 디플로이먼트 및 서비스 사용:
2. Ingress 컨트롤러 사용:
3. 쿠버네티스 기반의 배포 관리 도구 사용:
이러한 방법들은 일반적으로 사용되는 방법이지만, 실제 구현은 애플리케이션과 인프라스트럭처의 요구 사항에 따라 다를 수 있습니다. 블루/그린 배포와 카나리 배포에 대한 구체적인 구현 방법은 애플리케이션의 특성과 팀의 선호도에 따라 다를 수 있습니다.
출처:
코드스테이츠
Kubernetes 공식 문서: https://kubernetes.io/docs/concepts/cluster-administration/
Red Hat Blog: https://www.redhat.com/en/topics/devops/what-is-canary-deployment
2023.05.19(Sprint - 새 버전이 망가졌어요) (0) | 2023.05.19 |
---|---|
2023.05.18(쿠버네티스 워크로드-서비스, 로드밸런싱, 네트워킹) (0) | 2023.05.19 |
2023.05.18(쿠버네티스 워크로드-파드 (Pods)) (0) | 2023.05.19 |
2023.05.18(쿠버네티스 설치) (0) | 2023.05.18 |
2023.05.18(쿠버네티스 컴포넌트) (1) | 2023.05.18 |