[Kubernetes] ReplicaSet
๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ์ง์ ํ ์์ ํ๋๋ฅผ ํญ์ ์ ์งํ๋ ReplicaSet์ ์ ๋ฆฌํ๋ค. ์ค๋ฌด์์๋ ์ง์ ๋ง๋ค์ง ์๊ณ Deployment๋ฅผ ํตํด ๊ฐ์ ๊ด๋ฆฌํ๋๋ฐ, ๋กค๋ง ์ ๋ฐ์ดํธยท๋กค๋ฐฑ์ด ์ด๋ป๊ฒ ReplicaSet ์์์ ๋์ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
ReplicaSet์ด๋? ์ง์ ํ ์(replicas)์ ํ๋๊ฐ ํญ์ ์คํ๋๋๋ก ๋ณด์ฅํ๋ ๋ฆฌ์์ค. ํ๋๊ฐ ์ฃฝ์ผ๋ฉด ์๋์ผ๋ก ์๋ก ๋ง๋ค๊ณ , ์ด๊ณผํ๋ฉด ์ญ์ ํด ๊ฐ์๋ฅผ ๋ง์ถ๋ค. ๋ค๋ง ์ง์ ์ฐ๊ธฐ๋ณด๋ค Deployment๋ฅผ ํตํด ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
1
2
3
replicas: 3 โ ReplicaSet์ด ํญ์ 3๊ฐ ์ ์ง
ยท Pod 1๊ฐ ์ฃฝ์ผ๋ฉด โ ์๋ ์์ฑ
ยท Pod 1๊ฐ ์ด๊ณผํ๋ฉด โ ์๋ ์ญ์
1. Deployment์์ ๊ด๊ณ
์ ์ Deployment โ ReplicaSet โ Pod์ ๊ณ์ธต์ผ๋ก ํ๋ ฅํ๋ค.
flowchart TD
D["Deployment<br/>(๋ฐฐํฌ ๊ด๋ฆฌยท๋กค๋ฐฑ)"]
RS["ReplicaSet<br/>(Pod ์ ๋ณด์ฅ)"]
P["Pod<br/>(์ค์ ์ปจํ
์ด๋)"]
D -- ์์ฑ/๊ด๋ฆฌ --> RS -- ์์ฑ/๊ด๋ฆฌ --> P
| ๊ธฐ๋ฅ | Deployment | ReplicaSet |
|---|---|---|
| ๋กค๋ง ์ ๋ฐ์ดํธ | โ | โ |
| ๋กค๋ฐฑ | โ | โ |
| Pod ์ ๋ณด์ฅ | โ (RS ํตํด) | โ |
| ์ด๋ ฅ ๊ด๋ฆฌ | โ | โ |
| ์ง์ ์ฌ์ฉ | โ ๊ถ์ฅ | โ ๋น๊ถ์ฅ |
๐ก ReplicaSet์ โ๊ฐ์ ์ ์งโ๋ง ํ๋ค. ๋กค๋ง ์ ๋ฐ์ดํธยท๋กค๋ฐฑยท์ด๋ ฅ ๊ด๋ฆฌ๋ ์์์ Deployment๊ฐ ๋ด๋นํ๋ค. ๊ทธ๋์ ์ค๋ฌด์์๋ Deployment๋ง ๋ค๋ฃจ๊ณ , ReplicaSet์ Deployment๊ฐ ์๋ ์์ฑยท๊ด๋ฆฌํ๋๋ก ๋งก๊ธด๋ค.
2. ์ ReplicaSet์ด ์๊ธฐ๋ ์กฐ๊ฑด
template.spec(ํ๋ ๋ช
์ธ)์ด ๋ฐ๋๋ฉด ์ ReplicaSet์ด ์๊ธด๋ค. ๊ฐ์ยท๋ผ๋ฒจ๋ง ๋ฐ๊พธ๋ฉด ๊ธฐ์กด ๊ฒ์ ์ฌ์ฌ์ฉํ๋ค.
| ๋ณ๊ฒฝ | ์ RS | ์ด์ |
|---|---|---|
| ์ด๋ฏธ์ง / ํ๊ฒฝ๋ณ์ / ๋ฆฌ์์ค / Volume / Command | โ | Pod spec ๋ณ๊ฒฝ |
| replicas ๋ณ๊ฒฝ | โ | ๊ธฐ์กด RS ์์ |
| metadata.labels ๋ณ๊ฒฝ | โ | Pod spec ๋ฌด๊ด |
1
2
3
4
5
6
7
8
# ์ด๋ฏธ์ง ๋ณ๊ฒฝ โ ์ RS ์์ฑ
kubectl set image deployment/web-app nginx=nginx:1.22
# ๊ธฐ์กด: web-app-7d4b5c8f9d (1.21) โ 0/3
# ์๋ก: web-app-5f6g7h8i9j (1.22) โ 3/3
# replicas ๋ณ๊ฒฝ โ ๊ธฐ์กด RS ์ ์ง
kubectl scale deployment web-app --replicas=5
# web-app-7d4b5c8f9d โ 5/5 (์ RS ์์)
3. ๋กค๋ง ์ ๋ฐ์ดํธ ๋์
์ RS์ ํ๋๋ฅผ ํ๋์ฉ ๋๋ฆฌ๋ฉฐ ๊ธฐ์กด RS๋ฅผ ํ๋์ฉ ์ค์ธ๋ค. ๋ฌด์ค๋จ์ ํต์ฌ์ด๋ค.
flowchart LR
subgraph ์งํ
V1["RS-v1<br/>3โ2โ1โ0"]
V2["RS-v2<br/>0โ1โ2โ3"]
end
V1 -. "์ ์ง ๊ต์ฒด" .-> V2
1
2
RS-v1(1.21): 3/3 โ 2/3 โ 1/3 โ 0/3 (๋ณด์กด)
RS-v2(1.22): 0/3 โ 1/3 โ 2/3 โ 3/3 (ํ์ฑ)
1
2
kubectl rollout status deployment web-app -n default # ์งํ ๋ชจ๋ํฐ๋ง
watch kubectl get rs -n default # RS ๋ณํ ํ์ธ
4. ๊ธฐ์กด ReplicaSet์ ๋ณด์กดํ๋ ์ด์ โ ๋กค๋ฐฑ
์ ๋ฐ์ดํธ ํ์๋ ๊ธฐ์กด RS๋ฅผ 0/3์ผ๋ก ๋ณด์กดํ๋ค. ์ด๊ฒ ์์ด์ผ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค.
1
2
3
kubectl rollout history deployment web-app -n default # ์ด๋ ฅ ํ์ธ
kubectl rollout undo deployment web-app -n default # ์ง์ ์ผ๋ก ๋กค๋ฐฑ
kubectl rollout undo deployment web-app -n default --to-revision=1 # ํน์ ๋ฒ์
1
๋กค๋ฐฑ(v3 โ v2): RS-v2๊ฐ 0/3 โ 3/3์ผ๋ก ๋ค์ ํ์ฑ, RS-v3๋ 0/3 ๋ณด์กด
๋ณด์กด ๊ฐ์๋ revisionHistoryLimit(๊ธฐ๋ณธ 10)์ผ๋ก ์กฐ์ ํ๋ค. 11๋ฒ์งธ๊ฐ ์๊ธฐ๋ฉด ๊ฐ์ฅ ์ค๋๋ ๊ฒ๋ถํฐ ์๋ ์ญ์ ๋๋ค.
1
2
spec:
revisionHistoryLimit: 10 # 3(์ ์ฝ) / 20(๋กค๋ฐฑ ์ต์
โ) / 0(๋กค๋ฐฑ ๋ถ๊ฐยท๋น๊ถ์ฅ)
5. ์ฃผ์์ฌํญ
โ ๏ธ ํ์ฑ ReplicaSet์ ์ง์ ์ญ์ ํ์ง ๋ง ๊ฒ. ํ์ฑ RS(3/3)๋ฅผ ์ง์ฐ๋ฉด ํ๋๊ฐ ์ ๋ถ ์ญ์ ๋๊ณ , Deployment๊ฐ ์ฆ์ ์ RS๋ฅผ ๋ง๋ค์ด ๋ชจ๋ ํ๋ ์ฌ์์ฑ โ ์๋น์ค ์ค๋จ์ด ๋๋ค. ๊ตฌ๋ฒ์ (0/3) RS ์ญ์ ๋ ๊ฐ๋ฅํ์ง๋ง ๊ทธ๋งํผ ๋กค๋ฐฑ ์ต์ ์ด ์ค์ด๋ ๋ค.
โ ๏ธ ReplicaSet ์ง์ ์์ ๊ธ์ง.
kubectl edit rs ...๋ก ๋ฐ๊ฟ๋ Deployment๊ฐ ๋ค์ ๋ฎ์ด์ด๋ค. ๋ฐ๋์kubectl edit deployment๋ก ์์์์ ์์ ํ๋ค.
โ ๏ธ ๊ฐ์ ๋ผ๋ฒจ์ ํ๋๋ฅผ ์๋ ์์ฑํ๋ฉด ์ญ์ ๋๋ค.
replicas=3์ธ๋ฐ ๊ฐ์ ๋ผ๋ฒจ ํ๋๋ฅผ ํ๋ ๋ ๋ง๋ค๋ฉด 4๊ฐ๊ฐ ๋์ด, ReplicaSet์ด ์ด๊ณผ๋ถ 1๊ฐ๋ฅผ ์ฆ์ ์ญ์ ํ๋ค.
๐ ์ ๋ฆฌ
1
2
3
4
5
6
ReplicaSet
โโ ์ญํ ์ง์ ์ Pod ์ ์ง(์๋ ์ฌ์์ฑ)
โโ ๊ณ์ธต Deployment โ ReplicaSet โ Pod
โโ ์ RS template.spec ๋ณ๊ฒฝ ์(๊ฐ์ยท๋ผ๋ฒจ์ X)
โโ ๋กค๋ง ์ RSโ / ๊ธฐ์กด RSโ (๊ธฐ์กด 0/3 ๋ณด์กด)
โโ ๋กค๋ฐฑ ๋ณด์กด๋ RS ํ์ฑํ(revisionHistoryLimit=10)
| ๊ฐ๋ | ํ ์ค ์ ์ |
|---|---|
| ReplicaSet | Pod ๊ฐ์ ๋ณด์ฅ |
| template.spec ๋ณ๊ฒฝ | ์ RS ์์ฑ ํธ๋ฆฌ๊ฑฐ |
| revisionHistoryLimit | ๋ณด์กดํ RS ๊ฐ์ |
ReplicaSet์ ํต์ฌ์ ๊ฐ์ ์ ์ง์ด๊ณ , ๋กค๋ง ์ ๋ฐ์ดํธยท๋กค๋ฐฑ์ ์ฌ๋ฌ RS๋ฅผ ๋๋ฆฌ๊ณ ์ค์ด๋ฉฐ ์ด๋ค์ง๋ค. ์ค๋ฌด ์์น์ ๋ช ํํ๋ค โ Deployment๋ก๋ง ๋ค๋ฃจ๊ณ , ReplicaSet์ ์ง์ ๋ง๋ค๊ฑฐ๋ ์์ ยท์ญ์ ํ์ง ์๋๋ค.
Comments powered by Disqus.