์ค์ ์ด์ ํ๊ฒฝ์์ ๋ ํ๋ฆฌ์นด์
์ 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. 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์ ๋๊ฒจ ์ฌ๋ผ์ง ๋ฆฌ๋น์ ์ผ๋ก๋ ๋๋๋ฆด ์ ์๋ ์ด์ ๊ฐ ์ฌ๊ธฐ์ ์๋ค.
