-
Kubernetes의 Deployment 객체와 RollingUpdate 전략TECH/Kubernetes 2023. 11. 9. 20:32
Kubernetes Deployment
- 애플리케이션에 선언적인 업데이트를 제공해주는 리소스 객체
- deployment는 애플리케이션의 라이프사이클을 나타낼 수 있게 해준다.
- 어떤 이미지를 사용할지, 파드의 수, 어떤 식으로 업데이트 되어야 하는지 등
- K8s의 객체는 워크로드를 어떻게 관리하고 싶은지에 대해 kubernetes 시스템에게 말하는 방식이다. 객체가 생성된 후, 클러스터는 해당 객체가 존재하도록 하고, 쿠버네티스 클러스터의 desired state를 유지하도록 해준다.
- 컨테이너화된 애플리케이션을 수동으로 업데이트 하는 것은 시간이 많이 들고 귀찮은 일이다. 다음 버전으로 서비스를 업그레이드 하는 것은, 새로운 버전의 파드를 실행시키고, 오래된 파드를 종료시키고, 그리고 새로운 버전이 제대로 실행됐는지를 기다리고 확인하고 때로는 문제가 있을 경우 이전 버전으로 돌리는 것을 포함한다.
- 이러한 과정을 사람이 직접하는 것은 human error를 내기 쉽고, 스크립트를 작성하는 것 역시 오랜시간이 든다.
- k8s의 deployment는 이런 과정을 자동화 해준다. Deployment는 쿠버네티스 백엔드에서 관리하며, 업데이트 프로세스는 클라이언트의 개입없이 서버 사이드에서 진행된다.
- deployment는 원하는 수의 파드가 항상 정상적으로 실행되도록 해준다.
Kubernetes deployment 객체는 아래의 일을 해준다:
- replica set 혹은 pod를 배포해준다.
- pod 혹은 replica set를 업데이트 해준다.
- 이전 버전으로 롤백해준다.
- scale a deployment
- pause or continue a deployment
ReplicaSet은?
ReplicaSet의 목적은 항상 일정한 수의 replica를 유지하는 것. 동일한 파드가 정해진 수 만큼 운영하도록 보장하기 위해 사용된다.
Strategy
.spec.strategy 는 이전 파드를 새로운 파드로 교체할 때 사용된다. .spec.strategy.type은 Recreate 혹은 RollingUpdate 가 될 수 있고, 기본 값은 RollingUpdate 이다.
Rolling update Strategy
롤링 업데이트 전략은 애플리케이션을 파드를 조절되고, 단계적으로 교체하여 항상 최소한의 개수를 유지하도록 해준다.
deployment는 기본적으로 최대 25%의 파드가 불능 상태이도록 한다. 그리고 desired state에서 25%를 초과하는 파드가 프로비전 되지 않도록 한다.
deployment는 충분한 새로운 파드가 떠서 availability threshold를 유지하기 전까지는 오래된 파드를 죽이지 않고, 오래된 파드가 충분히 제거되기 전까지는 새로운 파드를 생성하지 않는다.
Deployment 객체는 maxSurge와 maxUnavailable 필드를 통해 가용과 초과 파드의 범위를 설정할 수 있도록 해준다.
rolling update 전략은 업데이트 프로세스 동안 다운타임이 없지만, 롤링 업데이트는 동시에 여러 버전이 운영될 수 있기 때문에 이점에 유의해야 한다.
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
Deployments
A Deployment manages a set of Pods to run an application workload, usually one that doesn't maintain state.
kubernetes.io
https://www.redhat.com/en/topics/containers/what-is-kubernetes-deployment
What is a Kubernetes deployment?
A Kubernetes deployment is a resource object in Kubernetes that provides declarative updates to apps and allows you to describe its life cycle.
www.redhat.com
'TECH > Kubernetes' 카테고리의 다른 글
Kubernetes - Pods (0) 2023.11.09 Local ephemeral storage (1) 2023.10.30 Kubernetes QoS란? (kube-prometheus-stack 설치로 살펴보는) (0) 2023.01.19 Namespaces 네임스페이스란? (0) 2022.11.04 Kubernetes Components - Control Plane (0) 2022.10.13