์ด ์น์ ์ ๋ค์ค ํ์ด์ง ์ถ๋ ฅ ํ๋ฉด์. ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ํ๋ฆฐํธ.
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ก ์์ ํ๊ธฐ
1 - ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ์ดํดํ๊ธฐ
์ด ํ์ด์ง์์๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค API์์ ์ด๋ป๊ฒ ํํ๋๊ณ , ๊ทธ ์ค๋ธ์ ํธ๋ฅผ
์ด๋ป๊ฒ .yaml
ํ์์ผ๋ก ํํํ ์ ์๋์ง์ ๋ํด ์ค๋ช
ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ์ดํดํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๋ ์ฟ ๋ฒ๋คํฐ์ค ์์คํ ์์ ์์์ฑ์ ๊ฐ์ง๋ ์ค๋ธ์ ํธ์ด๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ด ์ค๋ธ์ ํธ๋ฅผ ์ด์ฉํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด, ๋ค์๊ฐ์ด ๊ธฐ์ ํ ์ ์๋ค.
- ์ด๋ค ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ ์ค์ธ์ง (๊ทธ๋ฆฌ๊ณ ์ด๋ ๋ ธ๋์์ ๋์ ์ค์ธ์ง)
- ๊ทธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด์ฉํ ์ ์๋ ๋ฆฌ์์ค
- ๊ทธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ์ฌ๊ตฌ๋ ์ ์ฑ , ์ ๊ทธ๋ ์ด๋, ๊ทธ๋ฆฌ๊ณ ๋ด๊ณ ์ฅ์ฑ๊ณผ ๊ฐ์ ๊ฒ์ ๋์ํด์ผ ํ๋์ง์ ๋ํ ์ ์ฑ
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ ํ๋์ "์๋๋ฅผ ๋ด์ ๋ ์ฝ๋"์ด๋ค. ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค ์์คํ ์ ๊ทธ ์ค๋ธ์ ํธ ์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ์๋ํ ๊ฒ์ด๋ค. ์ค๋ธ์ ํธ๋ฅผ ์์ฑํจ์ผ๋ก์จ, ์ฌ๋ฌ๋ถ์ด ํด๋ฌ์คํฐ์ ์ํฌ๋ก๋๋ฅผ ์ด๋ค ํํ๋ก ๋ณด์ด๊ณ ์ ํ๋์ง์ ๋ํด ํจ๊ณผ์ ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ์์คํ ์ ์ ํ๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฌ๋ฌ๋ถ์ ํด๋ฌ์คํฐ์ ๋ํด ์๋ํ ์ํ ๊ฐ ๋๋ค.
์์ฑ์ด๋ , ์์ ์ด๋ , ๋๋ ์ญ์ ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ฅผ ๋์์ํค๋ ค๋ฉด,
์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ด์ฉํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด,
kubectl
์ปค๋งจ๋-๋ผ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ๋, CLI๋ ์ฌ๋ฌ๋ถ ๋์ ํ์ํ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ํธ์ถํด ์ค๋ค.
๋ํ, ์ฌ๋ฌ๋ถ์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ฅผ
์ด์ฉํ์ฌ ์ฌ๋ฌ๋ถ๋ง์ ํ๋ก๊ทธ๋จ์์ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ง์ ์ด์ฉํ ์๋ ์๋ค.
์ค๋ธ์ ํธ ๋ช ์ธ(spec)์ ์ํ(status)
๊ฑฐ์ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ ์ค๋ธ์ ํธ์ ๊ตฌ์ฑ์ ๊ฒฐ์ ํด์ฃผ๋
๋ ๊ฐ์ ์ค์ฒฉ๋ ์ค๋ธ์ ํธ ํ๋๋ฅผ ํฌํจํ๋๋ฐ ์ค๋ธ์ ํธ spec
๊ณผ ์ค๋ธ์ ํธ status
์ด๋ค.
spec
์ ๊ฐ์ง ์ค๋ธ์ ํธ๋ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๋ ๋ฆฌ์์ค์
์ํ๋ ํน์ง(์๋ํ ์ํ)์ ๋ํ ์ค๋ช
์
์ ๊ณตํด์ ์ค์ ํ๋ค.
status
๋ ์ฟ ๋ฒ๋คํฐ์ค ์์คํ
๊ณผ ์ปดํฌ๋ํธ์ ์ํด ์ ๊ณต๋๊ณ
์
๋ฐ์ดํธ๋ ์ค๋ธ์ ํธ์ ํ์ฌ ์ํ ๋ฅผ ์ค๋ช
ํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค
์ปจํธ๋กค ํ๋ ์ธ์ ๋ชจ๋ ์ค๋ธ์ ํธ์
์ค์ ์ํ๋ฅผ ์ฌ์ฉ์๊ฐ ์๋ํ ์ํ์ ์ผ์น์ํค๊ธฐ ์ํด ๋์์์ด ๊ทธ๋ฆฌ๊ณ
๋ฅ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
์๋ฅผ ๋ค์ด, ์ฟ ๋ฒ๋คํฐ์ค ๋ํ๋ก์ด๋จผํธ๋ ํด๋ฌ์คํฐ์์ ๋์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํํํด์ค ์ ์๋ ์ค๋ธ์ ํธ์ด๋ค. ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ ๋, ๋ํ๋ก์ด๋จผํธ spec์ 3๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ ํ๋ฆฌ์นด๊ฐ ๋์๋๋๋ก ์ค์ ํ ์ ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค ์์คํ ์ ๊ทธ ๋ํ๋ก์ด๋จผํธ spec์ ์ฝ์ด spec์ ์ผ์น๋๋๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ 3๊ฐ์ ์๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์ค๋ฅผ ๊ตฌ๋์ํจ๋ค. ๋ง์ฝ, ๊ทธ ์ธ์คํด์ค๋ค ์ค ์ด๋ ํ๋๊ฐ ์ด๋ค ๋ฌธ์ ๋ก ์ธํด ๋ฉ์ถ๋ค๋ฉด(์ํ ๋ณํ ๋ฐ์), ์ฟ ๋ฒ๋คํฐ์ค ์์คํ ์ ๋ณด์ (์ด ๊ฒฝ์ฐ์๋ ๋์ฒด ์ธ์คํด์ค๋ฅผ ์์ํ์ฌ)์ ํตํด spec๊ณผ status๊ฐ์ ์ฐจ์ด์ ๋์ํ๋ค.
์ค๋ธ์ ํธ ๋ช ์ธ, ์ํ, ๊ทธ๋ฆฌ๊ณ ๋ฉํ๋ฐ์ดํฐ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋, Kubernetes API Conventions ๋ฅผ ์ฐธ์กฐํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ธฐ์ ํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค์์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๋, (์ด๋ฆ๊ณผ ๊ฐ์)์ค๋ธ์ ํธ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ ๋ณด์ ๋๋ถ์ด,
์๋ํ ์ํ๋ฅผ ๊ธฐ์ ํ ์ค๋ธ์ ํธ spec์ ์ ์ํด ์ค์ผ๋ง ํ๋ค. ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด
(์ง์ ์ด๋ ๋๋ kubectl
์ ํตํด์๋ ) ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ด์ฉํ ๋, API ์์ฒญ์ ์์ฒญ ๋ด์ฉ ์์
JSON ํ์์ผ๋ก ์ ๋ณด๋ฅผ ํฌํจ์์ผ ์ค์ผ๋ง ํ๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ ๋ณด๋ฅผ .yaml ํ์ผ๋ก kubectl
์
์ ๊ณตํ๋ค. kubectl
์ API ์์ฒญ์ด ์ด๋ฃจ์ด์ง ๋, JSON ํ์์ผ๋ก ์ ๋ณด๋ฅผ
๋ณํ์์ผ ์ค๋ค.
์ฌ๊ธฐ ์ฟ ๋ฒ๋คํฐ์ค ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ํ ํ์ ํ๋์ ์ค๋ธ์ ํธ spec์ ๋ณด์ฌ์ฃผ๋ .yaml
ํ์ผ ์์๊ฐ ์๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
์ ์์์ ๊ฐ์ด .yaml ํ์ผ์ ์ด์ฉํ์ฌ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ํ๋์ ๋ฐฉ์์ผ๋ก๋
kubectl
์ปค๋งจ๋-๋ผ์ธ ์ธํฐํ์ด์ค์ ์ธ์๊ฐ์ผ๋ก .yaml
ํ์ผ์ ๊ฑด๋ค
kubectl apply
์ปค๋งจ๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค. ๋ค์ ์์์ ๊ฐ๋ค.
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
๊ทธ ์ถ๋ ฅ ๋ด์ฉ์ ๋ค์๊ณผ ์ ์ฌํ๋ค.
deployment.apps/nginx-deployment created
์๊ตฌ๋๋ ํ๋
์์ฑํ๊ณ ์ ํ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ๋ํ .yaml
ํ์ผ ๋ด, ๋ค์ ํ๋๋ฅผ ์ํ ๊ฐ๋ค์ ์ค์ ํด ์ค์ผํ๋ค.
apiVersion
- ์ด ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๊ณ ์๋ ์ฟ ๋ฒ๋คํฐ์ค API ๋ฒ์ ์ด ์ด๋ค ๊ฒ์ธ์งkind
- ์ด๋ค ์ข ๋ฅ์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ์ ํ๋์งmetadata
-์ด๋ฆ
๋ฌธ์์ด,UID
, ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ธ๋ค์์คํ์ด์ค
๋ฅผ ํฌํจํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์ ์ผํ๊ฒ ๊ตฌ๋ถ์ง์ด ์ค ๋ฐ์ดํฐspec
- ์ค๋ธ์ ํธ์ ๋ํด ์ด๋ค ์ํ๋ฅผ ์๋ํ๋์ง
์ค๋ธ์ ํธ spec
์ ๋ํ ์ ํํ ํฌ๋งท์ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ง๋ค ๋ค๋ฅด๊ณ , ๊ทธ ์ค๋ธ์ ํธ ํน์ ์
์ค์ฒฉ๋ ํ๋๋ฅผ ํฌํจํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค API ๋ ํผ๋ฐ์ค ๋
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ์ ์๋ ์ค๋ธ์ ํธ์ ๋ํ ๋ชจ๋ spec ํฌ๋งท์ ์ดํด๋ณผ ์ ์๋๋ก ํด์ค๋ค.
์๋ฅผ ๋ค์ด, ํ๋ API ๋ ํผ๋ฐ์ค๋ฅผ ๋ณด๋ ค๋ฉด
spec
ํ๋๋ฅผ ์ฐธ์กฐํ๋ค.
๊ฐ ํ๋์ ๋ํด, .spec
ํ๋๋ ํ๋ ๋ฐ ํ๋์ ์ํ๋ ์ํ(desired state)๋ฅผ
๊ธฐ์ ํ๋ค(์: ํ๋์ ๊ฐ ์ปจํ
์ด๋์ ๋ํ ์ปจํ
์ด๋ ์ด๋ฏธ์ง).
์ค๋ธ์ ํธ ์์ธ์ ๋ํ ๋ ๋ค๋ฅธ ์์๋ ์คํ
์ดํธํ์
API์
spec
ํ๋์ด๋ค.
์คํ
์ดํธํ์
์ ๊ฒฝ์ฐ, .spec
ํ๋๋ ์คํ
์ดํธํ์
๋ฐ ์คํ
์ดํธํ์
์ ์ํ๋ ์ํ(desired state)๋ฅผ ๊ธฐ์ ํ๋ค.
์คํ
์ดํธํ์
์ .spec
์๋ ํ๋ ์ค๋ธ์ ํธ์ ๋ํ
ํ
ํ๋ฆฟ์ด ์กด์ฌํ๋ค.
์ด ํ
ํ๋ฆฟ์ ์คํ
์ดํธํ์
๋ช
์ธ๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด
์คํ
์ดํธํ์
์ปจํธ๋กค๋ฌ๊ฐ ์์ฑํ ํ๋์ ๋ํ ์์ธ ์ฌํญ์ ์ค๋ช
ํ๋ค.
์๋ก ๋ค๋ฅธ ์ข
๋ฅ์ ์ค๋ธ์ ํธ๋ ์๋ก ๋ค๋ฅธ .status
๋ฅผ ๊ฐ์ง ์ ์๋ค.
๋ค์ ํ๋ฒ ๋งํ์๋ฉด, ๊ฐ API ๋ ํผ๋ฐ์ค ํ์ด์ง๋ ๊ฐ ์ค๋ธ์ ํธ ํ์
์ ๋ํด ํด๋น .status
ํ๋์ ๊ตฌ์กฐ์ ๋ด์ฉ์ ๋ํด ์๊ฐํ๋ค.
๋ค์ ๋ด์ฉ
- ํ๋์ ๊ฐ์ด, ๊ฐ์ฅ ์ค์ํ๊ณ ๊ธฐ๋ณธ์ ์ธ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ๋ํด ๋ฐฐ์ด๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค์ ์ปจํธ๋กค๋ฌ์ ๋ํด ๋ฐฐ์ด๋ค.
- API ๊ฐ๋ ์ ๋ ๋ง์ ์ค๋ช ์ ์ฟ ๋ฒ๋คํฐ์ค API ์ฌ์ฉ์ ๋ณธ๋ค.
2 - ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ
kubectl
์ปค๋งจ๋๋ผ์ธ ํด์ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ
๋ช ๊ฐ์ง ์์ดํ ๋ฐฉ๋ฒ์ ์ง์ํ๋ค. ์ด ๋ฌธ์๋ ์ฌ๋ฌ๊ฐ์ง ์ ๊ทผ๋ฒ์ ๋ํ ๊ฐ์๋ฅผ
์ ๊ณตํ๋ค. Kubectl๋ก ์ค๋ธ์ ํธ ๊ด๋ฆฌํ๊ธฐ์ ๋ํ ์์ธํ ์ค๋ช
์
Kubectl ์์ ์์ ํ์ธํ๋ค.
๊ด๋ฆฌ ๊ธฐ๋ฒ
๊ฒฝ๊ณ :
์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ ํ๋์ ๊ธฐ๋ฒ๋ง ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํด์ผ ํ๋ค. ๋์ผํ ์ค๋ธ์ ํธ์ ๋ํด ์ฌ๋ฌ ๊ธฐ๋ฒ์ ํผ์ฉํ๋ ๊ฒ์ ์์์น ๋ชปํ ๋์์ ์ด๋ํ๊ฒ ๋๋ค.๊ด๋ฆฌ๊ธฐ๋ฒ | ๋์ | ๊ถ์ฅ ํ๊ฒฝ | ์ง์ํ๋ ์์ ์ ์ | ํ์ต ๋์ด๋ |
---|---|---|---|---|
๋ช ๋ นํ ์ปค๋งจ๋ | ํ์ฑ ์ค๋ธ์ ํธ | ๊ฐ๋ฐ ํ๊ฒฝ | 1+ | ๋ฎ์ |
๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ | ๊ฐ๋ณ ํ์ผ | ํ๋ก๋์ ํ๊ฒฝ | 1 | ๋ณดํต |
์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ | ํ์ผ์ด ์๋ ๋๋ ํฐ๋ฆฌ | ํ๋ก๋์ ํ๊ฒฝ | 1+ | ๋์ |
๋ช ๋ นํ ์ปค๋งจ๋
๋ช
๋ นํ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฌ์ฉ์๋ ํด๋ฌ์คํฐ ๋ด ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ๋์์ผ๋ก
์ง์ ๋์์ํจ๋ค. ์ฌ์ฉ์๋ ์คํํ ์์
์ ์ธ์ ๋๋ ํ๋๊ทธ๋ก kubectl
์ปค๋งจ๋์
์ง์ ํ๋ค.
์ด๊ฒ์ ํด๋ฌ์คํฐ์์ ์ผํ์ฑ ์์ ์ ๊ฐ์์ํค๊ฑฐ๋ ๋์์ํค๊ธฐ ์ํ ์ถ์ฒ ๋ฐฉ๋ฒ์ด๋ค. ์ด ๊ธฐ๋ฒ์ ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ ๋์์ผ๋ก ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์, ์ด์ ๊ตฌ์ฑ์ ๋ํ ์ด๋ ฅ์ ์ ๊ณตํด ์ฃผ์ง ์๋๋ค.
์์
๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ์ฌ nginx ์ปจํ ์ด๋์ ์ธ์คํด์ค๋ฅผ ๊ตฌ๋์ํจ๋ค.
kubectl create deployment nginx --image nginx
ํธ๋ ์ด๋ ์คํ
์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋นํด ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ปค๋งจ๋๋ ํ๋์ ๋์์ ๋ํ๋ด๋ ๋จ์ด๋ก ํํ๋๋ค.
- ์ปค๋งจ๋๋ ํด๋ฌ์คํฐ๋ฅผ ์์ ํ๊ธฐ ์ํด ๋จ ํ๋์ ๋จ๊ณ๋ง์ ํ์๋ก ํ๋ค.
์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋นํด ๋จ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ปค๋งจ๋๋ ๋ณ๊ฒฝ ๊ฒํ ํ๋ก์ธ์ค์ ํตํฉ๋์ง ์๋๋ค.
- ์ปค๋งจ๋๋ ๋ณ๊ฒฝ์ ๊ดํ ๊ฐ์ฌ ์ถ์ (audit trail)์ ์ ๊ณตํ์ง ์๋๋ค.
- ์ปค๋งจ๋๋ ํ์ฑ ๋์ ์ค์ธ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ๋ ์ฝ๋์ ์์ค๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
- ์ปค๋งจ๋๋ ์๋ก์ด ์ค๋ธ์ ํธ ์์ฑ์ ์ํ ํ ํ๋ฆฟ์ ์ ๊ณตํ์ง ์๋๋ค.
๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์์๋ kubectl ์ปค๋งจ๋๋ก ์์ (์์ฑ, ๊ต์ฒด ๋ฑ), ์ ํ์ ํ๋๊ทธ, ๊ทธ๋ฆฌ๊ณ ์ต์ ํ๋์ ํ์ผ ์ด๋ฆ์ ์ง์ ํ๋ค. ๊ทธ ํ์ผ์ YAML ๋๋ JSON ํ์์ผ๋ก ์ค๋ธ์ ํธ์ ์์ ํ ์ ์๋ฅผ ํฌํจํด์ผ๋ง ํ๋ค.
์ค๋ธ์ ํธ ์ ์์ ๋ํ ๋ ์์ธํ ๋ด์ฉ์ API ์ฐธ์กฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.
๊ฒฝ๊ณ :
๋ช ๋ นํreplace
์ปค๋งจ๋๋ ๊ธฐ์กด spec์ ์๋ก ์ ๊ณต๋ spec์ผ๋ก ๋ฐ๊พธ๊ณ
๊ตฌ์ฑ ํ์ผ์์ ๋๋ฝ๋ ์ค๋ธ์ ํธ์ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ญ์ ํ๋ค.
์ด ๋ฐฉ๋ฒ์ spec์ด ๊ตฌ์ฑ ํ์ผ๊ณผ๋ ๋ณ๊ฐ๋ก ์
๋ฐ์ดํธ๋๋ ๋ฆฌ์์ค ์ ํ์๋
์ฌ์ฉํ์ง ๋ง์์ผํ๋ค.
์๋ฅผ ๋ค์ด LoadBalancer
์ ํ์ ์๋น์ค๋ ํด๋ฌ์คํฐ์ ๊ตฌ์ฑ๊ณผ ๋ณ๋๋ก
externalIPs
ํ๋๊ฐ ์
๋ฐ์ดํธ๋๋ค.์์
๊ตฌ์ฑ ํ์ผ์ ์ ์๋ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
kubectl create -f nginx.yaml
๋ ๊ฐ์ ๊ตฌ์ฑ ํ์ผ์ ์ ์๋ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๋ค.
kubectl delete -f nginx.yaml -f redis.yaml
ํ์ฑ ๋์ํ๋ ๊ตฌ์ฑ์ ๋ฎ์ด์์ผ๋ก์จ ๊ตฌ์ฑ ํ์ผ์ ์ ์๋ ์ค๋ธ์ ํธ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
kubectl replace -f nginx.yaml
ํธ๋ ์ด๋ ์คํ
๋ช ๋ นํ ์ปค๋งจ๋์ ๋นํด ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ Git๊ณผ ๊ฐ์ ์์ค ์ปจํธ๋กค ์์คํ ์ ๋ณด๊ดํ ์ ์๋ค.
- ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ํธ์์ ๊ฐ์ฌ ์ถ์ ์ ์ ๋ณ๊ฒฝ์ฌํญ์ ๊ฒํ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ํ๋ก์ธ์ค๋ค๊ณผ ํตํฉํ ์ ์๋ค.
- ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ์๋ก์ด ์ค๋ธ์ ํธ ์์ฑ์ ์ํ ํ ํ๋ฆฟ์ ์ ๊ณตํ๋ค.
๋ช ๋ นํ ์ปค๋งจ๋์ ๋นํด ๋จ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ์ค๋ธ์ ํธ ์คํค๋ง์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด๋ฅผ ํ์๋ก ํ๋ค.
- ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ YAML ํ์ผ์ ๊ธฐ๋กํ๋ ์ถ๊ฐ์ ์ธ ๊ณผ์ ์ ํ์๋ก ํ๋ค.
์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋นํด ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋์์ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ์ดํดํ๊ธฐ ์ฝ๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค ๋ฒ์ 1.5 ๋ถํฐ๋ ๋ ์ฑ์ํ ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ์ ๊ณตํ๋ค.
์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋นํด ๋จ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋, ํ์ผ์ ๊ฐ์ฅ ์ ํฉํ๋ค.
- ํ์ฑ ์ค๋ธ์ ํธ์ ๋ํ ์ ๋ฐ์ดํธ๋ ๊ตฌ์ฑ ํ์ผ์ ๋ฐ์๋์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค์ ๊ต์ฒด ์ค์ ์์ค๋๋ค.
์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ
์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฌ์ฉ์๋ ๋ก์ปฌ์ ๋ณด๊ด๋ ์ค๋ธ์ ํธ
๊ตฌ์ฑ ํ์ผ์ ๋์์ผ๋ก ์๋์ํค์ง๋ง, ์ฌ์ฉ์๋ ํ์ผ์์ ์ํ ํ
์์
์ ์ ์ํ์ง ์๋๋ค. ์์ฑ, ์
๋ฐ์ดํธ, ๊ทธ๋ฆฌ๊ณ ์ญ์ ์์
์
kubectl
์ ์ํด ์ค๋ธ์ ํธ๋ง๋ค ์๋์ผ๋ก ๊ฐ์ง๋๋ค. ์ด๋ฅผ ํตํด ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ๋ํด
๋ค๋ฅธ ์กฐ์์ด ํ์ํ ์ ์๋ ๋๋ ํฐ๋ฆฌ์์ ์์
ํ ์ ์๋ค.
์ฐธ๊ณ :
์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ๋ค์ ๋ณํฉ๋์ง ์๋๋ผ๋ ๋ค๋ฅธ ์์ฑ์๊ฐ ์์ฑํ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์งํ๋ค. ์ด๊ฒ์ ์ ์ฒด ์ค๋ธ์ ํธ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ํreplace
API๋ฅผ
์ฌ์ฉํ๋ ๋์ , patch
API๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ง๋๋ ์ฐจ์ด๋ง
์์ฑํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.์์
configs
๋๋ ํฐ๋ฆฌ ๋ด ๋ชจ๋ ์ค๋ธ์ ํธ ๊ตฌ์ฑ ํ์ผ์ ์ฒ๋ฆฌํ๊ณ ํ์ฑ ์ค๋ธ์ ํธ๋ฅผ
์์ฑ ๋๋ ํจ์นํ๋ค. ๋จผ์ ์ด๋ ํ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋ ์ง ์์๋ณด๊ธฐ ์ํด diff
ํ๊ณ ๋์ ์ ์ฉํ ์ ์๋ค.
kubectl diff -f configs/
kubectl apply -f configs/
์ฌ๊ท์ ์ผ๋ก ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ค.
kubectl diff -R -f configs/
kubectl apply -R -f configs/
ํธ๋ ์ด๋ ์คํ
๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋นํด ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ฑ ์ค๋ธ์ ํธ์ ์ง์ ์์ฑ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ตฌ์ฑ ํ์ผ๋ก ๋ค์ ๋ณํฉ๋์ง ์๋๋ผ๋ ์ ์ง๋๋ค.
- ์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋๋ ํฐ๋ฆฌ์์์ ์์ ๋ฐ ์ค๋ธ์ ํธ ๋ณ ์์ ์ ํ(์์ฑ, ํจ์น, ์ญ์ )์ ์๋ ๊ฐ์ง์ ๋ ๋์ ์ง์์ ์ ๊ณตํ๋ค.
๋ช ๋ นํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ๋นํด ๋จ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ ์ธํ ์ค๋ธ์ ํธ ๊ตฌ์ฑ์ ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ๋๋ฒ๊น ํ๊ณ ์ดํดํ๊ธฐ๊ฐ ๋ ์ด๋ ต๋ค.
- diff๋ฅผ ์ฌ์ฉํ ๋ถ๋ถ ์ ๋ฐ์ดํธ๋ ๋ณต์กํ ๋ณํฉ ๋ฐ ํจ์น ์์ ์ ์ผ์ผํจ๋ค.
๋ค์ ๋ด์ฉ
- ๋ช ๋ นํ ์ปค๋งจ๋๋ฅผ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌํ๊ธฐ
- ๊ตฌ์ฑํ์ผ์ ์ด์ฉํ ๋ช ๋ นํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ๊ด๋ฆฌ
- ๊ตฌ์ฑ ํ์ผ์ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ ์ธํ ๊ด๋ฆฌ
- Kustomize๋ฅผ ์ด์ฉํ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ์ ์ธํ ๊ด๋ฆฌ
- Kubectl ์ปค๋งจ๋ ์ฐธ์กฐ
- Kubectl ์์
- ์ฟ ๋ฒ๋คํฐ์ค API ์ฐธ์กฐ
3 - ์ค๋ธ์ ํธ ์ด๋ฆ๊ณผ ID
ํด๋ฌ์คํฐ์ ๊ฐ ์ค๋ธ์ ํธ๋ ํด๋น ์ ํ์ ๋ฆฌ์์ค์ ๋ํ์ฌ ๊ณ ์ ํ ์ด๋ฆ ์ ๊ฐ์ง๊ณ ์๋ค. ๋ํ, ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ ์ ์ฒด ํด๋ฌ์คํฐ์ ๊ฑธ์ณ ๊ณ ์ ํ UID ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ฆ์ด myapp-1234
์ธ ํ๋๋ ๋์ผํ ๋ค์์คํ์ด์ค ๋ด์์ ํ๋๋ง ์กด์ฌํ ์ ์์ง๋ง, ์ด๋ฆ์ด myapp-1234
์ธ ํ๋์ ๋ํ๋ก์ด๋จผํธ๋ ๊ฐ๊ฐ ์กด์ฌํ ์ ์๋ค.
์ ์ผํ์ง ์์ ์ฌ์ฉ์ ์ ๊ณต ์์ฑ์ ๊ฒฝ์ฐ ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ ์ด๋ธ๊ณผ ์ด๋ ธํ ์ด์ ์ ์ ๊ณตํ๋ค.
์ด๋ฆ
/api/v1/pods/some-name
๊ณผ ๊ฐ์ด, ๋ฆฌ์์ค URL์์ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ํด๋ผ์ด์ธํธ ์ ๊ณต ๋ฌธ์์ด.
ํน์ ์์ ์ ๊ฐ์ ์ข ๋ฅ(kind) ๋ด์์๋ ํ๋์ ์ด๋ฆ์ ํ๋์ ์ค๋ธ์ ํธ์๋ง ์ง์ ๋ ์ ์๋ค. ํ์ง๋ง, ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ, ์ญ์ ๋ ์ค๋ธ์ ํธ์ ๊ฐ์ ์ด๋ฆ์ ์๋ก์ด ์ค๋ธ์ ํธ์ ์ง์ ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ :
๋ฌผ๋ฆฌ์ ํธ์คํธ๋ฅผ ๋ํ๋ด๋ ๋ ธ๋์ ๊ฐ์ด ์ค๋ธ์ ํธ๊ฐ ๋ฌผ๋ฆฌ์ ์ํฐํฐ๋ฅผ ๋ํ๋ด๋ ๊ฒฝ์ฐ, ๋ ธ๋๋ฅผ ์ญ์ ํ ํ ๋ค์ ์์ฑํ์ง ์์ ์ฑ ๋์ผํ ์ด๋ฆ์ผ๋ก ํธ์คํธ๋ฅผ ๋ค์ ์์ฑํ๋ฉด, ์ฟ ๋ฒ๋คํฐ์ค๋ ์ ํธ์คํธ๋ฅผ ๋ถ์ผ์น๋ก ์ด์ด์ง ์ ์๋ ์ด์ ํธ์คํธ๋ก ์ทจ๊ธํ๋ค.๋ค์์ ๋ฆฌ์์ค์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ค ๊ฐ์ง ์ ํ์ ์ด๋ฆ ์ ํ ์กฐ๊ฑด์ด๋ค.
DNS ์๋ธ๋๋ฉ์ธ ์ด๋ฆ
๋๋ถ๋ถ์ ๋ฆฌ์์ค ์ ํ์๋ RFC 1123์ ์ ์๋ ๋๋ก DNS ์๋ธ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ด๋ฆ์ด ํ์ํ๋ค. ์ด๊ฒ์ ์ด๋ฆ์ด ๋ค์์ ์ถฉ์กฑํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- 253์๋ฅผ ๋์ง ๋ง์์ผ ํ๋ค.
- ์๋ฌธ์์ ์์ซ์
-
๋๋.
๋ง ํฌํจํ๋ค. - ์์ซ์๋ก ์์ํ๋ค.
- ์์ซ์๋ก ๋๋๋ค.
RFC 1123 ๋ ์ด๋ธ ์ด๋ฆ
์ผ๋ถ ๋ฆฌ์์ค ์ ํ์ RFC 1123์ ์ ์๋ ๋๋ก DNS ๋ ์ด๋ธ ํ์ค์ ๋ฐ๋ผ์ผ ํ๋ค. ์ด๊ฒ์ ์ด๋ฆ์ด ๋ค์์ ์ถฉ์กฑํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ต๋ 63์์ด๋ค.
- ์๋ฌธ์์ ์์ซ์ ๋๋
-
๋ง ํฌํจํ๋ค. - ์์ซ์๋ก ์์ํ๋ค.
- ์์ซ์๋ก ๋๋๋ค.
RFC 1035 ๋ ์ด๋ธ ์ด๋ฆ
๋ช๋ช ๋ฆฌ์์ค ํ์ ์ ์์ ์ ์ด๋ฆ์ RFC 1035์ ์ ์๋ DNS ๋ ์ด๋ธ ํ์ค์ ๋ฐ๋ฅด๋๋ก ์๊ตฌํ๋ค. ์ด๊ฒ์ ์ด๋ฆ์ด ๋ค์์ ๋ง์กฑํด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค.
- ์ต๋ 63๊ฐ ๋ฌธ์๋ฅผ ํฌํจ
- ์๋ฌธ์ ์์ซ์ ๋๋ '-'๋ง ํฌํจ
- ์ํ๋ฒณ ๋ฌธ์๋ก ์์
- ์์ซ์๋ก ๋๋จ
๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ ์ด๋ฆ
์ผ๋ถ ๋ฆฌ์์ค ์ ํ์์๋ ์ด๋ฆ์ ๊ฒฝ๋ก ์ธ๊ทธ๋จผํธ๋ก ์์ ํ๊ฒ ์ธ์ฝ๋ฉ ํ ์ ์์ด์ผ ํ๋ค. ์ฆ ์ด๋ฆ์ด "." ๋๋ ".."์ด ์๋ ์ ์์ผ๋ฉฐ ์ด๋ฆ์๋ "/" ๋๋ "%"๊ฐ ํฌํจ๋ ์ ์๋ค.
์๋๋ ํ๋์ ์ด๋ฆ์ด nginx-demo
๋ผ๋ ๋งค๋ํ์คํธ ์์์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
์ฐธ๊ณ :
์ผ๋ถ ๋ฆฌ์์ค ์ ํ์ ์ด๋ฆ์ ์ถ๊ฐ์ ์ธ ์ ์ฝ์ด ์๋ค.UID
์ค๋ธ์ ํธ๋ฅผ ์ค๋ณต ์์ด ์๋ณํ๊ธฐ ์ํด ์ฟ ๋ฒ๋คํฐ์ค ์์คํ ์ด ์์ฑํ๋ ๋ฌธ์์ด.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ๊ตฌ๋๋๋ ์ ์ฒด ์๊ฐ์ ๊ฑธ์ณ ์์ฑ๋๋ ๋ชจ๋ ์ค๋ธ์ ํธ๋ ์๋ก ๊ตฌ๋ถ๋๋ UID๋ฅผ ๊ฐ๋๋ค. ์ด๋ ๊ธฐ๋ก์ ์ ์ฌํ ์ค๋ธ์ ํธ์ ์ถํ์ ์๋ก ๊ตฌ๋ถํ๊ธฐ ์ํจ์ด๋ค.
์ฟ ๋ฒ๋คํฐ์ค UID๋ ๋ณดํธ์ ์ผ๋ก ๊ณ ์ ํ ์๋ณ์์ด๋ค(๋๋ UUID๋ผ๊ณ ํ๋ค). UUID๋ ISO/IEC 9834-8 ๊ณผ ITU-T X.667 ๋ก ํ์คํ ๋์ด ์๋ค.
๋ค์ ๋ด์ฉ
- ์ฟ ๋ฒ๋คํฐ์ค์ ๋ ์ด๋ธ๊ณผ ์ด๋ ธํ ์ด์ ์ ๋ํด ์ฝ๊ธฐ.
- ์ฟ ๋ฒ๋คํฐ์ค์ ์๋ณ์์ ์ด๋ฆ ๋์์ธ ๋ฌธ์ ์ฝ๊ธฐ.
4 - ๋ ์ด๋ธ๊ณผ ์ ๋ ํฐ
๋ ์ด๋ธ ์ ํ๋์ ๊ฐ์ ์ค๋ธ์ ํธ์ ์ฒจ๋ถ๋ ํค์ ๊ฐ์ ์์ด๋ค. ๋ ์ด๋ธ์ ์ค๋ธ์ ํธ์ ํน์ฑ์ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋์ด ์ฌ์ฉ์์๊ฒ ์ค์ํ์ง๋ง, ์ฝ์ด ์์คํ ์ ์ง์ ์ ์ธ ์๋ฏธ๋ ์๋ค. ๋ ์ด๋ธ๋ก ์ค๋ธ์ ํธ์ ํ์ ์งํฉ์ ์ ํํ๊ณ , ๊ตฌ์ฑํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค. ๋ ์ด๋ธ์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ๋์ ๋ถ์ด๊ฑฐ๋ ์์ฑ ์ดํ์ ๋ถ์ด๊ฑฐ๋ ์ธ์ ๋ ์ง ์์ ์ด ๊ฐ๋ฅํ๋ค. ์ค๋ธ์ ํธ๋ง๋ค ํค์ ๊ฐ์ผ๋ก ๋ ์ด๋ธ์ ์ ์ํ ์ ์๋ค. ์ค๋ธ์ ํธ์ ํค๋ ๊ณ ์ ํ ๊ฐ์ด์ด์ผ ํ๋ค.
"metadata": {
"labels": {
"key1" : "value1",
"key2" : "value2"
}
}
๋ ์ด๋ธ์ UI์ CLI์์ ํจ์จ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ๊ฒ์์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ๋ค. ์๋ณ๋์ง ์๋ ์ ๋ณด๋ ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ธฐ๋กํด์ผ ํ๋ค.
์ฌ์ฉ ๋๊ธฐ
๋ ์ด๋ธ์ ์ด์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๋์จํ๊ฒ ๊ฒฐํฉํ ๋ฐฉ์์ผ๋ก ์กฐ์ง ๊ตฌ์กฐ์ ์์คํ ์ค๋ธ์ ํธ๋ฅผ ๋งคํํ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ๋งคํ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๋ค.
์๋น์ค ๋ฐฐํฌ์ ๋ฐฐ์น ํ๋ก์ธ์ฑ ํ์ดํ๋ผ์ธ์ ํํ ๋ค์ฐจ์์ ์ํฐํฐ๋ค์ด๋ค(์: ๋ค์ค ํํฐ์ ๋๋ ๋ฐฐํฌ, ๋ค์ค ๋ฆด๋ฆฌ์ค ํธ๋, ๋ค์ค ๊ณ์ธต, ๊ณ์ธต ์ ์ฌ๋ฌ ๋ง์ดํฌ๋ก ์๋น์ค๋ค). ๊ด๋ฆฌ์๋ ํฌ๋ก์ค-์ปคํ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ด ์์ ์ ์ฌ์ฉ์๋ณด๋ค๋ ์ธํ๋ผ์ ์ํด ๊ฒฐ์ ๋ ์๊ฒฉํ ๊ณ์ธต ํํ์ธ ์บก์ํ๋ฅผ ๊นจํธ๋ฆฐ๋ค.
๋ ์ด๋ธ ์์:
"release" : "stable"
,"release" : "canary"
"environment" : "dev"
,"environment" : "qa"
,"environment" : "production"
"tier" : "frontend"
,"tier" : "backend"
,"tier" : "cache"
"partition" : "customerA"
,"partition" : "customerB"
"track" : "daily"
,"track" : "weekly"
์ด ์์๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ ์ด๋ธ์ด๋ฉฐ, ์ฌ์ฉ์๋ ์์ ๋ง์ ๊ท์น(convention)์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ๊ฐ๋ฐํ ์ ์๋ค. ์ค๋ธ์ ํธ์ ๋ถ์ฌ์ง ๋ ์ด๋ธ ํค๋ ๊ณ ์ ํด์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํ๋ค.
๊ตฌ๋ฌธ๊ณผ ์บ๋ฆญํฐ ์
๋ ์ด๋ธ ์ ํค์ ๊ฐ์ ์์ด๋ค. ์ ํจํ ๋ ์ด๋ธ ํค์๋ ์ฌ๋์(/
)๋ก ๊ตฌ๋ถ๋๋ ์ ํํ ์ ๋์ฌ์ ์ด๋ฆ์ด๋ผ๋ 2๊ฐ์ ์ธ๊ทธ๋จผํธ๊ฐ ์๋ค. ์ด๋ฆ ์ธ๊ทธ๋จผํธ๋ 63์ ๋ฏธ๋ง์ผ๋ก ์์๊ณผ ๋์ ์ํ๋ฒณ๊ณผ ์ซ์([a-z0-9A-Z]
)์ด๋ฉฐ, ๋์(-
), ๋ฐ์ค(_
), ์ (.
)๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค. ์ ๋์ฌ๋ ์ ํ์ด๋ค. ๋ง์ฝ ์ ๋์ฌ๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ ์ ๋์ฌ๋ DNS์ ํ์ ๋๋ฉ์ธ์ผ๋ก ํด์ผ ํ๋ฉฐ, ์ (.
)๊ณผ ์ ์ฒด 253์ ์ดํ, ์ฌ๋์(/
)๋ก ๊ตฌ๋ถ๋๋ DNS ๋ ์ด๋ธ์ด๋ค.
์ ๋์ฌ๋ฅผ ์๋ตํ๋ฉด ํค ๋ ์ด๋ธ์ ๊ฐ์ธ์ฉ์ผ๋ก ๊ฐ์ฃผํ๋ค. ์ต์ข
์ฌ์ฉ์์ ์ค๋ธ์ ํธ์ ์๋ํ๋ ์์คํ
์ปดํฌ๋ํธ(์: kube-scheduler
, kube-controller-manager
, kube-apiserver
, kubectl
๋๋ ๋ค๋ฅธ ํ์ฌ์ ์๋ํ ๊ตฌ์ฑ ์์)์ ์ ๋์ฌ๋ฅผ ์ง์ ํด์ผ ํ๋ค.
kubernetes.io/
์ k8s.io/
์ ๋์ฌ๋ ์ฟ ๋ฒ๋คํฐ์ค์ ํต์ฌ ์ปดํฌ๋ํธ๋ก ์์ฝ๋์ด ์๋ค.
์ ํจํ ๋ ์ด๋ธ ๊ฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
- 63 ์ ์ดํ์ฌ์ผ ํ๊ณ (๊ณต๋ฐฑ์ผ ์๋ ์์),
- (๊ณต๋ฐฑ์ด ์๋๋ผ๋ฉด) ์์๊ณผ ๋์ ์ํ๋ฒณ๊ณผ ์ซ์(
[a-z0-9A-Z]
)์ด๋ฉฐ, - ์ํ๋ฒณ๊ณผ ์ซ์, ๋์(
-
), ๋ฐ์ค(_
), ์ (.
)์ ์ค๊ฐ์ ํฌํจํ ์ ์๋ค.
๋ค์์ ์์๋ ํ๋์ environment: production
๊ณผ app: nginx
2๊ฐ์ ๋ ์ด๋ธ์ด ์๋ ๊ตฌ์ฑ ํ์ผ์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: label-demo
labels:
environment: production
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
๋ ์ด๋ธ ์ ๋ ํฐ
์ด๋ฆ๊ณผ UID์ ๋ค๋ฅด๊ฒ ๋ ์ด๋ธ์ ๊ณ ์ ํ์ง ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ง์ ์ค๋ธ์ ํธ์ ๊ฐ์ ๋ ์ด๋ธ์ ๊ฐ์ง ๊ฒ์ผ๋ก ์์ํ๋ค.
๋ ์ด๋ธ ์ ๋ ํฐ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์ฌ์ฉ์๋ ์ค๋ธ์ ํธ๋ฅผ ์๋ณํ ์ ์๋ค. ๋ ์ด๋ธ ์ ๋ ํฐ๋ ์ฟ ๋ฒ๋คํฐ์ค ์ฝ์ด ๊ทธ๋ฃน์ ๊ธฐ๋ณธ์ด๋ค.
API๋ ํ์ฌ ์ผ์น์ฑ ๊ธฐ์ค ๊ณผ ์งํฉ์ฑ ๊ธฐ์ค ์ด๋ผ๋ ๋ ์ข
๋ฅ์ ์
๋ ํฐ๋ฅผ ์ง์ํ๋ค.
๋ ์ด๋ธ ์
๋ ํฐ๋ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ค์ํ ์๊ตฌ์ฌํญ ์ ๋ฐ๋ผ ๋ง๋ค ์ ์๋ค. ๋ค์ํ ์๊ตฌ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ ์ผํ ๊ธฐํธ๊ฐ AND(&&
) ์ฐ์ฐ์๋ก ๊ตฌ๋ถ๋๋ ์ญํ ์ ํ๋๋ก ํด์ผ ํ๋ค.
๋น์ด์๊ฑฐ๋ ์ง์ ๋์ง ์์ ์ ๋ ํฐ๋ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ์ ๋ ํฐ๋ฅผ ์ฌ์ฉํ๋ API ์ ํ์ ์ ํจ์ฑ๊ณผ ์๋ฏธ๋ฅผ ๋ฌธ์ํํด์ผ ํ๋ค.
์ฐธ๊ณ :
๋ ํ๋ฆฌ์นด์ (ReplicaSet)๊ณผ ๊ฐ์ ์ผ๋ถ API ์ ํ์์ ๋ ์ธ์คํด์ค์ ๋ ์ด๋ธ ์ ๋ ํฐ๋ ๋ค์์คํ์ด์ค ๋ด์์ ๊ฒน์น์ง ์์์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ปจํธ๋กค๋ฌ๋ ์์ถฉํ๋ ๋ช ๋ น์ผ๋ก ๋ณด๊ณ , ์ผ๋ง๋ ๋ง์ ๋ณต์ ๋ณธ์ด ํ์ํ์ง ์ ์ ์๋ค.์ฃผ์:
์ผ์น์ฑ ๊ธฐ์ค๊ณผ ์งํฉ์ฑ ๊ธฐ์ค ์กฐ๊ฑด ๋ชจ๋์ ๋ํด ๋ ผ๋ฆฌ์ ์ธ OR (||
) ์ฐ์ฐ์๊ฐ ์๋ค. ํํฐ ๊ตฌ๋ฌธ์ด ์ ์ ํ ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํด์ผ ํ๋ค.์ผ์น์ฑ ๊ธฐ์ค ์๊ฑด
์ผ์น์ฑ ๊ธฐ์ค ๋๋ ๋ถ์ผ์น ๊ธฐ์ค ์ ์๊ตฌ์ฌํญ์ผ๋ก ๋ ์ด๋ธ์ ํค์ ๊ฐ์ ํํฐ๋ง์ ํ์ฉํ๋ค. ์ผ์นํ๋ ์ค๋ธ์ ํธ๋ ์ถ๊ฐ ๋ ์ด๋ธ์ ๊ฐ์ง ์ ์์ง๋ง, ๋ ์ด๋ธ์ ๋ช
์๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํด์ผ ํ๋ค.
=
,==
,!=
์ด ์ธ ๊ฐ์ง ์ฐ์ฐ์๋ง ํ์ฉํ๋ค. ์ฒ์ ๋ ๊ฐ์ ์ฐ์ฐ์์ ์ผ์น์ฑ(๊ทธ๋ฆฌ๊ณ ๋์์ด), ๋๋จธ์ง๋ ๋ถ์ผ์น ๋ฅผ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค๋ฉด,
environment = production
tier != frontend
์ ์๋ environment
๋ฅผ ํค๋ก ๊ฐ์ง๋ ๊ฒ๊ณผ production
์ ๊ฐ์ผ๋ก ๊ฐ์ง๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ค.
ํ์๋ tier
๋ฅผ ํค๋ก ๊ฐ์ง๊ณ , ๊ฐ์ frontend
๋ฅผ ๊ฐ์ง๋ ๋ฆฌ์์ค๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๊ณ , tier
๋ฅผ ํค๋ก ๊ฐ์ง๋ฉฐ, ๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๊ฐ์ง๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ค.
environment=production,tier!=frontend
์ฒ๋ผ ์ผํ๋ฅผ ํตํด ํ ๋ฌธ์ฅ์ผ๋ก frontend
๋ฅผ ์ ์ธํ production
์ ํํฐ๋งํ ์ ์๋ค.
์ผ์น์ฑ ๊ธฐ์ค ๋ ์ด๋ธ ์๊ฑด์ ๋ํ ํ๋์ ์ด์ฉ ์๋๋ฆฌ์ค๋ ํ๋๊ฐ ๋
ธ๋๋ฅผ ์ ํํ๋ ๊ธฐ์ค์ ์ง์ ํ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ์๋ ์ํ ํ๋๋ "accelerator=nvidia-tesla-p100
"
๋ ์ด๋ธ์ ๊ฐ์ง ๋
ธ๋๋ฅผ ์ ํํ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: cuda-test
spec:
containers:
- name: cuda-test
image: "registry.k8s.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 1
nodeSelector:
accelerator: nvidia-tesla-p100
์งํฉ์ฑ ๊ธฐ์ค ์๊ฑด
์งํฉ์ฑ ๊ธฐ์ค ๋ ์ด๋ธ ์๊ฑด์ ๋ฐ๋ผ ๊ฐ ์งํฉ์ ํค๋ก ํํฐ๋งํ ์ ์๋ค. in
,notin
๊ณผ exists
(ํค ์๋ณ์๋ง ํด๋น)์ 3๊ฐ์ ์ฐ์ฐ์๋ฅผ ์ง์ํ๋ค. ์๋ฅผ ๋ค๋ฉด,
environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
- ์ฒซ ๋ฒ์งธ ์์์์ ํค๊ฐ
environment
์ด๊ณ ๊ฐ์ดproduction
๋๋qa
์ธ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ค. - ๋ ๋ฒ์งธ ์์์์ ํค๊ฐ
tier
์ด๊ณ ๊ฐ์ดfrontend
์backend
๋ฅผ ๊ฐ์ง๋ ๋ฆฌ์์ค๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฆฌ์์ค์ ํค๋กtier
๋ฅผ ๊ฐ์ง๊ณ ๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๊ฐ์ง๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ค. - ์ธ ๋ฒ์งธ ์์์์ ๋ ์ด๋ธ์ ๊ฐ์ ์๊ด์์ด ํค๊ฐ
partition
์ ํฌํจํ๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ค. - ๋ค ๋ฒ์งธ ์์์์ ๋ ์ด๋ธ์ ๊ฐ์ ์๊ด์์ด ํค๊ฐ
partition
์ ํฌํจํ์ง ์๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ ํํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ผํ๋ AND ์ฐ์ฐ์๋ก ์๋ํ๋ค. ๋ฐ๋ผ์ partition,environment notin (qa)
์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๊ฐ๊ณผ ์๊ด์์ด ํค๊ฐ partition
์ธ ๊ฒ๊ณผ ํค๊ฐ environment
์ด๊ณ ๊ฐ์ด qa
์ ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ํํฐ๋งํ ์ ์๋ค.
์งํฉ์ฑ ๊ธฐ์ค ๋ ์ด๋ธ ์
๋ ํฐ๋ ์ผ๋ฐ์ ์ผ๋ก environment=production
๊ณผ environment in (production)
์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ณธ๋ค. ์ ์ฌํ๊ฒ๋ !=
๊ณผ notin
์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ณธ๋ค.
์งํฉ์ฑ ๊ธฐ์ค ์๊ฑด์ ์ผ์น์ฑ ๊ธฐ์ค ์๊ฑด๊ณผ ์กฐํฉํด์ ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด partition in (customerA, customerB),environment!=qa
API
LIST์ WATCH ํํฐ๋ง
LIST์ WATCH ์์ ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ ๋ฐํ๋๋ ์ค๋ธ์ ํธ ์งํฉ์ ํํฐ๋งํ๊ธฐ ์ํด ๋ ์ด๋ธ ์ ๋ ํฐ๋ฅผ ์ง์ ํ ์ ์๋ค. ๋ค์์ ๋ ๊ฐ์ง ์๊ฑด ๋ชจ๋ ํ์ฉ๋๋ค(URL ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๊ทธ๋๋ก ํ๊ธฐํจ).
- ์ผ์น์ฑ ๊ธฐ์ค ์๊ฑด:
?labelSelector=environment%3Dproduction,tier%3Dfrontend
- ์งํฉ์ฑ ๊ธฐ์ค ์๊ฑด:
?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29
๋ ๊ฐ์ง ๋ ์ด๋ธ ์
๋ ํฐ ์คํ์ผ์ ๋ชจ๋ REST ํด๋ผ์ด์ธํธ๋ฅผ ํตํด ์ ํ๋ ๋ฆฌ์์ค๋ฅผ ํ์ธํ๊ฑฐ๋ ๋ชฉ๋ก์ ๋ณผ ์ ์๋ค. ์๋ฅผ ๋ค์ด, kubectl
๋ก apiserver
๋ฅผ ๋์์ผ๋ก ์ผ์น์ฑ ๊ธฐ์ค ์ผ๋ก ํ๋ ์
๋ ํฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ด์ฉํ ์ ์๋ค.
kubectl get pods -l environment=production,tier=frontend
๋๋ ์งํฉ์ฑ ๊ธฐ์ค ์๊ฑด์ ์ฌ์ฉํ๋ฉด
kubectl get pods -l 'environment in (production),tier in (frontend)'
์์ ์๋ดํ ๊ฒ์ฒ๋ผ ์งํฉ์ฑ ๊ธฐ์ค ์๊ฑด์ ๋ ๋ณด์ฌ์ค๋ค. ์์์์ ๋ค์๊ณผ ๊ฐ์ด OR ์ฐ์ฐ์๋ฅผ ๊ตฌํํ ์ ์๋ค.
kubectl get pods -l 'environment in (production, qa)'
๋๋ exists ์ฐ์ฐ์์ ๋ถ์ผ์นํ ๊ฒ์ผ๋ก ์ ํํ ์ ์๋ค.
kubectl get pods -l 'environment,environment notin (frontend)'
API ์ค๋ธ์ ํธ์์ ์ฐธ์กฐ ์ค์
services
์
replicationcontrollers
์ ๊ฐ์
์ผ๋ถ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ ๋ ์ด๋ธ ์
๋ ํฐ๋ฅผ ์ฌ์ฉํด์
ํ๋์ ๊ฐ์ ๋ค๋ฅธ ๋ฆฌ์์ค ์งํฉ์ ์ ํํ๋ค.
์๋น์ค์ ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ
services
์์ ์ง์ ํ๋ ํ๋ ์งํฉ์ ๋ ์ด๋ธ ์
๋ ํฐ๋ก ์ ์ํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก replicationcontrollers
๊ฐ ๊ด๋ฆฌํ๋ ํ๋์ ์ค๋ธ์ ํธ ๊ทธ๋ฃน๋ ๋ ์ด๋ธ ์
๋ ํฐ๋ก ์ ์ํ๋ค.
์๋น์ค์ ๋ ํ๋ฆฌ์ผ์ด์
์ปจํธ๋กค๋ฌ์ ๋ ์ด๋ธ ์
๋ ํฐ๋ json
๋๋ yaml
ํ์ผ์ ๋งคํ๋ ์ผ์น์ฑ ๊ธฐ์ค ์๊ตฌ์ฌํญ์ ์
๋ ํฐ๋ง ์ง์ํ๋ค.
"selector": {
"component" : "redis",
}
or
selector:
component: redis
json
๋๋ yaml
์์์์ ์
๋ ํฐ๋ component=redis
๋๋ component in (redis)
๋ชจ๋ ๊ฐ์ ๊ฒ์ด๋ค.
์ธํธ-๊ธฐ๋ฐ ์๊ฑด์ ์ง์ํ๋ ๋ฆฌ์์ค
Job
,
Deployment
,
ReplicaSet
๊ทธ๋ฆฌ๊ณ
DaemonSet
๊ฐ์
์๋ก์ด ๋ฆฌ์์ค๋ค์ ์งํฉ์ฑ ๊ธฐ์ค ์ ์๊ฑด๋ ์ง์ํ๋ค.
selector:
matchLabels:
component: redis
matchExpressions:
- {key: tier, operator: In, values: [cache]}
- {key: environment, operator: NotIn, values: [dev]}
matchLabels
๋ {key,value}
์ ์๊ณผ ๋งค์นญ๋๋ค. matchLabels
์ ๋งค์นญ๋ ๋จ์ผ {key,value}
๋ matchExpressions
์ ์์์ ๊ฐ์ผ๋ฉฐ key
ํ๋๋ "key"๋ก, operator
๋ "In" ๊ทธ๋ฆฌ๊ณ values
์๋ "value"๋ง ๋์ด๋์ด ์๋ค. matchExpressions
๋ ํ๋ ์
๋ ํฐ์ ์๊ฑด ๋ชฉ๋ก์ด๋ค. ์ ํจํ ์ฐ์ฐ์์๋ In, NotIn, Exists ๋ฐ DoNotExist๊ฐ ํฌํจ๋๋ค. In ๋ฐ NotIn์ ์ค์ ๋ ๊ฐ์ด ์์ด์ผ ํ๋ค. matchLabels
์ matchExpressions
๋ชจ๋ AND๋ก ๋์ด ์์ด ์ผ์นํ๊ธฐ ์ํด์๋ ๋ชจ๋ ์๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
๋ ธ๋ ์ ์ ํ
๋ ์ด๋ธ์ ํตํด ์ ํํ๋ ์ฌ์ฉ ์ฌ๋ก ์ค ํ๋๋ ํ๋๋ฅผ ์ค์ผ์ค ํ ์ ์๋ ๋ ธ๋ ์ ์ ์ ํํ๋ ๊ฒ์ด๋ค. ์์ธํ ๋ด์ฉ์ ๋ ธ๋ ์ ํ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๋ค.
5 - ๋ค์์คํ์ด์ค
์ฟ ๋ฒ๋คํฐ์ค์์, ๋ค์์คํ์ด์ค ๋ ๋จ์ผ ํด๋ฌ์คํฐ ๋ด์์์ ๋ฆฌ์์ค ๊ทธ๋ฃน ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค. ๋ฆฌ์์ค์ ์ด๋ฆ์ ๋ค์์คํ์ด์ค ๋ด์์ ์ ์ผํด์ผ ํ๋ฉฐ, ๋ค์์คํ์ด์ค ๊ฐ์์ ์ ์ผํ ํ์๋ ์๋ค. ๋ค์์คํ์ด์ค ๊ธฐ๋ฐ ์ค์ฝํ์ ๋ค์์คํ์ด์ค ๊ธฐ๋ฐ ์ค๋ธ์ ํธ (์: ๋ํ๋ก์ด๋จผํธ, ์๋น์ค ๋ฑ) ์๋ง ์ ์ฉ ๊ฐ๋ฅํ๋ฉฐ ํด๋ฌ์คํฐ ๋ฒ์์ ์ค๋ธ์ ํธ (์: ์คํ ๋ฆฌ์งํด๋์ค, ๋ ธ๋, ํผ์์คํดํธ๋ณผ๋ฅจ ๋ฑ) ์๋ ์ ์ฉ ๋ถ๊ฐ๋ฅํ๋ค.
์ฌ๋ฌ ๊ฐ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋ค์์คํ์ด์ค๋ ์ฌ๋ฌ ๊ฐ์ ํ์ด๋, ํ๋ก์ ํธ์ ๊ฑธ์ณ์ ๋ง์ ์ฌ์ฉ์๊ฐ ์๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๋๋ก ๋ง๋ค์ด์ก๋ค. ์ฌ์ฉ์๊ฐ ๊ฑฐ์ ์๊ฑฐ๋, ์ ์ญ๋ช ์ ๋๊ฐ ๋๋ ๊ฒฝ์ฐ์๋ ๋ค์์คํ์ด์ค๋ฅผ ์ ํ ๊ณ ๋ คํ ํ์๊ฐ ์๋ค. ๋ค์์คํ์ด์ค๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๋ ์ฌ์ฉํ๋๋ก ํ์.
๋ค์์คํ์ด์ค๋ ์ด๋ฆ์ ๋ฒ์๋ฅผ ์ ๊ณตํ๋ค. ๋ฆฌ์์ค์ ์ด๋ฆ์ ๋ค์์คํ์ด์ค ๋ด์์ ์ ์ผํด์ผํ์ง๋ง, ๋ค์์คํ์ด์ค๋ฅผ ํตํ์ด์ ์ ์ผํ ํ์๋ ์๋ค. ๋ค์์คํ์ด์ค๋ ์๋ก ์ค์ฒฉ๋ ์ ์์ผ๋ฉฐ, ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ ํ๋์ ๋ค์์คํ์ด์ค์๋ง ์์ ์ ์๋ค.
๋ค์์คํ์ด์ค๋ ํด๋ฌ์คํฐ ์์์ (๋ฆฌ์์ค ์ฟผํฐ๋ฅผ ํตํด) ์ฌ๋ฌ ์ฌ์ฉ์ ์ฌ์ด์์ ๋๋๋ ๋ฐฉ๋ฒ์ด๋ค.
๋์ผํ ์ํํธ์จ์ด์ ๋ค๋ฅธ ๋ฒ์ ๊ณผ ๊ฐ์ด ์ฝ๊ฐ ๋ค๋ฅธ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ํ์๋ ์๋ค. ๋์ผํ ๋ค์์คํ์ด์ค ๋ด์์ ๋ฆฌ์์ค๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํด ๋ ์ด๋ธ์ ์ฌ์ฉํ๋ค.
์ฐธ๊ณ :
ํ๋ก๋์ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ,default
๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๊ณ ๋ คํ๋ค. ๋์ ์, ๋ค๋ฅธ ๋ค์์คํ์ด์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.์ด๊ธฐ ๋ค์์คํ์ด์ค
์ฟ ๋ฒ๋คํฐ์ค๋ ์ฒ์์ ๋ค ๊ฐ์ ์ด๊ธฐ ๋ค์์คํ์ด์ค๋ฅผ ๊ฐ๋๋ค.
default
- ์ฟ ๋ฒ๋คํฐ์ค์๋ ์ด ๋ค์์คํ์ด์ค๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก ๋จผ์ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
kube-node-lease
- ์ด ๋ค์์คํ์ด์ค๋ ๊ฐ ๋ ธ๋์ ์ฐ๊ด๋ ๋ฆฌ์ค ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๋๋ค. ๋ ธ๋ ๋ฆฌ์ค๋ kubelet์ด ํํธ๋นํธ๋ฅผ ๋ณด๋ด์ ์ปจํธ๋กค ํ๋ ์ธ์ด ๋ ธ๋์ ์ฅ์ ๋ฅผ ํ์งํ ์ ์๊ฒ ํ๋ค.
kube-public
- ์ด ๋ค์์คํ์ด์ค๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ(์ธ์ฆ๋์ง ์์ ํด๋ผ์ด์ธํธ ํฌํจ)๊ฐ ์ฝ๊ธฐ ๊ถํ์ผ๋ก ์ ๊ทผํ ์ ์๋ค. ์ด ๋ค์์คํ์ด์ค๋ ์ฃผ๋ก ์ ์ฒด ํด๋ฌ์คํฐ ์ค์ ๊ณต๊ฐ์ ์ผ๋ก ๋๋ฌ๋์ ์ฝ์ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์ํด ์์ฝ๋์ด ์๋ค. ์ด ๋ค์์คํ์ด์ค์ ๊ณต๊ฐ์ ์ธ ์ฑ๊ฒฉ์ ๋จ์ง ๊ด๋ก์ด์ง ์๊ตฌ ์ฌํญ์ ์๋๋ค.
kube-system
- ์ฟ ๋ฒ๋คํฐ์ค ์์คํ ์์ ์์ฑํ ์ค๋ธ์ ํธ๋ฅผ ์ํ ๋ค์์คํ์ด์ค.
๋ค์์คํ์ด์ค ๋ค๋ฃจ๊ธฐ
๋ค์์คํ์ด์ค์ ์์ฑ๊ณผ ์ญ์ ๋ ๋ค์์คํ์ด์ค ๊ด๋ฆฌ์ ๊ฐ์ด๋ ๋ฌธ์์ ๊ธฐ์ ๋์ด ์๋ค.
์ฐธ๊ณ :
kube-
์ ๋์ฌ๋ก ์์ํ๋ ๋ค์์คํ์ด์ค๋ ์ฟ ๋ฒ๋คํฐ์ค ์์คํ
์ฉ์ผ๋ก ์์ฝ๋์ด ์์ผ๋ฏ๋ก, ์ฌ์ฉ์๋ ์ด๋ฌํ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ์ง ์๋๋ค.๋ค์์คํ์ด์ค ์กฐํ
์ฌ์ฉ ์ค์ธ ํด๋ฌ์คํฐ์ ํ์ฌ ๋ค์์คํ์ด์ค๋ฅผ ๋์ดํ ์ ์๋ค.
kubectl get namespace
NAME STATUS AGE
default Active 1d
kube-node-lease Active 1d
kube-public Active 1d
kube-system Active 1d
์์ฒญ์ ๋ค์์คํ์ด์ค ์ค์ ํ๊ธฐ
ํ์ฌ ์์ฒญ์ ๋ํ ๋ค์์คํ์ด์ค๋ฅผ ์ค์ ํ๊ธฐ ์ํด์ --namespace
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค๋ฉด,
kubectl run nginx --image=nginx --namespace=<insert-namespace-name-here>
kubectl get pods --namespace=<insert-namespace-name-here>
์ ํธํ๋ ๋ค์์คํ์ด์ค ์ค์ ํ๊ธฐ
์ดํ ๋ชจ๋ kubectl ๋ช ๋ น์์ ์ฌ์ฉํ๋ ๋ค์์คํ์ด์ค๋ฅผ ์ปจํ ์คํธ์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ ์ ์๋ค.
kubectl config set-context --current --namespace=<insert-namespace-name-here>
# ํ์ธํ๊ธฐ
kubectl config view --minify | grep namespace:
๋ค์์คํ์ด์ค์ DNS
์๋น์ค๋ฅผ ์์ฑํ๋ฉด ํด๋น
DNS ์ํธ๋ฆฌ๊ฐ ์์ฑ๋๋ค.
์ด ์ํธ๋ฆฌ๋ <์๋น์ค-์ด๋ฆ>.<๋ค์์คํ์ด์ค-์ด๋ฆ>.svc.cluster.local
์ ํ์์ ๊ฐ๋๋ฐ,
์ด๋ ์ปจํ
์ด๋๊ฐ <์๋น์ค-์ด๋ฆ>
๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ค์์คํ์ด์ค ๋ด์ ๊ตญํ๋ ์๋น์ค๋ก ์ฐ๊ฒฐ๋๋ค.
๊ฐ๋ฐ, ์คํ
์ด์ง, ์ด์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ค์์คํ์ด์ค ๋ด์์ ๋์ผํ ์ค์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
๋ค์์คํ์ด์ค๋ฅผ ๋์ด์ ์ ๊ทผํ๊ธฐ ์ํด์๋,
์ ์ฒด ์ฃผ์ ๋๋ฉ์ธ ์ด๋ฆ(FQDN)์ ์ฌ์ฉํด์ผ ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ๋ค์์คํ์ด์ค ์ด๋ฆ์ ์ ํจํ RFC 1123 DNS ๋ ์ด๋ธ์ด์ด์ผ ํ๋ค.
๊ฒฝ๊ณ :
๋ค์์คํ์ด์ค์ ์ด๋ฆ์ ๊ณต๊ฐ ์ต์์ ๋๋ฉ์ธ ์ค ํ๋์ ๋์ผํ๊ฒ ๋ง๋ค๋ฉด, ํด๋น ๋ค์์คํ์ด์ค ๋ด์ ์๋น์ค์ ์งง์ DNS ์ด๋ฆ์ด ๊ณต๊ฐ DNS ๋ ์ฝ๋์ ๊ฒน์น ์ ์๋ค. ์ด๋ ํ ๋ค์์คํ์ด์ค ๋ด์ ์ํฌ๋ก๋๊ฐ ์ ๋ฏธ์ (trailing dot) ์์ด DNS ๋ฃฉ์ ์ ์ํํ๋ฉด ๊ณต๊ฐ DNS ๋ ์ฝ๋๋ณด๋ค ์ฐ์ ํ์ฌ ํด๋น ์๋น์ค๋ก ๋ฆฌ๋ค์ด๋ ํธ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, ์ ๋ขฐํ๋ ์ฌ์ฉ์๋ง ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ๊ถํ์ ์ ํํ๋ค. ํ์ํ ๊ฒฝ์ฐ, ์ถ๊ฐ์ ์ผ๋ก ์จ๋ํํฐ ๋ณด์ ์ปจํธ๋กค์ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด ์ด๋๋ฏธ์ ์นํ ์ ์ด์ฉํ์ฌ ๊ณต๊ฐ TLD์ ๋์ผํ ์ด๋ฆ์ ๋ค์์คํ์ด์ค ์์ฑ์ ๊ธ์ง์ํฌ ์ ์๋ค.
๋ชจ๋ ์ค๋ธ์ ํธ๊ฐ ๋ค์์คํ์ด์ค์ ์ํ์ง๋ ์์
๋๋ถ๋ถ์ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค(์๋ฅผ ๋ค์ด, ํ๋, ์๋น์ค, ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ ์ธ)๋ ๋ค์์คํ์ด์ค์ ์ํ๋ค. ํ์ง๋ง ๋ค์์คํ์ด์ค ๋ฆฌ์์ค ์์ฒด๋ ๋ค์์คํ์ด์ค์ ์ํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ธ๋๋ ํผ์์คํดํธ ๋ณผ๋ฅจ๊ณผ ๊ฐ์ ์ ์์ค ๋ฆฌ์์ค๋ ์ด๋ ๋ค์์คํ์ด์ค์๋ ์ํ์ง ์๋๋ค.
๋ค์์ ๋ค์์คํ์ด์ค์ ์ํ์ง ์๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ฅผ ์กฐํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
# ๋ค์์คํ์ด์ค์ ์ํ๋ ๋ฆฌ์์ค
kubectl api-resources --namespaced=true
# ๋ค์์คํ์ด์ค์ ์ํ์ง ์๋ ๋ฆฌ์์ค
kubectl api-resources --namespaced=false
์๋ ๋ ์ด๋ธ๋ง
Kubernetes 1.22 [stable]
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์ NamespaceDefaultLabelName
๋ชจ๋ ๋ค์์คํ์ด์ค์ ๋ณ๊ฒฝํ ์ ์๋(immutable) ๋ ์ด๋ธ
kubernetes.io / metadata.name
์ ์ค์ ํ๋ค.
๋ ์ด๋ธ ๊ฐ์ ๋ค์์คํ์ด์ค ์ด๋ฆ์ด๋ค.
๋ค์ ๋ด์ฉ
- ์ ๊ท ๋ค์์คํ์ด์ค ์์ฑ์ ๋ํด ๋ ๋ฐฐ์ฐ๊ธฐ.
- ๋ค์์คํ์ด์ค ์ญ์ ์ ๋ํด ๋ ๋ฐฐ์ฐ๊ธฐ.
6 - ์ด๋ ธํ ์ด์
์ฟ ๋ฒ๋คํฐ์ค ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์์์ ๋น-์๋ณ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ค๋ธ์ ํธ์ ์ฒจ๋ถํ ์ ์๋ค. ๋๊ตฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ ์ด ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์๋ค.
์ค๋ธ์ ํธ์ ๋ฉํ๋ฐ์ดํฐ ์ฒจ๋ถ
๋ ์ด๋ธ์ด๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฒจ๋ถํ ์ ์๋ค. ๋ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ์ค๋ธ์ ํธ๋ฅผ ์ ํํ๊ณ , ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ค๋ธ์ ํธ ์ปฌ๋ ์ ์ ์ฐพ์ ์ ์๋ค. ๋ฐ๋ฉด์, ์ด๋ ธํ ์ด์ ์ ์ค๋ธ์ ํธ๋ฅผ ์๋ณํ๊ณ ์ ํํ๋๋ฐ ์ฌ์ฉ๋์ง ์๋๋ค. ์ด๋ ธํ ์ด์ ์ ๋ฉํ๋ฐ์ดํฐ๋ ์๊ฑฐ๋ ํฌ๊ณ , ๊ตฌ์กฐ์ ์ด๊ฑฐ๋ ๊ตฌ์กฐ์ ์ด์ง ์์ ์ ์์ผ๋ฉฐ, ๋ ์ด๋ธ์์ ํ์ฉ๋์ง ์๋ ๋ฌธ์๋ฅผ ํฌํจํ ์ ์๋ค.
์ด๋ ธํ ์ด์ ์ ๋ ์ด๋ธ๊ณผ ๊ฐ์ด ํค/๊ฐ ๋งต์ด๋ค.
"metadata": {
"annotations": {
"key1" : "value1",
"key2" : "value2"
}
}
์ฐธ๊ณ :
๋งต์ ํค์ ๊ฐ์ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค. ๋ค๋ฅด๊ฒ ๋งํด์, ์ซ์, ๋ถ๋ฆฌ์ธ(boolean), ๋ฆฌ์คํธ ๋ฑ์ ๋ค๋ฅธ ํ์์ ํค๋ ๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.๋ค์์ ์ด๋ ธํ ์ด์ ์ ๊ธฐ๋กํ ์ ์๋ ์ ๋ณด์ ์์ ์ด๋ค.
ํ๋๋ ์ ์ธ์ ๊ตฌ์ฑ ๊ณ์ธต์ ์ํด ๊ด๋ฆฌ๋๋ค. ์ด๋ฌํ ํ๋๋ฅผ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ฒจ๋ถํ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ ๋๋ ์๋ฒ๊ฐ ์ค์ ํ ๊ธฐ๋ณธ ๊ฐ, ์๋ ์์ฑ๋ ํ๋, ๊ทธ๋ฆฌ๊ณ ์คํ ์ฌ์ด์ง ๋๋ ์คํ ์ค์ผ์ผ๋ง ์์คํ ์ ์ํด ์ค์ ๋ ํ๋์ ๊ตฌ๋ถ๋๋ค.
๋น๋, ๋ฆด๋ฆฌ์ค, ๋๋ ํ์ ์คํฌํ, ๋ฆด๋ฆฌ์ค ID, git ๋ธ๋์น, PR ๋ฒํธ, ์ด๋ฏธ์ง ํด์ ๋ฐ ๋ ์ง์คํธ๋ฆฌ ์ฃผ์์ ๊ฐ์ ์ด๋ฏธ์ง ์ ๋ณด.
๋ก๊น , ๋ชจ๋ํฐ๋ง, ๋ถ์ ๋๋ ๊ฐ์ฌ ๋ฆฌํฌ์งํฐ๋ฆฌ์ ๋ํ ํฌ์ธํฐ.
๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๋๊ตฌ ์ ๋ณด: ์๋ฅผ ๋ค๋ฉด, ์ด๋ฆ, ๋ฒ์ , ๊ทธ๋ฆฌ๊ณ ๋น๋ ์ ๋ณด.
๋ค๋ฅธ ์ํ๊ณ ๊ตฌ์ฑ ์์์ ๊ด๋ จ ์ค๋ธ์ ํธ URL๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๋๋ ๋๊ตฌ/์์คํ ์ถ์ฒ ์ ๋ณด.
๊ฒฝ๋ ๋กค์์ ๋๊ตฌ ๋ฉํ๋ฐ์ดํฐ. ์: ๊ตฌ์ฑ ๋๋ ์ฒดํฌํฌ์ธํธ
์ฑ ์์์ ์ ํ๋ฒํธ ๋๋ ํธ์ถ๊ธฐ ๋ฒํธ, ๋๋ ํ ์น ์ฌ์ดํธ ๊ฐ์ ํด๋น ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๋ ๋๋ ํฐ๋ฆฌ ์ง์ ์ .
ํ๋์ ์์ ํ๊ฑฐ๋ ๋นํ์ค ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ์ต์ข ์ฌ์ฉ์์ ์ง์ ์ฌํญ.
์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๋์ , ์ด ์ ํ์ ์ ๋ณด๋ฅผ ์ธ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํ ์ ์์ง๋ง, ์ด๋ ๋ฐฐํฌ, ๊ด๋ฆฌ, ์ธํธ๋ก์คํ์ (introspection) ๋ฑ์ ์ํ ๊ณต์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๊ตฌ ์์ฑ์ ํจ์ฌ ๋ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์๋ค.
๋ฌธ๋ฒ๊ณผ ์บ๋ฆญํฐ ์
์ด๋
ธํ
์ด์
์ ํค/๊ฐ ์์ด๋ค. ์ ํจํ ์ด๋
ธํ
์ด์
ํค์๋ ๋ ๊ฐ์ ์ธ๊ทธ๋จผํธ๊ฐ ์๋ค. ๋ ๊ฐ์ ์ธ๊ทธ๋จผํธ๋ ์ ํ์ ์ธ ์ ๋์ฌ์ ์ด๋ฆ(name)์ด๋ฉฐ, ์ฌ๋์(/
)๋ก ๊ตฌ๋ถ๋๋ค. ์ด๋ฆ ์ธ๊ทธ๋จผํธ๋ ํ์์ด๋ฉฐ, ์๋ฌธ ์ซ์([a-z0-9A-Z]
)๋ก ์์ํ๊ณ ๋๋๋ 63์ ์ดํ์ด์ด์ผ ํ๊ณ , ์ฌ์ด์ ๋์(-
), ๋ฐ์ค(_
), ์ (.
)์ด ๋ค์ด๊ฐ ์ ์๋ค. ์ ๋์ฌ๋ ์ ํ์ ์ด๋ค. ์ง์ ๋ ๊ฒฝ์ฐ, ์ ๋์ฌ๋ DNS ์๋ธ๋๋ฉ์ธ์ด์ด์ผ ํ๋ค. ์ (.
)์ผ๋ก ๊ตฌ๋ถ๋ ์ผ๋ จ์ DNS ๋ ์ด๋ธ์ ์ด 253์๋ฅผ ๋์ง ์๊ณ , ๋ค์ ์ฌ๋์(/
)๊ฐ ๋ถ๋๋ค.
์ ๋์ฌ๊ฐ ์๋ต๋๋ฉด, ์ด๋
ธํ
์ด์
ํค๋ ์ฌ์ฉ์์๊ฒ ๋น๊ณต๊ฐ๋ก ๊ฐ์ฃผ๋๋ค. ์ต์ข
์ฌ์ฉ์ ์ค๋ธ์ ํธ์ ์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๋ ์๋ํ๋ ์์คํ
๊ตฌ์ฑ ์์(์ :kube-scheduler
, kube-controller-manager
, kube-apiserver
, kubectl
, ๋๋ ๋ค๋ฅธ ์จ๋ํํฐ ์๋ํ)๋ ์ ๋์ฌ๋ฅผ ์ง์ ํด์ผ ํ๋ค.
kubernetes.io/
์ k8s.io/
์ ๋์ฌ๋ ์ฟ ๋ฒ๋คํฐ์ค ํต์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ํด ์์ฝ๋์ด ์๋ค.
๋ค์์ imageregistry: https://hub.docker.com/
์ด๋
ธํ
์ด์
์ด ์๋ ํ๋์ ๊ตฌ์ฑ ํ์ผ ์์์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: annotations-demo
annotations:
imageregistry: "https://hub.docker.com/"
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
๋ค์ ๋ด์ฉ
๋ ์ด๋ธ๊ณผ ์ ๋ ํฐ์ ๋ํด ์์๋ณธ๋ค.
7 - ํ๋ ์ ๋ ํฐ
ํ๋ ์ ๋ ํฐ ๋ ํ ๊ฐ ์ด์์ ๋ฆฌ์์ค ํ๋ ๊ฐ์ ๋ฐ๋ผ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ฅผ ์ ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ํ๋ ์ ๋ ํฐ ์ฟผ๋ฆฌ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
metadata.name=my-service
metadata.namespace!=default
status.phase=Pending
๋ค์์ kubectl
์ปค๋งจ๋๋ status.phase
ํ๋์ ๊ฐ์ด Running
์ธ ๋ชจ๋ ํ๋๋ฅผ ์ ํํ๋ค.
kubectl get pods --field-selector status.phase=Running
์ฐธ๊ณ :
ํ๋ ์ ๋ ํฐ๋ ๋ณธ์ง์ ์ผ๋ก ๋ฆฌ์์ค ํํฐ ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋๋ ์ ๋ ํฐ๋ ํ๋๋ ์์ผ๋ฉฐ, ์ด๋ ๋ช ์๋ ์ข ๋ฅ์ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์ ํ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ ๋ฐ๋ผ์ค๋kubectl
์ฟผ๋ฆฌ์ธ kubectl get pods
์ kubectl get pods --field-selector ""
๋ ๋์ผํ๋ค.์ฌ์ฉ ๊ฐ๋ฅํ ํ๋
์ฌ์ฉ ๊ฐ๋ฅํ ํ๋๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฆฌ์์ค ์ข
๋ฅ์ ๋ฐ๋ผ์ ๋ค๋ฅด๋ค. ๋ชจ๋ ๋ฆฌ์์ค ์ข
๋ฅ๋ metadata.name
๊ณผ metadata.namespace
ํ๋ ์
๋ ํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉํ ์ ์๋ ํ๋ ์
๋ ํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ค.
kubectl get ingress --field-selector foo.bar=baz
Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace"
์ฌ์ฉ ๊ฐ๋ฅํ ์ฐ์ฐ์
ํ๋ ์
๋ ํฐ์์ =
, ==
, !=
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค (=
์ ==
๋ ๋์ผํ ์๋ฏธ์ด๋ค). ์๋ฅผ ๋ค๋ฉด, ๋ค์์ kubectl
์ปค๋งจ๋๋ default
๋ค์์คํ์ด์ค์ ์ํด์์ง ์์ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค๋ฅผ ์ ํํ๋ค.
kubectl get services --all-namespaces --field-selector metadata.namespace!=default
์ฐ๊ณ๋๋ ์ ๋ ํฐ
๋ ์ด๋ธ์ ๋น๋กฏํ ๋ค๋ฅธ ์
๋ ํฐ์ฒ๋ผ, ์ผํ๋ก ๊ตฌ๋ถ๋๋ ๋ชฉ๋ก์ ํตํด ํ๋ ์
๋ ํฐ๋ฅผ ์ฐ๊ณํด์ ์ฌ์ฉํ ์ ์๋ค. ๋ค์์ kubectl
์ปค๋งจ๋๋ status.phase
ํ๋๊ฐ Running
์ด ์๋๊ณ , spec.restartPolicy
ํ๋๊ฐ Always
์ธ ๋ชจ๋ ํ๋๋ฅผ ์ ํํ๋ค.
kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always
์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์์ค ์ข ๋ฅ
ํ๋ ์
๋ ํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ฆฌ์์ค ์ข
๋ฅ์ ๊ฑธ์ณ ์ฌ์ฉํ ์ ์๋ค. ๋ค์์ kubectl
์ปค๋งจ๋๋ default
๋ค์์คํ์ด์ค์ ์ํด์์ง ์์ ๋ชจ๋ ์คํ
์ดํธํ์
(StatefulSet)๊ณผ ์๋น์ค๋ฅผ ์ ํํ๋ค.
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
8 - ํ์ด๋๋ผ์ด์
ํ์ด๋๋ผ์ด์ ๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ค๋ธ์ ํธ๋ฅผ ์์ ํ ์ญ์ ํ๊ธฐ ์ด์ , ์ญ์ ํ์๋ฅผ ์ํด ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋๊น์ง ๋๊ธฐํ๋๋ก ์๋ ค์ฃผ๊ธฐ ์ํ ๋ค์์คํ์ด์ค์ ์ํ ํค(namespaced key)์ด๋ค. ํ์ด๋๋ผ์ด์ ๋ ์ญ์ ์๋ฃ๋ ์ค๋ธ์ ํธ๊ฐ ์์ ํ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํด ์ปจํธ๋กค๋ฌ์๊ฒ ์๋ฆฐ๋ค.
ํ์ด๋๋ผ์ด์ ๋ฅผ ๊ฐ์ง ํน์ ํ ์ค๋ธ์ ํธ๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ญ์ ํ๋๋ก ์ง์ํ ๋,
์ฟ ๋ฒ๋คํฐ์ค API๋ .metadata.deletionTimestamp
์ ๋ง๋ถ์ฌ ์ญ์ ํ๋๋ก ์ค๋ธ์ ํธ์ ํ์ํ๋ฉฐ,
202
์ํ์ฝ๋(HTTP "Accepted")์ ๋ฆฌํดํ๋ค. ๋์ ์ค๋ธ์ ํธ๊ฐ Terminating ์ํ๋ฅผ ์ ์งํ๋ ๋์ ์ปจํธ๋กค ํ๋ ์ธ
๋๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ ํ๋์ ํ์ด๋๋ผ์ด์ ์์ ์ ์ํ ์์
์ ์ํํ๋ค.
์ ์๋ ์์
์ด ์๋ฃ ํ์, ๊ทธ ์ปจํธ๋กค๋ฌ๋ ๋์ ์ค๋ธ์ ํธ๋ก๋ถํฐ ์ฐ๊ด๋ ํ์ด๋๋ผ์ด์ ์ ์ญ์ ํ๋ค.
metadata.finalizers
ํ๋๊ฐ ๋น์ด ์์ ๋, ์ฟ ๋ฒ๋คํฐ์ค๋
์ญ์ ๊ฐ ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ๋ค.
ํ์ด๋๋ผ์ด์ ๊ฐ ๋ฆฌ์์ค๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ ์ดํ๋๋ก ์ฌ์ฉํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ ํ์ด๋๋ผ์ด์ ๋ฅผ ์ปจํธ๋กค๋ฌ๊ฐ ๋์ ๋ฆฌ์์๋ฅผ ์ญ์ ํ๊ธฐ ์ ์ ์ฐ๊ด๋ ๋ฆฌ์์ค๋ค ๋๋ ์ธํ๋ผ๋ฅผ ์ ๋ฆฌํ๋๋ก ์ ์ํ ์ ์๋ค.
ํ์ด๋๋ผ์ด์ (Finalizer)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ธฐ ์ ํน์ ์ ๋ฆฌ ์์ ์ ์ํํ๋๋ก ์ปจํธ๋กค๋ฌ(Controller)์ ๊ฒฝ๊ณ ํ์ฌ ๋ฆฌ์์ค์ ๊ฐ๋น์ง(Garbage) ์์ง์ ์ ์ดํ ์ ์๋ค.
ํ์ด๋๋ผ์ด์ ๋ ๋ณดํต ์คํํ ์ฝ๋๋ฅผ ์ง์ ํ์ง ์๋๋ค. ๋์ ํ์ด๋๋ผ์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ธํ ์ด์ ๊ณผ ๋น์ทํ๊ฒ ํน์ ๋ฆฌ์์ค์ ๋ํ ํค๋ค์ ๋ชฉ๋ก์ด๋ค. ์ผ๋ถ ํ์ด๋๋ผ์ด์ ๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์๋์ผ๋ก ์ง์ ํ์ง๋ง, ์ฌ์ฉ์๊ฐ ์ง์ ์ง์ ํ ์๋ ์๋ค.
ํ์ด๋๋ผ์ด์ ์ ์๋ ๋ฐฉ์
๋งค๋ํ์คํธ ํ์ผ์ ์ฌ์ฉํด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ฉด
metadata.finalizers
ํ๋์ ํ์ด๋๋ผ์ด์ ๋ฅผ ๋ช
์ํ ์ ์๋ค.
๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ ค ํ ๋๋
์ญ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ API ์๋ฒ๊ฐ finalizers
ํ๋์ ๊ฐ์ ์ธ์ํ๊ณ ๋ค์์ ์ํํ๋ค.
- ์ญ์ ๋ฅผ ์์ํ ์๊ฐ๊ณผ ํจ๊ป
metadata.deletionTimestamp
ํ๋๋ฅผ ์ถ๊ฐํ๋๋ก ์ค๋ธ์ ํธ๋ฅผ ์์ ํ๋ค. - ์ค๋ธ์ ํธ์
metadata.finalizers
ํ๋๊ฐ ๋น์์ง ๋๊น์ง ์ค๋ธ์ ํธ๊ฐ ์ ๊ฑฐ๋์ง ์๋๋ก ํ๋ค. 202
์ํ ์ฝ๋๋ฅผ ๋ฆฌํดํ๋ค(HTTP "Accepted").
์ด ํ์ด๋๋ผ์ด์ ๋ฅผ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ๋ metadata.deletionTimestamp
๋ฅผ ์ค์ ํ๋ ์ค๋ธ์ ํธ๊ฐ ์
๋ฐ์ดํธ ๋์์์ ์ธ์งํ์ฌ
์ค๋ธ์ ํธ์ ์ญ์ ๊ฐ ์์ฒญ๋์์์ ๋ํ๋ธ๋ค.
๊ทธ๋ฐ ๋ค์ ์ปจํธ๋กค๋ฌ๋ ๊ทธ ๋ฆฌ์์ค์ ์ง์ ๋ ํ์ด๋๋ผ์ด์ ์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ค ์๋ํ๋ค.
์ปจํธ๋กค๋ฌ๋ ํ์ด๋๋ผ์ด์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋ ๋ง๋ค
๋ฆฌ์์ค์ finalizers
ํ๋์์ ํด๋น ํค(key)๋ฅผ ์ ๊ฑฐํ๋ค.
finalizers
ํ๋๊ฐ ๋น์์ง๋ฉด deletionTimestamp
ํ๋๊ฐ ์ค์ ๋ ์ค๋ธ์ ํธ๋ ์๋์ผ๋ก ์ญ์ ๋๋ค.
๋ํ ํ์ด๋๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋์ง ์๋ ๋ฆฌ์์ค๊ฐ ์ญ์ ๋์ง ์๋๋ก ํ ์ ์๋ค.
ํ์ด๋๋ผ์ด์ ์ ์ผ๋ฐ์ ์ธ ์๋ก๋ ํผ์์คํดํธ ๋ณผ๋ฅจ(Persistent Volume)
์ค๋ธ์ ํธ๊ฐ ์ค์๋ก ์ญ์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ kubernetes.io/pv-protection
๊ฐ ์๋ค.
ํ๋๊ฐ ํผ์์คํดํธ ๋ณผ๋ฅจ
์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉ ์ค์ผ ๋
์ฟ ๋ฒ๋คํฐ์ค๋ pv-protection
ํ์ด๋๋ผ์ด์ ๋ฅผ ์ถ๊ฐํ๋ค.
ํผ์์คํดํธ ๋ณผ๋ฅจ
์ ์ญ์ ํ๋ ค ํ๋ฉด Terminating
์ํ๊ฐ ๋์ง๋ง
ํ์ด๋๋ผ์ด์ ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ๊ฐ ์ญ์ ํ ์ ์๋ค.
ํ๋๊ฐ ํผ์์คํดํธ ๋ณผ๋ฅจ
์ ์ฌ์ฉ์ ์ค์งํ๋ฉด
์ฟ ๋ฒ๋คํฐ์ค๊ฐ pv-protection
ํ์ด๋๋ผ์ด์ ๋ฅผ ํด์ ํ๊ณ ์ปจํธ๋กค๋ฌ๋ ๋ณผ๋ฅจ์ ์ญ์ ํ๋ค.
์์ ์ ์ฐธ์กฐ, ๋ ์ด๋ธ, ํ์ด๋๋ผ์ด์
๋ ์ด๋ธ(Label)์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฟ ๋ฒ๋คํฐ์ค์์ ์์ ์ ์ฐธ์กฐ(Owner reference)๋ ์ค๋ธ์ ํธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๋ช ํ์ง๋ง ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ปจํธ๋กค๋ฌ(Controller)๊ฐ ํ๋์ ๊ฐ์ ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํ ๋ ๋ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๊ด๋ จ ์ค๋ธ์ ํธ์ ๊ทธ๋ฃน์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ค. ์๋ฅผ ๋ค์ด ์ก(Job)์ด ํ๋ ์ด์์ ํ๋๋ฅผ ์์ฑํ๋ฉด ์ก ์ปจํธ๋กค๋ฌ๋ ํด๋น ํ๋์ ๋ ์ด๋ธ์ ์ ์ฉํ๊ณ ํด๋ฌ์คํฐ ๋ด ๋์ผํ ๋ ์ด๋ธ์ ๊ฐ๋ ํ๋์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋ค.
๋ํ, ์ก ์ปจํธ๋กค๋ฌ๋ ์ด๋ฌํ ํ๋์ ์์ ์ ์ฐธ์กฐ๋ ์ถ๊ฐํ์ฌ ํ๋๋ฅผ ์์ฑํ ์ก์ ๊ฐ๋ฆฌํจ๋ค. ์ด ํ๋๊ฐ ์คํ๋ ๋ ์ก์ ์ญ์ ํ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฌ์ฉ์ ์ฐธ์กฐ(๋ ์ด๋ธ ๋์ )๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ๋ด ์ด๋ค ํ๋๊ฐ ์ ๋ฆฌ๋์ด์ผ ํ๋์ง ๊ฒฐ์ ํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ๋ํ ์ญ์ ๋์ ๋ฆฌ์์ค์ ๋ํ ์์ ์ ์ฐธ์กฐ๋ฅผ ์๋ณํ ๋ ํ์ด๋๋ผ์ด์ ๋ฅผ ์ฒ๋ฆฌํ๋ค.
๊ฒฝ์ฐ์ ๋ฐ๋ผ ํ์ด๋๋ผ์ด์ ๋ ์ข ์ ์ค๋ธ์ ํธ์ ์ญ์ ๋ฅผ ์ฐจ๋จํ ์ ์์ผ๋ฉฐ ์ด๋ก ์ธํด ๋์ ์์ ์ ์ค๋ธ์ ํธ๊ฐ ์์ ํ ์ญ์ ๋์ง ์๊ณ ์์๋ณด๋ค ์ค๋ ์ ์ง๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ๋์ ์์ ์ ๋ฐ ์ข ์ ๊ฐ์ฒด์ ๋ํ ํ์ด๋๋ผ์ด์ ์ ์์ ์ ์ฐธ์กฐ๋ฅผ ํ์ธํด ์์ธ์ ํด๊ฒฐํด์ผ ํ๋ค.
์ฐธ๊ณ :
์ค๋ธ์ ํธ๊ฐ ์ญ์ ์ํ์ ์๋ ๊ฒฝ์ฐ, ์ญ์ ๋ฅผ ๊ณ์ํ๋ ค๋ฉด ํ์ด๋๋ผ์ด์ ๋ฅผ ์๋์ผ๋ก ์ ๊ฑฐํด์๋ ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ด๋๋ผ์ด์ ๋ ํน์ ํ ๋ชฉ์ ์ผ๋ก ๊ฐ์ง๊ณ ๋ฆฌ์์ค์ ์ถ๊ฐ๋๋ฏ๋ก, ๊ฐ์ ๋ก ์ ๊ฑฐํ๋ฉด ํด๋ฌ์คํฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ ํ์ด๋๋ผ์ด์ ์ ๋ชฉ์ ์ ์ดํดํ๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ(์๋ฅผ ๋ค์ด, ์ผ๋ถ ์ข ์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ ๋ฆฌํ๋ ๊ฒ)์ผ๋ก ์ํ๋ ๋๋ง ์ํํด์ผ ํ๋ค.๋ค์ ๋ด์ฉ
- ์ฟ ๋ฒ๋คํฐ์ค ๋ธ๋ก๊ทธ์์ ํ์ด๋๋ผ์ด์ ๋ฅผ ์ฌ์ฉํด ์ญ์ ์ ์ดํ๊ธฐ๋ฅผ ์ฝ์ด๋ณธ๋ค.
9 - ๊ถ์ฅ ๋ ์ด๋ธ
kubectl๊ณผ ๋์๋ณด๋์ ๊ฐ์ ๋ง์ ๋๊ตฌ๋ค๋ก ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ๋ฅผ ์๊ฐํ ํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค. ๊ณตํต ๋ ์ด๋ธ ์ ์ ๋ชจ๋ ๋๊ตฌ๋ค์ด ์ดํดํ ์ ์๋ ๊ณตํต์ ๋ฐฉ์์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ์๋ณํ๊ณ ๋๊ตฌ๋ค์ด ์ํธ ์ด์ฉ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํ๋ค.
๊ถ์ฅ ๋ ์ด๋ธ์ ์ง์ ๋๊ตฌ ์ธ์๋ ์ฟผ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ณํ๊ฒ ํ๋ค.
๋ฉํ๋ฐ์ดํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ ์ ์ค์ฌ์ผ๋ก ์ ๋ฆฌ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ํ๋ซํผ ์๋น์ค(PaaS)๊ฐ ์๋๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํด ๊ณต์์ ์ธ ๊ฐ๋ ์ด ์๊ฑฐ๋ ๊ฐ์ํ์ง ์๋๋ค. ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๊ณต์์ ์ด๋ฉฐ ๋ฉํ๋ฐ์ดํฐ๋ก ์ค๋ช ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจ๋ ์ ์๋ ์ ์ฐํ๋ค.
์ฐธ๊ณ :
๋ฉํ๋ฐ์ดํฐ๋ค์ ๊ถ์ฅํ๋ ๋ ์ด๋ธ์ด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ค ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ง๋ง ์ฝ์ด ๋๊ตฌ์๋ ํ์ํ์ง ์๋ค.๊ณต์ ๋ ์ด๋ธ๊ณผ ์ฃผ์์๋ ๊ณตํต ์ ๋์ฌ์ธ app.kubernetes.io
๊ฐ ์๋ค.
์ ๋์ฌ๊ฐ ์๋ ๋ ์ด๋ธ์ ์ฌ์ฉ์๊ฐ ๊ฐ์ธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ณต์ ์ ๋์ฌ๋ ๊ณต์ ๋ ์ด๋ธ์ด ์ฌ์ฉ์ ์ ์ ๋ ์ด๋ธ์ ๋ฐฉํดํ์ง ์๋๋ก ํ๋ค.
๋ ์ด๋ธ
๋ ์ด๋ธ์ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด ๋ชจ๋ ๋ฆฌ์์ค ์ค๋ธ์ ํธ์ ์ ์ฉํด์ผ ํ๋ค.
ํค | ์ค๋ช | ์์ | ํ์ |
---|---|---|---|
app.kubernetes.io/name | ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ | mysql | ๋ฌธ์์ด |
app.kubernetes.io/instance | ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์คํด์ค๋ฅผ ์๋ณํ๋ ๊ณ ์ ํ ์ด๋ฆ | mysql-abcxzy | ๋ฌธ์์ด |
app.kubernetes.io/version | ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ๋ฒ์ (์: SemVer 1.0, revision hash ๋ฑ.) | 5.7.21 | ๋ฌธ์์ด |
app.kubernetes.io/component | ์ํคํ ์ฒ ๋ด ๊ตฌ์ฑ์์ | database | ๋ฌธ์์ด |
app.kubernetes.io/part-of | ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ์ด๋ฆ | wordpress | ๋ฌธ์์ด |
app.kubernetes.io/managed-by | ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๊ตฌ | Helm | ๋ฌธ์์ด |
์ ๋ ์ด๋ธ์ ์ค์ ์์๋ ๋ค์ ์คํ ์ดํธํ์ ์ค๋ธ์ ํธ๋ฅผ ๊ณ ๋ คํ๋ค.
# ์๋๋ ์ ์ฒด ๋ช
์ธ์ ์ผ๋ถ๋ถ์ด๋ค
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxzy
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
app.kubernetes.io/managed-by: Helm
์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์ค
์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ผํ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์, ์ฌ์ง์ด๋ ๋์ผํ ๋ค์์คํ์ด์ค์๋ ํ๋ฒ ๋๋ ๊ทธ ์ด์ ์ค์น๋ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ WordPress๊ฐ ์ฌ๋ฌ ๋ฒ ์ค์น๋์ด ๊ฐ๊ฐ ์๋ก ๋ค๋ฅธ ์น์ฌ์ดํธ๋ฅผ ์๋น์คํ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ ์ด๋ฆ๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์ธ์คํด์ค ์ด๋ฆ์ ๋ณ๋๋ก ๊ธฐ๋ก๋๋ค.
์๋ฅผ ๋ค์ด WordPress๋ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฆ์ผ๋ก app.kubernetes.io/name
์ด๋ผ๋ ๋ ์ด๋ธ์ wordpress
๋ผ๋ ๊ฐ์ ๊ฐ์ง๋ฉฐ,
์ ํ๋ฆฌ์ผ์ด์
์ธ์คํด์ค ์ด๋ฆ์ผ๋ก๋ app.kubernetes.io/instance
๋ผ๋ ๋ ์ด๋ธ์
wordpress-abcxzy
๋ผ๋ ๊ฐ์ ๊ฐ์ง๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์ธ์คํด์ค๋ฅผ
์๋ณํ ์ ์๋ค. ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์ธ์คํด์ค๋ ๊ณ ์ ํ ์ด๋ฆ์ ๊ฐ์ ธ์ผ ํ๋ค.
์์
์ ๋ ์ด๋ธ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ฐฉ์์ ๋ํ ์์๋ ๋ค์ํ ๋ณต์ก์ฑ์ด ์๋ค.
๋จ์ํ ์คํ ์ดํธ๋ฆฌ์ค ์๋น์ค
Deployment
์ Service
์ค๋ธ์ ํธ๋ฅผ ํตํด ๋ฐฐํฌ๋ ๋จ์ํ ์คํ
์ดํธ๋ฆฌ์ค ์๋น์ค์ ๊ฒฝ์ฐ๋ฅผ ๋ณด์. ๋ค์ ๋ ์๋ณ์๋ ๋ ์ด๋ธ์ ๊ฐ์ฅ ๊ฐ๋จํ ํํ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ๋ธ๋ค.
Deployment
๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋ ํ๋๋ฅผ ๊ฐ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxyz
...
Service
๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋
ธ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxyz
...
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์
Helm์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL)์ ์ด์ฉํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ (WordPress)์ ์ค์นํ ๊ฒ๊ณผ ๊ฐ์ด ์ข ๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ๋ คํ ์ ์๋ค. ๋ค์ ์๋ณ์๋ ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ค๋ธ์ ํธ์ ์์์ ๋ณด์ฌ์ค๋ค.
WordPress๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ๋ค์๊ณผ ๊ฐ์ด Deployment
๋ก ์์ํ๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxyz
app.kubernetes.io/version: "4.9.4"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: server
app.kubernetes.io/part-of: wordpress
...
Service
๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋
ธ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxyz
app.kubernetes.io/version: "4.9.4"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: server
app.kubernetes.io/part-of: wordpress
...
MySQL์ StatefulSet
์ MySQL์ ์์๊ณผ ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ๋
ธ์ถ๋๋ค.
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
...
Service
๋ WordPress์ ์ผ๋ถ๋ก MySQL์ ๋
ธ์ถํ๋ ๋ฐ ์ด์ฉํ๋ค.
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxyz
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
...
MySQL StatefulSet
๊ณผ Service
๋ก MySQL๊ณผ WordPress๊ฐ ๋ ํฐ ๋ฒ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ํฌํจ๋์ด ์๋ ๊ฒ์ ์๊ฒ ๋๋ค.