• ABOUT
  • PORTFOLIO
  • POSTS
  • GUESTBOOK

ยฉ 2025 BlueCool12 All rights reserved.

2026.05.03Kubernetes

๐Ÿš€ Deployment๋กœ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌํ•˜๊ธฐ (๋กค๋ง ์—…๋ฐ์ดํŠธ & ๋กค๋ฐฑ)

๋””ํ”Œ๋กœ์ด๋จผํŠธ: ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ƒ์œ„ ์˜ค๋ธŒ์ ํŠธ

์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ YAML๋กœ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค. ๋Œ€์‹  ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋ฅผ YAML์— ์ •์˜ํ•˜๊ณ , ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑ, ๊ต์ฒด, ์‚ญ์ œํ•œ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ƒ์œ„ ์˜ค๋ธŒ์ ํŠธ๋กœ, ํ•˜๋‚˜์˜ ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ์‹œ์ ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ์ƒˆ ๋ฒ„์ „์œผ๋กœ์˜ ์ „ํ™˜๊ณผ ์ด์ „ ๋ฒ„์ „์œผ๋กœ์˜ ๋ณต๊ท€๋ฅผ ๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๋‹จ๋…์œผ๋กœ๋Š” ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


๋””ํ”Œ๋กœ์ด๋จผํŠธ์™€ ํ•จ๊ป˜ ์ƒ์„ฑ๋˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ํŒŒ๋“œ

๋ ˆํ”Œ๋ฆฌ์นด์…‹๊ณผ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ YAML์€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค. kind๋งŒ ReplicaSet์—์„œ Deployment๋กœ ๋ฐ”๋€Œ๊ณ , ๋‚˜๋จธ์ง€ replicas, selector, template ํ•„๋“œ๋Š” ๊ฐ™์€ ์˜๋ฏธ๋กœ ๋™์ž‘ํ•œ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:1.10
ports:
- containerPort: 80

์œ„ YAML ํŒŒ์ผ์„ ์ ์šฉํ•˜๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ 1๊ฐœ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹ 1๊ฐœ, ํŒŒ๋“œ 3๊ฐœ๊ฐ€ ํ•œ ๋ฒˆ์— ๋งŒ๋“ค์–ด์ง„๋‹ค. kubectl get์„ ํ†ตํ•ด ๊ณ„์ธต๋ณ„๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ kubectl apply -f deployment.yaml
deployment.apps/my-nginx-deployment created


$ kubectl get deployment # ๋˜๋Š” ์งง๊ฒŒ kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
my-nginx-deployment 3/3 3 3 10s


$ kubectl get replicasets
NAME DESIRED CURRENT READY AGE
my-nginx-deployment-6d4dd4d565 3 3 3 10s


$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-deployment-6d4dd4d565-48mzf 1/1 Running 0 10s
my-nginx-deployment-6d4dd4d565-84q8s 1/1 Running 0 10s
my-nginx-deployment-6d4dd4d565-br8s8 1/1 Running 0 10s

๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ด๋ฆ„์€ <๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ด๋ฆ„>-<ํ•ด์‹œ> ํ˜•์‹์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , ํŒŒ๋“œ์˜ ์ด๋ฆ„์€ ๊ทธ ์œ„์— ์ž„์˜ ์ ‘๋ฏธ์‚ฌ๊ฐ€ ๋ถ™๋Š”๋‹ค. ์ด ๋ช…๋ช… ๊ทœ์น™์€ ์†Œ์œ  ๊ด€๊ณ„๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•œ๋‹ค. (ํŒŒ๋“œ์˜ owner๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด๊ณ , ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ owner๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ)

์‚ญ์ œํ•  ๋•Œ๋„ ๊ฐ™์€ ๊ณ„์ธต์ด ๊ทธ๋Œ€๋กœ ์ ์šฉ๋œ๋‹ค. kubectl delete deploy my-nginx-deployment ํ•œ ๋ฒˆ์œผ๋กœ ๋””ํ”Œ๋กœ์ด๋จผํŠธ, ๋ ˆํ”Œ๋ฆฌ์นด์…‹, ํŒŒ๋“œ๊ฐ€ ๋ชจ๋‘ ์‚ญ์ œ๋œ๋‹ค. ํŒŒ๋“œ๋งŒ ์ง์ ‘ ์ง€์šฐ๋ฉด ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์ฆ‰์‹œ ํŒŒ๋“œ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ณ , ๋ ˆํ”Œ๋ฆฌ์นด์…‹๋งŒ ์ง€์šฐ๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๊ฐ€ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ƒ์„ฑํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ •๋ฆฌ๋Š” ํ•ญ์ƒ ๊ฐ€์žฅ ์œ„ ๊ณ„์ธต์ธ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์—์„œ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.


๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋‘ ์ฑ…์ž„: ๋กค๋ง ์—…๋ฐ์ดํŠธ์™€ ๋กค๋ฐฑ

