๐ ๊ฐ์
ํ ์ค ์์ฝ: ์ง์ ํ ์์ Pod๊ฐ ํญ์ ์คํ๋๋๋ก ๋ณด์ฅํ๋ ๋ฆฌ์์ค
ํต์ฌ ๋์:
1
2
3
4
5
6
| replicas: 3 ์ค์
โ
ReplicaSet์ด ํญ์ 3๊ฐ Pod ์ ์ง
โ
Pod 1๊ฐ ์ฃฝ์ผ๋ฉด โ ์๋์ผ๋ก ์ Pod ์์ฑ
Pod 1๊ฐ ์๋ ์ถ๊ฐ๋๋ฉด โ ์๋์ผ๋ก 1๊ฐ ์ญ์
|
์ค๋ฌด ์ฌ์ฉ:
- โ ReplicaSet ์ง์ ์์ฑ (๋น๊ถ์ฅ)
- โ
Deployment๋ฅผ ํตํด ๊ฐ์ ๊ด๋ฆฌ (๊ถ์ฅ)
๐ Deployment์์ ๊ด๊ณ
๊ณ์ธต ๊ตฌ์กฐ
1
2
3
4
5
| Deployment (๋ฐฐํฌ ๊ด๋ฆฌ)
โ ์์ฑ/๊ด๋ฆฌ
ReplicaSet (Pod ์ ๊ด๋ฆฌ)
โ ์์ฑ/๊ด๋ฆฌ
Pod (์ค์ ์ปจํ
์ด๋)
|
Deployment vs ReplicaSet
| ๊ธฐ๋ฅ | Deployment | ReplicaSet |
|---|
| ๋กค๋ง ์
๋ฐ์ดํธ | โ
์ง์ | โ ๋ถ๊ฐ๋ฅ |
| ๋กค๋ฐฑ | โ
์ง์ | โ ๋ถ๊ฐ๋ฅ |
| Pod ์ ๋ณด์ฅ | โ
(RS ํตํด) | โ
์ง์ |
| ์ด๋ ฅ ๊ด๋ฆฌ | โ
์ง์ | โ ๋ถ๊ฐ๋ฅ |
| ์ง์ ์ฌ์ฉ | โ
๊ถ์ฅ | โ ๋น๊ถ์ฅ |
์ค๋ฌด ๊ถ์ฅ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # โ ReplicaSet ์ง์ ์์ฑ (ํ์ง ๋ง์ธ์)
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-app-rs
spec:
replicas: 3
# ...
# โ
Deployment ์ฌ์ฉ (๊ถ์ฅ)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
# Deployment๊ฐ ReplicaSet ์๋ ์์ฑ
|
๐ ReplicaSet ์์ฑ ์์
์ ReplicaSet์ด ์์ฑ๋๋ ๊ฒฝ์ฐ
Deployment์ template.spec ๋ด์ฉ์ด ๋ฐ๋๋ฉด ์ ReplicaSet์ด ์์ฑ๋ฉ๋๋ค.
| ๋ณ๊ฒฝ ์ฌํญ | ์ RS ์์ฑ | ์ด์ |
|---|
| ์ด๋ฏธ์ง ๋ณ๊ฒฝ | โ
| Pod spec ๋ณ๊ฒฝ |
| ํ๊ฒฝ๋ณ์ ๋ณ๊ฒฝ | โ
| Pod spec ๋ณ๊ฒฝ |
| Requests/Limits ๋ณ๊ฒฝ | โ
| Pod spec ๋ณ๊ฒฝ |
| Volume ๋ณ๊ฒฝ | โ
| Pod spec ๋ณ๊ฒฝ |
| Command/Args ๋ณ๊ฒฝ | โ
| Pod spec ๋ณ๊ฒฝ |
| replicas ๋ณ๊ฒฝ | โ | ๊ธฐ์กด RS ์์ |
| metadata.labels ๋ณ๊ฒฝ | โ | Pod spec ๋ฌด๊ด |
์์: ์ด๋ฏธ์ง ๋ณ๊ฒฝ
1
2
3
4
5
6
7
8
9
10
11
12
| # ์ด๊ธฐ Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
template:
spec:
containers:
- name: nginx
image: nginx:1.21 # ๋ฒ์ 1
|
์ด๋ฏธ์ง ๋ณ๊ฒฝ:
1
| kubectl set image deployment/web-app nginx=nginx:1.22
|
๊ฒฐ๊ณผ:
1
2
| ๊ธฐ์กด: web-app-7d4b5c8f9d (nginx:1.21) โ 0/3
์๋ก: web-app-5f6g7h8i9j (nginx:1.22) โ 3/3
|
์์: replicas ๋ณ๊ฒฝ
1
| kubectl scale deployment web-app --replicas=5
|
๊ฒฐ๊ณผ:
1
| ๊ธฐ์กด: web-app-7d4b5c8f9d โ 5/5 (์ RS ์์ฑ ์ ํจ)
|
๐ ๋กค๋ง ์
๋ฐ์ดํธ ๋์
์
๋ฐ์ดํธ ํ๋ฆ
1
2
3
4
5
6
7
8
9
| 1. Deployment template.spec ๋ณ๊ฒฝ
โ
2. ์ ReplicaSet ์์ฑ (0/3)
โ
3. ์ ReplicaSet Pod ํ๋์ฉ ๋์ด๋จ (1/3, 2/3, 3/3)
โ
4. ๊ธฐ์กด ReplicaSet Pod ํ๋์ฉ ์ค์ด๋ฆ (2/3, 1/3, 0/3)
โ
5. ๊ธฐ์กด ReplicaSet์ 0/3์ผ๋ก ๋ณด์กด (์ญ์ ์ ํจ!)
|
๋จ๊ณ๋ณ ์ํ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| ์ด๊ธฐ ์ํ:
ReplicaSet-v1 (nginx:1.21): 3/3
ReplicaSet-v2 (nginx:1.22): ์์
์
๋ฐ์ดํธ ์์:
ReplicaSet-v1: 3/3
ReplicaSet-v2: 0/3 (์์ฑ)
์งํ ์ค (1):
ReplicaSet-v1: 2/3
ReplicaSet-v2: 1/3
์งํ ์ค (2):
ReplicaSet-v1: 1/3
ReplicaSet-v2: 2/3
์
๋ฐ์ดํธ ์๋ฃ:
ReplicaSet-v1: 0/3 (๋ณด์กด โ
)
ReplicaSet-v2: 3/3
|
์ค์๊ฐ ํ์ธ
1
2
3
4
5
6
7
8
9
10
| # ์
๋ฐ์ดํธ ์งํ ์ํฉ ๋ชจ๋ํฐ๋ง
kubectl rollout status deployment web-app -n default
# ReplicaSet ๋ณํ ์ค์๊ฐ ํ์ธ
watch kubectl get rs -n default
# ์ถ๋ ฅ ์์:
NAME DESIRED CURRENT READY AGE
web-app-7d4b5c8f9d 0 0 0 10m # ๊ตฌ๋ฒ์
web-app-5f6g7h8i9j 3 3 3 2m # ์ ๋ฒ์
|
๐ ๊ธฐ์กด ReplicaSet ๋ณด์กด ์ด์
๋กค๋ฐฑ์ ์ํ ๋ณด์กด
๊ธฐ์กด ReplicaSet์ 0/3 ์ํ๋ก ๋ณด์กดํ๋ ์ด์ ๋ ๋กค๋ฐฑ ๊ธฐ๋ฅ ๋๋ฌธ์
๋๋ค.
1
2
3
4
5
6
| ๋ฐฐํฌ ์ด๋ ฅ:
Revision 1: ReplicaSet-v1 (nginx:1.21) โ 0/3 ๋ณด์กด
Revision 2: ReplicaSet-v2 (nginx:1.22) โ 0/3 ๋ณด์กด
Revision 3: ReplicaSet-v3 (nginx:1.23) โ 3/3 ํ์ฌ
โ
๋กค๋ฐฑ ๊ฐ๋ฅ!
|
๋กค๋ฐฑ ๋ช
๋ น์ด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # ํ์คํ ๋ฆฌ ํ์ธ
kubectl rollout history deployment web-app -n default
# ์ถ๋ ฅ:
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment/web-app nginx=nginx:1.22
3 kubectl set image deployment/web-app nginx=nginx:1.23
# ํน์ ๋ฒ์ ์์ธ ํ์ธ
kubectl rollout history deployment web-app -n default --revision=2
# ๋ฐ๋ก ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ (Revision 2)
kubectl rollout undo deployment web-app -n default
# ํน์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ (Revision 1)
kubectl rollout undo deployment web-app -n default --to-revision=1
|
๋กค๋ฐฑ ๋์
1
2
3
4
5
6
7
8
9
10
11
| ๋กค๋ฐฑ ์คํ (Revision 3 โ Revision 2)
โ
๊ธฐ์กด ReplicaSet-v2 (0/3) Pod ๋ค์ ๋์ด๋จ
ReplicaSet-v2: 0/3 โ 1/3 โ 2/3 โ 3/3
โ
ํ์ฌ ReplicaSet-v3 (3/3) Pod ์ค์ด๋ฆ
ReplicaSet-v3: 3/3 โ 2/3 โ 1/3 โ 0/3 (๋ณด์กด)
โ
๋กค๋ฐฑ ์๋ฃ
ReplicaSet-v2: 3/3 (ํ์ฑ)
ReplicaSet-v3: 0/3 (๋ณด์กด)
|
โ๏ธ ๋ณด์กด ๊ฐ์ ์ ํ
revisionHistoryLimit
๊ธฐ๋ณธ์ ์ผ๋ก ์ต๊ทผ 10๊ฐ์ ReplicaSet์ ๋ณด์กดํฉ๋๋ค.
1
2
3
4
5
6
7
8
| apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
revisionHistoryLimit: 10 # ๊ธฐ๋ณธ๊ฐ
# ...
|
๋์:
1
2
3
| Revision 1~10: ๋ณด์กด
Revision 11 ์์ฑ โ Revision 1 ์๋ ์ญ์ (์ค๋๋ ๊ฒ๋ถํฐ)
Revision 12 ์์ฑ โ Revision 2 ์๋ ์ญ์
|
๊ฐ ์กฐ์ :
1
2
3
4
5
6
7
8
| # ์ ๊ฒ ๋ณด์กด (๋์คํฌ ์ ์ฝ)
revisionHistoryLimit: 3
# ๋ง์ด ๋ณด์กด (๋กค๋ฐฑ ์ต์
ํ๋)
revisionHistoryLimit: 20
# ๋ณด์กด ์ ํจ (๋กค๋ฐฑ ๋ถ๊ฐ, ๋น๊ถ์ฅ)
revisionHistoryLimit: 0
|
๐ ReplicaSet ํ์ธ
๊ธฐ๋ณธ ๋ช
๋ น์ด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # ReplicaSet ๋ชฉ๋ก
kubectl get rs -n default
# ์ถ๋ ฅ:
NAME DESIRED CURRENT READY AGE
web-app-7d4b5c8f9d 0 0 0 1h # ๊ตฌ๋ฒ์ (๋ณด์กด)
web-app-5f6g7h8i9j 3 3 3 10m # ์ ๋ฒ์ (ํ์ฑ)
# ReplicaSet ์์ธ ์ ๋ณด
kubectl describe rs web-app-5f6g7h8i9j -n default
# Deployment์ ์ฐ๊ฒฐ๋ ReplicaSet ํ์ธ
kubectl get rs -n default -l app=web-app
# ReplicaSet์ด ๊ด๋ฆฌํ๋ Pod ํ์ธ
kubectl get pods -n default -l app=web-app
|
ReplicaSet ์ ๋ณด ๋ถ์
1
2
3
4
5
6
7
8
| # ReplicaSet์ Pod Template Hash ํ์ธ
kubectl get rs web-app-5f6g7h8i9j -n default -o yaml | grep pod-template-hash
# Deployment์์ ํ์ฌ ํ์ฑ ReplicaSet ํ์ธ
kubectl get deployment web-app -n default -o jsonpath='{.spec.selector}'
# ํน์ ReplicaSet์ ์์ ์ ํ์ธ (Deployment)
kubectl get rs web-app-5f6g7h8i9j -n default -o jsonpath='{.metadata.ownerReferences[0].name}'
|
โ ๏ธ ์ฃผ์์ฌํญ
ReplicaSet ์ง์ ์์ ๊ธ์ง
1
2
3
4
5
6
7
8
9
| # โ ReplicaSet ์ง์ ์์ ํ์ง ๋ง์ธ์
kubectl edit rs web-app-5f6g7h8i9j
# ์ด์ :
# - Deployment๊ฐ ๋ค์ ๋ฎ์ด์
# - ๋ณ๊ฒฝ์ฌํญ ์ ์ง ์ ๋จ
# โ
Deployment๋ฅผ ์์ ํ์ธ์
kubectl edit deployment web-app
|
ReplicaSet ์ง์ ์ญ์ ์ฃผ์
1
2
3
4
5
6
7
8
9
| # โ ํ์ฑ ReplicaSet ์ญ์ (Pod ์ ๋ถ ์ญ์ ๋จ!)
kubectl delete rs web-app-5f6g7h8i9j
# Deployment๊ฐ ์ฆ์ ์ ReplicaSet ์์ฑ
# โ ๋ชจ๋ Pod ์ฌ์์ฑ โ ์๋น์ค ์ค๋จ!
# โ
๊ตฌ๋ฒ์ (0/3) ReplicaSet ์ญ์ ๋ ๊ฐ๋ฅ
kubectl delete rs web-app-7d4b5c8f9d
# โ ๋กค๋ฐฑ ๋ถ๊ฐ๋ฅํด์ง
|
์๋์ผ๋ก ์์ฑํ Pod ๋ฌธ์
1
2
3
4
5
| # ReplicaSet๊ณผ ๋์ผํ Label์ ๊ฐ์ง Pod ์๋ ์์ฑ
kubectl run manual-pod --image=nginx --labels=app=web-app
# ReplicaSet์ด ๊ฐ์ง โ ์ฆ์ ์ญ์ !
# ์ด์ : replicas=3์ธ๋ฐ Pod๊ฐ 4๊ฐ โ 1๊ฐ ์ญ์
|
๐ ์์ฝ
ํต์ฌ ๊ฐ๋
1
2
3
4
5
6
7
8
9
| ReplicaSet:
- ์ง์ ํ ์์ Pod ํญ์ ์ ์ง
- Pod ์ฅ์ ์ ์๋ ์ฌ์์ฑ
- Deployment๊ฐ ์๋ ์์ฑ/๊ด๋ฆฌ
Deployment โ ReplicaSet โ Pod:
- Deployment: ๋ฐฐํฌ ๊ด๋ฆฌ (๋กค๋ง ์
๋ฐ์ดํธ, ๋กค๋ฐฑ)
- ReplicaSet: Pod ์ ๋ณด์ฅ
- Pod: ์ค์ ์ปจํ
์ด๋
|
์ ReplicaSet ์์ฑ ์กฐ๊ฑด
1
2
3
4
5
6
7
8
| โ
์์ฑ:
- template.spec ๋ณ๊ฒฝ (์ด๋ฏธ์ง, ํ๊ฒฝ๋ณ์, ๋ฆฌ์์ค, Volume ๋ฑ)
- rollout restart ์คํ ์
โ ๋ฏธ์์ฑ:
- replicas ๋ณ๊ฒฝ
- metadata.labels ๋ณ๊ฒฝ
- rollout undo (๊ธฐ์กด RS์ replicas๋ฅผ 0 โ n์ผ๋ก ์ฌ๋ฆฌ๋ ๊ฒ)
|
๋กค๋ฐฑ ๋ฉ์ปค๋์ฆ
1
2
3
4
5
6
7
8
| ๊ธฐ์กด ReplicaSet 0/3 ๋ณด์กด:
- ๋กค๋ฐฑ์ ์ํ ์ด๋ ฅ ๊ด๋ฆฌ
- revisionHistoryLimit: 10 (๊ธฐ๋ณธ๊ฐ)
- ์ค๋๋ ๊ฒ๋ถํฐ ์๋ ์ญ์
๋กค๋ฐฑ ๋ช
๋ น์ด:
kubectl rollout undo deployment <name>
kubectl rollout undo deployment <name> --to-revision=2
|
๊ถ์ฅ ์ฌํญ
1
2
3
4
5
6
7
8
9
| โ
DO:
- Deployment ์ฌ์ฉ
- Deployment๋ก ์์
- ๊ตฌ๋ฒ์ RS๋ ์๋ ๊ด๋ฆฌ์ ๋งก๊น
โ DON'T:
- ReplicaSet ์ง์ ์์ฑ
- ReplicaSet ์ง์ ์์
- ํ์ฑ ReplicaSet ์ญ์
|
๐ ๊ด๋ จ ๋ฌธ์
Comments powered by Disqus.