์ด ์น์ ์ ๋ค์ค ํ์ด์ง ์ถ๋ ฅ ํ๋ฉด์. ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ํ๋ฆฐํธ.
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ
- 1: ๊ตฌ์ฑ ํ์ผ์ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ ์ธํ ๊ด๋ฆฌ
- 2: Kustomize๋ฅผ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ ์ธํ ๊ด๋ฆฌ
- 3: ๋ช ๋ นํ ์ปค๋งจ๋๋ฅผ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌํ๊ธฐ
- 4: ๊ตฌ์ฑ ํ์ผ์ ์ด์ฉํ ๋ช ๋ นํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ
1 - ๊ตฌ์ฑ ํ์ผ์ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ ์ธํ ๊ด๋ฆฌ
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์
๋๋ ํฐ๋ฆฌ์ ์ ์ฅํ๊ณ ํ์์ ๋ฐ๋ผ kubectl apply
๋ฅผ
์ฌ์ฉํ์ฌ ์ฌ๊ท์ ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ์
๋ฐ์ดํธํจ์ผ๋ก์จ ์์ฑ, ์
๋ฐ์ดํธ ๋ฐ ์ญ์ ํ ์ ์๋ค.
์ด ๋ฐฉ์์ ๋ณ๊ฒฝ์ฌํญ์ ๋๋๋ ค ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ๋ณํฉํ์ง ์๊ณ
ํ์ฑ ์ค๋ธ์ ํธ์ ๊ฐํด์ง ๊ธฐ๋ก์ ์ ์งํ๋ค. kubectl diff
๋ ๋ํ
apply
๊ฐ ์ด๋ ํ ๋ณ๊ฒฝ์ฌํญ์ ์ด๋ฃจ์ด์ง์ง์ ๋ํ ํ๋ฆฌ๋ทฐ๋ฅผ ์ ๊ณตํ๋ค.
์์ํ๊ธฐ ์ ์
kubectl
๋ฅผ ์ค์นํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
ํธ๋ ์ด๋ ์คํ
kubectl
ํด์ ์ธ ๊ฐ์ง ๋ฐฉ์์ ์ค๋ธ์ ํธ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ค.
- ๋ช ๋ นํ ์ปค๋งจ๋
- ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
- ์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
์ค๋ธ์ ํธ ๊ด๋ฆฌ ๋ฐฉ์์ ์ข ๋ฅ๋ณ ์ฅ๋จ์ ์ ๋ํ ๋ ผ์๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ๋ค.
๊ฐ์
์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ์ ์์ ๊ตฌ์ฑ์ ๋ํ ํ์คํ ์ดํด๊ฐ ํ์ํ๋ค. ์์ง ๊ทธ๋ ์ง ๋ชปํ๋ค๋ฉด, ๋จผ์ ๋ค์ ๋ฌธ์๋ฅผ ์ฝ๊ณ ์ดํดํ๋ค.
- ๋ช ๋ นํ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌํ๊ธฐ
- ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๋ช ๋ นํ ๊ด๋ฆฌ
๋ค์์ ์ด ๋ฌธ์์์ ์ฌ์ฉ๋๋ ์ฉ์ด์ ๋ํ ์ ์์ด๋ค.
- ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ / ๊ตฌ์ฑ ํ์ผ: ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ๋ํ
๊ตฌ์ฑ์ ์ ์ํ๋ ํ๋์ ํ์ผ. ์ด ์ฃผ์ ๋ ์ด๋ป๊ฒ
kubectl apply
์ ๊ตฌ์ฑ ํ์ผ์ ์ ๋ฌํ๋์ง์ ๋ํด ๋ณด์ฌ์ค๋ค. ๊ตฌ์ฑ ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก Git๊ณผ ๊ฐ์, ์์ค ์ปจํธ๋กค์ ์ ์ฅ๋๋ค. - ํ์ฑ ์ค๋ธ์ ํธ ๊ตฌ์ฑ / ํ์ฑ ๊ตฌ์ฑ: ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ํด ๊ด์ธก๋ ์ค๋ธ์ ํธ์ ๋ํ ํ์ฑ ๊ตฌ์ฑ ๊ฐ. ์ด๊ฒ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ ์ฅ์์ ์ ์ง๋๋ค. ์ผ๋ฐ์ ์ผ๋ก etcd๊ฐ ์ฌ์ฉ๋๋ค.
- ์ ์ธํ ๊ตฌ์ฑ ์์ฑ์ / ์ ์ธํ ์์ฑ์: ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ์
๋ฐ์ดํธํด ์ฃผ๋
์ฌ๋์ด๋ ์ํํธ์จ์ด. ์ด ์ฃผ์ ์์ ์ธ๊ธํ๋ ํ์ฑ ์์ฑ์๋ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ๋ณ๊ฒฝ์ ๊ฐํ๊ณ
kubectl apply
๋ฅผ ์คํํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ๋กํ๋ค.
์ค๋ธ์ ํธ ์์ฑ ๋ฐฉ๋ฒ
๊ธฐ์กด์ ์กด์ฌํ๋ ๊ฒ์ ์ ์ธํ, ์ง์ ํ ๋๋ ํฐ๋ฆฌ ๋ด ๊ตฌ์ฑ ํ์ผ์ ์ํด ์ ์๋ ๋ชจ๋ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด kubectl apply
๋ฅผ
์ฌ์ฉํ๋ค.
kubectl apply -f <๋๋ ํฐ๋ฆฌ>/
์ด๊ฒ์ ๊ฐ ์ค๋ธ์ ํธ์ ๋ํด kubectl.kubernetes.io/last-applied-configuration: '{...}'
์ด๋
ธํ
์ด์
์ ์ค์ ํ๋ค. ํด๋น ์ด๋
ธํ
์ด์
์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๋
์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ๋ด์ฉ์ ํฌํจํ๋ค.
์ฐธ๊ณ :
์ฌ๊ท์ ์ผ๋ก ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์-R
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.๋ค์์ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ๋ํ ์์์ด๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
minReadySeconds: 5
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
์์ฑ๋ ์ค๋ธ์ ํธ๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด kubectl diff
๋ฅผ ์คํํ๋ค.
kubectl diff -f https://k8s.io/examples/application/simple_deployment.yaml
์ฐธ๊ณ :
diff
๋ kube-apiserver
์ ํ์ฑํ๊ฐ ํ์ํ
์๋ฒ์ฌ์ด๋ dry-run์ ์ฌ์ฉํ๋ค.
diff
๋ dry-run ๋ชจ๋์์ ์๋ฒ ์ธก ์ ์ฉ ์์ฒญ์ ์ํํ๋ฏ๋ก,
PATCH
, CREATE
, ๊ทธ๋ฆฌ๊ณ UPDATE
๊ถํ์ ๋ถ์ฌํด์ผ ํ๋ค.
์์ธํ ๊ฒ์
Dry-Run ์ธ์ฆ์ ๋ณธ๋ค.
kubectl apply
๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/application/simple_deployment.yaml
kubectl get
์ ์ฌ์ฉํ์ฌ ํ์ฑ ๊ตฌ์ฑ์ ์ถ๋ ฅํ๋ค.
kubectl get -f https://k8s.io/examples/application/simple_deployment.yaml -o yaml
์ถ๋ ฅ์ kubectl.kubernetes.io/last-applied-configuration
์ด๋
ธํ
์ด์
์ด
ํ์ฑ ๊ตฌ์ฑ์ ๊ธฐ๋ก๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ฉฐ, ๊ทธ๊ฒ์ ๊ตฌ์ฑ ํ์ผ๊ณผ ์ผ์นํ๋ค.
kind: Deployment
metadata:
annotations:
# ...
# This is the json representation of simple_deployment.yaml
# It was written by kubectl apply when the object was created
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment",
"metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},
"spec":{"minReadySeconds":5,"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}},
"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx",
"ports":[{"containerPort":80}]}]}}}}
# ...
spec:
# ...
minReadySeconds: 5
selector:
matchLabels:
# ...
app: nginx
template:
metadata:
# ...
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
# ...
name: nginx
ports:
- containerPort: 80
# ...
# ...
# ...
# ...
์ค๋ธ์ ํธ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ
๋ํ ์ค๋ธ์ ํธ๊ฐ ๊ธฐ์กด์ ์กด์ฌํ๋๋ผ๋ ๋๋ ํฐ๋ฆฌ ๋ด ์ ์๋ ๋ชจ๋ ์ค๋ธ์ ํธ๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํด kubectl apply
๋ฅผ
์ฌ์ฉํ ์ ์๋ค. ์ด๋ฌํ ์ ๊ทผ๋ฐฉ์์ ๋ค์์ ์ํํ ์ ์๊ฒ ํด์ค๋ค.
- ํ์ฑ ๊ตฌ์ฑ ๋ด ๊ตฌ์ฑ ํ์ผ์ ๋ํ๋๋ ํ๋ ์ค์
- ํ์ฑ ๊ตฌ์ฑ ๋ด ๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ์ ๊ฑฐ๋ ํ๋ ์ ๋ฆฌ
kubectl diff -f <๋๋ ํฐ๋ฆฌ>/
kubectl apply -f <๋๋ ํฐ๋ฆฌ>/
์ฐธ๊ณ :
์ฌ๊ท์ ์ผ๋ก ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์-R
ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ค.๋ค์์ ๊ตฌ์ฑ ํ์ผ์ ์์์ด๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
minReadySeconds: 5
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
kubectl apply
๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/application/simple_deployment.yaml
์ฐธ๊ณ :
์ค๋ช ์ ์ํด, ์์ ๋ช ๋ น์ ๋๋ ํฐ๋ฆฌ ๋์ ํ๋์ ๊ตฌ์ฑ ํ์ผ์ ์ฐธ์กฐํ๋ค.kubectl get
์ ์ฌ์ฉํ์ฌ ํ์ฑ ๊ตฌ์ฑ์ ์ถ๋ ฅํ๋ค.
kubectl get -f https://k8s.io/examples/application/simple_deployment.yaml -o yaml
์ถ๋ ฅ์ kubectl.kubernetes.io/last-applied-configuration
์ด๋
ธํ
์ด์
์ด
ํ์ฑ ๊ตฌ์ฑ์ ๊ธฐ๋ก๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ฉฐ, ๊ทธ๊ฒ์ ๊ตฌ์ฑ ํ์ผ๊ณผ ์ผ์นํ๋ค.
kind: Deployment
metadata:
annotations:
# ...
# This is the json representation of simple_deployment.yaml
# It was written by kubectl apply when the object was created
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment",
"metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},
"spec":{"minReadySeconds":5,"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}},
"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx",
"ports":[{"containerPort":80}]}]}}}}
# ...
spec:
# ...
minReadySeconds: 5
selector:
matchLabels:
# ...
app: nginx
template:
metadata:
# ...
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
# ...
name: nginx
ports:
- containerPort: 80
# ...
# ...
# ...
# ...
kubectl scale
์ ์ฌ์ฉํ์ฌ ํ์ฑ ๊ตฌ์ฑ ๋ด replicas
ํ๋๋ฅผ ์ง์ ์
๋ฐ์ดํธํ๋ค.
์ด๋ kubectl apply
๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
kubectl scale deployment/nginx-deployment --replicas=2
kubectl get
์ ์ฌ์ฉํ์ฌ ํ์ฑ ๊ตฌ์ฑ์ ์ถ๋ ฅํ๋ค.
kubectl get deployment nginx-deployment -o yaml
์ถ๋ ฅ์ replicas
ํ๋๊ฐ 2๋ก ์ค์ ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ฉฐ, last-applied-configuration
์ด๋
ธํ
์ด์
์ replicas
ํ๋๋ฅผ ํฌํจํ์ง ์๋๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
# ...
# note that the annotation does not contain replicas
# because it was not updated through apply
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment",
"metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},
"spec":{"minReadySeconds":5,"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}},
"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx",
"ports":[{"containerPort":80}]}]}}}}
# ...
spec:
replicas: 2 # written by scale
# ...
minReadySeconds: 5
selector:
matchLabels:
# ...
app: nginx
template:
metadata:
# ...
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
# ...
name: nginx
ports:
- containerPort: 80
# ...
nginx:1.14.2
์์ nginx:1.16.1
๋ก ์ด๋ฏธ์ง๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด simple_deployment.yaml
๊ตฌ์ฑ ํ์ผ์ ์
๋ฐ์ดํธ ํ๊ณ , minReadySeconds
ํ๋๋ฅผ ์ญ์ ํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1 # update the image
ports:
- containerPort: 80
๊ตฌ์ฑ ํ์ผ์ ์ด๋ฃจ์ด์ง ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํ๋ค.
kubectl diff -f https://k8s.io/examples/application/update_deployment.yaml
kubectl apply -f https://k8s.io/examples/application/update_deployment.yaml
kubectl get
์ ์ฌ์ฉํ์ฌ ํ์ฑ ๊ตฌ์ฑ์ ์ถ๋ ฅํ๋ค.
kubectl get -f https://k8s.io/examples/application/update_deployment.yaml -o yaml
์ถ๋ ฅ์ ํ์ฑ ๊ตฌ์ฑ์ ๋ค์์ ๋ณ๊ฒฝ์ฌํญ์ ๋ณด์ฌ์ค๋ค.
replicas
ํ๋๋kubectl scale
์ ์ํด ์ค์ ๋ ๊ฐ 2๋ฅผ ์ ์งํ๋ค.
์ด๋ ๊ตฌ์ฑ ํ์ผ์์ ์๋ต๋์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.image
ํ๋๋nginx:1.14.2
์์nginx:1.16.1
๋ก ์ ๋ฐ์ดํธ๋์๋ค.last-applied-configuration
์ด๋ ธํ ์ด์ ์ ์๋ก์ด ์ด๋ฏธ์ง๋ก ์ ๋ฐ์ดํธ๋์๋ค.minReadySeconds
ํ๋๋ ์ง์์ก๋ค.last-applied-configuration
์ด๋ ธํ ์ด์ ์ ๋ ์ด์minReadySeconds
ํ๋๋ฅผ ํฌํจํ์ง ์๋๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
# ...
# The annotation contains the updated image to nginx 1.11.9,
# but does not contain the updated replicas to 2
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment",
"metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},
"spec":{"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}},
"spec":{"containers":[{"image":"nginx:1.16.1","name":"nginx",
"ports":[{"containerPort":80}]}]}}}}
# ...
spec:
replicas: 2 # Set by `kubectl scale`. Ignored by `kubectl apply`.
# minReadySeconds cleared by `kubectl apply`
# ...
selector:
matchLabels:
# ...
app: nginx
template:
metadata:
# ...
labels:
app: nginx
spec:
containers:
- image: nginx:1.16.1 # Set by `kubectl apply`
# ...
name: nginx
ports:
- containerPort: 80
# ...
# ...
# ...
# ...
๊ฒฝ๊ณ :
๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ์ปค๋งจ๋create
์ replace
์ ํจ๊ป kubectl apply
๋ฅผ
ํผํฉํ๋ ๊ฒ์ ์ง์ํ์ง ์๋๋ค. ์ด๋ kubectl apply
๊ฐ ์
๋ฐ์ดํธ ์ฌํญ์ ๊ณ์ฐํ๋๋ฐ ์ฌ์ฉํ๋
kubectl.kubernetes.io/last-applied-configuration
์ create
์ replace
๊ฐ
์ ์งํ์ง ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.์ค๋ธ์ ํธ ์ญ์ ๋ฐฉ๋ฒ
kubectl apply
์ ์ํด ๊ด๋ฆฌ๋๋ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๋๋ฐ 2๊ฐ์ง ์ ๊ทผ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ถ์ฅ ๋ฐฉ๋ฒ: kubectl delete -f <ํ์ผ๋ช
>
๋ช ๋ นํ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ ๋ฐฉ์์ธ๋ฐ, ๋ฌด์์ด ์ญ์ ๋๋์ง์ ๋ํด ๋ ๋ช ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก ์ฌ์ฉ์๊ฐ ์๋ํ์ง ์๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ์ญ์ ํ ๊ฐ๋ฅ์ฑ์ด ์์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
kubectl delete -f <ํ์ผ๋ช
>
๋์: kubectl apply -f <๋๋ ํฐ๋ฆฌ/> --prune -l your=๋ ์ด๋ธ
๋ฌด์์ ํ๋์ง ํ์ ํ๋ ๊ฒฝ์ฐ์๋ง ์ด๋ฅผ ์ฌ์ฉํ๋ค.
๊ฒฝ๊ณ :
kubectl apply --prune
์ ์ํ ์ํ์ด๋ฉฐ, ํ์ ๋ฆด๋ฆฌ์ค์์๋
ํ์ ํธํ๋์ง ์๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋์
๋ ์ ์๋ค.๊ฒฝ๊ณ :
์ด ๋ช ๋ น์ ์ฌ์ฉํ ๋๋ ์๋ํ์ง ์๊ฒ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ์ง ์๋๋ก ์ฃผ์ํด์ผ๋ง ํ๋ค.kubectl delete
์ ๋ํ ๋์์ผ๋ก, ๋๋ ํฐ๋ฆฌ๋ก๋ถํฐ ๊ตฌ์ฑ ํ์ผ์ด ์ญ์ ๋ ํ์ ์ญ์ ๋ ์ค๋ธ์ ํธ๋ฅผ ์๋ณํ๊ธฐ ์ํด kubectl apply
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
--prune
์ ์ฌ์ฉํ์ฌ ์ ์ฉํ๋ฉด ์ผ๋ จ์ ๋ ์ด๋ธ์ ์งํฉ๊ณผ ์ผ์นํ๋
๋ชจ๋ ์ค๋ธ์ ํธ์ ๋ํดAPI ์๋ฒ์ ์ฟผ๋ฆฌํ๊ณ , ๋ฐํ๋ ํ์ฑ ์ค๋ธ์ ํธ
๊ตฌ์ฑ์ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ์ผ์น์ํค๋ ค๊ณ ์๋ํ๋ค.
์ค๋ธ์ ํธ๊ฐ ์ฟผ๋ฆฌ์ ์ผ์นํ๊ณ , ํด๋น ๋๋ ํฐ๋ฆฌ ๋ด ๊ตฌ์ฑ ํ์ผ์ด ์๊ณ
last-applied-configuration
์ด๋
ธํ
์ด์
์ด ์๋ ๊ฒฝ์ฐ,
์ญ์ ๋๋ค.
kubectl apply -f <๋๋ ํฐ๋ฆฌ/> --prune -l <๋ ์ด๋ธ>
๊ฒฝ๊ณ :
prune์ ์ฌ์ฉํ์ฌ ์ ์ฉํ๋ ๊ฒ์ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ํฌํจํ๋ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ ๋ํด์๋ง ์คํํด์ผ ํ๋ค. ํ์ ๋๋ ํฐ๋ฆฌ์ ๋ํด ์คํํ๊ฒ ๋๋ฉด,-l <๋ ์ด๋ธ>
๋ก ์ง์ ๋ ๋ ์ด๋ธ ์
๋ ํฐ์ ์ํด ๋ฐํ๋๊ณ ํ์ ๋๋ ํฐ๋ฆฌ์ ๋ํ๋์ง ์๋ ๊ฒฝ์ฐ,
์ค๋ธ์ ํธ๊ฐ ์๋ํ์ง ์๊ฒ ์ญ์ ๋ ์ ์๋ค.์ค๋ธ์ ํธ ํ์ธ ๋ฐฉ๋ฒ
ํ์ฑ ์ค๋ธ์ ํธ์ ๊ตฌ์ฑ์ ํ์ธํ๊ธฐ ์ํด -o yaml
๊ณผ ํจ๊ป kubectl get
์ ์ฌ์ฉํ ์ ์๋ค.
kubectl get -f <ํ์ผ๋ช
|url> -o yaml
์ด๋ป๊ฒ apply๊ฐ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๊ณ ๋ณ๊ฒฝ์ ๋ณํฉํ๋๊ฐ
์ฃผ์:
patch ๋ ์ ์ฒด ์ค๋ธ์ ํธ ๋์ ์ค๋ธ์ ํธ์ ํน์ ํ๋ ๋ฒ์์ ์คํผ๋ ์ด์ ์ ์ ๋ฐ์ดํธํ๋ค. ์ด๋ ๋จผ์ ์ค๋ธ์ ํธ๋ฅผ ์ฝ์ง ์๊ณ ๋ ์ค๋ธ์ ํธ์ ํน์ ํ๋ ์งํฉ๋ง์ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ํด์ค๋ค.kubectl apply
๊ฐ ํ๋์ ์ค๋ธ์ ํธ์ ๋ํ ํ์ฑ ๊ตฌ์ฑ์ ์
๋ฐ์ดํธํ ๋,
API ์๋ฒ์ ํจ์น ์์ฒญ์ ๋ณด๋์ผ๋ก์จ ๊ทธ๊ฒ์ ์ํํ๋ค.
๊ทธ ํจ์น๋ ํ์ฑ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ํน์ ํ๋์ ๋ํ ๋ฒ์์
์
๋ฐ์ดํธ๋ก ํ์ ํ๋ค. kubectl apply
์ปค๋งจ๋๋
๊ตฌ์ฑ ํ์ผ, ํ์ฑ ๊ตฌ์ฑ, ๊ทธ๋ฆฌ๊ณ ํ์ฑ ๊ตฌ์ฑ์ ์ ์ฅ๋
last-applied-configuration
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ์ฌ ์ด ํจ์น ์์ฒญ์ ๊ณ์ฐํ๋ค.
ํจ์น ๊ณ์ฐ ๋ณํฉ
kubectl apply
๋ช
๋ น์
kubectl.kubernetes.io/last-applied-configuration
์ด๋
ธํ
์ด์
์ ๊ตฌ์ฑ ํ์ผ์ ๋ด์ฉ์ ๊ธฐ๋กํ๋ค.
์ด๊ฒ์ ๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ์ ๊ฑฐ๋์๊ณ ํ์ฑ ๊ตฌ์ฑ์ผ๋ก๋ถํฐ ์ง์์ง ํ์๊ฐ ์๋
ํ๋๋ฅผ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ค์์ ์ด๋ค ํ๋๊ฐ ์ญ์ ๋๋ ์ค์ ๋ผ์ผ ํ๋์ง
๊ณ์ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋จ๊ณ์ด๋ค.
- ์ญ์ ํ ํ๋๋ฅผ ๊ณ์ฐํ๋ค. ์ด๊ฒ์
last-applied-configuration
๋ด ์กด์ฌํ๊ณ ๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ์ ์ค๋ ํ๋์ด๋ค. - ์ถ๊ฐ ๋๋ ์ค์ ๋์ด์ผ ํ ํ๋๋ฅผ ๊ณ์ฐํ๋ค. ์ด๊ฒ์ ํ์ฑ ๊ตฌ์ฑ๊ณผ ๋ถ์ผ์นํ๋ ๊ฐ์ ๊ฐ์ง๋ ๊ตฌ์ฑ ํ์ผ ๋ด ์กด์ฌํ๋ ํ๋์ด๋ค.
๋ค์์ ์์์ด๋ค. ๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ์ ๋ํ ๊ตฌ์ฑ ํ์ผ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16.1 # update the image
ports:
- containerPort: 80
๋ํ, ์ด๊ฒ์ ๋์ผํ ๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ์ ๋ํ ํ์ฑ ๊ตฌ์ฑ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
# ...
# note that the annotation does not contain replicas
# because it was not updated through apply
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment",
"metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},
"spec":{"minReadySeconds":5,"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}},
"spec":{"containers":[{"image":"nginx:1.14.2","name":"nginx",
"ports":[{"containerPort":80}]}]}}}}
# ...
spec:
replicas: 2 # written by scale
# ...
minReadySeconds: 5
selector:
matchLabels:
# ...
app: nginx
template:
metadata:
# ...
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
# ...
name: nginx
ports:
- containerPort: 80
# ...
๋ค์์ kubectl apply
์ ์ํด ์ํ๋ ๋ณํฉ ๊ณ์ฐ์ด๋ค.
last-applied-configuration
์ผ๋ก๋ถํฐ ๊ฐ์ ์ฝ์ด ๊ตฌ์ฑ ํ์ผ์ ๊ฐ๊ณผ ๋น๊ตํ์ฌ ์ญ์ ํ ํ๋๋ฅผ ๊ณ์ฐํ๋ค.last-applied-configuration
์ ๋ณด์ด๋ ๊ฒ๊ณผ๋ ๋ฌด๊ดํ๊ฒ ๋ก์ปฌ์ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ ๋ด null์ด๋ผ๊ณ ๋ช ์์ ์ผ๋ก ์ค์ ๋ ํ๋๋ฅผ ์ง์ด๋ค. ์ด ์์์์,minReadySeconds
์last-applied-configuration
์ด๋ ธํ ์ด์ ๋ด ๋ํ๋์ง๋ง, ๊ตฌ์ฑ ํ์ผ ๋ด์๋ ๋ณด์ฌ์ง์ง ์๋๋ค. ์กฐ์น: ํ์ฑ ๊ตฌ์ฑ์ผ๋ก๋ถํฐminReadySeconds
์ ์ง์ด๋ค.- ๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ๊ฐ์ ์ฝ์ด ํ์ฑ ๊ตฌ์ฑ ๋ด ๊ฐ๊ณผ
๋น๊ตํ์ฌ ์ค์ ํ ํ๋๋ฅผ ๊ณ์ฐํ๋ค. ์ด ์์์์,
๊ตฌ์ฑ ํ์ผ ๋ด
image
๊ฐ์ ํ์ฑ ๊ตฌ์ฑ ๋ด ๊ฐ๊ณผ ๋ถ์ผ์นํ๋ค. ์กฐ์น: ํ์ฑ ๊ตฌ์ฑ ๋ดimage
๊ฐ์ ์ค์ ํ๋ค. - ๊ตฌ์ฑ ํ์ผ์ ๊ฐ๊ณผ ์ผ์น์ํค๊ธฐ ์ํด
last-applied-configuration
์ด๋ ธํ ์ด์ ์ ์ค์ ํ๋ค. - 1, 2, 3์ผ๋ก๋ถํฐ์ ๊ฒฐ๊ณผ๋ฅผ API ์๋ฒ์ ๋จ์ผ ํจ์น ์์ฒญ์ผ๋ก ๋ณํฉํ๋ค.
๋ค์์ ๋ณํฉ์ ๊ฒฐ๊ณผ์ธ ํ์ฑ ๊ตฌ์ฑ์ด๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
# ...
# The annotation contains the updated image to nginx 1.11.9,
# but does not contain the updated replicas to 2
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"Deployment",
"metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"},
"spec":{"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}},
"spec":{"containers":[{"image":"nginx:1.16.1","name":"nginx",
"ports":[{"containerPort":80}]}]}}}}
# ...
spec:
selector:
matchLabels:
# ...
app: nginx
replicas: 2 # Set by `kubectl scale`. Ignored by `kubectl apply`.
# minReadySeconds cleared by `kubectl apply`
# ...
template:
metadata:
# ...
labels:
app: nginx
spec:
containers:
- image: nginx:1.16.1 # Set by `kubectl apply`
# ...
name: nginx
ports:
- containerPort: 80
# ...
# ...
# ...
# ...
์ด๋ป๊ฒ ์์ดํ ํ๋ ํ์ ์ด ๋ณํฉ๋๋๊ฐ
๊ตฌ์ฑ ํ์ผ ๋ด ํน์ ํ๋๊ฐ ํ๋์ ํ์ ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ํ์ฑ ๊ตฌ์ฑ๊ณผ ํจ๊ป ๋ณํฉ๋๋๊ฐ. ์ฌ๋ฌ ๊ฐ์ง ํ๋ ํ์ ์ด ์๋ค.
๊ธฐ๋ณธ(primitives): ๋ฌธ์์ด, ์ซ์ ๋๋ ๋ถ๋ฆฌ์ธ ํ์ ์ ํ๋. ์๋ฅผ ๋ค์ด,
image
์replicas
๋ ๊ธฐ๋ณธ ํ๋๋ค. ์กฐ์น: ๊ต์ฒด.๋งต, ๋ํ ์ค๋ธ์ ํธ ๋ผ ์นญํจ: ๋งต ํ์ ๋๋ ์๋ธํ๋๋ฅผ ํฌํจํ๋ ๋ณตํฉ ํ์ ์ ํ๋. ์๋ฅผ ๋ค์ด,
๋ ์ด๋ธ
,์ด๋ ธํ ์ด์
,์คํ
๋ฐ๋ฉํ๋ฐ์ดํฐ
๋ ๋ชจ๋ ๋งต์ด๋ค. ์กฐ์น: ๊ตฌ์ฑ์์ ๋๋ ์๋ธํ๋ ๋ณํฉ.๋ฆฌ์คํธ: ๊ธฐ๋ณธํ์ ๋๋ ๋งต์ด ๋ ์ ์๋ ์์ดํ ์ ๋ฆฌ์คํธ๋ฅผ ํฌํจํ๋ ํ๋. ์๋ฅผ ๋ค์ด,
์ปจํ ์ด๋
,ํฌํธ
, ๊ทธ๋ฆฌ๊ณargs
๋ ๋ฆฌ์คํธ๋ค. ์กฐ์น: ๋ค์ํจ.
kubectl apply
๊ฐ ๋งต ๋๋ ๋ฆฌ์คํธ ํ๋๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ,
์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด ํ๋๋ฅผ ๊ต์ฒดํ๋ ๋์ , ๊ฐ๋ณ ๋ถ ๊ตฌ์ฑ์์๋ฅผ ์
๋ฐ์ดํธํ๋ค,
์๋ฅผ ๋ค์ด, ๋ํ๋ก์ด๋จผํธ์ ๋ํ spec
์ ๋ณํฉํ ๊ฒฝ์ฐ, ์ ์ฒด spec
์ด
๊ต์ฒด๋์ง ์๋๋ค. ๋์ replicas
์ ๊ฐ์ spec
์ ์๋ธํ๋๊ฐ
๋น๊ต๋๊ณ ๋ณํฉ๋๋ค.
๊ธฐ๋ณธ ํ๋์ ๋ํ ๋ณ๊ฒฝ์ฌํญ ๋ณํฉํ๊ธฐ
๊ธฐ๋ณธ ํ๋๋ ๊ต์ฒด๋๊ฑฐ๋ ์ง์์ง๋ค.
์ฐธ๊ณ :
-
๋ ๊ฐ์ด ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ "ํด๋น ์์"์ผ๋ก ์ฌ์ฉ๋๋ค.Field in object configuration file | Field in live object configuration | Field in last-applied-configuration | Action |
---|---|---|---|
Yes | Yes | - | ๊ตฌ์ฑ ํ์ผ ๊ฐ ํ์ฑ์ผ๋ก ์ค์ . |
Yes | No | - | ํ์ฑ์ ๋ก์ปฌ ๊ตฌ์ฑ์ผ๋ก ์ค์ . |
No | - | Yes | ํ์ฑ ๊ตฌ์ฑ์ผ๋ก๋ถํฐ ์ง์. |
No | - | No | ์๋ฌด๊ฒ๋ ์ํจ. ํ์ฑ๊ฐ ์ ์ง. |
๋งต ํ๋์ ๋ณ๊ฒฝ์ฌํญ ๋ณํฉํ๊ธฐ
๋งต์ ์์ฒญํ๋ ํ๋๋ ์๋ธํ๋์ ๊ฐ๊ฐ ๋๋ ๋งต์ ๊ตฌ์ฑ์์๋ฅผ ๋น๊ตํจ์ผ๋ก์จ ๋ณํฉ๋๋ค.
์ฐธ๊ณ :
-
๋ ๊ฐ์ด ์ฌ์ฉ๋์ง ์๊ธฐ ๋๋ฌธ์ "ํด๋น ์์"์ผ๋ก ์ฌ์ฉ๋๋ค.Key in object configuration file | Key in live object configuration | Field in last-applied-configuration | Action |
---|---|---|---|
Yes | Yes | - | ์๋ธํ๋ ๊ฐ ๋น๊ต. |
Yes | No | - | ํ์ฑ์ ๋ก์ปฌ ๊ตฌ์ฑ์ผ๋ก ์ค์ . |
No | - | Yes | ํ์ฑ ๊ตฌ์ฑ์ผ๋ก๋ถํฐ ์ญ์ . |
No | - | No | ์๋ฌด๊ฒ๋ ์ํจ. ํ์ฑ๊ฐ ์ ์ง. |
ํ์ ๋ฆฌ์คํธ์ ํ๋์ ๋ํ ๋ณ๊ฒฝ์ฌํญ ๋ณํฉํ๊ธฐ
๋ฆฌ์คํธ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ์ ๋ณํฉํ๋ ๊ฒ์ ์ธ ๊ฐ์ง ์ ๋ต ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ตฌ์ฑ์์๊ฐ ๋ชจ๋ ๊ธฐ๋ณธํ์ธ ๊ฒฝ์ฐ ๋ฆฌ์คํธ๋ฅผ ๊ต์ฒดํ๋ค.
- ๋ณตํฉ ๊ตฌ์ฑ์์์ ๋ฆฌ์คํธ์์ ๊ฐ๋ณ ๊ตฌ์ฑ์์๋ฅผ ๋ณํฉํ๋ค.
- ๊ธฐ์ด ๊ตฌ์ฑ์์์ ๋ฆฌ์คํธ๋ฅผ ๋ณํฉํ๋ค.
์ ๋ต์ ๋ํ ์ ํ์ ํ๋๋ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
๊ตฌ์ฑ์์๊ฐ ๋ชจ๋ ๊ธฐ๋ณธํ์ธ ๊ฒฝ์ฐ ๋ฆฌ์คํธ ๊ต์ฒด
๊ธฐ์ด ํ๋์ ๋์ผํ ๋ฆฌ์คํธ๋ก ์ทจ๊ธํ๋ค. ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ๊ต์ฒด ๋๋ ์ญ์ ํ๋ค. ์ด๊ฒ์ ์์๋ฅผ ์ ์งํ๋ค.
์์: ํ๋ ๋ด ์ปจํ
์ด๋์ args
ํ๋๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํด kubectl apply
๋ฅผ ์ฌ์ฉํ๋ค.
์ด๊ฒ์ ํ์ฑ ๊ตฌ์ฑ ๋ด args
์ ๊ฐ์ ๊ตฌ์ฑ ํ์ผ ๋ด ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
ํ์ฑ ๊ตฌ์ฑ์ ์ถ๊ฐํ๋ ์ด์ ์ ๋ชจ๋ args
๊ตฌ์ฑ์์๋ค์ ์ ์ค๋๋ค.
๊ตฌ์ฑ ํ์ผ ๋ด ์ ์ํ args
๊ตฌ์ฑ์์์ ์์๋
ํ์ฑ ๊ตฌ์ฑ ๋ด ์ ์ง๋๋ค.
# last-applied-configuration value
args: ["a", "b"]
# configuration file value
args: ["a", "c"]
# live configuration
args: ["a", "b", "d"]
# result after merge
args: ["a", "c"]
์ค๋ช : ๋ณํฉ์ ์๋ก์ด ๋ฆฌ์คํธ ๊ฐ์ผ๋ก ๊ตฌ์ฑ ํ์ผ ๊ฐ์ ์ฌ์ฉํ๋ค.
๋ณตํฉ ๊ตฌ์ฑ์์ ๋ฆฌ์คํธ์ ๋ํ ๊ฐ๋ณ ๊ตฌ์ฑ์์ ๋ณํฉ
๋ฆฌ์คํธ๋ฅผ ๋งต์ผ๋ก ์ทจ๊ธํ๊ณ ๊ฐ ๊ตฌ์ฑ์์์ ํน์ ํ๋๋ฅผ ํค๋ก ์ทจ๊ธํ๋ค. ๊ฐ๋ณ ๊ตฌ์ฑ์์๋ฅผ ์ถ๊ฐ, ์ญ์ , ๋๋ ์ ๋ฐ์ดํธ ํ๋ค. ์ด๊ฒ์ ์์๋ฅผ ๋ณด์กดํ์ง ์๋๋ค.
์ด ๋ณํฉ ์ ๋ต์ ๊ฐ ํ๋์ patchMergeKey
๋ผ ์นญํ๋ ํน๋ณํ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
patchMergeKey
๋ ์ฟ ๋ฒ๋คํฐ์ค ์์ค ์ฝ๋:
types.go
์ ๊ฐ ํ๋์ ๋ํด ์ ์ํ๋ค. ๋งต ๋ฆฌ์คํธ๋ฅผ ๋ณํฉํ ๋, ์ฃผ์ด์ง ๊ตฌ์ฑ์์์ ๋ํ patchMergeKey
๋ก
์ง์ ํ ํ๋๋ ํด๋น ๊ตฌ์ฑ์์์ ๋ํ ๋งตํค์ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
์์: kubectl apply
๋ฅผ ์ฌ์ฉํ์ฌ PodSpec์ ๋ํ containers
ํ๋๋ฅผ ์
๋ฐ์ดํธํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ๊ตฌ์ฑ์์๊ฐ
name
๋ณ๋ก ํค๋ก ๋์ด ์๋ ๋งต์ธ ๊ฒ์ฒ๋ผ ๋ฆฌ์คํธ๋ฅผ ๋ณํฉํ๋ค.
# last-applied-configuration value
containers:
- name: nginx
image: nginx:1.10
- name: nginx-helper-a # key: nginx-helper-a; will be deleted in result
image: helper:1.3
- name: nginx-helper-b # key: nginx-helper-b; will be retained
image: helper:1.3
# configuration file value
containers:
- name: nginx
image: nginx:1.10
- name: nginx-helper-b
image: helper:1.3
- name: nginx-helper-c # key: nginx-helper-c; will be added in result
image: helper:1.3
# live configuration
containers:
- name: nginx
image: nginx:1.10
- name: nginx-helper-a
image: helper:1.3
- name: nginx-helper-b
image: helper:1.3
args: ["run"] # Field will be retained
- name: nginx-helper-d # key: nginx-helper-d; will be retained
image: helper:1.3
# result after merge
containers:
- name: nginx
image: nginx:1.10
# Element nginx-helper-a was deleted
- name: nginx-helper-b
image: helper:1.3
args: ["run"] # Field was retained
- name: nginx-helper-c # Element was added
image: helper:1.3
- name: nginx-helper-d # Element was ignored
image: helper:1.3
์ค๋ช :
- ๊ตฌ์ฑ ํ์ผ์ "nginx-helper-a"๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ์ปจํ ์ด๋๊ฐ ๋ํ๋์ง ์์๊ธฐ ๋๋ฌธ์ "nginx-helper-a"๋ผ๋ ์ปจํ ์ด๋๋ ์ญ์ ๋์๋ค.
- "nginx-helper-b"๋ผ๋ ์ปจํ
์ด๋๋ ํ์ฑ ๊ตฌ์ฑ์
args
์
๋ํ ๋ณ๊ฒฝ์ฌํญ์ ์ ์งํ๋ค.kubectl apply
๋
ํ๋ ๊ฐ์ด ๋ค๋ฆ์๋ ๋ถ๊ตฌํ๊ณ (๊ตฌ์ฑ ํ์ผ์args
๊ฐ ์์) ํ์ฑ ๊ตฌ์ฑ์
"nginx-helper-b"๊ฐ ๊ตฌ์ฑ ํ์ผ๊ณผ ๋์ผํ "nginx-helper-b"์์ ์๋ณํ ์ ์์๋ค. ์ด๊ฒ์patchMergeKey
ํ๋ ๊ฐ(์ด๋ฆ)์ด ๋ ๋ค ๊ฐ์๊ธฐ ๋๋ฌธ์ด๋ค.. - "nginx-helper-c"๋ผ๋ ์ด๋ฆ์ ์ปจํ ์ด๋๊ฐ ํ์ฑ ๊ตฌ์ฑ์ ๋ํ๋์ง ์์์ง๋ง, ๊ตฌ์ฑ ํ์ผ์ ๊ทธ ์ด๋ฆ์ ๊ฐ์ง ์ปจํ ์ด๋๊ฐ ๋ํ๋ฌ๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ๋์๋ค.
- last-applied-configuration์ ๊ทธ ์ด๋ฆ์ ๊ฐ์ง ๊ตฌ์ฑ์์๊ฐ ์์๊ธฐ ๋๋ฌธ์ "nginx-helper-d"๋ผ๋ ์ด๋ฆ์ ์ปจํ ์ด๋๋ ์ ์ง๋์๋ค.
๊ธฐ์ด ๊ตฌ์ฑ์์ ๋ฆฌ์คํธ ๋ณํฉ
์ฟ ๋ฒ๋คํฐ์ค 1.5๋ก๋ถํฐ ๊ธฐ์ด ๊ตฌ์ฑ์์ ๋ณํฉํ๊ธฐ๋ ์ง์๋์ง ์๋๋ค.
์ฐธ๊ณ :
์ฃผ์ด์ง ํ๋์ ๋ํด ์ ์ ๋ต ์ค ์ด๋ค ๊ฒ์ ์ ํํ ์ง์ ๋ํด์๋ types.go์patchStrategy
ํ๊ทธ์ ์ํด ์ ์ด๋๋ค.
ํ์
ํ๋์ ๋ํด patchStrategy
๊ฐ ์ง์ ๋์ง ์์ผ๋ฉด,
๋ฆฌ์คํธ๋ ๋์ฒด๋๋ค.๊ธฐ๋ณธ ํ๋๊ฐ
์ค๋ธ์ ํธ๊ฐ ์์ฑ๋ ๋ ๊ฐ์ด ์ง์ ๋์ง ์๋ ๊ฒฝ์ฐ, API ์๋ฒ๋ ํ์ฑ ๊ตฌ์ฑ ๋ด ํน์ ํ๋๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ๋ค.
๋ค์์ ๋ํ๋ก์ด๋จผํธ์ ๋ํ ๊ตฌ์ฑ ํ์ผ์ด๋ค. ํ์ผ์๋ strategy
๊ฐ ์ง์ ๋์ง ์์๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
minReadySeconds: 5
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
kubectl apply
๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/application/simple_deployment.yaml
kubectl get
์ ์ฌ์ฉํ์ฌ ํ์ฑ ๊ตฌ์ฑ์ ์ถ๋ ฅํ๋ค.
kubectl get -f https://k8s.io/examples/application/simple_deployment.yaml -o yaml
์ถ๋ ฅ์ API ์๋ฒ๊ฐ ํ์ฑ ๊ตฌ์ฑ ๋ด ์ฌ๋ฌ ํ๋๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ ๊ฒ์ ๋ณด์ฌ์ค๋ค. ์ด ํ๋๋ค์ ๊ตฌ์ฑ ํ์ผ์ ์ง์ ๋์ง ์์๋ค.
apiVersion: apps/v1
kind: Deployment
# ...
spec:
selector:
matchLabels:
app: nginx
minReadySeconds: 5
replicas: 1 # defaulted by apiserver
strategy:
rollingUpdate: # defaulted by apiserver - derived from strategy.type
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate # defaulted by apiserver
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:1.14.2
imagePullPolicy: IfNotPresent # defaulted by apiserver
name: nginx
ports:
- containerPort: 80
protocol: TCP # defaulted by apiserver
resources: {} # defaulted by apiserver
terminationMessagePath: /dev/termination-log # defaulted by apiserver
dnsPolicy: ClusterFirst # defaulted by apiserver
restartPolicy: Always # defaulted by apiserver
securityContext: {} # defaulted by apiserver
terminationGracePeriodSeconds: 30 # defaulted by apiserver
# ...
ํจ์น ์์ฒญ์์, ํจ์น ์์ฒญ์ ๋ถ๋ถ์ผ๋ก์ ๋ช ์์ ์ผ๋ก ์ง์์ง์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ฒ๋ฆฌ๋ ํ๋๋ ๋ค์ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋์ง ์๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ํ๋์ ๋ํ ๊ฐ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ์ฒ๋ฆฌ๋ ํ๋์ ๋ํด ์์ํ์ง ๋ชปํ ๋์์ ์ ๋ฐํ ์ ์๋ค. ๋ค๋ฅธ ํ๋๊ฐ ๋์ค์ ๋ณ๊ฒฝ๋๋ฉด, ๊ทธ๋ก๋ถํฐ ๊ธฐ๋ณธ ์ฒ๋ฆฌ๋ ๊ฒ์ด ๋ช ์์ ์ผ๋ก ์ง์์ง์ง ์์ ํ ์ ๋ฐ์ดํธ๋์ง ์์ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ฌ์ ๋ก, ์๋ํ ๊ฐ์ด ์๋ฒ์ ๊ธฐ๋ณธ๊ฐ๊ณผ ์ผ์นํ๋๋ผ๋, ์๋ฒ์ ์ํด ๊ธฐ๋ณธ ์ฒ๋ฆฌ๋ ํน์ ํ๋๋ ๊ตฌ์ฑ ํ์ผ ๋ด ๋ช ์์ ์ผ๋ก ์ ์ํ ๊ฒ์ ๊ถ๊ณ ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋ฒ์ ์ํด ๋ค์ ๊ธฐ๋ณธ ์ฒ๋ฆฌ๋์ง ์๊ฒ ๋ ์ถฉ๋ํ๋ ๊ฐ์ ๋ณด๋ค ์ฝ๊ฒ ์ธ์ํ ์ ์๋๋ก ํด์ค๋ค.
Example:
# last-applied-configuration
spec:
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
# configuration file
spec:
strategy:
type: Recreate # updated value
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
# live configuration
spec:
strategy:
type: RollingUpdate # defaulted value
rollingUpdate: # defaulted value derived from type
maxSurge : 1
maxUnavailable: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
# result after merge - ERROR!
spec:
strategy:
type: Recreate # updated value: incompatible with rollingUpdate
rollingUpdate: # defaulted value: incompatible with "type: Recreate"
maxSurge : 1
maxUnavailable: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
์ค๋ช :
- ์ฌ์ฉ์๊ฐ
strategy.type
์ ์ ์ํ์ง ์๊ณ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ค. - ์๋ฒ๋
strategy.type
์RollingUpdate
๋ก ๊ธฐ๋ณธ ์ค์ ํ๊ณstrategy.rollingUpdate
๊ฐ์ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ค. - ์ฌ์ฉ์๊ฐ
strategy.type
๋ฅผRecreate
๋ก ๋ณ๊ฒฝํ๋ค. ์๋ฒ์์ ํด๋น ๊ฐ์ด ์ญ์ ๋ ๊ฑฐ๋ผ ์์ํ์ง๋งstrategy.rollingUpdate
๊ฐ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋จ์ ์๋ค.strategy.rollingUpdate
๊ฐ์ด ์ฒ์์ ๊ตฌ์ฑ ํ์ผ์์ ์ง์ ๋์๋ค๋ฉด, ์ด๊ฒ์ ์ญ์ ํด์ผ ํ๋ค๋ ๊ฒ์ด ๋ ๋ถ๋ช ํ์ ๊ฒ์ด๋ค. strategy.rollingUpdate
๊ฐ ์ง์์ง์ง ์์๊ธฐ ๋๋ฌธ์ ์ ์ฉ์ ์คํจํ๋ค.strategy.rollingupdate
ํ๋๋Recreate
์strategy.type
์ผ๋ก ์ ์๋ ์ ์๋ค.
๊ถ๊ณ : ์ด๋ค ํ๋๋ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ ๋ด ๋ช ์์ ์ผ๋ก ์ ์๋ผ์ผ ํ๋ค.
- ๋ํ๋ก์ด๋จผํธ, ์คํ ์ดํธํ์ , ์ก, ๋ฐ๋ชฌ์ , ๋ ํ๋ฆฌ์นด์ ๋ฐ ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ์ํฌ๋ก๋์ ๋ํ ์ ๋ ํฐ์ ํ๋ํ ํ๋ฆฟ ๋ ์ด๋ธ
- ๋ํ๋ก์ด๋จผํธ ๋กค์์ ์ ๋ต
์๋ฒ ๊ธฐ๋ณธ ํ๋ ๋๋ ๋ค๋ฅธ ์์ฑ์์ ์ํด ์ค์ ๋ ํ๋ ์ง์ฐ๋ ๋ฐฉ๋ฒ
๊ตฌ์ฑ ํ์ผ ๋ด ๋ํ๋์ง ์๋ ํ๋๋ ๊ทธ ๊ฐ์
null
๋ก ์ค์ ํ๊ณ ๋์ ๊ตฌ์ฑ ํ์ผ์ ์ ์ฉํจ์ผ๋ก์จ ์ง์์ง ์ ์๋ค.
์๋ฒ๊ฐ ๊ธฐ๋ณธ ๊ฐ์ ํ ๋นํ๋ ํ๋์ ๋ํด์, ์ด๋ ๋ค์ ๊ธฐ๋ณธ ๊ฐ์
ํ ๋นํ๋๋ก ํ๋ค.
๊ตฌ์ฑ ํ์ผ๊ณผ ์ง์ ๋ช ๋ นํ ์์ฑ์ ๊ฐ์ ํ๋ ์์ ๊ถ์ ๋ณ๊ฒฝ์ํค๋ ๋ฐฉ๋ฒ
๊ฐ๋ณ ์ค๋ธ์ ํธ ํ๋๋ฅผ ๋ณ๊ฒฝ์ํค๋ ๋ฐ ์ฌ์ฉํด์ผ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
kubectl apply
๋ฅผ ์ฌ์ฉํ๋ค.- ๊ตฌ์ฑ ํ์ผ์ ์์ ํ์ง ์๊ณ ํ์ฑ ๊ตฌ์ฑ์ ์ง์ ์์ฑํ๋ค.
์๋ฅผ ๋ค์ด,
kubectl scale
์ ์ฌ์ฉํ๋ค.
์ง์ ๋ช ๋ นํ ์์ฑ์์์ ๊ตฌ์ฑ ํ์ผ๋ก ์์ ์ ๋ณ๊ฒฝํ๊ธฐ
๊ตฌ์ฑ ํ์ผ์ ํ๋๋ฅผ ์ถ๊ฐํ๋ค. ํด๋น ํ๋์ ๊ฒฝ์ฐ
kubectl apply
๋ฅผ ๊ฑฐ์น์ง ์๋ ํ์ฑ ๊ตฌ์ฑ์ ๋ํด ์ง์ ์
๋ฐ์ดํธ๋ฅผ ์ ์ฉํ์ง ์๋๋ค.
๊ตฌ์ฑ ํ์ผ์์ ์ง์ ๋ช ๋ นํ ์์ฑ์๋ก ์์ ์ ๋ณ๊ฒฝํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค 1.5๋ก๋ถํฐ ๊ตฌ์ฑ ํ์ผ์์ ๋ช ๋ นํ ์์ฑ์๋ก ์์ ๊ถ์ ๋ณ๊ฒฝํ๋๋ฐ ์๋ ๋จ๊ณ ํ์ํ๋ค.
- ๊ตฌ์ฑ ํ์ผ์์ ํ๋๋ฅผ ์ ๊ฑฐํ๋ค.
- ํ์ฑ ์ค๋ธ์ ํธ ์์
kubectl.kubernetes.io/last-applied-configuration
์ด๋ ธํ ์ด์ ์์ ํ๋๋ฅผ ์ ๊ฑฐํ๋ค.
๊ด๋ฆฌ ๋ฐฉ๋ฒ ๋ณ๊ฒฝํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ ํ ๋ฒ์ ์ค์ง ํ๋์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋ผ์ผ ํ๋ค. ํ๋์ ๋ฐฉ๋ฒ์์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ํํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋, ์๋ ํ๋ก์ธ์ค์ด๋ค.
์ฐธ๊ณ :
์ ์ธํ ๊ด๋ฆฌ์ ํจ๊ป ๋ช ๋ นํ ์ญ์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ด์ฐฎ๋ค.๋ช ๋ นํ ์ปค๋งจ๋ ๊ด๋ฆฌ์์ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ผ๋ก ์ด์ ํ๊ธฐ
๋ช ๋ นํ ์ปค๋งจ๋ ๊ด๋ฆฌ์์ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ผ๋ก ์ด์ ํ๋ ๊ฒ์ ์ฌ๋ฌ ์๋ ๋จ๊ณ๋ฅผ ํฌํจํ๋ค.
ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ๋ก์ปฌ ๊ตฌ์ฑ ํ์ผ๋ก ๋ด๋ณด๋ธ๋ค.
kubectl get <์ข ๋ฅ>/<์ด๋ฆ> -o yaml > <์ข ๋ฅ>_<์ด๋ฆ>.yaml
๊ตฌ์ฑ ํ์ผ์์ ์๋์ผ๋ก
status
ํ๋๋ฅผ ์ ๊ฑฐํ๋ค.์ฐธ๊ณ :
`kubectl apply` ๊ตฌ์ฑ ํ์ผ์ ์กด์ฌํ๋ค๊ณ ํ๋๋ผ๋ ์ํ ํ๋๊ฐ ์ ๋ฐ์ดํธ๋์ง ์๊ธฐ ๋๋ฌธ์, ์ด ๋จ๊ณ๋ ์ ํ์ ์ด๋ค.
์ค๋ธ์ ํธ์
kubectl.kubernetes.io/last-applied-configuration
์ด๋ ธํ ์ด์ ์ ์ค์ ํ๋ค.kubectl replace --save-config -f <์ข ๋ฅ>_<์ด๋ฆ>.yaml
์ค์ง ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด
kubectl apply
๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ๋ค.
๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์์ ์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ผ๋ก ์ด์ ํ๊ธฐ
์ค๋ธ์ ํธ์
kubectl.kubernetes.io/last-applied-configuration
์ด๋ ธํ ์ด์ ์ ์ค์ ํ๋ค.kubectl replace --save-config -f <์ข ๋ฅ>_<์ด๋ฆ>.yaml
์ค์ง ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด
kubectl apply
๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ๋ค.
์ปจํธ๋กค๋ฌ ์ ๋ ํฐ์ ํ๋ํ ํ๋ฆฟ ๋ ์ด๋ธ ์ ์ํ๊ธฐ
๊ฒฝ๊ณ :
์ปจํธ๋กค๋ฌ์์ ์ ๋ ํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ถ์ฒ๋์ง ์๋๋ค.๊ถ๊ณ ๋๋ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์๋ฏธ๋ก ์ ์๋ฏธ๋ฅผ ๊ฐ์ง์ง ์๊ณ ์ปจํธ๋กค๋ฌ์ ์ํด์๋ง ์ฌ์ฉ๋๋ ๋จ์ผ, ๋ถ๋ณ์ ํ๋ํ ํ๋ฆฟ ๋ ์ด๋ธ์ ์ ์ํ๋ ๊ฒ์ด๋ค.
์์:
selector:
matchLabels:
controller-selector: "apps/v1/deployment/nginx"
template:
metadata:
labels:
controller-selector: "apps/v1/deployment/nginx"
๋ค์ ๋ด์ฉ
2 - Kustomize๋ฅผ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ ์ธํ ๊ด๋ฆฌ
Kustomize๋ kustomization ํ์ผ์ ํตํด ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋๋ก ๋ณ๊ฒฝํ๋(customize) ๋ ๋ฆฝํ ๋๊ตฌ์ด๋ค.
1.14 ์ดํ๋ก, kubectl๋ kustomization ํ์ผ์ ์ฌ์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ค. kustomization ํ์ผ์ ํฌํจํ๋ ๋๋ ํฐ๋ฆฌ ๋ด์ ๋ฆฌ์์ค๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค.
kubectl kustomize <kustomization_directory>
์ด ๋ฆฌ์์ค๋ฅผ ์ ์ฉํ๋ ค๋ฉด kubectl apply
๋ฅผ --kustomize
๋๋ -k
ํ๋๊ทธ์ ํจ๊ป ์คํํ๋ค.
kubectl apply -k <kustomization_directory>
์์ํ๊ธฐ ์ ์
kubectl
์ ์ค์นํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
Kustomize ๊ฐ์
Kustomize๋ ์ฟ ๋ฒ๋คํฐ์ค ๊ตฌ์ฑ์ ์ฌ์ฉ์ ์ ์ํํ๋ ๋๊ตฌ์ด๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ ํ์ผ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ค์ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ง๋ค.
- ๋ค๋ฅธ ์์ค์์ ๋ฆฌ์์ค ์์ฑ
- ๋ฆฌ์์ค์ ๋ํ ๊ต์ฐจ ํธ์ง ํ๋ ์ค์
- ๋ฆฌ์์ค ์งํฉ์ ๊ตฌ์ฑํ๊ณ ์ฌ์ฉ์ ์ ์
๋ฆฌ์์ค ์์ฑ
์ปจํผ๊ทธ๋งต๊ณผ ์ํฌ๋ฆฟ์ ํ๋์ ๊ฐ์ ๋ค๋ฅธ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์์ ์ฌ์ฉ๋๋ ์ค์ ์ด๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ปจํผ๊ทธ๋งต์ด๋ ์ํฌ๋ฆฟ์ ์ค์ง์ ์ธ ์์ค๋ ์ผ๋ฐ์ ์ผ๋ก .properties
ํ์ผ์ด๋ ssh key ํ์ผ๊ณผ ๊ฐ์ ๊ฒ๋ค์ ํด๋ฌ์คํฐ ์ธ๋ถ์ ์๋ค.
Kustomize๋ ์ํฌ๋ฆฟ๊ณผ ์ปจํผ๊ทธ๋งต์ ํ์ผ์ด๋ ๋ฌธ์์ด์์ ์์ฑํ๋ secretGenerator
์ configMapGenerator
๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
configMapGenerator
ํ์ผ์์ ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ ค๋ฉด configMapGenerator
๋ด์ files
๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. ๋ค์์ ํ๋์ .properties
ํ์ผ์์ ๋ฐ์ดํฐ ํญ๋ชฉ์ผ๋ก ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ ์์ ์ด๋ค.
# application.properties ํ์ผ์ ์์ฑ
cat <<EOF >application.properties
FOO=Bar
EOF
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-1
files:
- application.properties
EOF
์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ๋ค์ ๋ช ๋ น์ด๋ก ๊ฒ์ฌํ ์ ์๋ค.
kubectl kustomize ./
์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
data:
application.properties: |
FOO=Bar
kind: ConfigMap
metadata:
name: example-configmap-1-8mbdf7882g
env ํ์ผ์์ ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ ค๋ฉด, configMapGenerator
์ envs
๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. ๋ค์์ .env
ํ์ผ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ผ๋ก ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ ์์๋ฅผ ๋ณด์ฌ์ค๋ค.
# .env ํ์ผ ์์ฑ
cat <<EOF >.env
FOO=Bar
EOF
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-1
envs:
- .env
EOF
์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ๋ค์ ๋ช ๋ น์ด๋ก ๊ฒ์ฌํ ์ ์๋ค.
kubectl kustomize ./
์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
data:
FOO: Bar
kind: ConfigMap
metadata:
name: example-configmap-1-42cfbf598f
์ฐธ๊ณ :
.env
ํ์ผ์ ๊ฐ ๋ณ์๋ ์์ฑํ ์ปจํผ๊ทธ๋งต์์ ๋ถ๋ฆฌ๋ ํค๊ฐ ๋๋ค. .properties
๋ผ๋ ์ด๋ฆ์ ํ์ผ์ ๋ด์ฅํ๋ ์ด์ ์์(๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ํญ๋ชฉ๋ค)๋ ๋จ์ผ ํค๋ฅผ ์ํ ๊ฐ์ด๋ฏ๋ก ์ด ์์์๋ ๋ค๋ฅด๋ค.์ปจํผ๊ทธ๋งต์ ๋ฌธ์๋ก๋ ํค-๊ฐ ์๋ค๋ก๋ ์์ฑํ ์ ์๋ค. ๋ฌธ์๋ก๋ ํค-๊ฐ ์์์ ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ ค๋ฉด, configMapGenerator ๋ด์ literals
๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. ๋ค์์ ํค-๊ฐ ์์ ๋ฐ์ดํฐ ํญ๋ชฉ์ผ๋ก ๋ฐ๋ ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ ์์ ์ด๋ค.
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-2
literals:
- FOO=Bar
EOF
์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ๋ค์ ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์๋ค.
kubectl kustomize ./
์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
data:
FOO: Bar
kind: ConfigMap
metadata:
name: example-configmap-2-g2hdhfc6tk
๋ํ๋ก์ด๋จผํธ์์ ์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ์ฌ์ฉํ๊ธฐ ์ํด์๋, configMapGenerator์ ์ด๋ฆ์ ์ฐธ์กฐํ๋ค. Kustomize๋ ์๋์ผ๋ก ํด๋น ์ด๋ฆ์ ์์ฑ๋ ์ด๋ฆ์ผ๋ก ๊ต์ฒดํ ๊ฒ์ด๋ค.
๋ค์์ ์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ์ฌ์ฉํ๋ ๋ํ๋ก์ด๋จผํธ์ ์์๋ค.
# application.properties ํ์ผ์ ์์ฑํ๋ค.
cat <<EOF >application.properties
FOO=Bar
EOF
cat <<EOF >deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: my-app
volumeMounts:
- name: config
mountPath: /config
volumes:
- name: config
configMap:
name: example-configmap-1
EOF
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
configMapGenerator:
- name: example-configmap-1
files:
- application.properties
EOF
์ปจํผ๊ทธ๋งต๊ณผ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ค.
kubectl kustomize ./
์์ฑ๋ ๋ํ๋ก์ด๋จผํธ๋ ์ด๋ฆ์ ํตํด์ ์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ์ฐธ์กฐํ๋ค.
apiVersion: v1
data:
application.properties: |
FOO=Bar
kind: ConfigMap
metadata:
name: example-configmap-1-g4hk9g2ff8
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-app
name: my-app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- image: my-app
name: app
volumeMounts:
- mountPath: /config
name: config
volumes:
- configMap:
name: example-configmap-1-g4hk9g2ff8
name: config
secretGenerator
ํ์ผ ๋๋ ๋ฌธ์๋ก๋ ํค-๊ฐ ์๋ค๋ก ์ํฌ๋ฆฟ์ ์์ฑํ ์ ์๋ค. ํ์ผ์์ ์ํฌ๋ฆฟ์ ์์ฑํ๋ ค๋ฉด secretGenerator
๋ด์ files
๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. ๋ค์์ ํ์ผ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ผ๋ก ๋ฐ๋ ์ํฌ๋ฆฟ์ ์์ฑํ๋ ์์ ์ด๋ค.
# password.txt ํ์ผ์ ์์ฑ
cat <<EOF >./password.txt
username=admin
password=secret
EOF
cat <<EOF >./kustomization.yaml
secretGenerator:
- name: example-secret-1
files:
- password.txt
EOF
์์ฑ๋ ์ํฌ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
data:
password.txt: dXNlcm5hbWU9YWRtaW4KcGFzc3dvcmQ9c2VjcmV0Cg==
kind: Secret
metadata:
name: example-secret-1-t2kt65hgtb
type: Opaque
๋ฌธ์๋ก๋ ํค-๊ฐ ์์ผ๋ก ์ํฌ๋ฆฟ์ ์์ฑํ๋ ค๋ฉด, secretGenerator
๋ด์ literals
๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. ๋ค์์ ํค-๊ฐ ์์ ๋ฐ์ดํฐ ํญ๋ชฉ์ผ๋ก ๋ฐ๋ ์ํฌ๋ฆฟ์ ์์ฑํ๋ ์์ ์ด๋ค.
cat <<EOF >./kustomization.yaml
secretGenerator:
- name: example-secret-2
literals:
- username=admin
- password=secret
EOF
์์ฑ๋ ์ํฌ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
data:
password: c2VjcmV0
username: YWRtaW4=
kind: Secret
metadata:
name: example-secret-2-t52t6g96d8
type: Opaque
์ปจํผ๊ทธ๋งต๊ณผ ์ ์ฌํ๊ฒ, ์์ฑ๋ ์ํฌ๋ฆฟ๋ secretGenerator์ ์ด๋ฆ์ ์ฐธ์กฐํจ์ผ๋ก์จ ๋ํ๋ก์ด๋จผํธ์์ ์ฌ์ฉ๋ ์ ์๋ค.
# password.txt ํ์ผ์ ์์ฑํ๋ค.
cat <<EOF >./password.txt
username=admin
password=secret
EOF
cat <<EOF >deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: my-app
volumeMounts:
- name: password
mountPath: /secrets
volumes:
- name: password
secret:
secretName: example-secret-1
EOF
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
secretGenerator:
- name: example-secret-1
files:
- password.txt
EOF
generatorOptions
์์ฑ๋ ์ปจํผ๊ทธ๋งต๊ณผ ์ํฌ๋ฆฟ์ ์ฝํ
์ธ ํด์ ์ ๋ฏธ์ฌ๊ฐ ์ถ๊ฐ๋๋ค. ์ด๋ ์ฝํ
์ธ ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์๋ก์ด ์ปจํผ๊ทธ๋งต ์ด๋ ์ํฌ๋ฆฟ์ด ์์ฑ๋๋ ๊ฒ์ ๋ณด์ฅํ๋ค. ์ ๋ฏธ์ฌ๋ฅผ ์ถ๊ฐํ๋ ๋์์ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ์ผ๋ก generatorOptions
๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฐ์, ์์ฑ๋ ์ปจํผ๊ทธ๋งต๊ณผ ์ํฌ๋ฆฟ์ ๊ต์ฐจ ํธ์ง ์ต์
๋ค์ ์ง์ ํด์ฃผ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: example-configmap-3
literals:
- FOO=Bar
generatorOptions:
disableNameSuffixHash: true
labels:
type: generated
annotations:
note: generated
EOF
์์ฑ๋ ์ปจํผ๊ทธ๋งต์ ๋ณด๋ ค๋ฉด kubectl kustomize ./
๋ฅผ ์คํํ๋ค.
apiVersion: v1
data:
FOO: Bar
kind: ConfigMap
metadata:
annotations:
note: generated
labels:
type: generated
name: example-configmap-3
๊ต์ฐจ ํธ์ง ํ๋ ์ค์
ํ๋ก์ ํธ ๋ด ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค์ ๊ต์ฐจ ํธ์ง ํ๋๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๊ฝค๋ ์ผ๋ฐ์ ์ด๋ค. ๊ต์ฐจ ํธ์ง ํ๋๋ฅผ ์ค์ ํ๋ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ชจ๋ ๋ฆฌ์์ค์ ๋์ผํ ๋ค์์คํ์ด์ค๋ฅผ ์ค์
- ๋์ผํ ๋ค์ ์ ๋์ฌ ๋๋ ์ ๋ฏธ์ฌ๋ฅผ ์ถ๊ฐ
- ๋์ผํ ๋ ์ด๋ธ๋ค์ ์ถ๊ฐ
- ๋์ผํ ์ด๋ ธํ ์ด์ ๋ค์ ์ถ๊ฐ
๋ค์์ ์์ ์ด๋ค.
# deployment.yaml์ ์์ฑ
cat <<EOF >./deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
EOF
cat <<EOF >./kustomization.yaml
namespace: my-namespace
namePrefix: dev-
nameSuffix: "-001"
commonLabels:
app: bingo
commonAnnotations:
oncallPager: 800-555-1212
resources:
- deployment.yaml
EOF
์ด ํ๋๋ค์ด ๋ํ๋ก์ด๋จผํธ ๋ฆฌ์์ค์ ๋ชจ๋ ์ค์ ๋์๋์ง ๋ณด๋ ค๋ฉด kubectl kustomize ./
๋ฅผ ์คํํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
oncallPager: 800-555-1212
labels:
app: bingo
name: dev-nginx-deployment-001
namespace: my-namespace
spec:
selector:
matchLabels:
app: bingo
template:
metadata:
annotations:
oncallPager: 800-555-1212
labels:
app: bingo
spec:
containers:
- image: nginx
name: nginx
๋ฆฌ์์ค ๊ตฌ์ฑ๊ณผ ์ฌ์ฉ์ ์ ์
ํ๋ก์ ํธ ๋ด ๋ฆฌ์์ค์ ์งํฉ์ ๊ตฌ์ฑํ์ฌ ์ด๋ค์ ๋์ผํ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ ๋ด์์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ด๋ค. Kustomize๋ ์๋ก ๋ค๋ฅธ ํ์ผ๋ค๋ก ๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ํจ์น๋ ๋ค๋ฅธ ์ฌ์ฉ์ ์ ์๋ฅผ ์ด๋ค์ ์ ์ฉํ๋ ๊ฒ์ ์ ๊ณตํ๋ค.
๊ตฌ์ฑ
Kustomize๋ ์๋ก ๋ค๋ฅธ ๋ฆฌ์์ค๋ค์ ๊ตฌ์ฑ์ ์ง์ํ๋ค. kustomization.yaml
ํ์ผ ๋ด resources
ํ๋๋ ๊ตฌ์ฑ ๋ด์ ํฌํจํ๋ ค๋ ๋ฆฌ์์ค๋ค์ ๋ฆฌ์คํธ๋ฅผ ์ ์ํ๋ค. resources
๋ฆฌ์คํธ ๋ด์ ๋ฆฌ์์ค์ ๊ตฌ์ฑ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ค.
๋ค์ ์์ ๋ ๋ํ๋ก์ด๋จผํธ์ ์๋น์ค๋ก ๊ตฌ์ฑ๋ NGINX ์ ํ๋ฆฌ์ผ์ด์
์ด๋ค.
# deployment.yaml ํ์ผ ์์ฑ
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
EOF
# service.yaml ํ์ผ ์์ฑ
cat <<EOF > service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
EOF
# ์ด๋ค์ ๊ตฌ์ฑํ๋ kustomization.yaml ์์ฑ
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
- service.yaml
EOF
kubectl kustomize ./
์ ๋ฆฌ์์ค์๋ ๋ํ๋ก์ด๋จผํธ์ ์๋น์ค ์ค๋ธ์ ํธ๊ฐ ๋ชจ๋ ํฌํจ๋์ด ์๋ค.
์ฌ์ฉ์ ์ ์
ํจ์น๋ ๋ฆฌ์์ค์ ๋ค๋ฅธ ์ฌ์ฉ์ ์ ์๋ฅผ ์ ์ฉํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค. Kustomize๋
patchesStrategicMerge
์ patchesJson6902
๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ํจ์น ๋ฉ์ปค๋์ฆ์ ์ง์ํ๋ค. patchesStrategicMerge
๋ ํ์ผ ๊ฒฝ๋ก๋ค์ ๋ฆฌ์คํธ์ด๋ค. ๊ฐ๊ฐ์ ํ์ผ์ ์ ๋ต์ ๋ณํฉ ํจ์น๋ก ๋ถ์๋ ์ ์์ด์ผ ํ๋ค. ํจ์น ๋ด๋ถ์ ๋ค์์ ๋ฐ๋์ ์ด๋ฏธ ์ฝํ์ง ๋ฆฌ์์ค ๋ค์๊ณผ ์ผ์นํด์ผ ํ๋ค. ํ ๊ฐ์ง ์ผ์ ํ๋ ์์ ํจ์น๊ฐ ๊ถ์ฅ๋๋ค. ์๋ฅผ ๋ค๊ธฐ ์ํด ๋ํ๋ก์ด๋จผํธ ๋ ํ๋ฆฌ์นด ์ซ์๋ฅผ ์ฆ๊ฐ์ํค๋ ํ๋์ ํจ์น์ ๋ฉ๋ชจ๋ฆฌ ์ํ์ ์ค์ ํ๋ ๋ค๋ฅธ ํจ์น๋ฅผ ์์ฑํ๋ค.
# deployment.yaml ํ์ผ ์์ฑ
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
EOF
# increase_replicas.yaml ํจ์น ์์ฑ
cat <<EOF > increase_replicas.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
EOF
# ๋ค๋ฅธ ํจ์น๋ก set_memory.yaml ์์ฑ
cat <<EOF > set_memory.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
template:
spec:
containers:
- name: my-nginx
resources:
limits:
memory: 512Mi
EOF
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
patchesStrategicMerge:
- increase_replicas.yaml
- set_memory.yaml
EOF
๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ณด๋ ค๋ฉด kubectl kustomize ./
๋ฅผ ์คํํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
run: my-nginx
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- image: nginx
name: my-nginx
ports:
- containerPort: 80
resources:
limits:
memory: 512Mi
๋ชจ๋ ๋ฆฌ์์ค ๋๋ ํ๋๊ฐ ์ ๋ต์ ๋ณํฉ ํจ์น๋ฅผ ์ง์ํ๋ ๊ฒ์ ์๋๋ค. ์์์ ๋ฆฌ์์ค ๋ด ์์์ ํ๋์ ์์ ์ ์ง์ํ๊ธฐ ์ํด,
Kustomize๋ patchesJson6902
๋ฅผ ํตํ JSON ํจ์น ์ ์ฉ์ ์ ๊ณตํ๋ค.
Json ํจ์น์ ์ ํํ ๋ฆฌ์์ค๋ฅผ ์ฐพ๊ธฐ ์ํด, ํด๋น ๋ฆฌ์์ค์ group, version, kind, name์ด
kustomization.yaml
๋ด์ ๋ช
์๋ ํ์๊ฐ ์๋ค. ์๋ฅผ ๋ค๋ฉด, patchesJson6902
๋ฅผ ํตํด
๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ์ ๋ ํ๋ฆฌ์นด ๊ฐ์๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
# deployment.yaml ํ์ผ ์์ฑ
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
EOF
# json ํจ์น ์์ฑ
cat <<EOF > patch.yaml
- op: replace
path: /spec/replicas
value: 3
EOF
# kustomization.yaml ์์ฑ
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
patchesJson6902:
- target:
group: apps
version: v1
kind: Deployment
name: my-nginx
path: patch.yaml
EOF
kubectl kustomize ./
๋ฅผ ์คํํ์ฌ replicas
ํ๋๊ฐ ๊ฐฑ์ ๋์๋์ง ํ์ธํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
selector:
matchLabels:
run: my-nginx
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- image: nginx
name: my-nginx
ports:
- containerPort: 80
ํจ์น ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก Kustomize๋ ํจ์น๋ฅผ ์์ฑํ์ง ์๊ณ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉ์ ์ ์ํ๊ฑฐ๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ํ๋ ๊ฐ์ ์ปจํ
์ด๋์ ์ฃผ์
ํ๋
๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์ด kustomization.yaml
์ images
ํ๋์ ์ ๊ท ์ด๋ฏธ์ง๋ฅผ ์ง์ ํ์ฌ ์ปจํ
์ด๋์์ ์ฌ์ฉ๋๋ ์ด๋ฏธ์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
EOF
cat <<EOF >./kustomization.yaml
resources:
- deployment.yaml
images:
- name: nginx
newName: my.image.registry/nginx
newTag: "1.4.0"
EOF
์ฌ์ฉ๋ ์ด๋ฏธ์ง๊ฐ ๊ฐฑ์ ๋์๋์ง ํ์ธํ๋ ค๋ฉด kubectl kustomize ./
๋ฅผ ์คํํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
selector:
matchLabels:
run: my-nginx
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- image: my.image.registry/nginx:1.4.0
name: my-nginx
ports:
- containerPort: 80
๊ฐ๋, ํ๋ ๋ด์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ์ค์ ๊ฐ์ ์ฌ์ฉํด์ผ ํ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด,
๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ์ ํ๋๋ Env ๋๋ ์ปค๋งจ๋ ์ธ์๋ก ํด๋น ์๋น์ค ๋ค์์ ์ฝ์ด์ผ ํ๋ค๊ณ ํ์.
kustomization.yaml
ํ์ผ์ namePrefix
๋๋ nameSuffix
๊ฐ ์ถ๊ฐ๋๋ฉด ์๋น์ค ๋ค์์ด ๋ณ๊ฒฝ๋ ์ ์๋ค.
์ปค๋งจ๋ ์ธ์ ๋ด์ ์๋น์ค ๋ค์์ ํ๋ ์ฝ๋ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค. ์ด ์ฉ๋์์ Kustomize๋ vars
๋ฅผ ํตํด containers์ ์๋น์ค ๋ค์์ ์ฝ์
ํ ์ ์๋ค.
# deployment.yaml ํ์ผ ์์ฑ(๋ฌธ์ ๊ตฌ๋ถ ๊ธฐํธ๋ฅผ ๋ฐ์ดํ๋ก ๊ฐ์)
cat <<'EOF' > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
command: ["start", "--host", "$(MY_SERVICE_NAME)"]
EOF
# service.yaml ํ์ผ ์์ฑ
cat <<EOF > service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
EOF
cat <<EOF >./kustomization.yaml
namePrefix: dev-
nameSuffix: "-001"
resources:
- deployment.yaml
- service.yaml
vars:
- name: MY_SERVICE_NAME
objref:
kind: Service
name: my-nginx
apiVersion: v1
EOF
kubectl kustomize ./
๋ฅผ ์คํํ๋ฉด dev-my-nginx-001
๋ก ์ปจํ
์ด๋์ ์ฝ์
๋ ์๋น์ค ๋ค์์ ๋ณผ ์ ์๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: dev-my-nginx-001
spec:
replicas: 2
selector:
matchLabels:
run: my-nginx
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- command:
- start
- --host
- dev-my-nginx-001
image: nginx
name: my-nginx
Base์ Overlay
Kustomize๋ base ์ overlay ์ ๊ฐ๋
์ ๊ฐ์ง๊ณ ์๋ค. base ๋ kustomization.yaml
๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ๋๋ ํฐ๋ฆฌ๋ค. ์ด๋
์ฌ์ฉ์ ์ ์์ ๊ด๋ จ๋ ๋ฆฌ์์ค๋ค์ ์งํฉ์ ํฌํจํ๋ค. kustomization.yaml
์ ๋ด๋ถ์ ํ์๋๋ base๋ ๋ก์ปฌ ๋๋ ํฐ๋ฆฌ์ด๊ฑฐ๋ ์๊ฒฉ ๋ฆฌํฌ์งํฐ๋ฆฌ์ ๋๋ ํฐ๋ฆฌ๊ฐ
๋ ์ ์๋ค. overlay ๋ kustomization.yaml
์ด ์๋ ๋๋ ํฐ๋ฆฌ๋ก
๋ค๋ฅธ kustomization ๋๋ ํฐ๋ฆฌ๋ค์ bases
๋ก ์ฐธ์กฐํ๋ค. base ๋ overlay์ ๋ํด์ ์์ง ๋ชปํ๋ฉฐ ์ฌ๋ฌ overlay๋ค์์ ์ฌ์ฉ๋ ์ ์๋ค.
ํ overlay๋ ๋ค์์ base๋ค์ ๊ฐ์ง ์ ์๊ณ , base๋ค์์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ,
์ด๋ค์ ์์ ์ฌ์ฉ์ ์ ์๋ ๊ฐ์ง ์ ์๋ค.
๋ค์์ base์ ๋ํ ์์ด๋ค.
# base๋ฅผ ๊ฐ์ง๋ ๋๋ ํฐ๋ฆฌ ์์ฑ
mkdir base
# base/deployment.yaml ์์ฑ
cat <<EOF > base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
EOF
# base/service.yaml ํ์ผ ์์ฑ
cat <<EOF > base/service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
EOF
# base/kustomization.yaml ์์ฑ
cat <<EOF > base/kustomization.yaml
resources:
- deployment.yaml
- service.yaml
EOF
์ด base๋ ๋ค์์ overlay์์ ์ฌ์ฉ๋ ์ ์๋ค. ๋ค๋ฅธ namePrefix
๋๋ ๋ค๋ฅธ ๊ต์ฐจ ํธ์ง ํ๋๋ค์
์๋ก ๋ค๋ฅธ overlay์ ์ถ๊ฐํ ์ ์๋ค. ๋ค์ ์์ ๋ ๋์ผํ base๋ฅผ ์ฌ์ฉํ๋ ๋ overlay๋ค์ด๋ค.
mkdir dev
cat <<EOF > dev/kustomization.yaml
resources:
- ../base
namePrefix: dev-
EOF
mkdir prod
cat <<EOF > prod/kustomization.yaml
resources:
- ../base
namePrefix: prod-
EOF
Kustomize๋ฅผ ์ด์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฉ/ํ์ธ/์ญ์ ํ๋ ๋ฐฉ๋ฒ
kustomization.yaml
์์ ๊ด๋ฆฌ๋๋ ๋ฆฌ์์ค๋ฅผ ์ธ์ํ๋ ค๋ฉด kubectl
๋ช
๋ น์ด์ --kustomize
๋ -k
๋ฅผ ์ฌ์ฉํ๋ค.
-k
๋ ๋ค์๊ณผ ๊ฐ์ด kustomization ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ์ฃผ์ํ๋ค.
kubectl apply -k <kustomization directory>/
๋ค์ kustomization.yaml
์ด ์ฃผ์ด์ง๊ณ ,
# deployment.yaml ํ์ผ ์์ฑ
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
EOF
# kustomization.yaml ์์ฑ
cat <<EOF >./kustomization.yaml
namePrefix: dev-
commonLabels:
app: my-nginx
resources:
- deployment.yaml
EOF
๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ dev-my-nginx
๋ฅผ ์ ์ฉํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
> kubectl apply -k ./
deployment.apps/dev-my-nginx created
๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ dev-my-nginx
๋ฅผ ๋ณด๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ค ์ค์ ํ๋๋ฅผ ์คํํ๋ค.
kubectl get -k ./
kubectl describe -k ./
๋ค์ ๋ช
๋ น์ ์คํํด์ ๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ dev-my-nginx
๋ฅผ ๋งค๋ํ์คํธ๊ฐ ์ ์ฉ๋ ๊ฒฝ์ฐ์ ํด๋ฌ์คํฐ ์ํ์ ๋น๊ตํ๋ค.
kubectl diff -k ./
๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ dev-my-nginx
๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ค.
> kubectl delete -k ./
deployment.apps "dev-my-nginx" deleted
Kustomize ๊ธฐ๋ฅ ๋ฆฌ์คํธ
ํ๋ | ์ ํ | ์ค๋ช |
---|---|---|
namespace | string | ๋ชจ๋ ๋ฆฌ์์ค์ ๋ค์์คํ์ด์ค ์ถ๊ฐ |
namePrefix | string | ๋ชจ๋ ๋ฆฌ์์ค ๋ค์์ ์ด ํ๋์ ๊ฐ์ด ์ ๋์ฌ๋ก ์ถ๊ฐ๋๋ค |
nameSuffix | string | ๋ชจ๋ ๋ฆฌ์์ค ๋ค์์ ์ด ํ๋์ ๊ฐ์ด ์ ๋ฏธ์ฌ๋ก ์ถ๊ฐ๋๋ค |
commonLabels | map[string]string | ๋ชจ๋ ๋ฆฌ์์ค์ ์ ๋ ํฐ์ ์ถ๊ฐ๋ ๋ ์ด๋ธ |
commonAnnotations | map[string]string | ๋ชจ๋ ๋ฆฌ์์ค์ ์ถ๊ฐ๋ ์ด๋ ธํ ์ด์ |
resources | []string | ์ด ๋ฆฌ์คํธ ๋ด ๊ฐ๊ฐ์ ํญ๋ชฉ์ ๋ฐ๋์ ์กด์ฌํ๋ ๋ฆฌ์์ค ๊ตฌ์ฑ ํ์ผ๋ก ํด์๋์ด์ผ ํ๋ค. |
configMapGenerator | []ConfigMapArgs | ์ด ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ ์ปจํผ๊ทธ๋งต์ ์์ฑํ๋ค. |
secretGenerator | []SecretArgs | ์ด ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ ์ํฌ๋ฆฟ์ ์์ฑํ๋ค. |
generatorOptions | GeneratorOptions | ๋ชจ๋ ์ปจํผ๊ทธ๋งต ๋ฐ ์ํฌ๋ฆฟ ์์ฑ์(generator)์ ๋์์ ์์ ํ๋ค. |
bases | []string | ์ด ๋ฆฌ์คํธ ๋ด ๊ฐ๊ฐ์ ํญ๋ชฉ์ kustomization.yaml ํ์ผ์ ๊ฐ์ง๋ ๋๋ ํฐ๋ฆฌ๋ก ํด์๋์ด์ผ ํ๋ค. |
patchesStrategicMerge | []string | ์ด ๋ฆฌ์คํธ ๋ด ๊ฐ๊ฐ์ ํญ๋ชฉ์ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ ๋ต์ ๋ณํฉ ํจ์น๋ก ํด์๋์ด์ผ ํ๋ค. |
patchesJson6902 | []Patch | ์ด ๋ฆฌ์คํธ ๋ด ๊ฐ๊ฐ์ ํญ๋ชฉ์ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ Json ํจ์น๋ก ํด์๋์ด์ผ ํ๋ค. |
vars | []Var | ๊ฐ๊ฐ์ ํญ๋ชฉ์ ํ ๋ฆฌ์์ค์ ํ๋์์ ํ ์คํธ๋ฅผ ์บก์ณํ๋ค. |
images | []Image | ๊ฐ๊ฐ์ ํญ๋ชฉ์ ํจ์น๋ฅผ ์์ฑํ์ง ์๊ณ ํ๋์ ์ด๋ฏธ์ง์ ๋ํ name, tags ๊ทธ๋ฆฌ๊ณ /๋๋ digest๋ฅผ ์์ ํ๋ค. |
configurations | []string | ์ด ๋ฆฌ์คํธ ๋ด ๊ฐ๊ฐ์ ํญ๋ชฉ์ Kustomize ๋ณํ ์ค์ ์ ํฌํจํ๋ ํ์ผ๋ก ํด์๋์ด์ผ ํ๋ค. |
crds | []string | ์ด ๋ฆฌ์คํธ ๋ด ๊ฐ๊ฐ์ ํญ๋ชฉ์ ์ฟ ๋ฒ๋คํฐ์ค ํ์ ์ ๋ํ OpenAPI ์ ์ ํ์ผ๋ก ํด์๋์ด์ผ ํ๋ค. |
๋ค์ ๋ด์ฉ
3 - ๋ช ๋ นํ ์ปค๋งจ๋๋ฅผ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ kubectl
์ปค๋งจ๋ ๋ผ์ธ ํด ์์ ๋ด์ฅ๋ ๋ช
๋ นํ ์ปค๋งจ๋๋ฅผ ์ด์ฉํจ์ผ๋ก์จ
๋ฐ๋ก ์ ์ํ๊ฒ ์์ฑ, ์
๋ฐ์ดํธ ๋ฐ ์ญ์ ํ ์ ์๋ค. ์ด ๋ฌธ์๋ ์ด๋ป๊ฒ ์ปค๋งจ๋๊ฐ ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ,
์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋ ์ง์ ๋ํด ์ค๋ช
ํ๋ค.
์์ํ๊ธฐ ์ ์
kubectl
์ ์ค์นํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
ํธ๋ ์ด๋ ์คํ
kubectl
ํด์ 3๊ฐ์ง ์ข
๋ฅ์ ์ค๋ธ์ ํธ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ค.
- ๋ช ๋ นํ ์ปค๋งจ๋
- ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
- ์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
๊ฐ ์ข ๋ฅ๋ณ ์ค๋ธ์ ํธ ๊ด๋ฆฌ์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ํ ๋ ผ์๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ค๋ธ์ ํธ ์์ฑ ๋ฐฉ๋ฒ
kubectl
ํด์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ค๋ธ์ ํธ ํ์
์ ์์ฑํ๋๋ฐ ๋์ฌ ํํ ๊ธฐ๋ฐ์ ์ปค๋งจ๋๋ฅผ
์ง์ํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ํ์
์ ์ต์ํ์ง ์์ ์ฌ์ฉ์๊ฐ ์ธ์งํ ์ ์๋๋ก ์ปค๋งจ๋
์ด๋ฆ์ด ์ง์ด์ก๋ค.
run
: ์ปจํ ์ด๋๋ฅผ ์คํํ ์๋ก์ด ํ๋๋ฅผ ์์ฑํ๋ค.expose
: ํ๋์ ๊ฑธ์ณ ํธ๋ํฝ์ ๋ก๋ ๋ฐธ๋ฐ์คํ๋๋ก ์๋ก์ด ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.autoscale
: ๋ํ๋ก์ด๋จผํธ์ ๊ฐ์ด, ํ๋์ ์ปจํธ๋กค๋ฌ์ ๋ํด ์๋์ผ๋ก ์ํ์ ์ค์ผ์ผ์ด ์ด๋ฃจ์ด ์ง๋๋ก ์๋ก์ด Autoscaler ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
๋ํ kubectl
ํด์ ์ค๋ธ์ ํธ ํ์
์ ์ํด ๊ตฌ๋๋๋ ์์ฑ ์ปค๋งจ๋๋ฅผ ์ง์ํ๋ค.
์ด๋ฌํ ์ปค๋งจ๋๋ ๋ ๋ง์ ์ค๋ธ์ ํธ ํ์
์ ์ง์ํด์ฃผ๋ฉฐ ๊ทธ ์๋ํ๋ ๋ฐ์ ๋ํด
๋ณด๋ค ๋ช
ํํ๊ฒ ํด์ฃผ์ง๋ง, ์ฌ์ฉ์๊ฐ ์์ฑํ๊ณ ์ ํ๋ ์ค๋ธ์ ํธ ํ์
์ ๋ํด
์ ์ ์๋๋ก ํด์ผ ํ๋ค.
create <์ค๋ธ์ ํธ ํ์ > [<์๋ธ ํ์ >] <์ธ์คํด์ค๋ช >
์ผ๋ถ ์ค๋ธ์ ํธ ํ์
์ create
์ปค๋งจ๋ ๋ด ์ ์ํ ์ ์๋ ์๋ธ ํ์
์ ๊ฐ์ง๋ค.
์๋ฅผ ๋ค์ด, ์๋น์ค ์ค๋ธ์ ํธ๋ ClusterIP, LoadBalancer ๋ฐ NodePort ๋ฑ์
ํฌํจํ๋ ์ฌ๋ฌ ์๋ธ ํ์
์ ๊ฐ์ง๋ค, ๋ค์์ NodePort ์๋ธ ํ์
์ ํตํด ์๋น์ค๋ฅผ
์์ฑํ๋ ์์ ์ด๋ค.
kubectl create service nodeport <์ฌ์ฉ์ ์๋น์ค ๋ช
์นญ>
์ด์ ์์ ์์, create service nodeport
์ปค๋งจ๋๋
create service
์ปค๋งจ๋์ ์๋ธ ์ปค๋งจ๋๋ผ๊ณ ์นญํ๋ค.
-h
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ธ ์ปค๋งจ๋์ ์ํด ์ง์๋๋ ์ธ์ ๋ฐ ํ๋๊ทธ๋ฅผ
์ฐพ์ ๋ณผ ์ ์๋ค.
kubectl create service nodeport -h
์ค๋ธ์ ํธ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ
kubectl
์ปค๋งจ๋๋ ์ผ๋ฐ์ ์ธ ๋ช๋ช์ ์
๋ฐ์ดํธ ์์
์ ์ํด ๋์ฌ ํํ ๊ธฐ๋ฐ์ ์ปค๋งจ๋๋ฅผ ์ง์ํ๋ค.
์ด ์ปค๋งจ๋๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ต์ํ์ง ์์ ์ฌ์ฉ์๊ฐ ์ค์ ๋์ด์ผ
ํ๋ ํน์ ํ๋๋ฅผ ๋ชจ๋ฅด๋ ์ํ์์๋ ์
๋ฐ์ดํธ๋ฅผ ์ํํ ์ ์๋๋ก
์ด๋ฆ ์ง์ด์ก๋ค.
scale
: ์ปจํธ๋กค๋ฌ์ ๋ ํ๋ฆฌ์นด ์๋ฅผ ์ ๋ฐ์ดํธ ํจ์ผ๋ก์จ ํ๋๋ฅผ ์ถ๊ฐ ๋๋ ์ ๊ฑฐํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ํ์ ์ผ๋ก ์ค์ผ์ผํ๋ค.annotate
: ์ค๋ธ์ ํธ๋ก๋ถํฐ ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐ ๋๋ ์ ๊ฑฐํ๋ค.label
: ์ค๋ธ์ ํธ์์ ๋ ์ด๋ธ์ ์ถ๊ฐ ๋๋ ์ ๊ฑฐํ๋ค.
kubectl
์ปค๋งจ๋๋ ๋ํ ์ค๋ธ์ ํธ ์ธก๋ฉด์์ ๊ตฌ๋๋๋ ์
๋ฐ์ดํธ ์ปค๋งจ๋๋ฅผ ์ง์ํ๋ค.
์ด ์ธก๋ฉด์ ์ค์ ์ ๋ค๋ฅธ ์ค๋ธ์ ํธ ํ์
์ ๋ํ ๋ค๋ฅธ ํ๋๋ฅผ ์ค์ ํ ์๋ ์๋ค.
set
<field>
: ์ค๋ธ์ ํธ์ ์ธก๋ฉด์ ์ค์ ํ๋ค.
์ฐธ๊ณ :
์ฟ ๋ฒ๋คํฐ์ค 1.5 ๋ฒ์ ์์๋ ๋ชจ๋ ๋์ฌ ํํ ๊ธฐ๋ฐ์ ์ปค๋งจ๋๊ฐ ๊ด๋ จ๋ ์ธก๋ฉด ์ค์ฌ์ ์ปค๋งจ๋๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ์๋๋ค.kubectl
ํด์ ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ์ง์ ์
๋ฐ์ดํธํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ง์ํ์ง๋ง,
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ์คํค๋ง์ ๋ํ ์ถ๊ฐ์ ์ธ ์ดํด๋ฅผ ์๊ตฌํ๋ค.
edit
: ํธ์ง๊ธฐ์์ ๊ตฌ์ฑ์ ์ด์ด ํ์ฑ ์ค๋ธ์ ํธ์ ๋ํ ์๋ ๊ทธ๋๋ก์ ๊ตฌ์ฑ์ ๋ฐ๋ก ํธ์งํ๋ค.patch
: ํจ์น ๋ฌธ์์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ๋ฐ๋ก ํธ์งํ๋ค. ํจ์น ๋ฌธ์์ด์ ๋ํ ๋ณด๋ค ์์ธํ ์ ๋ณด๋ฅผ ๋ณด๋ ค๋ฉด API ๊ท์ ์์ ํจ์น ์น์ ์ ์ฐธ๊ณ ํ๋ค.
์ค๋ธ์ ํธ ์ญ์ ๋ฐฉ๋ฒ
ํด๋ฌ์คํฐ์์ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๊ธฐ ์ํด delete
์ปค๋งจ๋์ ์ฌ์ฉํ ์ ์๋ค.
delete <ํ์ >/<์ด๋ฆ>
์ฐธ๊ณ :
๋ช ๋ นํ ์ปค๋งจ๋์ ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ๋ชจ๋kubectl delete
๋ฅผ ์ฌ์ฉํ ์
์๋ค. ์ฐจ์ด์ ์ ์ปค๋งจ๋์ ์ ํด์ง๋ ์ธ์์ ์๋ค. ๋ช
๋ นํ ์ปค๋งจ๋๋ก
kubectl delete
์ ์ฌ์ฉํ๊ธฐ ์ํด, ์ญ์ ํ ์ค๋ธ์ ํธ๋ฅผ ์ธ์๋ก ์ ํ๋ค.
๋ค์์ nginx๋ผ๋ ๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ๋ฅผ ์ ํ๋ ์์ ์ด๋ค.kubectl delete deployment/nginx
์ค๋ธ์ ํธ ํ์ธ ๋ฐฉ๋ฒ
์ค๋ธ์ ํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๊ฐ์ง ์ปค๋งจ๋๊ฐ ์๋ค.
get
: ์ผ์นํ๋ ์ค๋ธ์ ํธ์ ๋ํ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค. ์ต์ ๋ฆฌ์คํธ๋ฅผ ํ์ธํ๊ธฐ ์ํดget -h
๋ฅผ ์ฌ์ฉํ๋ค.describe
: ์ผ์นํ๋ ์ค๋ธ์ ํธ์ ๋ํด ์์งํ ์์ธํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค.logs
: ํ๋์์ ์คํ ์ค์ธ ์ปจํ ์ด๋์ ๋ํ stdout๊ณผ stderr๋ฅผ ์ถ๋ ฅํ๋ค.
์์ฑ ์ ์ค๋ธ์ ํธ ์์ ์ ์ํด set
์ปค๋งจ๋ ์ฌ์ฉํ๊ธฐ
create
์ปค๋งจ๋์ ์ฌ์ฉํ ์ ์๋ ํ๋๊ทธ๊ฐ ์๋ ๋ช ๊ฐ์ง ์ค๋ธ์ ํธ
ํ๋๊ฐ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ, ์ค๋ธ์ ํธ ์์ฑ ์ ์ ํ๋์ ๋ํ ๊ฐ์
์ ์ํ๊ธฐ ์ํด set
๊ณผ create
์ ์กฐํฉํด์ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ set
์ปค๋งจ๋์ create
์ปค๋งจ๋์ ์ถ๋ ฅ์ ํ์ดํ ํจ์ผ๋ก์จ ์ํํ ์ ์๋ค.
๋ค์์ ๊ด๋ จ ์์ ์ด๋ค.
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run=client | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f -
kubectl create service -o yaml --dry-run=client
์ปค๋งจ๋๋ ์๋น์ค์ ๋ํ ๊ตฌ์ฑ์ ์์ฑํ์ง๋ง, ์ด๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ์ ์ ์กํ๋ ๋์ YAML ํ์์ผ๋ก stdout์ ์ถ๋ ฅํ๋ค.kubectl set selector --local -f - -o yaml
์ปค๋งจ๋๋ stdin์ผ๋ก๋ถํฐ ๊ตฌ์ฑ์ ์ฝ์ด, YAML ํ์์ผ๋ก stdout์ ์ ๋ฐ์ดํธ๋ ๊ตฌ์ฑ์ ๊ธฐ๋กํ๋ค.kubectl create -f -
์ปค๋งจ๋๋ stdin์ ํตํด ์ ๊ณต๋ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
์์ฑ ์ ์ค๋ธ์ ํธ ์์ ์ ์ํด --edit
์ฌ์ฉํ๊ธฐ
์์ฑ ์ ์ ์ค๋ธ์ ํธ์ ์์์ ๋ณ๊ฒฝ์ ๊ฐํ๊ธฐ ์ํด kubectl create --edit
์ ์ฌ์ฉํ ์ ์๋ค.
๋ค์์ ๊ด๋ จ ์์ ์ด๋ค.
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run=client > /tmp/srv.yaml
kubectl create --edit -f /tmp/srv.yaml
kubectl create service
์ปค๋งจ๋๋ ์๋น์ค์ ๋ํ ๊ตฌ์ฑ์ ์์ฑํ๊ณ ์ด๋ฅผ/tmp/srv.yaml
์ ์ ์ฅํ๋ค.kubectl create --edit
์ปค๋งจ๋๋ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํธ์ง์ ์ํด ๊ตฌ์ฑ ํ์ผ์ ์ด์ด์ค๋ค.
๋ค์ ๋ด์ฉ
4 - ๊ตฌ์ฑ ํ์ผ์ ์ด์ฉํ ๋ช ๋ นํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ YAML ๋๋ JSON์ผ๋ก ์์ฑ๋ ์คํ์ ํธ ๊ตฌ์ฑ ํ์ผ๊ณผ ํจ๊ป kubectl
์ปค๋งจ๋ ๋ผ์ธ ํด์ ์ด์ฉํ์ฌ ์์ฑ, ์
๋ฐ์ดํธ ๋ฐ ์ญ์ ํ ์ ์๋ค.
์ด ๋ฌธ์๋ ๊ตฌ์ฑ ํ์ผ์ ์ด์ฉํ์ฌ ์ด๋ป๊ฒ ์ค๋ธ์ ํธ๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌํ ์ ์๋์ง์ ๋ํด ์ค๋ช
ํ๋ค.
์์ํ๊ธฐ ์ ์
kubectl
์ ์ค์นํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
ํธ๋ ์ด๋ ์คํ
kubectl
ํด์ 3๊ฐ์ง ์ข
๋ฅ์ ์ค๋ธ์ ํธ ๊ด๋ฆฌ๋ฅผ ์ง์ํ๋ค.
- ๋ช ๋ นํ ์ปค๋งจ๋
- ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
- ์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
๊ฐ ์ข ๋ฅ๋ณ ์ค๋ธ์ ํธ ๊ด๋ฆฌ์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ํ ๋ ผ์๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ค๋ธ์ ํธ ์์ฑ ๋ฐฉ๋ฒ
๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด kubectl create -f
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ณด๋ค ์์ธํ ์ ๋ณด๋ ์ฟ ๋ฒ๋คํฐ์ค API ์ฐธ์กฐ๋ฅผ
์ฐธ์กฐํ๋ค.
kubectl create -f <ํ์ผ๋ช |url>
์ค๋ธ์ ํธ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ
๊ฒฝ๊ณ :
replace
์ปค๋งจ๋๋ก ์ค๋ธ์ ํธ๋ฅผ ์
๋ฐ์ดํธ ํ๊ฒ๋๋ฉด,
๊ตฌ์ฑ ํ์ผ์ ์ ์๋์ง ์์ ์คํ์ ๋ชจ๋ ๋ถ๋ถ์ด ์ญ์ ๋๋ค. ์ด๋
externalIPs
ํ๋๊ฐ ๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๋
LoadBalancer
ํ์
์ ์๋น์ค์ ๊ฐ์ด, ํด๋ฌ์คํฐ ์ํด ๋ถ๋ถ์ ์ผ๋ก
๊ด๋ฆฌ๋๋ ์คํ์ ์ค๋ธ์ ํธ์ ํจ๊ป ์ฌ์ฉ๋์ด์๋ ์๋๋ค.
๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌ๋๋ ํ๋๋ replace
๋ก ์ญ์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด
๊ตฌ์ฑ ํ์ผ์ ๋ณต์ฌ๋์ด์ ธ์ผ๋ง ํ๋ค.๊ตฌ์ฑ ํ์ผ์ ๋ฐ๋ผ ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํด kubectl replace -f
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
kubectl replace -f <ํ์ผ๋ช |url>
์ค๋ธ์ ํธ ์ญ์ ๋ฐฉ๋ฒ
๊ตฌ์ฑ ํ์ผ์ ์ ์ํ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๊ธฐ ์ํด kubectl delete -f
๋ฅผ
์ฌ์ฉํ ์ ์๋ค.
kubectl delete -f <ํ์ผ๋ช |url>
์ฐธ๊ณ :
๊ตฌ์ฑ ํ์ผ์ด metadata
์น์
์์ name
ํ๋ ๋์ generateName
ํ๋๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ, kubectl delete -f <filename|url>
์ ์ฌ์ฉํ์ฌ
์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ ์ ์๋ค.
์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๋ ค๋ฉด ๋ค๋ฅธ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
kubectl delete <type> <name>
kubectl delete <type> -l <label>
์ค๋ธ์ ํธ ํ์ธ ๋ฐฉ๋ฒ
๊ตฌ์ฑ ํ์ผ์ ์ ์ํ ์ค๋ธ์ ํธ์ ๊ดํ ์ ๋ณด ํ์ธ์ ์ํด kubectl get -f
๋ช
๋ น์ ์ฌ์ฉํ ์ ์๋ค.
kubectl get -f <ํ์ผ๋ช |url> -o yaml
-o yaml
ํ๋๊ทธ๋ ์ ์ฒด ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ด ์ถ๋ ฅ๋๋๋ก ์ ์ํ๋ค. ์ต์
์ ๋ฆฌ์คํธ๋ฅผ ํ์ธํ๊ธฐ
์ํด์๋ kubectl get -h
๋ฅผ ์ฌ์ฉํ๋ค.
์ ์ฝ์ฌํญ
create
, replace
, ๊ทธ๋ฆฌ๊ณ delete
๋ช
๋ น์ ๊ฐ ์ค๋ธ์ ํธ์ ๊ตฌ์ฑ์ด
๊ทธ ๊ตฌ์ฑ ํ์ผ ๋ด์ ์์ ํ๊ฒ ์ ์๋๊ณ ๊ธฐ๋ก๋์ด์ง ๊ฒฝ์ฐ ์ ๋์ํ๋ค.
๊ทธ๋ฌ๋ ํ์ฑ ์ค๋ธ์ ํธ๊ฐ ์
๋ฐ์ดํธ ๋๊ณ , ๊ตฌ์ฑ ํ์ผ ์์ ๋ณํฉ๋์ง ์์ผ๋ฉด,
์
๋ฐ์ดํธ ๋ด์ฉ์ ๋ค์๋ฒ replace
๊ฐ ์คํ๋ ๋ ์ญ์ ๋ ๊ฒ์ด๋ค.
์ด๋ HorizontalPodAutoscaler์ ๊ฐ์ ์ปจํธ๋กค๋ฌ๊ฐ
ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ์ง์ ์ ์ผ๋ก ์
๋ฐ์ดํธํ๋๋ก ํ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
์ฌ๊ธฐ ์์๊ฐ ์๋ค.
- ๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ
- ๋ ๋ค๋ฅธ ์์ค๊ฐ ์ผ๋ถ ํ๋๋ฅผ ๋ณ๊ฒฝํจ์ผ๋ก์จ ์ค๋ธ์ ํธ๊ฐ ์ ๋ฐ์ดํธ ๋๋ ๊ฒฝ์ฐ
- ๊ตฌ์ฑ ํ์ผ๋ก๋ถํฐ ์ค๋ธ์ ํธ๋ฅผ ๋์ฒดํ ๊ฒฝ์ฐ. ์คํ 2์์์ ๋ค๋ฅธ ์์ค์ ์ํด ์ด๋ฃจ์ด์ง ๋ณ๊ฒฝ์ ์ ์ค๋๋ค.
๋์ผ ์ค๋ธ์ ํธ์ ๋ํด ์ฌ๋ฌ ๋ช
์ ์์ฑ์๋ค๋ก๋ถํฐ์ ์ง์์ด ํ์ํ ๊ฒฝ์ฐ, ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด
kubectl apply
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๊ตฌ์ฑ ์ ์ฅ ์์ด URL๋ก๋ถํฐ ์ค๋ธ์ ํธ ์์ฑ๊ณผ ํธ์งํ๊ธฐ
๊ตฌ์ฑ ํ์ผ์ ๋ํ URL์ ๊ฐ์ง๋ค๊ณ ๊ฐ์ ํด๋ณด์.
kubectl create --edit
์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋๊ธฐ ์ ์
๊ตฌ์ฑ์ ๋ณ๊ฒฝํ ์ ์๋ค. ์ด๋ ๋
์๊ฐ ์์ ํ ์ ์๋ ๊ตฌ์ฑ ํ์ผ์
๊ฐ๋ฅดํค๋ ํํ ๋ฆฌ์ผ๊ณผ ์์
์ ํนํ ์ ์ฉํ๋ค.
kubectl create -f <url> --edit
๋ช ๋ นํ ์ปค๋งจ๋์์ ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ผ๋ก ์ ํํ๊ธฐ
๋ นํ ์ปค๋งจ๋์์ ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ผ๋ก ์ ํํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์๋ ๋จ๊ณ๋ฅผ ํฌํจํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ๋ก์ปฌ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ๋ก ๋ด๋ณด๋ธ๋ค.
kubectl get <์ข ๋ฅ>/<์ด๋ฆ> -o yaml > <์ข ๋ฅ>_<์ด๋ฆ>.yaml
์๋์ผ๋ก ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์์ ์ํ ํ๋๋ฅผ ์ ๊ฑฐํ๋ค.
์ดํ ์ค๋ธ์ ํธ ๊ด๋ฆฌ๋ฅผ ์ํด,
replace
๋ง ์ฌ์ฉํ๋ค.kubectl replace -f <์ข ๋ฅ>_<์ด๋ฆ>.yaml
์ปจํธ๋กค๋ฌ ์ ๋ ํฐ์ PodTemplate ๋ ์ด๋ธ ์ญ์ ํ๊ธฐ
๊ฒฝ๊ณ :
์ปจํธ๋กค๋ฌ์์ ์ ๋ ํฐ๋ฅผ ์ ๋ฐ์ดํธํ์ง ์๋๋ก ๊ฐ๋ ฅํ๊ฒ ๊ถ๊ณ ํ๋ค.๊ถ๊ณ ๋๋ ์ ๊ทผ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์๋ฏธ๋ก ์ ์๋ฏธ๊ฐ ์๋ ์ปจํธ๋กค๋ฌ ์ ๋ ํฐ์ ์ํด์๋ง ์ฌ์ฉ๋๋ ๋จ์ผ, ๋ถ๋ณ์ PodTemplate ๋ ์ด๋ธ๋ก ์ ์ํ๋ ๊ฒ์ด๋ค.
๋ ์ด๋ธ ์์:
selector:
matchLabels:
controller-selector: "apps/v1/deployment/nginx"
template:
metadata:
labels:
controller-selector: "apps/v1/deployment/nginx"