Kubernetes ReplicaSet, Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deployment
name: nginx-deployment
spec:
replicas: 4 // 유지할 파드 개수
selector:
matchLabels:
app: nginx-deployment
template:
metadata:
labels:
app: nginx-deployment
spec:
containers:
- name: nginx
image: nginx
ReplicaSet이란?
레플리카셋은 지정된 수의 파드 레플리카가 항상 실행되도록 보장하는 오브젝트입니다. 따라서 레플리카를 3으로 설정한다면, 레플리카에 종속되는 파드의 수는 3개가 되며, 개수를 세 파드를 재생성하거나, 삭제하는 과정이 발생합니다.
이때 종속을 판별하는 것은 소유자 참조(Owner references)이다. 컨트롤 플레인에게 어떤 오브젝트가 서로 종속적인지를 알려줍니다. 쿠버네티스는 소유자 참조를 사용하여 컨트롤 플레인과 다른 API 클라이언트에게 오브젝트를 삭제하기 전 관련 리소스를 정리하는 기회를 제공합니다. 대부분의 경우, 쿠버네티스는 소유자 참조를 자동으로 관리합니다.
ReplicaSet을 만들어 보겠습니다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
labels:
app: nginx-replicaset
name: nginx-replicaset
spec:
replicas: 4 // 유지할 파드 개수
selector:
matchLabels:
app: nginx-replicaset
template:
metadata:
labels:
app: nginx-replicaset
spec:
containers:
- name: nginx
image: nginx
이때 spec.selector.matchLabels와 spec.template.metadata.labels는 같아야 레플리카셋이 배포가 됩니다.
4개의 파드가 생성됐으며, 이름 뒤에 해쉬코드가 붙어 각 파드를 구분합니다. 또한 ReplicaSet 생성된 것을 알 수 있습니다.
이때 DESIRED, CURRENT, READY가 존재합니다. 각각의 상태는 아래와 같습니다.
DESIRED: 원하는 개수
CURRENT: 현재 개수
READY: 준비된 개수
이때 파드를 하나 임의로 제거한다면, ReplicaSet은 DESIRED와 CURRENT를 맞추기 위해 파드를 다시 생성할 것입니다. 임의로 하나 지워보겠습니다.
파 들으 하나 지우니 CURRENT는 곧바로 생겨 4개인 모습을 보이고, READY 상태인 파드가 한 개 줄어든 것을 볼 수 있습니다.
이처럼 ReplicaSet을 활용할 수 있지만, 보통 Deployment를 이용해서 ReplicaSet을 관리합니다.
Deployment란?
Deployment는 파드와 레플리카셋(ReplicaSet)에 대한 선언적 업데이트를 제공합니다. 위처럼 ReplicaSet을 직접 선언하고, 조정하는 것은 권장하지 않습니다.
Deployment를 사용하여 위에서 배포한 ReplicaSet과 동일한 개수의 Pod를 배포해 보겠습니다.
Deployment가 생기고 해당 ReplicaSet 또한 생깁니다. 그렇다면 굳이 Deployment를 사용하는 것을 권장하는 가장 큰 이유는 Rollout입니다. Deployment Container에 해당하는 템플릿들에 변화가 있을 때 rollout 키워드를 사용하여 개수를 유지한 채 파드들을 업데이트할 수 있습니다.
예시로 nginx-deployment.yaml의 image를 nginx:latest로 변경한 했을 때 파드의 개수의 변화를 살펴보겠습니다.
kubectl rollout restart deployment nginx-deployment
새로운 컨테이너가 시작하고, ReplicaSet을 보면 새로운 ReplicaSet이 생성된 것을 볼 수 있습니다. DESIRED=3인 것이 현재 있던 ReplicaSet이고, DESIRED=2인 것이 새롭게 시작하는 ReplicaSet입니다.
아래의 그림과 같이 rolling update가 이뤄지는 과정에서 ReplicaSet이 하나 더 생기고 블루 그린 형식으로 Pod가 배포됩니다.
이때 Deployment에서 replicas를 정의했지만 HPA를 이용해서 Deployment 크기를 관리하고 있다면, 적지 않아야 합니다. 이전 시간에 배운 Pod에 대한 설정들을 containers에 넣어주면 그대로 사용할 수 있습니다.
모든 코드는 아래의 GitHub에서 확인하실 수 있습니다.
https://github.com/rlaehdals/kubernetes-study
'DevOps > Kubernetes' 카테고리의 다른 글
Kubernetes Pod (0) | 2023.01.08 |
---|---|
Kubernetes 구성 요소 (0) | 2023.01.07 |
Kubernetes 란?? (0) | 2023.01.07 |
Mac m1, m2 minikube 설치 (0) | 2023.01.04 |
댓글
이 글 공유하기
다른 글
-
Kubernetes Pod
Kubernetes Pod
2023.01.08 -
Kubernetes 구성 요소
Kubernetes 구성 요소
2023.01.07 -
Kubernetes 란??
Kubernetes 란??
2023.01.07 -
Mac m1, m2 minikube 설치
Mac m1, m2 minikube 설치
2023.01.04