Post

[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
๊ธฐ๋ŠฅDeploymentReplicaSet
๋กค๋ง ์—…๋ฐ์ดํŠธโœ…โŒ
๋กค๋ฐฑโœ…โŒ
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)
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
ReplicaSetPod ๊ฐœ์ˆ˜ ๋ณด์žฅ
template.spec ๋ณ€๊ฒฝ์ƒˆ RS ์ƒ์„ฑ ํŠธ๋ฆฌ๊ฑฐ
revisionHistoryLimit๋ณด์กดํ•  RS ๊ฐœ์ˆ˜

ReplicaSet์˜ ํ•ต์‹ฌ์€ ๊ฐœ์ˆ˜ ์œ ์ง€์ด๊ณ , ๋กค๋ง ์—…๋ฐ์ดํŠธยท๋กค๋ฐฑ์€ ์—ฌ๋Ÿฌ RS๋ฅผ ๋Š˜๋ฆฌ๊ณ  ์ค„์ด๋ฉฐ ์ด๋ค„์ง„๋‹ค. ์‹ค๋ฌด ์›์น™์€ ๋ช…ํ™•ํ•˜๋‹ค โ€” Deployment๋กœ๋งŒ ๋‹ค๋ฃจ๊ณ , ReplicaSet์€ ์ง์ ‘ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ˆ˜์ •ยท์‚ญ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.


๐Ÿ”— ์ฐธ๊ณ 

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.