Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Deployments
๋ํ๋ก์ด๋จผํธ
๋ํ๋ก์ด๋จผํธ(Deployment) ๋ ํ๋์ ๋ ํ๋ฆฌ์นด์ (ReplicaSet)์ ๋ํ ์ ์ธ์ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๋ค.
๋ํ๋ก์ด๋จผํธ์์ ์๋ํ๋ ์ํ ๋ฅผ ์ค๋ช ํ๊ณ , ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ(Controller)๋ ํ์ฌ ์ํ์์ ์๋ํ๋ ์ํ๋ก ๋น์จ์ ์กฐ์ ํ๋ฉฐ ๋ณ๊ฒฝํ๋ค. ์ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑํ๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ์ํ๊ฑฐ๋ ๊ธฐ์กด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ํ๋ก์ด๋จผํธ์ ์ ์ฉํ ์ ์๋ค.
์ฐธ๊ณ :
๋ํ๋ก์ด๋จผํธ๊ฐ ์์ ํ๋ ๋ ํ๋ฆฌ์นด์ ์ ๊ด๋ฆฌํ์ง ๋ง์์ผ ํ๋ค. ์ฌ์ฉ์์ ์ ์ค์ผ์ด์ค๊ฐ ๋ค์์ ํฌํจ๋์ง ์๋ ๊ฒฝ์ฐ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌํฌ์งํฐ๋ฆฌ์ ์ด์๋ฅผ ์ฌ๋ฆด ์ ์๋ค.์ ์ค์ผ์ด์ค
๋ค์์ ๋ํ๋ก์ด๋จผํธ์ ์ผ๋ฐ์ ์ธ ์ ์ค์ผ์ด์ค์ด๋ค.
- ๋ ํ๋ฆฌ์นด์ ์ ๋กค์์ ํ ๋ํ๋ก์ด๋จผํธ ์์ฑ. ๋ ํ๋ฆฌ์นด์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํ๋๋ฅผ ์์ฑํ๋ค. ๋กค์์ ์ํ๋ฅผ ์ฒดํฌํด์ ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
- ๋ํ๋ก์ด๋จผํธ์ PodTemplateSpec์ ์ ๋ฐ์ดํธํด์ ํ๋์ ์๋ก์ด ์ํ๋ฅผ ์ ์ธํ๋ค. ์ ๋ ํ๋ฆฌ์นด์ ์ด ์์ฑ๋๋ฉด, ๋ํ๋ก์ด๋จผํธ๋ ํ๋๋ฅผ ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ์์ ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ผ๋ก ์๋๋ฅผ ์ ์ดํ๋ฉฐ ์ด๋ํ๋ ๊ฒ์ ๊ด๋ฆฌํ๋ค. ๊ฐ๊ฐ์ ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ ๋ํ๋ก์ด๋จผํธ์ ์์ ๋ฒ์ ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธํ๋ค.
- ๋ง์ฝ ๋ํ๋ก์ด๋จผํธ์ ํ์ฌ ์ํ๊ฐ ์์ ์ ์ด์ง ์์ ๊ฒฝ์ฐ ๋ํ๋ก์ด๋จผํธ์ ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ๋ค. ๊ฐ ๋กค๋ฐฑ์ ๋ํ๋ก์ด๋จผํธ์ ์์ ๋ฒ์ ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธํ๋ค.
- ๋ ๋ง์ ๋ก๋๋ฅผ ์ํด ๋ํ๋ก์ด๋จผํธ์ ์ค์ผ์ผ ์ .
- ๋ํ๋ก์ด๋จผํธ ๋กค์์ ์ผ์ ์ค์ง๋ก PodTemplateSpec์ ์ฌ๋ฌ ์์ ์ฌํญ์ ์ ์ฉํ๊ณ , ์ฌ๊ฐํ์ฌ ์๋ก์ด ๋กค์์์ ์์ํ๋ค.
- ๋กค์์์ด ๋งํ์๋์ง๋ฅผ ๋ํ๋ด๋ ๋ํ๋ก์ด๋จผํธ ์ํ๋ฅผ ์ด์ฉ.
- ๋ ์ด์ ํ์ ์๋ ์ด์ ๋ ํ๋ฆฌ์นด์ ์ ๋ฆฌ.
๋ํ๋ก์ด๋จผํธ ์์ฑ
๋ค์์ ๋ํ๋ก์ด๋จผํธ์ ์์์ด๋ค. ์์๋ 3๊ฐ์ nginx
ํ๋๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํ ๋ ํ๋ฆฌ์นด์
์ ์์ฑํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
์ด ์์์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ๋ค.
.metadata.name
ํ๋์ ๋ฐ๋ผ,nginx-deployment
์ด๋ฆ์ ๊ฐ์ง ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋๋ค..spec.replicas
ํ๋์ ๋ฐ๋ผ, ๋ํ๋ก์ด๋จผํธ๋ 3๊ฐ์ ๋ ํ๋ฆฌ์นด ํ๋๋ฅผ ์์ฑํ๋ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑํ๋ค..spec.selector
ํ๋๋, ์์ฑ๋ ๋ ํ๋ฆฌ์นด์ ์ด ๊ด๋ฆฌํ ํ๋๋ฅผ ์ฐพ์๋ด๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. ์ด ์ฌ๋ก์์๋ ํ๋ ํ ํ๋ฆฟ์ ์ ์๋ ๋ ์ด๋ธ(app: nginx
)์ ์ ํํ๋ค. ๊ทธ๋ฌ๋ ํ๋ ํ ํ๋ฆฟ ์์ฒด์ ๊ท์น์ด ๋ง์กฑ๋๋ ํ, ๋ณด๋ค ์ ๊ตํ ์ ํ ๊ท์น์ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.์ฐธ๊ณ :
.spec.selector.matchLabels
ํ๋๋ {key,value}์ ์์ผ๋ก ๋งคํ๋์ด ์๋ค.matchLabels
์ ๋งคํ๋ ๋จ์ผ {key,value}์matchExpressions
์ ์์์ ํด๋นํ๋ฉฐ,key
ํ๋๋ "key"์ ๊ทธ๋ฆฌ๊ณoperator
๋ "In"์ ๋์๋๋ฉฐvalue
๋ฐฐ์ด์ "value"๋ง ํฌํจํ๋ค. ๋งค์นญ์ ์ํด์๋matchLabels
์matchExpressions
์ ๋ชจ๋ ์๊ฑด์ด ์ถฉ์กฑ๋์ด์ผ ํ๋ค..spec.template
ํ๋์๋ ๋ค์ ํ์ ํ๋๊ฐ ํฌํจ๋์ด ์๋ค.- ํ๋๋
.metadata.labels
ํ๋๋ฅผ ์ฌ์ฉํด์app: nginx
๋ผ๋ ๋ ์ด๋ธ์ ๋ถ์ธ๋ค. - ํ๋ ํ
ํ๋ฆฟ์ ์ฌ์ ๋๋
.spec
ํ๋๋ ํ๋๊ฐ ๋์ปค ํ๋ธ์nginx
1.14.2 ๋ฒ์ ์ด๋ฏธ์ง๋ฅผ ์คํํ๋nginx
์ปจํ ์ด๋ 1๊ฐ๋ฅผ ์คํํ๋ ๊ฒ์ ๋ํ๋ธ๋ค. - ์ปจํ
์ด๋ 1๊ฐ๋ฅผ ์์ฑํ๊ณ ,
.spec.containers[0].name
ํ๋๋ฅผ ์ฌ์ฉํด์nginx
์ด๋ฆ์ ๋ถ์ธ๋ค.
- ํ๋๋
์์ํ๊ธฐ ์ ์, ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ์์๋๊ณ ์คํ ์ค์ธ์ง ํ์ธํ๋ค. ์์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅธ๋ค.
- ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํด์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
kubectl get deployments
์ ์คํํด์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋์๋์ง ํ์ธํ๋ค.
๋ง์ฝ ๋ํ๋ก์ด๋จผํธ๊ฐ ์ฌ์ ํ ์์ฑ ์ค์ด๋ฉด, ๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/3 0 0 1s
ํด๋ฌ์คํฐ์์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๊ฒํ ๋, ๋ค์ ํ๋๊ฐ ํ์๋๋ค.
NAME
์ ๋ค์์คํ์ด์ค์ ์๋ ๋ํ๋ก์ด๋จผํธ ์ด๋ฆ์ ๋ชฉ๋ก์ด๋ค.READY
๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ํ๋ฆฌ์นด์ ์๋ฅผ ํ์ํ๋ค. ready/desired ํจํด์ ๋ฐ๋ฅธ๋ค.UP-TO-DATE
๋ ์๋ํ ์ํ๋ฅผ ์ป๊ธฐ ์ํด ์ ๋ฐ์ดํธ๋ ๋ ํ๋ฆฌ์นด์ ์๋ฅผ ํ์ํ๋ค.AVAILABLE
์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ํ๋ฆฌ์นด์ ์๋ฅผ ํ์ํ๋ค.AGE
๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ๋ ์๊ฐ์ ํ์ํ๋ค.
.spec.replicas
ํ๋์ ๋ฐ๋ผ ์๋ํ ๋ ํ๋ฆฌ์นด์ ์๊ฐ 3๊ฐ์ธ์ง ์ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ์ ๋กค์์ ์ํ๋ฅผ ๋ณด๋ ค๋ฉด,
kubectl rollout status deployment/nginx-deployment
๋ฅผ ์คํํ๋ค.๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Waiting for rollout to finish: 2 out of 3 new replicas have been updated... deployment "nginx-deployment" successfully rolled out
๋ช ์ด ํ
kubectl get deployments
๋ฅผ ๋ค์ ์คํํ๋ค. ๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 18s
๋ํ๋ก์ด๋จผํธ์์ 3๊ฐ์ ๋ ํ๋ฆฌ์นด๊ฐ ์์ฑ๋์๊ณ , ๋ชจ๋ ๋ ํ๋ฆฌ์นด๋ ์ต์ ์ํ(์ต์ ํ๋ ํ ํ๋ฆฟ์ ํฌํจ)์ด๋ฉฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ์ ์ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ๋ก ์์ฑ๋ ๋ ํ๋ฆฌ์นด์ (
rs
)์ ๋ณด๋ ค๋ฉด,kubectl get rs
๋ฅผ ์คํํ๋ค. ๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.NAME DESIRED CURRENT READY AGE nginx-deployment-75675f5897 3 3 3 18s
๋ ํ๋ฆฌ์นด์ ์ ์ถ๋ ฅ์๋ ๋ค์ ํ๋๊ฐ ํ์๋๋ค.
NAME
์ ๋ค์์คํ์ด์ค์ ์๋ ๋ ํ๋ฆฌ์นด์ ์ด๋ฆ์ ๋ชฉ๋ก์ด๋ค.DESIRED
๋ ๋ํ๋ก์ด๋จผํธ์ ์์ฑ ์ ์ ์๋ ์๋ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ํ๋ฆฌ์นด ์ ์๋ฅผ ํ์ํ๋ค. ์ด๊ฒ์ด ์๋ํ ์ํ ์ด๋ค.CURRENT
๋ ํ์ฌ ์คํ ์ค์ธ ๋ ํ๋ฆฌ์นด์ ์๋ฅผ ํ์ํ๋ค.READY
๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ํ๋ฆฌ์นด์ ์๋ฅผ ํ์ํ๋ค.AGE
๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ๋ ์๊ฐ์ ํ์ํ๋ค.
๋ ํ๋ฆฌ์นด์ ์ ์ด๋ฆ์ ํญ์
[DEPLOYMENT-NAME]-[HASH]
ํ์์ผ๋ก ๋ ๊ฒ์ ์ ์ ์๋ค.HASH
๋ฌธ์์ด์ ๋ ํ๋ฆฌ์นด์ ์pod-template-hash
๋ ์ด๋ธ๊ณผ ๊ฐ๋ค.๊ฐ ํ๋์ ์๋์ผ๋ก ์์ฑ๋ ๋ ์ด๋ธ์ ๋ณด๋ ค๋ฉด,
kubectl get pods --show-labels
๋ฅผ ์คํํ๋ค. ๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.NAME READY STATUS RESTARTS AGE LABELS nginx-deployment-75675f5897-7ci7o 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453 nginx-deployment-75675f5897-kzszj 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453 nginx-deployment-75675f5897-qqcnn 1/1 Running 0 18s app=nginx,pod-template-hash=3123191453
๋ง๋ค์ด์ง ๋ ํ๋ฆฌ์นด์ ์ ์คํ ์ค์ธ 3๊ฐ์
nginx
ํ๋๋ฅผ ๋ณด์ฅํ๋ค.
์ฐธ๊ณ :
๋ํ๋ก์ด๋จผํธ์๋ ํ๋ ํ
ํ๋ฆฟ ๋ ์ด๋ธ๊ณผ ์ ์ ํ ์
๋ ํฐ๋ฅผ ๋ฐ๋์ ๋ช
์ํด์ผ ํ๋ค
(์ด ์์์์๋ app: nginx
).
๋ ์ด๋ธ ๋๋ ์ ๋ ํฐ๋ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ(๋ค๋ฅธ ๋ํ๋ก์ด๋จผํธ์ ์คํ ์ดํธํ์ (StatefulSet) ํฌํจ)์ ๊ฒน์น์ง ์์์ผ ํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ๊ฒน์น๋ ๊ฒ์ ๋ง์ง ์์ผ๋ฉฐ, ๋ง์ฝ ๋ค์ค ์ปจํธ๋กค๋ฌ๊ฐ ๊ฒน์น๋ ์ ๋ ํฐ๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ ํด๋น ์ปจํธ๋กค๋ฌ์ ์ถฉ๋ ๋๋ ์๊ธฐ์น ์์ ๋์์ ์ผ๊ธฐํ ์ ์๋ค.
Pod-template-hash ๋ ์ด๋ธ
์ฃผ์:
์ด ๋ ์ด๋ธ์ ๋ณ๊ฒฝํ๋ฉด ์ ๋๋ค.pod-template-hash
๋ ์ด๋ธ์ ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ์ ์ํด์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ ๋๋ ์ฑํํ ๋ชจ๋ ๋ ํ๋ฆฌ์นด์
์ ์ถ๊ฐ๋๋ค.
์ด ๋ ์ด๋ธ์ ๋ํ๋ก์ด๋จผํธ์ ์์ ๋ ํ๋ฆฌ์นด์
์ด ๊ฒน์น์ง ์๋๋ก ๋ณด์ฅํ๋ค. ๋ ํ๋ฆฌ์นด์
์ PodTemplate
์ ํด์ฑํ๊ณ , ํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ ํ๋ฆฌ์นด์
์
๋ ํฐ,
ํ๋ ํ
ํ๋ฆฟ ๋ ์ด๋ธ ๋ฐ ๋ ํ๋ฆฌ์นด์
์ด ๊ฐ์ง ์ ์๋ ๊ธฐ์กด์ ๋ชจ๋ ํ๋์ ๋ ์ด๋ธ ๊ฐ์ผ๋ก ์ถ๊ฐํด์ ์ฌ์ฉํ๋๋ก ์์ฑํ๋ค.
๋ํ๋ก์ด๋จผํธ ์ ๋ฐ์ดํธ
์ฐธ๊ณ :
๋ํ๋ก์ด๋จผํธ์ ํ๋ ํ ํ๋ฆฟ(์ฆ,.spec.template
)์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์๋ง ๋ํ๋ก์ด๋จผํธ์ ๋กค์์์ด ํธ๋ฆฌ๊ฑฐ(trigger) ๋๋ค.
์๋ฅผ ๋ค๋ฉด ํ
ํ๋ฆฟ์ ๋ ์ด๋ธ์ด๋ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๊ฐ ์
๋ฐ์ดํธ๋ ๊ฒฝ์ฐ์ด๋ค. ๋ํ๋ก์ด๋จผํธ์ ์ค์ผ์ผ๋ง๊ณผ ๊ฐ์ ๋ค๋ฅธ ์
๋ฐ์ดํธ๋ ๋กค์์์ ํธ๋ฆฌ๊ฑฐํ์ง ๋ง์์ผ ํ๋ค.๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
nginx:1.14.2
์ด๋ฏธ์ง ๋์nginx:1.16.1
์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋๋ก nginx ํ๋๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1
๋๋ ๋ค์์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment image updated
๋์์ผ๋ก ๋ํ๋ก์ด๋จผํธ๋ฅผ
edit
ํด์.spec.template.spec.containers[0].image
๋ฅผnginx:1.14.2
์์nginx:1.16.1
๋ก ๋ณ๊ฒฝํ๋ค.kubectl edit deployment/nginx-deployment
๋ค์๊ณผ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment edited
๋กค์์ ์ํ๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์์ ์คํํ๋ค.
kubectl rollout status deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
๋๋
deployment "nginx-deployment" successfully rolled out
์ ๋ฐ์ดํธ๋ ๋ํ๋ก์ด๋จผํธ์ ๋ํด ์์ธํ ์ ๋ณด ๋ณด๊ธฐ
๋กค์์์ด ์ฑ๊ณตํ๋ฉด
kubectl get deployments
๋ฅผ ์คํํด์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ณผ ์ ์๋ค. ์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 36s
kubectl get rs
๋ฅผ ์คํํด์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑํด์ ํ๋๋ฅผ ์ ๋ฐ์ดํธ ํ๋์ง ๋ณผ ์ ์๊ณ , ์ ๋ ํ๋ฆฌ์นด์ ์ ์ต๋ 3๊ฐ์ ๋ ํ๋ฆฌ์นด๋ก ์ค์ผ์ผ ์ , ์ด์ ๋ ํ๋ฆฌ์นด์ ์ 0๊ฐ์ ๋ ํ๋ฆฌ์นด๋ก ์ค์ผ์ผ ๋ค์ดํ๋ค.kubectl get rs
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE nginx-deployment-1564180365 3 3 3 6s nginx-deployment-2035384211 0 0 0 36s
get pods
๋ฅผ ์คํํ๋ฉด ์ ํ๋๋ง ํ์๋๋ค.kubectl get pods
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME READY STATUS RESTARTS AGE nginx-deployment-1564180365-khku8 1/1 Running 0 14s nginx-deployment-1564180365-nacti 1/1 Running 0 14s nginx-deployment-1564180365-z9gth 1/1 Running 0 14s
๋ค์์ ์ด๋ฌํ ํ๋๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ค๋ฉด ๋ํ๋ก์ด๋จผํธ์ ํ๋ ํ ํ๋ฆฟ๋ง ๋ค์ ์ ๋ฐ์ดํธ ํ๋ฉด ๋๋ค.
๋ํ๋ก์ด๋จผํธ๋ ์ ๋ฐ์ดํธ๋๋ ๋์ ์ผ์ ํ ์์ ํ๋๋ง ์ค๋จ๋๋๋ก ๋ณด์ฅํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ด๋ ์๋ํ ํ๋ ์์ 75% ์ด์์ด ๋์ํ๋๋ก ๋ณด์ฅํ๋ค(์ต๋ 25% ๋ถ๊ฐ).
๋ํ ๋ํ๋ก์ด๋จผํธ๋ ์๋ํ ํ๋ ์ ๋ณด๋ค ๋ ๋ง์ด ์์ฑ๋๋ ํ๋์ ์๋ฅผ ์ ํํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, ์๋ํ ํ๋์ ์ ๊ธฐ์ค ์ต๋ 125%๊น์ง๋ง ์ถ๊ฐ ํ๋๊ฐ ๋์ํ ์ ์๋๋ก ์ ํํ๋ค(์ต๋ 25% ๊น์ง).
์๋ฅผ ๋ค์ด, ์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ธํ ์ดํด๋ณด๋ฉด ๋จผ์ ์๋ก์ด ํ๋๋ฅผ ์์ฑํ ๋ค์, ์ด์ ํ๋๋ฅผ ์ญ์ ํ๊ณ , ๋ ๋ค๋ฅธ ์๋ก์ด ํ๋๋ฅผ ๋ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ถฉ๋ถํ ์์ ์๋ก์ด ํ๋๊ฐ ๋์ฌ ๋๊น์ง ์ด์ ํ๋๋ฅผ ์ฃฝ์ด์ง ์์ผ๋ฉฐ, ์ถฉ๋ถํ ์์ ์ด์ ํ๋๋ค์ด ์ฃฝ๊ธฐ ์ ๊น์ง ์๋ก์ด ํ๋๋ฅผ ๋ง๋ค์ง ์๋๋ค. ์ด๊ฒ์ ์ต์ 3๊ฐ์ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ณ , ์ต๋ 4๊ฐ์ ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค. ๋ํ๋ก์ด๋จผํธ์ ๋ ํ๋ฆฌ์นด ํฌ๊ธฐ๊ฐ 4์ธ ๊ฒฝ์ฐ, ํ๋ ์ซ์๋ 3๊ฐ์์ 5๊ฐ ์ฌ์ด์ด๋ค.
๋ํ๋ก์ด๋จผํธ์ ์ธ๋ถ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
kubectl describe deployments
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Name: nginx-deployment Namespace: default CreationTimestamp: Thu, 30 Nov 2017 10:56:25 +0000 Labels: app=nginx Annotations: deployment.kubernetes.io/revision=2 Selector: app=nginx Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.16.1 Port: 80/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-1564180365 (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 2m deployment-controller Scaled up replica set nginx-deployment-2035384211 to 3 Normal ScalingReplicaSet 24s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 1 Normal ScalingReplicaSet 22s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 2 Normal ScalingReplicaSet 22s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 2 Normal ScalingReplicaSet 19s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 1 Normal ScalingReplicaSet 19s deployment-controller Scaled up replica set nginx-deployment-1564180365 to 3 Normal ScalingReplicaSet 14s deployment-controller Scaled down replica set nginx-deployment-2035384211 to 0
์ฒ์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ์ ๋, ๋ํ๋ก์ด๋จผํธ๊ฐ ๋ ํ๋ฆฌ์นด์ (nginx-deployment-2035384211)์ ์์ฑํ๊ณ 3๊ฐ์ ๋ ํ๋ฆฌ์นด๋ก ์ง์ ์ค์ผ์ผ ์ ํ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ์, ์ ๋ ํ๋ฆฌ์นด์ (nginx-deployment-1564180365)์ ์์ฑํ๊ณ , 1๊ฐ๋ก ์ค์ผ์ผ ์ ํ ๋ค์ ๋ชจ๋ ์คํ๋ ๋๊น์ง ๋๊ธฐํ์๋ค. ๊ทธ ๋ค ์ด์ ๋ ํ๋ฆฌ์นด์ ์ 2๊ฐ๋ก ์ค์ผ์ผ ๋ค์ดํ๊ณ ์ ๋ ํ๋ฆฌ์นด์ ์ 2๊ฐ๋ก ์ค์ผ์ผ ์ ํ์ฌ ๋ชจ๋ ์์ ์ ๋ํด ์ต์ 3๊ฐ / ์ต๋ 3๊ฐ์ ํ๋๊ฐ ์กด์ฌํ๋๋ก ํ์๋ค. ์ดํ ์ง์ํด์ ๊ฐ์ ๋กค๋ง ์ ๋ฐ์ดํธ ์ ์ฑ ์ผ๋ก ์ ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ์ ํ๊ณ ์ด์ ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ๋ค์ดํ๋ค. ๋ง์ง๋ง์ผ๋ก ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ 3๊ฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ํ๋ฆฌ์นด๊ฐ ๊ตฌ์ฑ๋๋ฉฐ, ์ด์ ๋ ํ๋ฆฌ์นด์ ์ 0๊ฐ๋ก ์ค์ผ์ผ ๋ค์ด๋๋ค.
์ฐธ๊ณ :
์ฟ ๋ฒ๋คํฐ์ค๊ฐavailableReplicas
์๋ฅผ ๊ณ์ฐํ ๋ ์ข
๋ฃ ์ค์ธ(terminating) ํ๋๋ ํฌํจํ์ง ์์ผ๋ฉฐ,
์ด ์๋ replicas - maxUnavailable
์ replicas + maxSurge
์ฌ์ด์ ์กด์ฌํ๋ค.
๊ทธ ๊ฒฐ๊ณผ, ๋กค์์ ์ค์๋ ํ๋์ ์๊ฐ ์์๋ณด๋ค ๋ง์ ์ ์์ผ๋ฉฐ,
์ข
๋ฃ ์ค์ธ ํ๋์ terminationGracePeriodSeconds
๊ฐ ๋ง๋ฃ๋ ๋๊น์ง๋ ๋ํ๋ก์ด๋จผํธ๊ฐ ์๋นํ๋ ์ด ๋ฆฌ์์ค๊ฐ replicas + maxSurge
์ด์์ผ ์ ์๋ค.๋กค์ค๋ฒ(์ผ๋ช ์ธ-ํ๋ผ์ดํธ ๋ค์ค ์ ๋ฐ์ดํธ)
๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ๊ฐ ์๊ฐ๋ง๋ค ์๋ก์ด ๋ํ๋ก์ด๋จผํธ์์ ๋ ํ๋ฆฌ์นด์
์ด
์๋ํ ํ๋๋ฅผ ์์ฑํ๊ณ ๋์ฐ๋ ๊ฒ์ ์ฃผ์ํ๋ค. ๋ง์ฝ ๋ํ๋ก์ด๋จผํธ๊ฐ ์
๋ฐ์ดํธ๋๋ฉด, ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์
์์
.spec.selector
๋ ์ด๋ธ๊ณผ ์ผ์นํ๋ ํ๋๋ฅผ ์ปจํธ๋กค ํ์ง๋ง, ํ
ํ๋ฆฟ๊ณผ .spec.template
์ด ๋ถ์ผ์นํ๋ฉด ์ค์ผ์ผ ๋ค์ด์ด ๋๋ค.
๊ฒฐ๊ตญ ์๋ก์ด ๋ ํ๋ฆฌ์นด์
์ .spec.replicas
๋ก ์ค์ผ์ผ๋๊ณ , ๋ชจ๋ ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์
์ 0๊ฐ๋ก ์ค์ผ์ผ๋๋ค.
๋ง์ฝ ๊ธฐ์กด ๋กค์์์ด ์งํ๋๋ ์ค์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ ๋ํ๋ก์ด๋จผํธ๊ฐ ์ ๋ฐ์ดํธ์ ๋ฐ๋ผ ์ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑํ๊ณ , ์ค์ผ์ผ ์ ํ๊ธฐ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ ์ค์ผ์ผ ์ ํ๋ ๋ ํ๋ฆฌ์นด์ ์ ๋กค์ค๋ฒ ํ๋ค. --์ด๊ฒ์ ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ๋ชฉ๋ก์ ์ถ๊ฐํ๊ณ ์ค์ผ์ผ ๋ค์ด์ ํ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด ๋ํ๋ก์ด๋จผํธ๋ก nginx:1.14.2
๋ ํ๋ฆฌ์นด๋ฅผ 5๊ฐ ์์ฑ์ ํ๋ค.
ํ์ง๋ง nginx:1.14.2
๋ ํ๋ฆฌ์นด 3๊ฐ๊ฐ ์์ฑ๋์์ ๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์
๋ฐ์ดํธํด์ nginx:1.16.1
๋ ํ๋ฆฌ์นด 5๊ฐ๋ฅผ ์์ฑ์ฑํ๋๋ก ์
๋ฐ์ดํธ๋ฅผ ํ๋ค๊ณ ๊ฐ์ ํ๋ค. ์ด ๊ฒฝ์ฐ ๋ํ๋ก์ด๋จผํธ๋ ์ฆ์ ์์ฑ๋ 3๊ฐ์
nginx:1.14.2
ํ๋ 3๊ฐ๋ฅผ ์ฃฝ์ด๊ธฐ ์์ํ๊ณ nginx:1.16.1
ํ๋๋ฅผ ์์ฑํ๊ธฐ ์์ํ๋ค.
์ด๊ฒ์ ๊ณผ์ ์ด ๋ณ๊ฒฝ๋๊ธฐ ์ nginx:1.14.2
๋ ํ๋ฆฌ์นด 5๊ฐ๊ฐ
์์ฑ๋๋ ๊ฒ์ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
๋ ์ด๋ธ ์ ๋ ํฐ ์ ๋ฐ์ดํธ
์ผ๋ฐ์ ์ผ๋ก ๋ ์ด๋ธ ์ ๋ ํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ผ๋ฉฐ ์ ๋ ํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณํํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ์ด๋ค ๊ฒฝ์ฐ๋ ๋ ์ด๋ธ ์ ๋ ํฐ์ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผํ๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ฃผ์ํ๊ณ , ๋ชจ๋ ์ํฅ์ ํ์ ํ๋์ง ํ์ธํด์ผ ํ๋ค.
์ฐธ๊ณ :
API ๋ฒ์ apps/v1
์์ ๋ํ๋ก์ด๋จผํธ์ ๋ ์ด๋ธ ์
๋ ํฐ๋ ์์ฑ ์ดํ์๋ ๋ณ๊ฒฝํ ์ ์๋ค.- ์ ๋ ํฐ ์ถ๊ฐ ์ ๋ํ๋ก์ด๋จผํธ์ ์ฌ์์ ์๋ ํ๋ ํ ํ๋ฆฟ ๋ ์ด๋ธ๋ ์ ๋ ์ด๋ธ๋ก ์ ๋ฐ์ดํธํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ๊ฐ ๋ฐํ๋๋ค. ์ด ๋ณ๊ฒฝ์ ๊ฒน์น์ง ์๋ ๋ณ๊ฒฝ์ผ๋ก ์ ์ ๋ ํฐ๊ฐ ์ด์ ์ ๋ ํฐ๋ก ๋ง๋ ๋ ํ๋ฆฌ์นด์ ๊ณผ ํ๋๋ฅผ ์ ํํ์ง ์๊ฒ ๋๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ก ๋ชจ๋ ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ์ ๊ณ ์๊ฐ ๋๋ฉฐ, ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ ์์ฑํ๊ฒ ๋๋ค.
- ์ ๋ ํฐ ์ ๋ฐ์ดํธ๋ ๊ธฐ์กด ์ ๋ ํฐ ํค ๊ฐ์ ๋ณ๊ฒฝํ๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ถ๊ฐ์ ๋์ผํ ๋์์ ํ๋ค.
- ์ ๋ ํฐ ์ญ์ ๋ ๋ํ๋ก์ด๋จผํธ ์ ๋ ํฐ์ ๊ธฐ์กด ํค๋ฅผ ์ญ์ ํ๋ฉฐ ํ๋ ํ ํ๋ฆฟ ๋ ์ด๋ธ์ ๋ณ๊ฒฝ์ ํ์๋ก ํ์ง ์๋๋ค. ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ์ ๊ณ ์๊ฐ ์๋๊ณ , ์ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑ๋์ง ์๋๋ค. ๊ทธ๋ฌ๋ ์ ๊ฑฐ๋ ๋ ์ด๋ธ์ ๊ธฐ์กด ํ๋์ ๋ ํ๋ฆฌ์นด์ ์ ์ฌ์ ํ ์กด์ฌํ๋ค๋ ์ ์ ์ฐธ๊ณ ํด์ผ ํ๋ค.
๋ํ๋ก์ด๋จผํธ ๋กค๋ฐฑ
๋๋๋ก ๋ํ๋ก์ด๋จผํธ์ ๋กค๋ฐฑ์ ์ํ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด ๋ํ๋ก์ด๋จผํธ๊ฐ ์ง์์ ์ธ ์ถฉ๋๋ก ์์ ์ ์ด์ง ์์ ๊ฒฝ์ฐ. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ํ๋ก์ด๋จผํธ์ ๋กค์์ ๊ธฐ๋ก์ ์์คํ ์ ๋จ์์์ด ์ธ์ ๋ ์ง ์ํ ๋ ๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ค (์ด ์ฌํญ์ ์์ ๊ธฐ๋ก์ ๋ํ ์ํ ์์ ์ ํตํด์ ๋ณ๊ฒฝํ ์ ์๋ค).
์ฐธ๊ณ :
๋ํ๋ก์ด๋จผํธ์ ์์ ๋ฒ์ ์ ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์์ฑ๋๋ค. ์ด๋ ๋ํ๋ก์ด๋จผํธ ํ๋ ํ ํ๋ฆฟ (.spec.template
)์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋ง ์๋ก์ด ์์ ๋ฒ์ ์ด ์์ฑ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด ํ
ํ๋ฆฟ์ ๋ ์ด๋ธ ๋๋ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์
๋ฐ์ดํธ ํ๋ ๊ฒฝ์ฐ.
๋ํ๋ก์ด๋จผํธ์ ์ค์ผ์ผ๋ง๊ณผ ๊ฐ์ ๋ค๋ฅธ ์
๋ฐ์ดํธ์ ๋ํ๋ก์ด๋จผํธ ์์ ๋ฒ์ ์ ์์ฑ๋์ง ์์ผ๋ฉฐ ์๋-์ค์ผ์ผ๋ง ๋๋ ์๋-์ค์ผ์ผ๋ง์ ๋์์ ์ํํ ์ ์๋ค.
์ด๋ ์ด์ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ์ ํ๋ ๊ฒฝ์ฐ์ ๋ํ๋ก์ด๋จผํธ ํ๋ ํ
ํ๋ฆฟ ๋ถ๋ถ๋ง
๋กค๋ฐฑ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋์ ์ด๋ฏธ์ง ์ด๋ฆ์
nginx:1.16.1
์ด ์๋nginx:1.161
๋ก ์ ๋ ฅํด์ ์คํ๋ฅผ ๋๋ค๊ณ ๊ฐ์ ํ๋ค.kubectl set image deployment/nginx-deployment nginx=nginx:1.161
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment image updated
๋กค์์์ด ๊ณ ์ฐฉ ๋๋ค. ๊ณ ์ฐฉ๋ ๋กค์์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ค.
kubectl rollout status deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Waiting for rollout to finish: 1 out of 3 new replicas have been updated...
Ctrl-C ๋ฅผ ๋๋ฌ ์์ ๋กค์์ ์ํ ๋ณด๊ธฐ๋ฅผ ์ค์งํ๋ค. ๊ณ ์ฐฉ๋ ๋กค์์ ์ํ์ ๋ํ ์์ธํ ์ ๋ณด๋ ์ด ๊ฒ์ ๋ ์ฝ์ด๋ณธ๋ค.
์ด์ ๋ ํ๋ฆฌ์นด๋ 2๊ฐ(
nginx-deployment-1564180365
๊ณผnginx-deployment-2035384211
), ์ ๋ ํ๋ฆฌ์นด๋ 1๊ฐ(nginx-deployment-3066724191)์์ ์ ์ ์๋ค.kubectl get rs
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE nginx-deployment-1564180365 3 3 3 25s nginx-deployment-2035384211 0 0 0 36s nginx-deployment-3066724191 1 1 0 6s
์์ฑ๋ ํ๋๋ฅผ ๋ณด๋ฉด, ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ ์์ฑ๋ 1๊ฐ์ ํ๋๊ฐ ์ด๋ฏธ์ง ํ ๋ฃจํ(pull loop)์์ ๊ณ ์ฐฉ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
kubectl get pods
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME READY STATUS RESTARTS AGE nginx-deployment-1564180365-70iae 1/1 Running 0 25s nginx-deployment-1564180365-jbqqo 1/1 Running 0 25s nginx-deployment-1564180365-hysrc 1/1 Running 0 25s nginx-deployment-3066724191-08mng 0/1 ImagePullBackOff 0 6s
์ฐธ๊ณ :
๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ชป๋ ๋กค์์์ ์๋์ผ๋ก ์ค์งํ๊ณ , ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ์ ์ ์ค์งํ๋ค. ์ด๋ ์ง์ ํ ๋กค๋ง ์ ๋ฐ์ดํธ์ ํ๋ผ๋ฏธํฐ(๊ตฌ์ฒด์ ์ผ๋ก `maxUnavailable`)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก 25%๋ฅผ ์ค์ ํ๋ค.
๋ํ๋ก์ด๋จผํธ์ ๋ํ ์ค๋ช ๋ณด๊ธฐ
kubectl describe deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Name: nginx-deployment Namespace: default CreationTimestamp: Tue, 15 Mar 2016 14:48:04 -0700 Labels: app=nginx Selector: app=nginx Replicas: 3 desired | 1 updated | 4 total | 3 available | 1 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.161 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True ReplicaSetUpdated OldReplicaSets: nginx-deployment-1564180365 (3/3 replicas created) NewReplicaSet: nginx-deployment-3066724191 (1/1 replicas created) Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 1m 1m 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-2035384211 to 3 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 1 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 2 22s 22s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 2 21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 1 21s 21s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-1564180365 to 3 13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled down replica set nginx-deployment-2035384211 to 0 13s 13s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set nginx-deployment-3066724191 to 1
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ ์ ์ธ ์ด์ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํด์ผ ํ๋ค.
๋ํ๋ก์ด๋จผํธ์ ๋กค์์ ๊ธฐ๋ก ํ์ธ
๋ค์ ์์์ ๋ฐ๋ผ ๋กค์์ ๊ธฐ๋ก์ ํ์ธํ๋ค.
๋จผ์ ์ด ๋ํ๋ก์ด๋จผํธ์ ์์ ์ฌํญ์ ํ์ธํ๋ค.
kubectl rollout history deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployments "nginx-deployment" REVISION CHANGE-CAUSE 1 kubectl apply --filename=https://k8s.io/examples/controllers/nginx-deployment.yaml 2 kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 3 kubectl set image deployment/nginx-deployment nginx=nginx:1.161
CHANGE-CAUSE
๋ ์์ ์์ฑ์ ๋ํ๋ก์ด๋จผํธ ์ฃผ์์ธkubernetes.io/change-cause
์์ ๋ณต์ฌํ๋ค. ๋ค์์ ๋ํดCHANGE-CAUSE
๋ฉ์์ง๋ฅผ ์ง์ ํ ์ ์๋ค.- ๋ํ๋ก์ด๋จผํธ์
kubectl annotate deployment/nginx-deployment kubernetes.io/change-cause="image updated to 1.16.1"
๋ก ์ฃผ์์ ๋จ๋ค. - ์๋์ผ๋ก ๋ฆฌ์์ค ๋งค๋ํ์คํธ ํธ์ง.
- ๋ํ๋ก์ด๋จผํธ์
๊ฐ ์์ ๋ฒ์ ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์์ ์คํํ๋ค.
kubectl rollout history deployment/nginx-deployment --revision=2
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployments "nginx-deployment" revision 2 Labels: app=nginx pod-template-hash=1159050644 Annotations: kubernetes.io/change-cause=kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 Containers: nginx: Image: nginx:1.16.1 Port: 80/TCP QoS Tier: cpu: BestEffort memory: BestEffort Environment Variables: <none> No volumes.
์ด์ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ
๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ ๋ํ๋ก์ด๋จผํธ๋ฅผ ํ์ฌ ๋ฒ์ ์์ ์ด์ ๋ฒ์ ์ธ ๋ฒ์ 2๋ก ๋กค๋ฐฑํ๋ค.
์ด์ ํ์ฌ ๋กค์์์ ์คํ ์ทจ์ ๋ฐ ์ด์ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
kubectl rollout undo deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment rolled back
๋๋ ํน์ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ๋ ค๋ฉด
--to-revision
์ต์ ์ ํด๋น ์์ ๋ฒ์ ์ ๋ช ์ํ๋ค.kubectl rollout undo deployment/nginx-deployment --to-revision=2
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment rolled back
๋กค์์ ๊ด๋ จ ๋ช ๋ น์ ๋ํ ์์ธํ ๋ด์ฉ์
kubectl rollout
์ ์ฐธ์กฐํ๋ค.์ด์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์ด์ ์์ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ ๋๋ค. ๋ฒ์ 2๋ก ๋กค๋ฐฑํ๊ธฐ ์ํด
DeploymentRollback
์ด๋ฒคํธ๊ฐ ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ์์ ์์ฑ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.๋ง์ฝ ๋กค๋ฐฑ์ ์ฑ๊ณตํ๊ณ , ๋ํ๋ก์ด๋จผํธ๊ฐ ์์๋๋ก ์คํ๋๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ์คํํ๋ค.
kubectl get deployment nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 30m
๋ํ๋ก์ด๋จผํธ์ ์ค๋ช ๊ฐ์ ธ์ค๊ธฐ.
kubectl describe deployment nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Name: nginx-deployment Namespace: default CreationTimestamp: Sun, 02 Sep 2018 18:17:55 -0500 Labels: app=nginx Annotations: deployment.kubernetes.io/revision=4 kubernetes.io/change-cause=kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 Selector: app=nginx Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.16.1 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-c4747d96c (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 12m deployment-controller Scaled up replica set nginx-deployment-75675f5897 to 3 Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 1 Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 2 Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 2 Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 1 Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-c4747d96c to 3 Normal ScalingReplicaSet 11m deployment-controller Scaled down replica set nginx-deployment-75675f5897 to 0 Normal ScalingReplicaSet 11m deployment-controller Scaled up replica set nginx-deployment-595696685f to 1 Normal DeploymentRollback 15s deployment-controller Rolled back deployment "nginx-deployment" to revision 2 Normal ScalingReplicaSet 15s deployment-controller Scaled down replica set nginx-deployment-595696685f to 0
๋ํ๋ก์ด๋จผํธ ์ค์ผ์ผ๋ง
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ํ๋ก์ด๋จผํธ์ ์ค์ผ์ผ์ ํ ์ ์๋ค.
kubectl scale deployment/nginx-deployment --replicas=10
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment scaled
๊ฐ๋ น ํด๋ฌ์คํฐ์์ horizontal Pod autoscaling๋ฅผ ์ค์ ํ ๊ฒฝ์ฐ ๋ํ๋ก์ด๋จผํธ์ ๋ํ ์คํ ์ค์ผ์ผ๋ฌ๋ฅผ ์ค์ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด ํ๋์ CPU ์ฌ์ฉ๋ฅ ์ ๊ธฐ์ค์ผ๋ก ์คํํ ์ต์ ํ๋ ๋ฐ ์ต๋ ํ๋์ ์๋ฅผ ์ ํํ ์ ์๋ค.
kubectl autoscale deployment/nginx-deployment --min=10 --max=15 --cpu-percent=80
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment scaled
๋น๋ก์ ์ค์ผ์ผ๋ง(Proportional Scaling)
๋ํ๋ก์ด๋จผํธ ๋กค๋ง์ ๋ฐ์ดํธ๋ ์ฌ๋ฌ ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์คํํ ์ ์๋๋ก ์ง์ํ๋ค. ์ฌ์ฉ์ ๋๋ ์คํ ์ค์ผ์ผ๋ฌ๊ฐ ๋กค์์ ์ค์ ์๋ ๋ํ๋ก์ด๋จผํธ ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์ค์ผ์ผ๋ง ํ๋ ๊ฒฝ์ฐ(์งํ์ค ๋๋ ์ผ์ ์ค์ง ์ค), ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ์ํ์ ์ค์ด๊ธฐ ์ํด ๊ธฐ์กด ํ์ฑํ๋ ๋ ํ๋ฆฌ์นด์ (ํ๋์ ๋ ํ๋ฆฌ์นด์ )์ ์ถ๊ฐ ๋ ํ๋ฆฌ์นด์ ๊ท ํ์ ์กฐ์ ํ๋ค. ์ด๊ฒ์ proportional scaling ๋ผ ๋ถ๋ฅธ๋ค.
์๋ฅผ ๋ค์ด, 10๊ฐ์ ๋ ํ๋ฆฌ์นด๋ฅผ ๋ํ๋ก์ด๋จผํธ๋ก maxSurge=3, ๊ทธ๋ฆฌ๊ณ maxUnavailable=2 ๋ก ์คํ ํ๋ค.
๋ํ๋ก์ด๋จผํธ์ ์๋ 10๊ฐ์ ๋ ํ๋ฆฌ์นด๊ฐ ์คํ๋๋์ง ํ์ธํ๋ค.
kubectl get deploy
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deployment 10 10 10 10 50s
ํด๋ฌ์คํฐ ๋ด๋ถ์์ ํ์ธํ ์ ์๋ ์ ์ด๋ฏธ์ง๋ก ์ ๋ฐ์ดํธ ๋๋ค.
kubectl set image deployment/nginx-deployment nginx=nginx:sometag
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment image updated
์ด๋ฏธ์ง ์ ๋ฐ์ดํธ๋ ๋ ํ๋ฆฌ์นด์ nginx-deployment-1989198191 ์ผ๋ก ์๋ก์ด ๋กค ์์์ด ์์ํ์ง๋ง, ์์์ ์ธ๊ธํ
maxUnavailable
์ ์๊ตฌ ์ฌํญ์ผ๋ก ์ธํด ์ฐจ๋จ๋๋ค. ๋กค์์ ์ํ๋ฅผ ํ์ธํ๋ค.kubectl get rs
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE nginx-deployment-1989198191 5 5 0 9s nginx-deployment-618515232 8 8 8 1m
๊ทธ ๋ค์ ๋ํ๋ก์ด๋จผํธ์ ๋ํ ์๋ก์ด ์ค์ผ์ผ๋ง ์์ฒญ์ด ํจ๊ป ๋ฐ๋ผ์จ๋ค. ์คํ ์ค์ผ์ผ๋ฌ๋ ๋ํ๋ก์ด๋จผํธ ๋ ํ๋ฆฌ์นด๋ฅผ 15๋ก ์ฆ๊ฐ์ํจ๋ค. ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ์๋ก์ด 5๊ฐ์ ๋ ํ๋ฆฌ์นด์ ์ถ๊ฐ๋ฅผ ์ํ ์์น๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค. ๋ง์ฝ ๋น๋ก์ ์ค์ผ์ผ๋ง์ ์ฌ์ฉํ์ง ์์ผ๋ฉด 5๊ฐ ๋ชจ๋ ์ ๋ ํ๋ฆฌ์นด์ ์ ์ถ๊ฐ๋๋ค. ๋น๋ก์ ์ค์ผ์ผ๋ง์ผ๋ก ์ถ๊ฐ ๋ ํ๋ฆฌ์นด๋ฅผ ๋ชจ๋ ๋ ํ๋ฆฌ์นด์ ์ ๊ฑธ์ณ ๋ถ์ฐํ ์ ์๋ค. ๋น์จ์ด ๋์์๋ก ๊ฐ์ฅ ๋ง์ ๋ ํ๋ฆฌ์นด๊ฐ ์๋ ๋ ํ๋ฆฌ์นด์ ์ผ๋ก ์ด๋ํ๊ณ , ๋น์จ์ด ๋ฎ์ ์๋ก ์ ์ ๋ ํ๋ฆฌ์นด๊ฐ ์๋ ๋ ํ๋ฆฌ์นด์ ์ผ๋ก ์ด๋ํ๋ค. ๋จ์ ๊ฒ๋ค์ ๋๋ถ๋ถ์ ๋ ํ๋ฆฌ์นด๊ฐ ์๋ ๋ ํ๋ฆฌ์นด์ ์ ์ถ๊ฐ๋๋ค. 0๊ฐ์ ๋ ํ๋ฆฌ์นด๊ฐ ์๋ ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ์ ๋์ง ์๋๋ค.
์์ ์์์์ ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ์ 3๊ฐ์ ๋ ํ๋ฆฌ์นด๊ฐ ์ถ๊ฐ๋๊ณ , 2๊ฐ์ ๋ ํ๋ฆฌ์นด๋ ์ ๋ ํ๋ฆฌ์นด์ ์ถ๊ฐ๋๋ค. ๊ฒฐ๊ตญ ๋กค์์ ํ๋ก์ธ์ค๋ ์ ๋ ํ๋ฆฌ์นด๊ฐ ์ ์์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด ๋ชจ๋ ๋ ํ๋ฆฌ์นด๋ฅผ ์ ๋ ํ๋ฆฌ์นด์ ์ผ๋ก ์ด๋์ํจ๋ค. ์ด๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์์ ์คํํ๋ค.
kubectl get deploy
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 15 18 7 8 7m
๋กค์์ ์ํ๋ ๋ ํ๋ฆฌ์นด๊ฐ ๊ฐ ๋ ํ๋ฆฌ์นด์ ์ ์ด๋ป๊ฒ ์ถ๊ฐ๋์๋์ง ํ์ธํ๋ค.
kubectl get rs
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE
nginx-deployment-1989198191 7 7 0 7m
nginx-deployment-618515232 11 11 11 7m
๋ํ๋ก์ด๋จผํธ ๋กค์์ ์ผ์ ์ค์ง์ ์ฌ๊ฐ
๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ ๋ (๋๋ ๊ณํํ ๋), ํ๋ ์ด์์ ์ ๋ฐ์ดํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ ์ ํด๋น ๋ํ๋ก์ด๋จผํธ์ ๋ํ ๋กค์์์ ์ผ์ ์ค์งํ ์ ์๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ์ค๋น๊ฐ ๋๋ฉด, ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์ฌ๊ฐํ๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ผ๋ก, ๋ถํ์ํ ๋กค์์์ ํธ๋ฆฌ๊ฑฐํ์ง ์๊ณ ๋กค์์ ์ผ์ ์ค์ง์ ์ฌ๊ฐ ์ฌ์ด์ ์ฌ๋ฌ ์์ ์ฌํญ์ ์ ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์์ฑ๋ ๋ํ๋ก์ด๋จผํธ์ ๊ฒฝ์ฐ
๋ํ๋ก์ด๋จผํธ ์์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
kubectl get deploy
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx 3 3 3 3 1m
๋กค์์ ์ํ๋ฅผ ๊ฐ์ ธ์จ๋ค.
kubectl get rs
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE nginx-2142116321 3 3 3 1m
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํด์ ์ผ์ ์ค์งํ๋ค.
kubectl rollout pause deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment paused
๊ทธ๋ฐ ๋ค์ ๋ํ๋ก์ด๋จผํธ์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment image updated
์๋ก์ด ๋กค์์์ด ์์๋์ง ์๋๋ค.
kubectl rollout history deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployments "nginx" REVISION CHANGE-CAUSE 1 <none>
๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ์ด ๋ณ๊ฒฝ๋์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ๋กค์์ ์ํ๋ฅผ ์ถ๋ ฅํ๋ค.
kubectl get rs
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE nginx-2142116321 3 3 3 2m
์๋ฅผ ๋ค์ด ์ฌ์ฉํ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ฒ๋ผ ์ํ๋ ๋งํผ ์ ๋ฐ์ดํธํ ์ ์๋ค.
kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment resource requirements updated
๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์ผ์ ์ค์งํ๊ธฐ ์ ๋ํ๋ก์ด๋จผํธ์ ์ด๊ธฐ ์ํ๋ ํด๋น ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ๊ทธ๋ฌ๋ ๋ํ๋ก์ด๋จผํธ ๋กค์์์ด ์ผ์ ์ค์งํ ์ํ์์๋ ๋ํ๋ก์ด๋จผํธ์ ์ ์ ๋ฐ์ดํธ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
๊ฒฐ๊ตญ, ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์ฌ๊ฐํ๊ณ ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ด ์๋ก์ด ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๊ด์ฐฐํ๋ค.
kubectl rollout resume deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment resumed
๋กค์์์ด ์๋ฃ๋ ๋๊น์ง ์ํ๋ฅผ ๊ด์ฐฐํ๋ค.
kubectl get rs -w
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE nginx-2142116321 2 2 2 2m nginx-3926361531 2 2 0 6s nginx-3926361531 2 2 1 18s nginx-2142116321 1 2 2 2m nginx-2142116321 1 2 2 2m nginx-3926361531 3 2 1 18s nginx-3926361531 3 2 1 18s nginx-2142116321 1 1 1 2m nginx-3926361531 3 3 1 18s nginx-3926361531 3 3 2 19s nginx-2142116321 0 1 1 2m nginx-2142116321 0 1 1 2m nginx-2142116321 0 0 0 2m nginx-3926361531 3 3 3 20s
๋กค์์ ์ต์ ์ํ๋ฅผ ๊ฐ์ ธ์จ๋ค.
kubectl get rs
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
NAME DESIRED CURRENT READY AGE nginx-2142116321 0 0 0 2m nginx-3926361531 3 3 3 28s
์ฐธ๊ณ :
์ผ์ ์ค์ง๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ฌ๊ฐํ ๋๊น์ง ๋กค๋ฐฑํ ์ ์๋ค.๋ํ๋ก์ด๋จผํธ ์ํ
๋ํ๋ก์ด๋จผํธ๋ ๋ผ์ดํ์ฌ์ดํด ๋์ ๋ค์ํ ์ํ๋ก ์ ํ๋๋ค. ์ด๋ ์ ๋ ํ๋ฆฌ์นด์ ์ ๋กค์์ํ๋ ๋์ ์งํ ์ค์ด ๋ ์ ์๊ณ , ์๋ฃ์ด๊ฑฐ๋ ์งํ ์คํจ์ผ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ ์งํ ์ค
์ฟ ๋ฒ๋คํฐ์ค๋ ๋ค์ ์์ ์ค ํ๋๋ฅผ ์ํํ ๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์งํ ์ค ์ผ๋ก ํ์ํ๋ค.
- ๋ํ๋ก์ด๋จผํธ๋ก ์ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑ.
- ๋ํ๋ก์ด๋จผํธ๋ก ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ์ .
- ๋ํ๋ก์ด๋จผํธ๋ก ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ๋ค์ด.
- ์ ํ๋๊ฐ ์ค๋น๋๊ฑฐ๋ ์ด์ฉํ ์ ์์(์ต์ ์ค๋น ์๊ฐ(์ด) ๋์ ์ค๋น๋จ).
๋กค์์์ด "์งํ ์ค" ์ํ๊ฐ ๋๋ฉด,
๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ๋ํ๋ก์ด๋จผํธ์ .status.conditions
์ ๋ค์ ์์ฑ์ ํฌํจํ๋ ์ปจ๋์
์ ์ถ๊ฐํ๋ค.
type: Progressing
status: "True"
reason: NewReplicaSetCreated
|reason: FoundNewReplicaSet
|reason: ReplicaSetUpdated
kubectl rollout status
๋ฅผ ์ฌ์ฉํด์ ๋ํ๋ก์ด๋จผํธ์ ์งํ์ฌํฉ์ ๋ชจ๋ํฐํ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ ์๋ฃ
์ฟ ๋ฒ๋คํฐ์ค๋ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง๊ฒ ๋๋ฉด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์๋ฃ ๋ก ํ์ํ๋ค.
- ๋ํ๋ก์ด๋จผํธ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๋ ํ๋ฆฌ์นด๊ฐ ์ง์ ๋ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋์์ ๋. ์ฆ, ์์ฒญํ ๋ชจ๋ ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋์์ ๋.
- ๋ํ๋ก์ด๋จผํธ์ ๊ด๋ จํ ๋ชจ๋ ๋ ํ๋ฆฌ์นด๋ฅผ ์ฌ์ฉํ ์ ์์ ๋.
- ๋ํ๋ก์ด๋จผํธ์ ๋ํด ์ด์ ๋ณต์ ๋ณธ์ด ์คํ๋๊ณ ์์ง ์์ ๋.
๋กค์์์ด "์๋ฃ" ์ํ๊ฐ ๋๋ฉด,
๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ๋ํ๋ก์ด๋จผํธ์ .status.conditions
์ ๋ค์ ์์ฑ์ ํฌํจํ๋ ์ปจ๋์
์ ์ถ๊ฐํ๋ค.
type: Progressing
status: "True"
reason: NewReplicaSetAvailable
์ด Progressing
์ปจ๋์
์ ์๋ก์ด ๋กค์์์ด ์์๋๊ธฐ ์ ๊น์ง๋ "True"
์ํ๊ฐ์ ์ ์งํ ๊ฒ์ด๋ค.
๋ ํ๋ฆฌ์นด์ ๊ฐ์ฉ์ฑ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋(์ด ๊ฒฝ์ฐ Available
์ปจ๋์
์ ์ํฅ์ ๋ฏธ์นจ)
์ปจ๋์
์ ์ ์ง๋๋ค.
kubectl rollout status
๋ฅผ ์ฌ์ฉํด์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์๋ฃ๋์๋์ง ํ์ธํ ์ ์๋ค.
๋ง์ฝ ๋กค์์์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋ฉด kubectl rollout status
๋ ์ข
๋ฃ ์ฝ๋๋ก 0์ด ๋ฐํ๋๋ค.
kubectl rollout status deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Waiting for rollout to finish: 2 of 3 updated replicas are available...
deployment "nginx-deployment" successfully rolled out
๊ทธ๋ฆฌ๊ณ kubectl rollout
์ ์ข
๋ฃ ์ํ๋ 0(success)์ด๋ค.
echo $?
0
๋ํ๋ก์ด๋จผํธ ์คํจ
๋ํ๋ก์ด๋จผํธ์ ์ ๋ ํ๋ฆฌ์นด์ ์ธ ์๋ฃ๋์ง ์์ ์ํ์์๋ ๋ฐฐํฌ๋ฅผ ์๋ํ๋ฉด ๊ณ ์ฐฉ๋ ์ ์๋ค. ์ด ๋ฌธ์ ๋ ๋ค์ ๋ช ๊ฐ์ง ์์ธ์ผ๋ก ์ธํด ๋ฐ์ํ๋ค.
- ํ ๋น๋ ๋ถ์กฑ
- ์ค๋น์ฑ ํ๋ก๋ธ(readiness probe)์ ์คํจ
- ์ด๋ฏธ์ง ํ ์๋ฌ
- ๊ถํ ๋ถ์กฑ
- ๋ฒ์ ์ ํ
- ์ ํ๋ฆฌ์ผ์ด์ ๋ฐํ์์ ์๋ชป๋ ๊ตฌ์ฑ
์ด ์กฐ๊ฑด์ ์ฐพ์ ์ ์๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํ๋ก์ด๋จผํธ ์คํ์์ ๋ฐ๋๋ผ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด๋ค
(.spec.progressDeadlineSeconds
). .spec.progressDeadlineSeconds
๋
(๋ํ๋ก์ด๋จผํธ ์ํ์์) ๋ํ๋ก์ด๋จผํธ์ ์งํ์ด ์ ์ง๋์์์ ๋ํ๋ด๋ ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๊ฐ
๋๊ธฐํ๋ ์๊ฐ(์ด)๋ฅผ ๋ํ๋ธ๋ค.
๋ค์ kubectl
๋ช
๋ น์ด๋ก progressDeadlineSeconds
๋ฅผ ์ค์ ํด์ ์ปจํธ๋กค๋ฌ๊ฐ
10๋ถ ํ ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ๋ํ ์งํ ์ํ์ ๋ถ์กฑ์ ๋ํ ๋ฆฌํฌํธ๋ฅผ ์ํํ๊ฒ ํ๋ค.
kubectl patch deployment/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}'
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
deployment.apps/nginx-deployment patched
๋ง์ฝ ๋ฐ๋๋ผ์ธ์ ๋์ด์๋ฉด ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ๋ํ๋ก์ด๋จผํธ์ .status.conditions
์์ฑ์ ๋ค์์
๋ํ๋ก์ด๋จผํธ ์ปจ๋์
(DeploymentCondition)์ ์ถ๊ฐํ๋ค.
type: Progressing
status: "False"
reason: ProgressDeadlineExceeded
์ด ์ปจ๋์
์ ์ผ์ฐ ์คํจํ ์๋ ์์ผ๋ฉฐ ์ด๋ฌํ ๊ฒฝ์ฐ ReplicaSetCreateError
๋ฅผ ์ด์ ๋ก ์ํ๊ฐ์ "False"
๋ก ์ค์ ํ๋ค.
๋ํ, ๋ํ๋ก์ด๋จผํธ ๋กค์์์ด ์๋ฃ๋๋ฉด ๋ฐ๋๋ผ์ธ์ ๋ ์ด์ ๊ณ ๋ ค๋์ง ์๋๋ค.
์ปจ๋์ ์ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฟ ๋ฒ๋คํฐ์ค API ๊ท์น์ ์ฐธ๊ณ ํ๋ค.
์ฐธ๊ณ :
์ฟ ๋ฒ๋คํฐ์ค๋reason: ProgressDeadlineExceeded
๊ณผ ๊ฐ์ ์ํ ์กฐ๊ฑด์
๋ณด๊ณ ํ๋ ๊ฒ ์ด์ธ์ ์ ์ง๋ ๋ํ๋ก์ด๋จผํธ์ ๋ํด ์กฐ์น๋ฅผ ์ทจํ์ง ์๋๋ค. ๋ ๋์ ์์ค์ ์ค์ผ์คํธ๋ ์ดํฐ๋ ์ด๋ฅผ ํ์ฉํ ์ ์์ผ๋ฉฐ,
์๋ฅผ ๋ค์ด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ ์ ์๋ค.์ฐธ๊ณ :
๋ง์ฝ ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์ผ์ ์ค์งํ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค๋ ์ง์ ๋ ๋ฐ๋๋ผ์ธ๊ณผ ๋น๊ตํ์ฌ ์งํ ์ํฉ์ ํ์ธํ์ง ์๋๋ค. ๋กค์์ ์ค์ ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์์ ํ๊ฒ ์ผ์ ์ค์งํ๊ณ , ๋ฐ๋๋ผ์ธ์ ๋๊ธฐ๋๋ก ํ๋ ์กฐ๊ฑด์ ํธ๋ฆฌ๊ฑฐํ์ง ์๊ณ ์ฌ๊ฐํ ์ ์๋ค.์ค์ ํ ํ์์์์ด ๋ฎ๊ฑฐ๋ ์ผ์์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋ ๋ค๋ฅธ ์ข ๋ฃ์ ์๋ฌ๋ก ์ธํด ๋ํ๋ก์ด๋จผํธ์ ์ผ์์ ์ธ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํ ๋น๋์ด ๋ถ์กฑํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋ง์ฝ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ค๋ช ํ๋ ค๋ฉด ๋ค์ ์น์ ์ ํ์ธํ๋ค.
kubectl describe deployment nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
<...>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
ReplicaFailure True FailedCreate
<...>
๋ง์ฝ kubectl get deployment nginx-deployment -o yaml
์ ์คํํ๋ฉด ๋ํ๋ก์ด๋จผํธ ์ํ๋ ๋ค์๊ณผ ์ ์ฌํ๋ค.
status:
availableReplicas: 2
conditions:
- lastTransitionTime: 2016-10-04T12:25:39Z
lastUpdateTime: 2016-10-04T12:25:39Z
message: Replica set "nginx-deployment-4262182780" is progressing.
reason: ReplicaSetUpdated
status: "True"
type: Progressing
- lastTransitionTime: 2016-10-04T12:25:42Z
lastUpdateTime: 2016-10-04T12:25:42Z
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: 2016-10-04T12:25:39Z
lastUpdateTime: 2016-10-04T12:25:39Z
message: 'Error creating: pods "nginx-deployment-4262182780-" is forbidden: exceeded quota:
object-counts, requested: pods=1, used: pods=3, limited: pods=2'
reason: FailedCreate
status: "True"
type: ReplicaFailure
observedGeneration: 3
replicas: 2
unavailableReplicas: 2
๊ฒฐ๊ตญ, ๋ํ๋ก์ด๋จผํธ ์งํ ๋ฐ๋๋ผ์ธ์ ๋์ด์๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค๋ ์งํ ์ปจ๋์ ์ ์ํ์ ์ด์ ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing False ProgressDeadlineExceeded
ReplicaFailure True FailedCreate
๋ํ๋ก์ด๋จผํธ๋ฅผ ์ค์ผ์ผ ๋ค์ดํ๊ฑฐ๋, ์คํ ์ค์ธ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ๋ฅผ ์ค์ผ์ผ ๋ค์ดํ๊ฑฐ๋,
๋ค์์คํ์ด์ค์์ ํ ๋น๋์ ๋๋ ค์ ํ ๋น๋์ด ๋ถ์กฑํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
๋ง์ฝ ํ ๋น๋ ์ปจ๋์
๊ณผ ๋ํ๋ก์ด๋จผํธ ๋กค์์์ด ์๋ฃ๋์ด ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง์กฑํ๋ค๋ฉด
์ฑ๊ณตํ ์ปจ๋์
์ ๋ํ๋ก์ด๋จผํธ ์ํ๊ฐ ์
๋ฐ์ดํธ๋ฅผ ๋ณผ ์ ์๋ค(status: "True"
์ reason: NewReplicaSetAvailable
).
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
type: Available
๊ณผ status: "True"
๋ ๋ํ๋ก์ด๋จผํธ๊ฐ ์ต์ํ์ ๊ฐ์ฉ์ฑ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ต์ํ์ ๊ฐ์ฉ์ฑ์ ๋ํ๋ก์ด๋จผํธ ๊ณํ์ ๋ช
์๋ ํ๋ผ๋ฏธํฐ์ ์ํด ๊ฒฐ์ ๋๋ค. type: Progressing
๊ณผ status: "True"
๋ ๋ํ๋ก์ด๋จผํธ๊ฐ
๋กค์์ ๋์ค์ ์งํ ์ค ์ด๊ฑฐ๋, ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ผ๋ฉฐ, ์งํ ์ค ์ต์ํ์ผ๋ก ํ์ํ ์๋ก์ด ๋ ํ๋ฆฌ์นด๋ฅผ ์ด์ฉ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
(์์ธํ ๋ด์ฉ์ ํน์ ์กฐ๊ฑด์ ์ด์ ๋ฅผ ์ฐธ์กฐํ๋ค.
์ด ๊ฒฝ์ฐ reason: NewReplicaSetAvailable
๋ ๋ฐฐํฌ๊ฐ ์๋ฃ๋์์์ ์๋ฏธํ๋ค.)
kubectl rollout status
๋ฅผ ์ฌ์ฉํด์ ๋ํ๋ก์ด๋จผํธ์ ์งํ์ด ์คํจ๋์๋์ง ํ์ธํ ์ ์๋ค.
kubectl rollout status
๋ ๋ํ๋ก์ด๋จผํธ์ ์งํ ๋ฐ๋๋ผ์ธ์ ์ด๊ณผํ๋ฉด 0์ด ์๋ ์ข
๋ฃ ์ฝ๋๋ฅผ ๋ฐํํ๋ค.
kubectl rollout status deployment/nginx-deployment
์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
error: deployment "nginx" exceeded its progress deadline
๊ทธ๋ฆฌ๊ณ kubectl rollout
์ ์ข
๋ฃ ์ํ๋ 1(error๋ฅผ ์๋ฏธํจ)์ด๋ค.
echo $?
1
์คํจํ ๋ํ๋ก์ด๋จผํธ์์์ ์ด์
์๋ฃ๋ ๋ํ๋ก์ด๋จผํธ์ ์ ์ฉ๋๋ ๋ชจ๋ ํ๋์ ์คํจํ ๋ํ๋ก์ด๋จผํธ์๋ ์ ์ฉ๋๋ค. ๋ํ๋ก์ด๋จผํธ ํ๋ ํ ํ๋ฆฟ์์ ์ฌ๋ฌ ๊ฐ์ ์์ ์ฌํญ์ ์ ์ฉํด์ผํ๋ ๊ฒฝ์ฐ ์ค์ผ์ผ ์ /๋ค์ด ํ๊ฑฐ๋, ์ด์ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ๊ฑฐ๋, ์ผ์ ์ค์งํ ์ ์๋ค.
์ ์ฑ ์ด๊ธฐํ
๋ํ๋ก์ด๋จผํธ์ .spec.revisionHistoryLimit
ํ๋๋ฅผ ์ค์ ํด์
๋ํ๋ก์ด๋จผํธ์์ ์ ์งํด์ผ ํ๋ ์ด์ ๋ ํ๋ฆฌ์นด์
์ ์๋ฅผ ๋ช
์ํ ์ ์๋ค. ๋๋จธ์ง๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๊ฐ๋น์ง-์์ง์ด ์งํ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก 10์ผ๋ก ๋์ด ์๋ค.
์ฐธ๊ณ :
๋ช ์์ ์ผ๋ก ์ด ํ๋๋ฅผ 0์ผ๋ก ์ค์ ํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก ๋ํ๋ก์ด๋จผํธ์ ๊ธฐ๋ก์ ์ ๋ถ ์ด๊ธฐํ๋ฅผ ํ๊ณ , ๋ํ๋ก์ด๋จผํธ๋ ๋กค๋ฐฑํ ์ ์๊ฒ ๋๋ค.์นด๋๋ฆฌ ๋ํ๋ก์ด๋จผํธ
๋ง์ฝ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ด์ฉํด์ ์ผ๋ถ ์ฌ์ฉ์ ๋๋ ์๋ฒ์ ๋ฆด๋ฆฌ์ค๋ฅผ ๋กค์์ ํ๊ธฐ ์ํด์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ์ ์ค๋ช ๋ ์นด๋๋ฆฌ ํจ๋์ ๋ฐ๋ผ ๊ฐ ๋ฆด๋ฆฌ์ค ๋ง๋ค ํ๋์ฉ ์ฌ๋ฌ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ ์ฌ์ ์์ฑ
๋ค๋ฅธ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ํ๋ก์ด๋จผํธ์๋ .apiVersion
, .kind
๊ทธ๋ฆฌ๊ณ .metadata
ํ๋๊ฐ ํ์ํ๋ค.
์ค์ ํ์ผ ์์
์ ๋ํ ์ผ๋ฐ์ ์ธ ๋ด์ฉ์
์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌํ๊ธฐ,
์ปจํ
์ด๋ ๊ตฌ์ฑํ๊ธฐ ๊ทธ๋ฆฌ๊ณ kubectl์ ์ฌ์ฉํด์ ๋ฆฌ์์ค ๊ด๋ฆฌํ๊ธฐ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๋ค.
๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ์ ์ด๋ฆ์ ์ ํจํ
DNS ์๋ธ๋๋ฉ์ธ ์ด๋ฆ์ด์ด์ผ ํ๋ค.
๋ํ๋ก์ด๋จผํธ์๋ .spec
์น์
๋ ํ์ํ๋ค.
ํ๋ ํ ํ๋ฆฟ
.spec.template
๊ณผ .spec.selector
์ .spec
์์ ์ ์ผํ ํ์ ํ๋์ด๋ค.
.spec.template
๋ ํ๋ ํ
ํ๋ฆฟ์ด๋ค. ์ด๊ฒ์ ํ๋์ ์ ํํ๊ฒ ๋์ผํ ์คํค๋ง๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ค์ฒฉ๋ ๊ฒ์ ์ ์ธํ๋ฉด apiVersion
๊ณผ kind
๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋๋ค.
ํ๋์ ํ์ํ ํ๋ ์ธ์ ๋ํ๋ก์ด๋จผํธ ํ๋ ํ ํ๋ฆฟ์ ์ ์ ํ ๋ ์ด๋ธ๊ณผ ์ ์ ํ ์ฌ์์ ์ ์ฑ ์ ๋ช ์ํด์ผ ํ๋ค. ๋ ์ด๋ธ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ์ ๊ฒน์น์ง ์๋๋ก ํด์ผ ํ๋ค. ์์ธํ ๊ฒ์ ์ ๋ ํฐ๋ฅผ ์ฐธ์กฐํ๋ค.
.spec.template.spec.restartPolicy
์๋ ์ค์ง Always
๋ง ํ์ฉ๋๊ณ ,
๋ช
์๋์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ด ๋๋ค.
๋ ํ๋ฆฌ์นด
.spec.replicas
์ ํ์ํ ํ๋์ ์๋ฅผ ์ง์ ํ๋ ์ ํ์ ํ๋์ด๋ค. ์ด๊ฒ์ ๊ธฐ๋ณธ๊ฐ์ 1์ด๋ค.
์๋ฅผ ๋ค์ด kubectl scale deployment deployment --replicas=X
๋ช
๋ น์ผ๋ก
๋ํ๋ก์ด๋จผํธ์ ํฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ ๋ค,
๋งค๋ํ์คํธ๋ฅผ ์ด์ฉํ์ฌ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์
๋ฐ์ดํธํ๋ฉด(์: kubectl apply -f deployment.yaml
์คํ),
์๋์ผ๋ก ์ค์ ํ๋ ๋ํ๋ก์ด๋จผํธ์ ํฌ๊ธฐ๊ฐ ์ค๋ฒ๋ผ์ด๋๋๋ค.
HorizontalPodAutoscaler(๋๋ ์ํ ์ค์ผ์ผ๋ง์ ์ํ ์ ์ฌ API)๊ฐ
๋ํ๋ก์ด๋จผํธ ํฌ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค๋ฉด, .spec.replicas
๋ฅผ ์ค์ ํด์๋ ์ ๋๋ค.
๋์ , ์ฟ ๋ฒ๋คํฐ์ค
์ปจํธ๋กค ํ๋ ์ธ์ด
.spec.replicas
ํ๋๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ค.
์ ๋ ํฐ
.spec.selector
๋ ๋ํ๋ก์ด๋จผํธ์ ๋์์ด ๋๋ ํ๋์ ๋ํด ๋ ์ด๋ธ ์
๋ ํฐ๋ฅผ
์ง์ ํ๋ ํ์ ํ๋์ด๋ค.
.spec.selector
๋ .spec.template.metadata.labels
๊ณผ ์ผ์นํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด API์ ์ํด ๊ฑฐ๋ถ๋๋ค.
API ๋ฒ์ apps/v1
์์๋ .spec.selector
์ .metadata.labels
์ด ์ค์ ๋์ง ์์ผ๋ฉด .spec.template.metadata.labels
์ ๊ธฐ๋ณธ ์ค์ ๋์ง ์๋๋ค. ๊ทธ๋์ ์ด๊ฒ๋ค์ ๋ช
์์ ์ผ๋ก ์ค์ ๋์ด์ผ ํ๋ค. ๋ํ apps/v1
์์๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ ํ์๋ .spec.selector
์ด ๋ณ๊ฒฝ๋์ง ์๋ ์ ์ ์ฐธ๊ณ ํ๋ค.
๋ํ๋ก์ด๋จผํธ๋ ํ
ํ๋ฆฟ์ .spec.template
์ ๋ค๋ฅด๊ฑฐ๋ ํ๋์ ์๊ฐ .spec.replicas
๋ฅผ ์ด๊ณผํ ๊ฒฝ์ฐ
์
๋ ํฐ์ ์ผ์นํ๋ ๋ ์ด๋ธ์ ๊ฐ์ง ํ๋๋ฅผ ์ข
๋ฃํ ์ ์๋ค.
ํ๋์ ์๊ฐ ์๋ํ ์๋๋ณด๋ค ์ ์ ๊ฒฝ์ฐ .spec.template
์ ๋ง๋ ์ ํ๋๋ฅผ ๋์ด๋ค.
์ฐธ๊ณ :
๋ค๋ฅธ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๊ฑฐ๋, ๋ ํ๋ฆฌ์นด์ ๋๋ ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํด์ ์ง์ ์ ์ผ๋ก ๋ ์ด๋ธ๊ณผ ์ ๋ ํฐ๊ฐ ์ผ์นํ๋ ๋ค๋ฅธ ํ๋๋ฅผ ์์ฑํ์ง ๋ง์์ผ ํ๋ค. ๋ง์ฝ ์ด๋ ๊ฒ ํ๋ฉด ์ฒซ ๋ฒ์งธ ๋ํ๋ก์ด๋จผํธ๋ ๋ค๋ฅธ ํ๋๋ฅผ ๋ง๋ค์๋ค๊ณ ์๊ฐํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ์ด ์ผ์ ๋ง์ง ์๋๋ค.๋ง์ฝ ์ ๋ ํฐ๊ฐ ๊ฒน์น๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ด๋ฌ ๊ฐ ์๋ ๊ฒฝ์ฐ, ์ปจํธ๋กค๋ฌ๋ ์๋ก ์ธ์ฐ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๋๋ค.
์ ๋ต
.spec.strategy
๋ ์ด์ ํ๋๋ฅผ ์๋ก์ด ํ๋๋ก ๋์ฒดํ๋ ์ ๋ต์ ๋ช
์ํ๋ค.
.spec.strategy.type
์ "์ฌ์์ฑ" ๋๋ "๋กค๋ง์
๋ฐ์ดํธ"๊ฐ ๋ ์ ์๋ค.
"๋กค๋ง์
๋ฐ์ดํธ"๊ฐ ๊ธฐ๋ณธ๊ฐ์ด๋ค.
๋ํ๋ก์ด๋จผํธ ์ฌ์์ฑ
๊ธฐ์กด์ ๋ชจ๋ ํ๋๋ .spec.strategy.type==Recreate
์ด๋ฉด ์ ํ๋๊ฐ ์์ฑ๋๊ธฐ ์ ์ ์ฃฝ๋๋ค.
์ฐธ๊ณ :
์ด๋ ๊ฒ ํ๋ฉด ์ ๊ทธ๋ ์ด๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ๋ ์ข ๋ฃ๋ฅผ ๋ณด์ฅํ ์ ์๋ค. ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ฉด, ์ด์ ๋ฒ์ ์ ๋ชจ๋ ํ๋๊ฐ ์ฆ์ ์ข ๋ฃ๋๋ค. ์ ๊ท ๋ฒ์ ์ ํ๋๊ฐ ์์ฑ๋๊ธฐ ์ ์ ์ฑ๊ณต์ ์ผ๋ก ์ ๊ฑฐ๊ฐ ์๋ฃ๋๊ธฐ๋ฅผ ๋๊ธฐํ๋ค. ํ๋๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ฉด, ๋ผ์ดํ์ฌ์ดํด์ ๋ ํ๋ฆฌ์นด์ ์ ์ํด ์ ์ด๋๋ฉฐ(์ด์ ํ๋๊ฐ ์ฌ์ ํ ์ข ๋ฃ ์ํ์ ์๋ ๊ฒฝ์ฐ์๋) ๊ต์ฒด์ฉ ํ๋๊ฐ ์ฆ์ ์์ฑ๋๋ค. ํ๋์ ๋ํด "์ต๋" ๋ณด์ฅ์ด ํ์ํ ๊ฒฝ์ฐ ์คํ ์ดํธํ์ ์ ์ฌ์ฉ์ ๊ณ ๋ คํด์ผ ํ๋ค.๋ํ๋ก์ด๋จผํธ ๋กค๋ง ์ ๋ฐ์ดํธ
๋ํ๋ก์ด๋จผํธ๋ .spec.strategy.type==RollingUpdate
์ด๋ฉด ํ๋๋ฅผ ๋กค๋ง ์
๋ฐ์ดํธ
๋ฐฉ์์ผ๋ก ์
๋ฐ์ดํธ ํ๋ค. maxUnavailable
์ maxSurge
๋ฅผ ๋ช
์ํด์
๋กค๋ง ์
๋ฐ์ดํธ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ ์ ์๋ค.
์ต๋ ๋ถ๊ฐ(Max Unavailable)
.spec.strategy.rollingUpdate.maxUnavailable
์ ์
๋ฐ์ดํธ ํ๋ก์ธ์ค ์ค์ ์ฌ์ฉํ ์ ์๋ ์ต๋ ํ๋์ ์๋ฅผ ์ง์ ํ๋ ์ ํ์ ํ๋์ด๋ค.
์ด ๊ฐ์ ์ ๋ ์ซ์(์: 5) ๋๋ ์๋ํ ํ๋ ๋น์จ(์: 10%)์ด ๋ ์ ์๋ค.
์ ๋ ๊ฐ์ ๋ด๋ฆผํด์ ๋ฐฑ๋ถ์จ๋ก ๊ณ์ฐํ๋ค.
๋ง์ฝ .spec.strategy.rollingUpdate.maxSurge
๊ฐ 0์ด๋ฉด ๊ฐ์ด 0์ด ๋ ์ ์๋ค. ๊ธฐ๋ณธ ๊ฐ์ 25% ์ด๋ค.
์๋ฅผ ๋ค์ด ์ด ๊ฐ์ 30%๋ก ์ค์ ํ๋ฉด ๋กค๋ง์ ๋ฐ์ดํธ ์์์ ์ฆ๊ฐ ์ด์ ๋ ํ๋ฆฌ์นด์ ์ ํฌ๊ธฐ๋ฅผ ์๋ํ ํ๋ ์ค 70%๋ฅผ ์ค์ผ์ผ ๋ค์ดํ ์ ์๋ค. ์ ํ๋๊ฐ ์ค๋น๋๋ฉด ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ๋ค์ดํ ์ ์์ผ๋ฉฐ, ์ ๋ฐ์ดํธ ์ค์ ํญ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ฒด ํ๋์ ์๋ ์๋ํ ํ๋์ ์์ 70% ์ด์์ด ๋๋๋ก ์ ๋ ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ์ ํ ์ ์๋ค.
์ต๋ ์์ง(Max Surge)
.spec.strategy.rollingUpdate.maxSurge
๋ ์๋ํ ํ๋์ ์์ ๋ํด ์์ฑํ ์ ์๋ ์ต๋ ํ๋์ ์๋ฅผ ์ง์ ํ๋ ์ ํ์ ํ๋์ด๋ค.
์ด ๊ฐ์ ์ ๋ ์ซ์(์: 5) ๋๋ ์๋ํ ํ๋ ๋น์จ(์: 10%)์ด ๋ ์ ์๋ค.
MaxUnavailable
๊ฐ์ด 0์ด๋ฉด ์ด ๊ฐ์ 0์ด ๋ ์ ์๋ค.
์ ๋ ๊ฐ์ ์ฌ๋ฆผํด์ ๋ฐฑ๋ถ์จ๋ก ๊ณ์ฐํ๋ค. ๊ธฐ๋ณธ ๊ฐ์ 25% ์ด๋ค.
์๋ฅผ ๋ค์ด ์ด ๊ฐ์ 30%๋ก ์ค์ ํ๋ฉด ๋กค๋ง์ ๋ฐ์ดํธ ์์์ ์ ๋ ํ๋ฆฌ์นด์ ์ ํฌ๊ธฐ๋ฅผ ์ฆ์ ์กฐ์ ํด์ ๊ธฐ์กด ๋ฐ ์ ํ๋์ ์ ์ฒด ๊ฐฏ์๋ฅผ ์๋ํ ํ๋์ 130%๋ฅผ ๋์ง ์๋๋ก ํ๋ค. ๊ธฐ์กด ํ๋๊ฐ ์ฃฝ์ผ๋ฉด ์๋ก์ด ๋ํ๋ฆฌ์นด์ ์ ์ค์ผ์ผ ์ ํ ์ ์์ผ๋ฉฐ, ์ ๋ฐ์ดํธํ๋ ๋์ ํญ์ ์คํํ๋ ์ด ํ๋์ ์๋ ์ต๋ ์๋ํ ํ๋์ ์์ 130%๊ฐ ๋๋๋ก ๋ณด์ฅํ๋ค.
์งํ ๊ธฐํ ์๊ฐ(์ด)
.spec.progressDeadlineSeconds
๋ ๋ํ๋ก์ด๋จผํธ๊ฐ ํ๋ฉด์ ์ผ๋ก type: Progressing
, status: "False"
์
์ํ ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์์ค๊ฐ reason: ProgressDeadlineExceeded
์ํ๋ก ์งํ ์คํจ๋ฅผ ๋ณด๊ณ ํ๊ธฐ ์ ์
๋ํ๋ก์ด๋จผํธ๊ฐ ์งํ๋๋ ๊ฒ์ ๋๊ธฐ์ํค๋ ์๊ฐ(์ด)๋ฅผ ๋ช
์ํ๋ ์ ํ์ ํ๋์ด๋ค.
๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ๊ณ์ ์ฌ์๋ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ 600(์ด)์ด๋ค.
๋ฏธ๋์ ์๋ํ๋ ๋กค๋ฐฑ์ด ๊ตฌํ๋๋ค๋ฉด ๋ํ๋ก์ด๋จผํธ ์ปจํธ๋กค๋ฌ๋ ์ํ๋ฅผ ๊ด์ฐฐํ๊ณ ,
๊ทธ ์ฆ์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ๋กค๋ฐฑํ ๊ฒ์ด๋ค.
๋ง์ฝ ๋ช
์๋๋ค๋ฉด ์ด ํ๋๋ .spec.minReadySeconds
๋ณด๋ค ์ปค์ผ ํ๋ค.
์ต์ ๋๊ธฐ ์๊ฐ(์ด)
.spec.minReadySeconds
๋ ์๋กญ๊ฒ ์์ฑ๋ ํ๋์ ์ปจํ
์ด๋๊ฐ ์ด๋ค ๊ฒ๊ณผ๋ ์ถฉ๋ํ์ง ์๊ณ ์ฌ
์ฉํ ์ ์๋๋ก ์ค๋น๋์ด์ผ ํ๋ ์ต์ ์๊ฐ(์ด)์ ์ง์ ํ๋ ์ ํ์ ํ๋์ด๋ค.
์ด ๊ธฐ๋ณธ ๊ฐ์ 0์ด๋ค(ํ๋๋ ์ค๋น๋๋ ์ฆ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋จ).
ํ๋๊ฐ ์ค๋น๋์๋ค๊ณ ๊ฐ์ฃผ๋๋ ์๊ธฐ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ปจํ
์ด๋ ํ๋ก๋ธ๋ฅผ ์ฐธ์กฐํ๋ค.
์์ ๋ฒ์ ๊ธฐ๋ก ์ ํ
๋ํ๋ก์ด๋จผํธ์ ์์ ๋ฒ์ ๊ธฐ๋ก์ ์์ ์ด ์ปจํธ๋กคํ๋ ๋ ํ๋ฆฌ์นด์ ์ ์ ์ฅ๋๋ค.
.spec.revisionHistoryLimit
์ ๋กค๋ฐฑ์ ํ์ฉํ๊ธฐ ์ํด ๋ณด์กดํ ์ด์ ๋ ํ๋ฆฌ์นด์
์ ์๋ฅผ ์ง์ ํ๋ ์ ํ์ ํ๋์ด๋ค.
์ด ์ด์ ๋ ํ๋ฆฌ์นด์
์ etcd
์ ๋ฆฌ์์ค๋ฅผ ์๋นํ๊ณ , kubectl get rs
์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ๋์ฐจ๊ฒ ๋ง๋ ๋ค. ๊ฐ ๋ํ๋ก์ด๋จผํธ์ ๊ตฌ์ฑ์ ๋ํ๋ก์ด๋จผํธ์ ๋ ํ๋ฆฌ์นด์
์ ์ ์ฅ๋๋ค. ์ด์ ๋ ํ๋ฆฌ์นด์
์ด ์ญ์ ๋๋ฉด ํด๋น ๋ํ๋ก์ด๋จผํธ ์์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ฌ๋ผ์ง๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก 10๊ฐ์ ๊ธฐ์กด ๋ ํ๋ฆฌ์นด์
์ด ์ ์ง๋์ง๋ง ์ด์์ ์ธ ๊ฐ์ ์๋ก์ด ๋ํ๋ก์ด๋จผํธ์ ๋น๋์ ์์ ์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
๋์ฑ ๊ตฌ์ฒด์ ์ผ๋ก ์ด ํ๋๋ฅผ 0์ผ๋ก ์ค์ ํ๋ฉด ๋ ํ๋ฆฌ์นด๊ฐ 0์ด ๋๋ฉฐ ์ด์ ๋ ํ๋ฆฌ์นด์ ์ด ์ ๋ฆฌ๋๋ค. ์ด ๊ฒฝ์ฐ, ์๋ก์ด ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์ทจ์ํ ์ ์๋ค. ์๋ก์ด ๋ํ๋ก์ด๋จผํธ ๋กค์์์ ์์ ๋ฒ์ ์ด๋ ฅ์ด ์ ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ์ ์ ์ง
.spec.paused
๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ผ์ ์ค์ง๋ ์ฌ๊ฐํ๊ธฐ ์ํ ์ ํ์ ๋ถ์ธ ํ๋์ด๋ค.
์ผ์ ์ค์ง ๋ ๋ํ๋ก์ด๋จผํธ์ ์ผ์ ์ค์ง ๋์ง ์์ ๋ํ๋ก์ด๋จผํธ ์ฌ์ด์ ์ ์ผํ ์ฐจ์ด์ ์
์ผ์ ์ค์ง๋ ๋ํ๋ก์ด๋จผํธ๋ PodTemplateSpec์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ด ์ผ์์ค์ง ๋ ๊ฒฝ์ฐ ์ ๋กค์์์ ํธ๋ฆฌ๊ฑฐ ํ์ง ์๋๋ค.
๋ํ๋ก์ด๋จผํธ๋ ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ผ์ ์ค์ง๋์ง ์๋๋ค.
๋ค์ ๋ด์ฉ
- ํ๋์ ๋ํด ๋ฐฐ์ด๋ค.
- ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ฌ์ฉํด์ ์ํ๋ฅผ ์ ์งํ์ง ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ๋ค.
Deployment
๋ ์ฟ ๋ฒ๋คํฐ์ค REST API์์ ์์-์์ค ๋ฆฌ์์ค์ด๋ค. ๋ํ๋ก์ด๋จผํธ API๋ฅผ ์ดํดํ๊ธฐ ์ํด์ Deployment ์ค๋ธ์ ํธ ์ ์๋ฅผ ์ฝ๋๋ค.- PodDisruptionBudget๊ณผ ์ด๋ฅผ ์ฌ์ฉํด์ ์ด๋ป๊ฒ ์ค๋จ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฉ์ฑ์ ๊ด๋ฆฌํ ์ ์๋์ง์ ๋ํด ์ฝ๋๋ค.