๋ ˆํ”Œ๋ฆฌ์นด์…‹๋งŒ ์žˆ์–ด๋„ ํŒŒ๋“œ ๊ฐœ์ˆ˜๋Š” ์ž๋™์œผ๋กœ ์œ ์ง€๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ผ์€ ์‚ฌ๋žŒ์ด ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๋งŒ๋“ค๊ณ , ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ replicas๋ฅผ ํ•œ ๋‹จ๊ณ„์”ฉ ์ค„์ด๊ณ , ํŠธ๋ž˜ํ”ฝ์ด ๋Š๊ธฐ์ง€ ์•Š๋„๋ก ๊ต์ฒด ์†๋„๋ฅผ ์กฐ์ ˆํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋‹ค์‹œ ๋˜๋Œ๋ฆฌ๋Š” ์ ˆ์ฐจ๋‹ค. ์ด๋Ÿฌํ•œ ์ ˆ์ฐจ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋งŒ๋“  ๊ฒƒ์ด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋‹ค.

๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ๋‘ ๊ฐ€์ง€๋ฅผ ์ฑ…์ž„์ง„๋‹ค.

  1. ์ƒˆ ๋ฒ„์ „ ๋ฐฐํฌ ์‹œ ์ด์ „ ํŒŒ๋“œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์ผ๋ถ€์”ฉ ๊ต์ฒดํ•ด ๋ฌด์ค‘๋‹จ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋กค๋ง ์—…๋ฐ์ดํŠธ
  2. ๋ฐฐํฌ ์‹œ์ ๋งˆ๋‹ค ์ง์ „ ์ƒํƒœ๋ฅผ ๋ฆฌ๋น„์ „(revision)์œผ๋กœ ๋ณด์กดํ–ˆ๋‹ค๊ฐ€ ํ•œ ๋ช…๋ น์œผ๋กœ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋กค๋ฐฑ

์ •๋ฆฌํ•˜๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” "์›ํ•˜๋Š” ํŒŒ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์œ ์ง€ํ•œ๋‹ค"๋ผ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ฑ…์ž„ ์œ„์— "๋ฒ„์ „ ์‚ฌ์ด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ด๋™ํ•œ๋‹ค"๋ผ๋Š” ์ฑ…์ž„์„ ํ•œ ๋‹จ๊ณ„ ๋” ์–น๋Š”๋‹ค.


์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ์˜ ๊ฒฐ๊ณผ: ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ์ƒ์„ฑ

๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ ์„ธ ๊ฐ€์ง€๋‹ค. ์–ด๋А ๋ฐฉ๋ฒ•์„ ์“ฐ๋”๋ผ๋„ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค.

# 1. YAML ํŒŒ์ผ์˜ image ํ•„๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ๋’ค ๋‹ค์‹œ applyํ•œ๋‹ค. 
$ kubectl apply -f deployment.yaml --record


# 2. ๋ช…๋ น์–ด๋กœ ์ด๋ฏธ์ง€๋งŒ ์ง์ ‘ ๊ต์ฒดํ•œ๋‹ค.
$ kubectl set image deployment/my-nginx-deployment my-nginx=nginx:1.11 --record


# 3. ๋””ํ”Œ๋กœ์ด๋จผํŠธ ์ •์˜๋ฅผ edit์œผ๋กœ ์ง์ ‘ ํŽธ์ง‘ํ•œ๋‹ค.
$ kubectl edit deployment my-nginx-deployment

--record ํ”Œ๋ž˜๊ทธ๋Š” ๋ณ€๊ฒฝ์— ์‚ฌ์šฉํ•œ ๋ช…๋ น์–ด๋ฅผ ๋ฆฌ๋น„์ „์˜ ๋ฉ”๋ชจ๋กœ ๋‚จ๊ธด๋‹ค. ์ดํ›„ kubectl rollout history์—์„œ ์–ด๋–ค ๋ช…๋ น์ด ์–ด๋–ค ๋ฆฌ๋น„์ „์„ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ์ถ”์ ํ•  ๋•Œ ์“ฐ์ธ๋‹ค.

* ํ˜„์žฌ ๋ฒ„์ „ ๊ธฐ์ค€ --record ํ”Œ๋ž˜๊ทธ๋Š” deprecated ์ƒํƒœ์ด๋ฉฐ, ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ด๋ ค๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ kubernetes.io/change-cause ์–ด๋…ธํ…Œ์ด์…˜์„ ์ง์ ‘ ๋‹ค๋Š” ๋ฐฉ์‹์ด ๊ถŒ์žฅ๋œ๋‹ค.

์ด๋ฏธ์ง€๋ฅผ ๋ฐ”๊พธ๋ฉด ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ์ƒˆ ํŒŒ๋“œ ํ…œํ”Œ๋ฆฟ ํ•ด์‹œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ทธ ํ•ด์‹œ๊ฐ€ ๋ถ™์€ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ replicas๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ์ค„์ด๊ณ  ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ replicas๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ ๋Š˜๋ ค ํŒŒ๋“œ๋ฅผ ๊ต์ฒดํ•œ๋‹ค.

๊ต์ฒด๊ฐ€ ๋๋‚œ ๋’ค์—๋„ ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  replicas: 0 ์ƒํƒœ๋กœ ๋‚จ๋Š”๋‹ค. ๋กค๋ฐฑ ์‹œ ๋‹ค์‹œ ์‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋‹ค.

$ kubectl get replicasets
NAME DESIRED CURRENT READY AGE
my-nginx-deployment-6d4dd4d565 0 0 0 10m # ์ด์ „ (1.10)
my-nginx-deployment-6d4dd4d566 3 3 3 1m # ์‹ ๊ทœ (1.11)

ํ˜„์žฌ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐ›๋Š” ๋ ˆํ”Œ๋ฆฌ์นด์…‹์ด ์–ด๋А ๊ฒƒ์ธ์ง€๋Š” kubectl describe deployment my-nginx-deployment์˜ NewReplicaSet ํ•ญ๋ชฉ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 0์œผ๋กœ ์ค„์–ด๋“  ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹๋“ค์€ ๊ฐ™์€ ์ถœ๋ ฅ์˜ OldReplicaSets์— ๋‚˜์—ด๋œ๋‹ค.


๋ฆฌ๋น„์ „ ๋กค๋ฐฑ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜

์ง€๊ธˆ๊นŒ์ง€์˜ ๋ฐฐํฌ ์ด๋ ฅ์€ kubectl rollout history๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

$ kubectl rollout history deployment my-nginx-deployment
deployment.apps/my-nginx-deployment
REVISION CHANGE-CAUSE
1 kubectl apply --filename=deployment.yaml --record=true
2 kubectl set image deployment/my-nginx-deployment my-nginx=nginx:1.11 --record=true

CHANGE-CAUSE๋Š” ์•ž ์„น์…˜์˜ --record ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋‚จ๊ธด ๋ฉ”๋ชจ๋กœ, ์ด ๋ฉ”๋ชจ๊ฐ€ ์—†์œผ๋ฉด <none>์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์–ด๋–ค ๋ณ€๊ฒฝ์ด ์–ด๋А ๋ฆฌ๋น„์ „์„ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ๋ถ„๊ฐ„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

ํŠน์ • ๋ฆฌ๋น„์ „์œผ๋กœ ๋Œ๋ฆฌ๋ ค๋ฉด kubectl rollout undo์— --to-revision์„ ์ง€์ •ํ•œ๋‹ค. ์ธ์ž ์—†์ด ์‚ฌ์šฉํ•˜๋ฉด ์ง์ „ ๋ฆฌ๋น„์ „์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

# ์ง์ „ ๋ฆฌ๋น„์ „์œผ๋กœ ๋กค๋ฐฑ
$ kubectl rollout undo deployment my-nginx-deployment


# ํŠน์ • ๋ฆฌ๋น„์ „์œผ๋กœ ๋กค๋ฐฑ
$ kubectl rollout undo deployment my-nginx-deployment --to-revision=1

์ด ๋ช…๋ น์–ด๊ฐ€ ํ•˜๋Š” ์ผ์€ ์ƒˆ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋””ํ”Œ๋กœ์ด๋จผํŠธ๋Š” ์ง€์ •ํ•œ ๋ฆฌ๋น„์ „์— ๋Œ€์‘ํ•˜๋Š” ์ด์ „ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์„ ์ฐพ์•„ replicas๋ฅผ ๋‹ค์‹œ ๋Š˜๋ฆฌ๊ณ , ํ˜„์žฌ ํ™œ์„ฑ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ replicas๋ฅผ ์ค„์ธ๋‹ค.

์ฆ‰, ๋กค๋ฐฑ๋„ ๋กค๋ง ์—…๋ฐ์ดํŠธ์™€ ๋™์ผํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. revisionHistoryLimit์„ ๋„˜๊ฒจ ์‚ฌ๋ผ์ง„ ๋ฆฌ๋น„์ „์œผ๋กœ๋Š” ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์—ฌ๊ธฐ์— ์žˆ๋‹ค.

์ด์ „ ๊ธ€
โš–๏ธ ReplicaSet์œผ๋กœ ํŒŒ๋“œ ๊ด€๋ฆฌํ•˜๊ธฐ - YAML๋ถ€ํ„ฐ ์šด์˜๊นŒ์ง€
๋‹ค์Œ ๊ธ€
๋‹ค์Œ ๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค ( ฮ‡ . ฮ‡)
์žฅ์‹์šฉ ๋กœ๊ณ