티스토리 뷰
https://subicura.com/k8s/guide/replicaset.html
ReplicaSet
ReplicaSet(복제셋)이 무엇인지 알아보고 ReplicaSet을 이용하여 Pod을 관리하는 방법을 살펴봅니다.
subicura.com
이전에 Pod을 직접 만들어 봤는데 (https://tose33.tistory.com/1351), 이렇게 pod 만 만들면 pod 에 어떤 문제가 생겨 죽었을때 자동으로 복구되지 않는다.
그런데 쿠버네티스를 쓰는 가장 큰 이유 중 하나는 이렇게 죽은 컨테이너를 자동으로 복구 해주는 것인데 왜 pod 이 자동으로 되살아나지 않을까?
그건 그 일을 담당하는게 ReplicaSet 이기 때문이다.
ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: echo-rs
spec:
replicas: 1
selector:
matchLabels: # app은 echo이고 tier는 app 인 pod 을 체크하는 레플리카셋 생성
app: echo
tier: app
template: # 만약 위와 같은 pod 이 없다면 template 에 정의된 스펙대로 pod 생성한다
metadata:
labels:
app: echo
tier: app
spec:
containers:
- name: echo
image: ghcr.io/subicura/echo:v1
apply 후 get 으로 pod 와 replicaset 을 조회해 보면
echo-rs 가 원하는것(Desired)=1 이고 현재(CURRENT) 1개 가 만들어진것을 볼 수 있다.
그리고 replicaset 이외에도 pod 이 하나 만들어져 있다.
이는 replicaSet이 자동으로 만든 pod 이다.
DESIRED 는 원하는 상태가 1, 즉 원하는 pod 의 갯수가 1 이라는 의미다.
yml 파일에 정의한대로 app=echo, tier=app 을 label 을 갖는 pod 이 만들어졌다.
yml의 matchLabels에 정의한대로 레플리카셋은 app=echo, tier=app 을 레이블로 갖는 pod 이 1개 있는 상태를 유지한다.
label 삭제
kubectl label pod/echo-rs-9gmwr app-
위 커맨드는 해당하는 pod 의 레이블중 app 을 제거하는 명령어다.
이렇게 app 레이블을 제거하면 어떻게 될까?
- 레플리카셋은 app=echo,tier=app 을 갖는 pod 를 1개 갖는 상태를 유지하려고 한다.
- 그런데 기존에 만들어진 해당하는 두개의 레이블을 갖는 pod 에서 app 레이블을 제거 했기 때문에 해당 상태가 유지 되지 않는다.
- 따라서 새로운 pod 을 하나 더 만들게 된다.
label 복원
kubectl label pod/echo-rs-9gmwr app=echo
위 커맨드로 이전에 app 레이블을 제거했던 pod 에 다시 app 레이블을 붙였다.
그리고 pod 들을 확인했더니 내가 지우지 않았는데 다시 pod 이 1개가 됐다.
레플리카셋이 상태를 유지하기 위해 pod 하나를 제거한것이다.
스케일 아웃
ReplicaSet을 이용하면 손쉽게 pod 를 여러개 복제 할 수 있다.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: echo-rs
spec:
replicas: 4 # 1 에서 4로 변경
selector:
matchLabels:
app: echo
tier: app
template:
metadata:
labels:
app: echo
tier: app
spec:
containers:
- name: echo
image: ghcr.io/subicura/echo:v1
기존에 replicas: 1 을 4로 변경했다.
apply 한 후에 pods 를 보면, pod 이 4개가 됐다.
ReplicaSet은 pod 의 갯수를 사용자가 원하는 상태로 유지한다.
label 을 이용해 pod 을 체크하기 때문에 label 이 겹치지 않도록 정의해야 한다.
ㄴ
'Web > Kubernetes' 카테고리의 다른 글
Kubernetes Service (ClusterIP, NodePort, Load Balanacer) (0) | 2024.01.06 |
---|---|
Kubernetes Deployment (0) | 2024.01.06 |
Kubernetes Pod (0) | 2024.01.05 |
kubectl 명령어 (0) | 2024.01.05 |
Kubernetes cluster (Minikube), kubectl 설치 (0) | 2024.01.05 |
- Total
- Today
- Yesterday
- Implementation
- Python
- 조합
- Tree
- C
- Brute Force
- priority queue
- BFS
- dfs
- greedy
- two pointer
- db
- graph
- 이분탐색
- 재귀
- 자료구조
- back tracking
- CSS
- binary search
- DP
- permutation
- floyd warshall
- Spring
- C++
- Unity
- Stack
- Kruskal
- Dijkstra
- MVC
- recursion
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |