๐ ํด๋น ํฌ์คํ
์ ์์ํ์ธ์! ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค ์์ ์ ์ฝ๊ณ ๊ฐ์ธ์ ์ธ ๋ชฉ์ ํ์ ์์ฑ๋๋ ๊ธ์
๋๋ค. ํฌ์คํ
์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๊ธฐ์ด์ธ ํ(Pods), ๋ ํ๋ฆฌ์นด์ (Replica set), ๋ํ๋ก์ด๋จผํธ(Deployment) ๊ฐ๋ ์ ๋ํด ๋ฐฐ์๋ณด๋๋ก ํ์. ์ฟ ๋ฒ๋คํฐ์ค์ ๋ํด ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค๋ฃจ์ด๋ณด๊ธฐ ์ ์ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ช ๊ฐ์ง ํน์ง์ ๋ํด์ ์ดํด๋ณด๊ณ ๋์ด๊ฐ์.
A. ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ '์ค๋ธ์ ํธ(Object)'๋ก ๋ค๋ฃฌ๋ค
๋จผ์ , ์ฟ ๋ฒ๋คํฐ์ค์์์ ๋ชจ๋ ๋ฆฌ์์ค๋ '์ค๋ธ์ ํธ'๋ผ๊ณ ๋ถ๋ฆฌ๋ ํํ๋ก ๊ด๋ฆฌ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์ ์ ๋ฐฐ์ ๋ ๋์ปค ์ค์์์ ์ ์ด ๋จ์์๋ '์๋น์ค'๋ผ๋ ๊ฒ์ ์ปจํ ์ด๋๋ค์ ์งํฉ์ ์๋ฏธํ๋ค๊ณ ํ๋ค. ์ด๊ฒ๋ ์ผ์ข ์ ์ค๋ธ์ ํธ๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฐ๋ฐ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ๋์ปค ์ค์๋ณด๋ค๋ ์ข ๋ ๋ค์ํ ๊ฐ์์ ์ค๋ธ์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์๋ก๋ ์ปจํ ์ด๋์ ์งํฉ์ธ ํ, ์ปจํ ์ด๋์ ์งํฉ์ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ์ธ ๋ ํ๋ฆฌ์นด์ , ์ฌ์ฉ์(Service Account), ๋ ธ๋๊ฐ ์๋ค. ๊ทธ ์ด์ธ์ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ๊ด๋ฆฌํ๋ ์ฌ๋ฌ๊ฐ์ง ์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉฐ ์ข ๋ฅ๋ ์์ฒญ ๋ค์ํ๋ค. ๊ธฐํ ์ถ๊ฐ์ ์ธ ์ค๋ธ์ ํธ์ ๋ญ๊ฐ ์๋์ง ์์๋ณด๋ ค๋ฉด ๊ณต์๋ฌธ์๋ฅผ ํ์ธํ๊ฑฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ค์น๋์ด ์๋ ํธ์คํธ์์ "kubectl explain [์ค๋ธ์ ํธ ์ด๋ฆ]" ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ดํด๋ณผ ์ ์๋ค.
B. ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋ค๋ฃฐ ์ค ์๋ ๋ฅ๋ ฅ = YAML ํ์ผ ์์ฑํ ์ค ์๋ ๋ฅ๋ ฅ!?
๋ค์์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋ค๋ฃฐ ๋๋ kubectl ๋ช ๋ น์ด๋ณด๋ค๋ YAML ํ์ผ์ ๋ ๋ง์ด ์ฌ์ฉํ๋ค๋ ์ ์ด๋ค. ๊ทธ๋์ ๋ฐฐ์ ๋ ๋์ปค ๊ด๋ จ ์ง์ ์ค์์ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ด์ ๊น์ง๋ ์ฃผ๋ก ์ง์ ์ ์ผ๋ก ํฐ๋ฏธ๋์์ docker ์ ๋์ด๋ก ์์ํ๋ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ปจํ ์ด๋๋ฅผ ์ ์ดํด์๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ปค ์ปดํฌ์ฆ์์ YAML ํ์ผ์ด๋ผ๋ ๊ฒ์ ์ด์ฉํด ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ํ ๋ฒ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ๋์ปค ์ปดํฌ์ฆ ์ฒ๋ผ ์์ฑํ ์ปจํ ์ด๋๋ค์ ์ฃผ๋ก YAML ํ์ผ๋ก ์ ์ํ๊ณ ์์ฑํ๋ค. ๋์ปค ์ปดํฌ์ฆ ๋๋ ๊ทธ๋ฌ์ง๋ง, ์ปจํ ์ด๋์ ๋ํ ๊ด๋ จ ๋ฆฌ์์ค ๋ฟ๋ง ์๋๋ผ ๋คํธ์ํฌ์ ๊ฐ์ ๊ธฐํ ๋ชจ๋ ๋ฆฌ์์ค ์ค๋ธ์ ํธ๋ค์ ๋ํด์ ์ค์ ์ ํ ์ ์๋ค. ์ฌ์ง์ด ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ํ์ฉํด ์ค์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ๋๋ YAML ํ์ผ์ ์ด์ฉํด์ ๋ฐฐํฌํ๊ฒ ๋๋ค.
C. ์ฟ ๋ฒ๋คํฐ์ค๋ ์ปดํฌ๋ํธ๋ค์ ๋ชจ์์ผ๋ก ์คํ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ๋ค๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ ์ ์ด๋ค. ๋์ปค ์ค์ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฟ ๋ฒ๋คํฐ์ค์์์ ๋ ธ๋ ์ญํ ์ ํฌ๊ฒ ๋ง์คํฐ์ ์์ปค ์ญํ ๋ก ๋ถ๋ฆฌ๋๋ค. ๋ง์คํฐ ์ญํ ์ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ ๋์ํ ์ ์๊ฒ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ฉฐ ์์ปค๋ ์ค์ง์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ์ญํ ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ปค ์ค์์ ๋์ปค ์์ง ์์ฒด์ ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ค์น๋ ๋์ปค ๋ฐ๋ชฌ๋ง์ ์ฌ์ฉํ์ง๋ง, ์ฟ ๋ฒ๋คํฐ์ค๋ ๋์ปค๋ฅผ ํฌํจํ ๊ธฐํ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ด ํจ๊ป ์คํ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ง์คํฐ ๋
ธ๋์์๋ API ์๋ฒ(kube-apiserver), ์ปจํธ๋กค๋ฌ ๋งค๋์ (kube-controller-manager), ์ค์ผ์ฅด๋ฌ(kube-scheduler), DNS ์๋ฒ(coreDNS) ๋ฑ์ด ์คํ๋๊ณ , ๋ชจ๋ ๋
ธ๋์์๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ๊ตฌ์ฑ์ ์ํด ํ๋ก์(kube-proxy)์ ๋คํธ์ํฌ ํ๋ฌ๊ทธ์ธ(calico, flannel ๋ฑ)์ด๋ผ๋ ์ปดํฌ๋ํธ๋ค์ด ์คํ๋๋ค. ๋ฌผ๋ก ์ด๋ฌํ ์ปดํฌ๋ํธ๋ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก '์ปจํ
์ด๋'์ ํํ๋ก ์คํ๋๋ค. ์ค์ ๋ก ๋ง์คํฐ ๋
ธ๋์์ ์ง๊ธ ์คํ ์ค์ธ ์ปจํ
์ด๋๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋ค์ํ ์ฟ ๋ฒ๋คํฐ์ค ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ด ์ปจํ
์ด๋ ํํ๋ก ์คํ ์ค์์ ์ ์ ์๋ค.
์ ๋ฒ ํฌ์คํ
์์ ์ฐ๋ฆฌ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ค์นํ๊ธฐ ์ํด์ ์ฌ๋ฌ๊ฐ์ง ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์๋๋ฐ, ๊ทธ ์ค์ kubelet์ ๋ํด์ ๋ค์ด๋ฐ์๋ค. kubelet์ ํด๋ฌ์คํฐ์ ์ปจํ
์ด๋๋ฅผ ์ง์ ์ ์ผ๋ก ์ ์ดํ๋ ์ญํ ์ ํจ์ผ๋ก์จ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ์ํด ๋ชจ๋ ๋
ธ๋์์ kubelet ์ด๋ผ๋ ์์ด์ ํธ๊ฐ ์คํ์ด ๋๋ค. ์ปจํ
์ด๋ ์์ฑ๊ณผ ์ญ์ ๋ฟ๋ง ์๋๋ผ ๋ง์คํฐ์ ์์ปค ๋
ธ๋ ๊ฐ์ ํต์ ์ญํ ๊น์ง ํจ๊ป ๋ด๋นํ๋ฉฐ ์ค์๋๊ฐ ๋งค์ฐ ๋์ ์ปดํฌ๋ํธ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ kubelet์ด ์ ์์ ์ผ๋ก ์คํ๋์ง ์๋ ๋
ธ๋๋ ์ฟ ๋ฒ๋คํฐ์ค์ ์ฐ๊ฒฐ์ด ์ ๋๋ก ๋์ง ์์ ์๋ ์๋ค.
๋ํ ์ปจํ
์ด๋ ๋ฐํ์ ์ธํฐํ์ด์ค ์ฆ, CRI๋ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ๋ ๋ค๋ฅธ ํ๋์ ์ปดํฌ๋ํธ์ด๋ค. ์๋ํ๋ฉด ์ปจํ
์ด๋๋ฅผ ์ ์ดํ๊ธฐ ์ํด์ CRI๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค๋ฅธ ์์๋ก, ๋์ปค ์ค์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋์ปค ์์ง ์์ฒด์ ๋ด์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ปจํ
์ด๋๋ฅผ ์ ์ดํ๊ธฐ ์ํด์ ๋ณ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ์คํํ๋ ๊ฒ์ ์๋์๋ค. ํ์ง๋ง ์ฟ ๋ฒ๋คํฐ์ค๋ CRI ๊ตฌํ์ฒด ์ค ํ๋๋ฅผ ์ฌ์ฉํด์ ์ปจํ
์ด๋๋ฅผ ์ ์ดํ๊ธฐ ๋๋ฌธ์ CRI ๊ตฌํ์ฒด์ ์ปดํฌ๋ํธ๋ฅผ ๋ณ๋๋ก ์คํํ๋ ๊ฒ์ด๋ค. ์ค์ ๋ก, kubelet์ด ์ปจํ
์ด๋๋ฅผ ์ ์ดํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ CRI ์ข
๋ฅ ์ค ํ๋๋ก containerd, cri-o ๋ฑ ์ด ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ค.
์ด์ ๊ทธ๋ฌ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ง์ ๋ค๋ฃจ์ด ๋ณด๋ฉด์ ๊ธฐ์ด ๊ฐ๋
์ ์์๊ฐ ๋ณด์. ์ฟ ๋ฒ๋คํฐ์ค์์ ์ปจํ
์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ์ํค๊ธฐ ์ํด์๋ ๋ฐ๋์ ์์์ผ ํ ๋ช ๊ฐ์ง ์ค๋ธ์ ํธ๊ฐ ์กด์ฌํ๋ค. ๋ฐ๋ก ํ, ๋ ํ๋ฆฌ์นด์
, ์๋น์ค, ๋ํ๋ก์ด๋จผํธ๊ฐ ๊ทธ๊ฒ๋ค์ด๋ค. ์ด์ ์ด๊ฒ๋ค์ ๋ํด์ ํ๋์ฉ ๋ฐฐ์๋ณด๋๋ก ํ์.
1. ์ฟ ๋ฒ๋คํฐ์ค์์ ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ๋ณธ ๋จ์, ํ(Pod)
์ฟ ๋ฒ๋คํฐ์ค์์ ํ์ ์ปจํ
์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ธฐ๋ณธ ๋จ์๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ 1๊ฐ ์ด์์ ์ปจํ
์ด๋๋ก ๊ตฌ์ฑ๋ ์ปจํ
์ด๋์ ์งํฉ์ด๋ค. ๋์ปค ๊ด๋ จ ์๋ฆฌ์ฆ๋ฅผ ์ ์ ํ์ํด๋ณด๋ฉด, ๋์ปค ์์ง์์๋ ๊ธฐ๋ณธ ๋จ์๊ฐ ๋์ปค ์ปจํ
์ด๋์๊ณ , ๋์ปค ์ค์์์๋ '์๋น์ค'์๋ค. ์ด์ฒ๋ผ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ๊ธฐ๋ณธ ๋จ์๊ฐ ์กด์ฌํ๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก ํ์ด๋ค. ํ์ ๊ฐ๋
์ ์ข ๋ ์๋ฟ๊ฒ ์ดํดํ๊ธฐ ์ํด ํ๋ ์์๋ฅผ ๋ค์ด๋ณด์.
๋ง์ฝ Nginx ์น ์๋น์ค๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ด์ฉํด ์๋น์คํ๋ ค๊ณ ํ๋ค๊ณ ํด๋ณด์. ์ด๋ป๊ฒ ํด์ผํ ๊น? ๋ฐฉ๋ฒ์ ๋จ์ํ๋ค. ๋ฐ๋ก Nginx ์๋ฒ ์ปจํ
์ด๋ 1๊ฐ๋ฅผ ํฌํจํ ํ 1๊ฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ๋ง์ฝ ์ด์ ๋์ผํ ํ ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ฉด ๋์ผํ ๊ตฌ์ฑ์ ํ์ ์ฌ๋ฌ๊ฐ ์์ฑํ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ์ค์ต์ผ๋ก, Nginx ์๋ฒ ์ญํ ์ ํ๋ ์ปจํ
์ด๋ 1๊ฐ๋ฅผ ํฌํจํ ํ 1๊ฐ๋ฅผ ์์ฑํ๋ YAML ํ์ผ์ ์์ฑํด๋ณด์. YAML ํ์ผ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ฐธ๊ณ ๋ก ์ค์ต์ ์ํํ๊ธฐ ์ํด์ ๋ง์คํฐ ๋
ธ๋ 1๊ฐ, ์์ปค ๋
ธ๋ 3๊ฐ๋ฅผ ํ์ฉํด ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: zedd-nginx-pod
spec:
containers:
- name: zedd-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
์ YAML ํ์ผ์ ํ์ผ๋ก ๋ฐฐํฌํด๋ณด๊ธฐ ์ ์ ์์ฑ๋ YAML ํ์ผ ๋ด์ฉ์ ํญ๋ชฉ์ ๋ํด ๊ฐ๊ฐ ์ดํด๋ณด๋ ์๊ฐ์ ๊ฐ๋๋ก ํ์.
- apiVersion : YAML ํ์ผ์์ ์ ์ํ ์ค๋ธ์ ํธ์ API ๋ฒ์ ์ ์๋ฏธ. ์ค๋ธ์ ํธ์ ์ข ๋ฅ ๋ฐ ๊ฐ๋ฐ ์ฑ์๋์ ๋ฐ๋ผ ํด๋น ๊ฐ์ด ๋ฌ๋ผ์ง ์ ์์
- kind : ๋ฆฌ์์ค์ ์ข ๋ฅ๋ฅผ ์๋ฏธ. ์ ์์์์๋ ํ์ ์์ฑํ๋ ค๊ณ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ด Pod์ด ๋๋ค. kind ํญ๋ชฉ์์ ์ฌ์ฉํ ์ ์๋ ๋ฆฌ์์ค ์ค๋ธ์ ํธ ์ข ๋ฅ๊ฐ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ, kubectl api-resources ๋ช ๋ น์ด๋ฅผ ์น๋ฉด ์ถ๋ ฅ๋๋ ํ๋ฉด ์ค ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ KIND ๋ผ๋ ํญ๋ชฉ์ ๋ณด๋ฉด ํ์ธํ ์ ์๋ค.
- metadata : ๋ฆฌ์์ค์ ๋ถํ๋ ๋ผ๋ฒจ, ์ฃผ์, ์ด๋ฆ๊ณผ ๊ฐ์ ๋ฆฌ์์ค์ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ์๋ฏธ
- spec : ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ธฐ ์ํ ์์ธํ ์ ๋ณด๋ฅผ ์๋ฏธ. ์ ์์์์๋ ํ์ ์ปจํ ์ด๋๋ก ์์ฑํ๊ธฐ ์ํด containers ๋ผ๋ ํค์๋๋ฅผ ์์ฑํ๊ณ , ํ์ ํญ๋ชฉ์ ํด๋น ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ๊ธฐ๋ฐ์ด ๋๋ ์ด๋ฏธ์ง, ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ ํฌํธ ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค. ๋๋ถ๋ถ์ ํค์๋๊ฐ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ๋ฐฐ์ ์ ๋์ ๋น์ทํ๋ค.
์ด์ ๊ทธ๋ฌ๋ฉด ์ ์ํ YAML ํ์ผ์ ์ด์ฉํด์ ํ์ ์ฟ ๋ฒ๋คํฐ์ค์ ์์ฑํด๋ณด๋๋ก ํ์. ๋ช
๋ น์ด๋ ์๋์ ๊ฐ๋ค.
$ kubectl apply -f nginx-pod.yaml
๊ทธ๋ฌ๋ฉด ํ์ด ๋ง๋ค์ด์ก๋ค๋ ๋ฉ์ธ์ง๊ฐ ์ถ๋ ฅ๋๋ค. ๊ทธ๋ฆฌ๊ณ kubectl get pods ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ ์์ฑ๋ ํ์ ์๋์ฒ๋ผ ํ์ธํด๋ณด์. ์ฐธ๊ณ ๋ก kubectl get [์ค๋ธ์ ํธ ์ด๋ฆ] ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด ํด๋น ์ค๋ธ์ ํธ์ ๋ชฉ๋ก์ ํ์ธํ ์ ์๋ค. '์ค๋ธ์ ํธ ์ด๋ฆ'์๋ ํ์ด ๋ ์๋ ์๊ณ ๋
ธ๋, ๋๋ ๊ธฐํ ์ค๋ธ์ ํธ ์ด๋ฆ์ด ๋ค์ด๊ฐ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ์์ฑ๋ ํ๋์ ์ปจํ
์ด๋ ์ฆ, Nginx ์๋ฒ๋ก ํ
์คํธ ์์ฒญ์ ๋ณด๋ด๋ณด๋๋ก ํ์. ์ YAML ํ์ผ์์ ๋น๋ก ํฌํธ๋ฒํธ๋ฅผ ์ ์ํ๊ธด ํ์ง๋ง, ํ์ฌ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ๋
ธ์ถ๋ ์ํ๋ ์๋๋ค. ๋ง์ฝ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ธ๋ถ์์ ํ๋์ ์ ๊ทผํ๋ ค๋ฉด ์๋น์ค๋ผ๊ณ ํ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ณ๋๋ก ์์ฑํด์ผ ๊ฐ๋ฅํ๋ค. ๋์ปค ์ปจํ
์ด๋๋ก ์น๋ฉด docker run ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ ๋ ํฌํธํฌ์๋ฉ ์ต์
์ธ -p(--publish) ์ต์
์ ์ง์ ํด์ฃผ ์์ ์ฑ ์คํํ ๊ฒ์ธ ์
์ด๋ค. ์๋น์ค ์คํ์ ํธ์ ๋ํด์๋ ์ถํ์ ๋ฐฐ์ฐ๋๋ก ํ๊ณ ์ง๊ธ์ ์๋น์ค ์ค๋ธ์ ํธ ์์ด ์ปจํ
์ด๋์ IP ๋ง์ผ๋ก ํด๋น ํ๋์ ์ปจํ
์ด๋์ ์ ๊ทผํด๋ณด๋๋ก ํ์. ์ฐ์ ์ฐ๋ฆฌ๋ ์์ฑํ ํ๋์ ์ปจํ
์ด๋ IP ์ ๋ณด๊ฐ ํ์ํ๋ค. ์๋ ๋ช
๋ น์ด๋ฅผ ํ์ฉํ๋ฉด ํน์ ํ๋์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
$ kubectl describe pods zedd-nginx-pod
์ ๋ช
๋ น์ด๋ก ์ถ๋ ฅ๋ ๋ด์ฉ ์ค IP ๋ผ๋ ํญ๋ชฉ์ ํ์ธํ ์ ์๋ค. ์ฌ๊ธฐ์ ์๊ฒ ๋ IP๋ 123.456.789.000 ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์์ปค๋
ธ๋ 3๊ฐ ์ค ์๋ฌด ๋
ธ๋๋ก ๋ค์ด๊ฐ ํด๋น IP ์ฃผ์๋ก curl ๋ช
๋ น์ด๋ฅผ ๋ ๋ ค๋ณด๋๋ก ํ์.
ํฐ๋ฏธ๋ ํ์ค ์ถ๋ ฅ์ ๋ณด๋ฉด nginx ์๋ฒ์์ ๋ณด์ฌ์ง๋ HTML Response๊ฐ ๋ฐํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์์ฑํ ํ๋๋ฅผ ์ญ์ ํด๋ณด๋๋ก ํ์. ๋ง์คํฐ ๋
ธ๋์์ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅ์์ผ์ฃผ์.
$ kubectl delete -f nginx-pod.yaml
์ฌ๊ธฐ๊น์ง ๋ณด๋ฉด ์ฟ ๋ฒ๋คํฐ์ค์ ํ์ด ๋์ปค์ ์ปจํ
์ด๋์ ๋ณ ๋ค๋ฅธ ์ฐจ์ด๊ฐ ์๋ ๋ฏ ํ๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฟ ๋ฒ๋คํฐ์ค์ ํ์ ๋ ์์ฃผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ญ๊น? ํ์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฐ๋ก ์ฌ๋ฌ ๋ฆฌ๋
์ค ๋ค์์คํ์ด์ค๋ฅผ ๊ณต์ ํ๋ ์ฌ๋ฌ ์ปจํ
์ด๋๋ค์ ์ถ์ํ๋ ์งํฉ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํจ ๋๋ฌธ์ด๋ค. ๋์ฒด ์ด๊ฒ ๋ฌด์จ ์ด์ผ๊ธฐ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค. ์ด ๋ป์ ์ดํดํ๊ธฐ ์ํด์ ํ๋ ์ถ๊ฐ์ ์ธ ์ค์ต์ ์งํํด๋ณด์. ๋ฐฉ๊ธ ์ญ์ ํ Nginx ํ๋๋ฅผ ๋ค์ ์์ฑํด๋ณด๊ณ ํ ๋ชฉ๋ก์ ์ถ๋ ฅํด๋ณด์.
READY ํญ๋ชฉ์ ๋ณด๋ฉด 1/1 ์ด๋ผ๊ณ ์ฐ์ฌ์ ธ ์๋ค. ์ด๋ ํด๋น ํ๋์ ์ปจํ
์ด๋๊ฐ 1๊ฐ๊ฐ ์ ์๋์ด ์๊ณ , ๊ทธ ์ค 1๊ฐ์ ์ปจํ
์ด๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์์์ ์๋ฏธํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ 1/1์ด ์๋ 2/2, 3/3, 2/3์ ๋ถ๊ฐ๋ฅํ ๊น? ๊ฐ๋ฅํ๋ค. ๋ฌผ๋ก ๋๋ถ๋ถ์ ์ฟ ๋ฒ๋คํฐ์ค ์ปจํ
์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฒ๋ผ 1๊ฐ์ ์ปจํ
์ด๋๋ก ํ๋๋ฅผ ๊ตฌ์ฑํด ์ฌ์ฉํ๊ธด ํ์ง๋ง ๋ฐ๋์ 1๊ฐ์ ์ปจ์ํฐ๋๋ก ๊ตฌ์ฑ๋์ผ ํ๋ ๊ฒ์ ์๋๋ค. ์ฆ, READY ํญ๋ชฉ์ ํ๋ ๋ด์ ์ปจํ
์ด๋ ๊ฐ์์ ๋ฐ๋ผ 2/2๊ฐ ๋ ์๋, 3/3์ด ๋ ์๋ ์๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ Nginx ํ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ ์ํ YAML ํ์ผ์ ์ข ๋ ํ์ฅํด๋ณด๋ ค ํ๋ค. ์ฌ์ฉํ YAML ํ์ผ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: zedd-nginx-pod-v2
spec:
containers:
- name: zedd-nginx-container
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
- name: zedd-ubuntu-container
image: alicek106/rr-test:curl
command: ["tail"]
args: ["-f", "/dev/null"]
ํ์ผ์ ๋ณด๋ฉด ์ ์๋ถ์ด ์ง์ ๋ง๋ ์ค์ต์ฉ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฐ๋ถํฌ ์ปจํ
์ด๋๋ฅผ ํ๋ ๋ ์์ฑํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฐธ๊ณ ๋ก YAML ํ์ผ์ ์ ์๋ command๋ ๋์ปค์์ Dockerfile ๋ช
๋ น์ด์ ENTERYPOINT์ ๋์ผํ๊ณ , args๋ CMD์ ๋์ผํ๋ค. ํน์ ๊ธฐ์ต์ด ์๋๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์. ๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋
์ค์ tail ๋ช
๋ น์ด๋ ์ผ์ข
์ ์ค์๊ฐ ๋ก๊ทธ๋ฅผ ๋ชจ๋ํฐ๋ง ํ๋ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์๋๋ฐ, YAML ํ์ผ์ ์ ์๋ ๊ฒ์ด ๊ทธ๊ฒ์ด๋ค. ์ด์ ๋ํด์๋ ์ด์ ๋ฆฌ๋
์ค ํฌ์คํ
์์ ๋ฐฐ์ด์ ์ด ์์ผ๋ ๊ทธ๊ณณ์ ์ฐธ๊ณ ํ์. ๊ทธ๋ฌ๋ฉด ์ด์ ํ์ ์์ฑํด๋ณด์.
์๋ฅผ ๋ณด๋ฉด zedd-nginx-pod-v2 ๋ผ๋ ์ด๋ฆ์ ํ์ด ์๊ฒผ๊ณ READY ํญ๋ชฉ์ 2/2๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ปจํ
์ด๋ ์ค ์ฐ๋ถํฌ ์ปจํ
์ด๋๋ก ์๋ ๋ช
๋ น์ด๋ฅผ ํตํด ๋ค์ด๊ฐ๋ณด์. ์ฐธ๊ณ ๋ก -c ์ต์
์ ์ฃผ๋ฉด ํด๋น ํ ๋ด์ ํน์ ์ปจํ
์ด๋๋ก ๋ค์ด๊ฐ ์ ์๋ค.
$ kubectl exec -it zedd-nginx-pod-v2 -c zedd-ubuntu-container bash
๊ทธ๋ฌ๋ฉด ์ด์ ์ฐ๋ถํฌ ๋ด๋ถ๋ก ๋ค์ด์จ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด ๋ curl localhost ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ ๊ธฐํ ์ผ์ด ๋ฐ์ํ๋ค.
์ฐ๋ถํฌ ์ปจํ
์ด๋์์ ๋ก์ปฌ ํธ์คํธ๋ก curl ๋ช
๋ น์ด๋ฅผ ๋ ๋ ธ๋๋ฐ, Nginx ์๋ฒ์ HTML Response๊ฐ ๋ฐํ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์๋ ์ด๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊ฑธ๊น? ๋ถ๋ช
์ YAML์์ ์ ์ํ ์ฐ๋ถํฌ ์ปจํ
์ด๋๋ Nginx ์๋ฒ ์ญํ ์ ํ๋ ์ปจํ
์ด๋๊ฐ ์๋์๋๋ฐ ๋ง์ด๋ค. ์ฌ์ค ์ด HTML Response๋ฅผ ๋ณด๋ด์ค ์๋ฒ๋ ์ด๋ฐ๋ก ์ฐ๋ถํฌ์ ๊ฐ์ ํ์ ๋์์ ธ ์๋ ์ปจํ
์ด๋๋ฅผ ์๋ฏธํ๋ค. ์ด๋ฐ ๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๊ฐ ๋ฐ๋ก ํ๋ ๋ด์ ์ปจํ
์ด๋๋ค์ด ๋คํธ์ํฌ ๋ค์์คํ์ด์ค ๋ฑ๊ณผ ๊ฐ์ ๋ฆฌ๋
์ค ๋ค์์คํ์ด์ค๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฐธ๊ณ ๋ก ์ด์ ๋น์ทํ๊ฒ, ๋์ปค์์๋ ์ด๋ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ ์ ์์๋ค. ๋ฐ๋ก ๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๋ฅผ ์ง์ ์์ฑํด์ --net ๊ณผ --net-alias ์ต์
์ ์ฌ์ฉํด์ค ๊ฒฝ์ฐ๋ค. ์ด์ ๋ํ ์๋ฃ๋ ์ด์ ํฌ์คํ
์ ์ฐธ๊ณ ํ์.
์ ์์์์๋ ํ
์คํธ๋ฅผ ์ํด ์ด๋ป๊ฒ ๋ณด๋ฉด ์๋ฏธ์๋ ์ฐ๋ถํฌ ์ปจํ
์ด๋๋ฅผ ํ๋ ์ถ๊ฐํ๋ค. ๊ทธ๋ฌ๋ฉด ์ค์ ๋ก ์ด๋ ๊ฒ ํ๋์ ํ๋ ๋ด์ 2๊ฐ ์ด์์ ์ปจํ
์ด๋๋ฅผ ์คํ์ํค๋ ๊ฒฝ์ฐ๊ฐ ์์๊น? ๋ฐ๋ก ํ๋์ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋์ํ๊ธฐ ์ํด์ ํ์ํ ์ปจํ
์ด๋๋ค์ด 2๊ฐ ์ด์์ผ ๋์ด๋ค. ์ฒ์ ์ค์ต ๋ ์ฐ๋ฆฌ๋ Nginx ์ปจํ
์ด๋ 1๊ฐ๋ง์ ํ๋์ ํ๋๋ก ์ ์ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๋๋ ํ๋์ ํ๋ ๋ด์ 2๊ฐ ์ด์์ Nginx ์ปจํ
์ด๋๋ฅผ ์ ์ํ๋ฉด ์๋๋๊ฐ? ๋ฌผ๋ก ๋๊ธฐ๋ ํ๋ค. ํ์ง๋ง ๋ฐ๋์งํ์ง ์๋ค. ์๋ํ๋ฉด Nginx ์๋ฒ๋ ๋จ์ง Nginx ์ปจํ
์ด๋ 1๊ฐ๋ง์ผ๋ก ์์ ํ ์ดํ๋ฆฌ์ผ์ด์
์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ค๊ฐ ๋ง์ฝ Nginx ์๋ฒ์ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด์ ๋ณ๋์ ์ปจํ
์ด๋๋ฅผ ํ๋ ๋ถ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ์ด ๋๋ Nginx ์ปจํ
์ด๋์ ๋ณ๋์ ์ปจํ
์ด๋ 2๊ฐ๊ฐ ๋์์ ์คํ๋์ด์ผ ์์ ํ ์ดํ๋ฆฌ์ผ์ด์
์ด๋ผ๊ณ ํ ์ ์๊ณ , ์ด ๋์ผ๋ง๋ก ํ๋์ ํ๋ ๋ด์ 2๊ฐ์ ์ปจํ
์ด๋๋ฅผ ์คํ์์ผ์ผ ํ๋ ์ ์ ํ ๊ฒฝ์ฐ๊ฐ ๋๊ฒ ๋ค. ์ฐธ๊ณ ๋ก ์ด๋ฐ ๋ณ๋์ ์ปจํ
์ด๋๋ฅผ ๋ถ๊ฐ์ ์ธ ์ปจํ
์ด๋๋ผ๋ ์๋ฏธ๋ก, sidecar ์ปจํ
์ด๋๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ํ๋ ๋ด์ ์คํ๋๊ณ ์๋ ์ปจํ
์ด๋๋ค์ ๋ฐ๋์ ๊ฐ์ ์์ปค ๋
ธ๋์์ ํจ๊ป ์คํ๋๊ณ ์๋ค๋ ๊ฒ๋ ์์๋์.
2. ์ฌ๋ฌ ๊ฐ์ ํ๋๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ์ปจํธ๋กค๋ฌ, ๋ ํ๋ฆฌ์นด์ (ReplicaSet)
๋ ํ๋ฆฌ์นด์
์ด๋, ๋์ผํ ์ฌ๋ฌ ๊ฐ์ ํ๋ ๋ฌถ์์ ์๋ฏธํ๋ค. ์ ์ ์ฌ๊ธฐ์ ์ปจํ
์ด๋, ํ๋, ๋ ํ๋ฆฌ์นด์
์ด 3๊ฐ์ง ๊ฐ๋
์ ๋ํ ๊ด๊ณ๋ฅผ ์ ๊น ์ ๋ฆฌํ๊ณ ๋์ด๊ฐ์. ์๋ ๊ทธ๋ฆผ์ ๋ณด์.
๋ ํ๋ฆฌ์นด์
์ ๋์ปค ์ค์์์์ '์๋น์ค'์ ์ ์ฌํ ๊ฐ๋
์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค์์ ๋ ํ๋ฆฌ์นด์
์ด ํ์ํ ์ด์ ๋ ๋ญ๊น? YAML ํ์ผ์ ๋จ์ํ ํ๋ง ์ ์ํด์ ์์ฑํ๊ฒ ๋๋ฉด ํ์ ์์ ์ฃผ๊ธฐ(Lifecycle)๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์ค์ ๋ก ์ธ๋ถ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ง์ดํฌ๋ก ์๋น์ค ๊ตฌ์กฐ์์ ์ฌ์ฉ์๊ฐ ์ง์ ํ์ ์์ ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๋ค๋ฉด ๋งค์ฐ ๊น๋ค๋กญ๊ณ ๊ณ ๋ ์์
์ผ ๊ฒ์ด๋ค. ์ด๋ ํ ์ด์ ์์ ํ์ด ์กด์ฌํ๋ ํน์ ๋
ธ๋์ ์ฅ์ ๊ฐ ์๊ฒจ์ ๋ค์ด๋๊ฑฐ๋ ํ ๋๋ง๋ค ์ฌ๋์ด ์ง์ ๋ค์ ์์ฑํด์ฃผ์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก ์ฟ ๋ฒ๋คํฐ์ค์ ๋ ํ๋ฆฌ์นด์
์ด๋ผ๋ ์ค๋ธ์ ํธ์ด๋ค. ๋ ํ๋ฆฌ์นด์
์ ์ญํ ์ ํฌ๊ฒ 2๊ฐ์ง๋ก, ์ ํด์ง ์์ ๋์ผํ ํ์ด ํญ์ ์คํ๋๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ, ๊ทธ๋ฆฌ๊ณ ๋
ธ๋ ์ฅ์ ์ํฉ ์ฒ๋ผ ํ์ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ผ ๋, ๋ค๋ฅธ ๋
ธ๋์์ ๋์ผํ ํ์ ๋ค์ ์์ฑํ๋ ์ญํ ์ ํ๋ค. ์ด๊ฒ๋ง์ ๋ ๋์ปค ์ค์์์์ '์๋น์ค'์ ๋น์ทํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ๋ ํ๋ฆฌ์นด์
์ ์ ์ํจ์ผ๋ก์จ ํ์ ์ฌ๋์ด ์๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์์์ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ค. ๊ทธ๋์ ์ค์ ๋ก ์ฌ๋์ด ์ง์ ์ ์ผ๋ก ํ์ ๊ด๋ฆฌํ ์ผ์ ๊ฑฐ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์ด์ ์ง์ ๋ ํ๋ผ์นด์
์ค๋ธ์ ํธ๋ฅผ YAML ํ์ผ์ ํตํด์ ์์ฑ์์ผ๋ณด๋๋ก ํ์. ์ ์ํ YAML ํ์ผ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: zedd-nginx-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: zedd-nginx-pods-label
template:
metadata:
name: zedd-nginx-pod
labels:
app: zedd-nginx-pods-label
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
YAML ํ์ผ์ ํญ๋ชฉ ์์๋ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ๋ค. ๊ฐ์ฅ ๋จผ์ ์์ฑ๋ ๋ ํ๋ฆฌ์นด์
์ ๋ํด 1~5๋ฒ์งธ ์ค๊น์ง ํด์ ์ ์๋ฅผ ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ํ๋ฆฌ์นด์
๋ด์์ ์์ฑ๋ ํ๋์ ๋ํ ์ค์ ์ ํด์ฃผ๋ฉด ๋๋๋ฐ, template ํค์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ ์๋ ํ๋๋ฅผ ๋ช ๊ฐ ์์ฑํ ๊ฒ์ธ์ง๋ฅผ ๋ช
์ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ template ํค์๋ ์๋์ ๋ด์ฉ์ ์ด๋ ํ ํ๋๋ฅผ ์ด๋ป๊ฒ ์์ฑํ ๊ฒ์ธ์ง์ ๋ํด ๋ช
์ํ๋ค. ์ด๋ฅผ ํ๋ ์คํ ๋๋ ํ๋ ํ
ํ๋ฆฟ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค. ์ด์ ๊ทธ๋ผ ์ YAML ํ์ผ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ๋ ํ๋ฆฌ์นด์
์ ์์ฑํด๋ณด์.
$ kubectl apply -f nginx-replicaset.yaml
๊ทธ๋ฆฌ๊ณ ์๋์ ์ฒซ ๋ฒ์งธ ๋ช
๋ น์ด๋ก ์์ฑ๋ ํ๋ค์ ์ดํด๋ณด๊ณ , ๋ ๋ฒ์งธ ๋ช
๋ น์ด๋ก ์์ฑํ ๋ ํ๋ฆฌ์นด ์
๋ชฉ๋ก์ ์ถ๋ ฅํด๋ณด์.
(์ฐธ๊ณ ๋ก po๋ ํ์ rs๋ ๋ ํ๋ฆฌ์นด ์
์ ์ค์ ๋จ์ด๋ฅผ ์๋ฏธํ๋ค. ์ด๋ฐ ์ค๋ธ์ ํธ์ ์ค์๋ง์ ๋ณด๊ณ ์ถ๋ค๋ฉด kubectl api-resources์ SHORTNAMES ํญ๋ชฉ์ ๋ณด๋ฉด ๋๋ค)
$ kubectl get po
$ kubectl get rs
์ด๋ฒ์๋ ๋ฐฉ๊ธ ์์ฑํ ๋ ํ๋ฆฌ์นด์
์์ ์ ์ํ ํ ๊ฐ์๋ฅผ 4๊ฐ๋ก ๋๋ ค๋ณด์. ํ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ ํ๋ฆฌ์นด์
(์ค๋ธ์ ํธ)์ ๋ฆฌ์์ค ์์ฑ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๊ธฐ์กด์ ์์ฑํ ๋ ํ๋ฆฌ์นด์
์ ๊ตณ์ด ์ญ์ ํ ํ์๊ฐ ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์๋ ์ด๋ฌํ ๋ณ๊ฒฝ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. kubectl edit ๋๋ kubectl patch ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ์์์ ์ ์ํ YAML ํ์ผ์์ ํ
์คํธ ์๋ํฐ๋ก ์ง์ replicas ํญ๋ชฉ์ 3์์ 4๋ก ์์ ํ ์๋ ๋ช
๋ น์ด๋ฅผ ๋ค์ ์คํ์์ผ์ฃผ์.
$ kubectl apply -f nginx-replicaset.yaml
์ ํ๋ฉด์ด ๋ณด์ฌ์ฃผ๋ ๊ฒ์ฒ๋ผ kubectl delete ๋ช
๋ น์ด๋ก ๊ธฐ์กด์ ์กด์ฌํ ๋ ํ๋ฆฌ์นด์
์ ์ญ์ ํด์ฃผ์ง ์์๋ ๋ฆฌ์์ค ๋ณ๊ฒฝ ํ ์ฌ์์ฑ์ด ๊ฐ๋ฅํ๋ค. ๋จ, ๊ทธ๋ด ๊ฒฝ์ฐ ์ ํ๋ฉด์์ ์ฒ๋ผ ํด๋น ๋ ํ๋ฆฌ์นด์
์ด ๋ณ๊ฒฝ๋์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ 'configured' ํค์๋๊ฐ ๋ฑ์ฅํ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ ํ๋ฆฌ์นด์
์ ์ญ์ ํ ๊ฒฝ์ฐ ํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก kubectl delete ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋น์ฐํ๊ฒ๋ ๋ ํ๋ฆฌ์นด์
์ ์ญ์ ํ๋ฉด ๊ทธ ๋ ํ๋ฆฌ์นด์
๋ด์ ์๋ ํ๋๋ ๊ฐ์ด ์ญ์ ๋๋ค.
$ kubectl delete -f nginx-replicaset.yaml
$ kubectl delete rs zedd-nginx-replicaset
๋ค์์ ๋ ํ๋ฆฌ์นด์
์ ๋์ ์๋ฆฌ๋ฅผ ๊ฐ๋จํ๊ฒ ์์๋ณด์. ์๋ฆฌ๋ฅผ ์์๋ณด๊ธฐ ์ ์ ์ฐ๋ฆฌ๋ ๋ ํ๋ฆฌ์นด์
์ ์กด์ฌ ์ด์ ์ ๋ํด ์๊ณ ๋์ด๊ฐ๋ฉด ์ข๋ค. ๋ ํ๋ฆฌ์นด์
์ ์กด์ฌ ์ด์ ๋ ๋ญ๊น? ๋ฌผ๋ก ๋์ผํ ํ ์ฌ๋ฌ ๊ฐ๋ฅผ ํ ๋ฒ์ ์์ฑํ๋ ๊ฒ๋ ์๊ฒ ์ง๋ง ๊ทธ๋ณด๋ค ๋ ์ค์ํ ๊ฒ์ ์ผ์ ๊ฐ์์ ํ๋ฅผ ์ ์งํ๋ ค๊ณ ํ๋ ๊ฒ์ด๋ค.
์์์ ์ฐ๋ฆฌ๋ ๋ ํ๋ฆฌ์นด์
์ ์์ฑํ๋ฉด์ ๊ทธ ์์ ์ ์๋์ด ์๋ ํ๋ ๊ฐ์ด ์์ฑ๋๋ ๊ฒ์ ๋ณผ ์ ์์๋ค. ์ด๊ฒ์ ๋ณด๊ณ ๋ ํ๋ฆฌ์นด์
์ ํ๋์ ์ฐ๊ฒฐ๋์ด ์๋ค๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง ์๋๋ค. ๋ฌผ๋ก ๋์จํ ์ฐ๊ฒฐ(Loosely coupled)์ ์ ์งํ๊ณ ์๊ธด ํ์ง๋ง, ์ด๋ YAML ํ์ผ์์ ์ ์ํ ๋ผ๋ฒจ ์
๋ ํฐ(Label Selector)๋ก ์ธํด ์ฐ๊ฒฐ๋ ๊ฒ์ด๋ค. ๋ค์ ๋งํด, ๋ ํ๋ฆฌ์นด์
๊ณผ ํ ๊ฐ์ ์ฐ๊ฒฐ์ YAML ํ์ผ์ ์์ฑํ ์ฌ๋์ด ๋ง๋ค์ด์ค ๊ฒ! ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด ์ ์ํ YAML ํ์ผ ์ค ์๋ ๋
ธ๋์ ํ์์ ํ
์คํธ๋ฅผ ์ ์ฌํ ์ดํด๋ณด์.
๋ผ๋ฒจ ์
๋ ํฐ๋ ๋ฐ๋ก ์ ๋ด์ฉ ์ค matchLabels ๋ผ๋ ํญ๋ชฉ์ ์๋ฏธํ๋ค. ํด๋น ํญ๋ชฉ์๋ key : value ์์ ํํ๋ก ์ ์๋์ด ์๋ค. ์ด ๋ผ๋ฒจ์ ์ฃผ๋ก ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฅํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ ๋ฆฌ์์ค์ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ํํํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ ๋ง๊ณ ๋ ๋ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ํ๋๋ฐ ๋ฐ๋ก ์๋ก ๋ค๋ฅธ ์ค๋ธ์ ํธ(ํ, ๋ ํ๋ฆฌ์นด์
๋ฑ..)๊ฐ ์๋ก๋ฅผ ์ฐพ์์ผ ํ ๋ ์ฌ์ฉ๋๋ค๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๋ ํ๋ฆฌ์นด์
์ ์ YAML ํ์ผ์ matchLabels ํญ๋ชฉ์ ์ฐธ์กฐํด์ ํด๋น ๋ผ๋ฒจ์ ๊ฐ์ง๋ ํ์ ๊ฐ์์ replicas ํญ๋ชฉ์ ์ ํ์๋ ์ซ์์ ์ผ์นํ๋๋ก ๋ง์ถฐ์ฃผ๋ ค๊ณ ๋
ธ๋ ฅํ๋ค. ์ฆ, ๋ง์ฝ ํด๋น ๋ผ๋ฒจ์ ๊ฐ๋ ํ์ ๊ฐ์๊ฐ replicas ํญ๋ชฉ์ ์ซ์๋ณด๋ค ์ ๋ค๋ฉด ๋์ผํ ํ์ ์ถ๊ฐ๋ก ์์ฑํ๋ค๋ ๊ฒ์ด๋ค. ์ด ๋ ์์ฑํ๋ ํ์ ์คํ์ teamplate ํญ๋ชฉ์ ์ ํ์๋ ๋๋ก ์์ฑํ๋ค. ๋ฌผ๋ก ๋ฐ๋๋ก ํด๋น ๋ผ๋ฒจ์ ๊ฐ๋ ํ์ ๊ฐ์๊ฐ ๋ ํฌ๋ค๋ฉด ํ์ ์ญ์ ์์ผ์ฃผ๊ธฐ๋ ํ๋ค.
๊ทธ๋์ ์ YAML ํ์ผ์ ์คํ์ํค๋ฉด ๋ ํ๋ฆฌ์นด์
์ด ์ต์ด๋ก ์์ฑ๋์์ ๋๋ app: zedd-nginx-pods-label ์ด๋ผ๋ ๋ผ๋ฒจ์ ๊ฐ๋ ํ์ด ์์ฑ๋์ด ์์ง ์์ ์ํ์ผ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฆ์ replicas ํญ๋ชฉ์ ์๋ 4๊ฐ๋ฅผ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด์ template ํญ๋ชฉ์ ์๋ ์คํ๋๋ก ํ์ 4๊ฐ ์์ฑํ๊ฒ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ๋ผ๋ฒจ์ ๊ฐ๋ ํ์ ์๋กญ๊ฒ ์์ฑํ๋ ค๊ณ ํด๋ ๋ ํ๋ฆฌ์นด์
์ ๋์ด์ ํด๋น ๋ผ๋ฒจ์ ๊ฐ๋ ํ์ ์์ฑํ์ง ์๋๋ค. ์๋ํ๋ฉด ์ด๋ฏธ ๊ฐ์๊ฐ 4๊ฐ๋ก ์ฑ์์ก๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ์ค์ ๋ก ์ดํด๋ณด๊ธฐ ์ํด ๊ฐ๋จํ ์ค์ต์ ํด๋ณด๋๋ก ํ์.
์ด๋ฏธ ์ YAML ํ์ผ์ ๊ธฐ์ค์ผ๋ก ๋ ํ๋ฆฌ์นด์
์ ํ๋ ์์ฑํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ด ๋์ผํ ๋ผ๋ฒจ์ ๊ฐ๋ ํ์ ์๋์ผ๋ก ์ถ๊ฐ๋ก ํ๋ ์์ฑํด๋ณด์.
apiVersion: v1
kind: Pod
metadata:
name: zed-nginx-pod
labels:
app: zedd-nginx-pods-label
spec:
containers:
- name: zedd-nginx-container
image: nginx:latest
ports:
- containerPort: 80
๊ทธ๋ฐ ๋ค์ kubectl get pods ๋ช
๋ น์ด๋ฅผ ์คํ์ํค๋ฉด ์ด๋ค์ผ์ด ๋ฐ์ํ ๊น? ์๋ ํ๋ฉด์ ๋ณด์.
๋
ธ๋์ ๋ค๋ชจ์นธ์ ๋ณด๋ฉด ์๋์ผ๋ก ์ถ๊ฐํ ํ์ด ์์ฑ๋์๋ง์ ๋ฐ๋ก ์ข
๋ฃ๋๊ณ ๋ ๋ค ํ ๋ชฉ๋ก์์ ์ฌ๋ผ์ง ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ผ ๋ฐ๋๋ก ๋ ํ๋ฆฌ์นด ์
์ ์์ฑํ๊ธฐ ์ด์ ์ ์๋์ผ๋ก ๋์ผํ ํ์ ์์ฑํด๋๊ณ , ๋ ํ๋ฆฌ์นด์
์ ์์ฑํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์๋ ํ๋ฉด์ ๋ณด์.
๋ณด๋ฉด ๋ฏธ๋ฆฌ ์๋์ผ๋ก ์์ฑํด๋์ zed-nginx-pod์ด ๋จ์ ์๊ณ ๋ ํ๋ฆฌ์นด์
์์ฑ์ผ๋ก ์ธํด ์์ฑ๋ ํ๋ค(zedd-nginx-replicaset๋ก ์์ํ๋ ํ๋ค)์ด 4๊ฐ๊ฐ ์๋ 3๊ฐ๋ง ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ฆ, ๋ผ๋ฒจ ์
๋ ํฐ, ์ฌ๊ธฐ ์์์์๋ 'app: zedd-nginx-pods-label' ๋ผ๋ ๋ผ๋ฒจ์ ํตํด์ ํ๊ณผ ๋ ํ๋ฆฌ์นด์
์ด ์ฐ๊ฒฐ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ๋ง์ฝ ํน์ ํ์์ ํด๋น ๋ผ๋ฒจ์ ์ญ์ ํ๊ฒ ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ฆฌ์์ค ์์ฑ์ ๋ณ๊ฒฝํ๋๋ก ํ๊ธฐ ์ํด์๋ kubectl edit ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์๋ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ ์ ํ ์ค zedd-nginx-replicaset-xj94j ๋ผ๋ ์ด๋ฆ์ ํ์ ๋ ์ด๋ธ์ ์์ ํด๋ณด์.
$ kubectl edit pods zedd-nginx-replicaset-xj94j
์ ๋ช
๋ น์ด๋ฅผ ์ํํ๋ฉด Vim ์๋ํฐ ํธ์ง๊ธฐ๋ก ์ด๋ํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ผ๋ฒจ์ ์๋ ํญ๋ชฉ์ ์ฃผ์์ฒ๋ฆฌํ๊ฑฐ๋ ์ญ์ ํ ๋ค ํธ์ง๊ธฐ๋ฅผ ์ ์ฅ ํ ์ข
๋ฃํด๋ณด์. ๊ทธ๋ฆฌ๊ณ ํ ๋ชฉ๋ก์ ์ถ๋ ฅํด๋ณด์.
์ถ๋ ฅ์ ๋ณด๋ฉด ๋์ b7rlg ๋ผ๋ ํ
์คํธ๊ฐ ๋ค์ด๊ฐ๋ ํ์ด ์๋กญ๊ฒ ์์ฑ๋์์์ ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฉ๊ธ ๋ผ๋ฒจ์ ์ญ์ ํ xj94j ๋ผ๋ ํ
์คํธ๊ฐ ์ด๋ฆ์ ์๋ ํ์ ์ฌ์ ํ ์คํ์ค์ด๋ค. ์ฆ, ๋ผ๋ฒจ์ด ์ญ์ ๋จ์ผ๋ก์จ ๋์ด์ ๋ ํ๋ฆฌ์นด์
์ด ํด๋น ํ์ ๊ด๋ฆฌํ์ง ์๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํด์ ๋ ํ๋ฆฌ์นด์ ์ ๋์ ์๋ฆฌ๋ฅผ ๊ฐ๋จํ ์์๋ณด์๋ค. ์ฐธ๊ณ ๋ก ๋ ํ๋ฆฌ์นด์ ์ผ๋ก๋ถํฐ ์์ฑ๋ ํ์์ ์ด๋ค ๋ ํ๋ฆฌ์นด๋ก๋ถํฐ ์์ฑ๋์๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด ํ์ ownerReferences ํญ๋ชฉ์ ํ์ธํด๋ณด๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฟ ๋ฒ๋คํฐ์ค๋ ์ด ownerReferences๋ฅผ ํตํด์ ๋ฆฌ์์ค ๊ฐ์ ์์ -์ข ์ ๊ด๊ณ๋ฅผ ํํํ๋ค. ์๋ฅผ ๋ค์ด, ํ์ ownerReference์ ์ํด ๋ ํ๋ฆฌ์นด์ ์ ์ข ์๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ํ๋ฆฌ์นด์ ์ ํ์ owner๋ผ๊ณ ํ ์ ์๋ค.
๋ง์ง๋ง์ผ๋ก ๋ ํ๋ฆฌ์นด์ ๊ณผ ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ์ ์ฐจ์ด์ ์ ๋ํด ์์๋ณด์. ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ ํ๋ฆฌ์นด์ ์ ์ฟ ๋ค๋ฒํฐ์ค 1.23.6 ์ด์ ๋ฒ์ ์๋ ์กด์ฌํ์ง ์์๊ณ ๊ทธ์ ์ญํ ์ ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ๊ฐ ๋์ ์ํํ์๋ค. ํ์ง๋ง ๋ฒ์ ์ด ์ ๊ทธ๋ ์ด๋๋จ์ ๋ฐ๋ผ ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ๋ deprecated ๋์๊ณ , ๊ทธ ๋์ ๋ ํ๋ฆฌ์นด์ ์ด ์ฌ์ฉ๋๊ณ ์๋ค. ๊ทธ๋ผ ์ด 2๊ฐ ๊ฐ์ ์ฐจ์ด์ ์ ๋ญ๊น? ์ฐจ์ด์ ์ ๋ฐ๋ก ๋ผ๋ฒจ ์ ๋ ํฐ๋ฅผ ํํ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ์ด๋ค. ๋ ํ๋ฆฌ์นด์ ์ ๊ฐ๋ฅํ๊ณ , ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ๋ ๋ถ๊ฐ๋ฅํ๋ค. ํํ์ ๊ธฐ๋ฐ์ ๋ผ๋ฒจ ์ ๋ ํฐ๋ ์ด๋ค ๊ฒ์ผ๊น? ์์ YAML ํ์ผ๋ก ํ ๋ฒ ์์๋ณด์.
๋ ธ๋์์ผ๋ก ์น ํ ๋ถ๋ถ์ ๋ณด๋ฉด ํค์๋๊ฐ matchExpressions๋ก ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ key, values ํญ๋ชฉ์ ๋ฃ์ ์ ์๋๋ฐ, key์๋ ์ผ๋ฐ์ ์ธ ๋ผ๋ฒจ ์ ๋ ํฐ์์ ์ ์ํ์ ๋์ ํค๊ฐ์ด์๋ app์ ๋ช ์ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ values ํญ๋ชฉ์๋ ์ฌ๋ฌ ๊ฐ๋ค์ ๋์ดํ ์ ์๊ณ , ์ฐ์ฐ(operator)์ ์ ์ํ ์ ์๋ค. ์ ์์์์๋ In ์ฐ์ฐ์ ์ ์ํ๋ค. ์ด๋ฅผ ํด์ํด๋ณด๋ฉด, app์ด๋ผ๋ key ๊ฐ์ ํ ๋น๋ values๊ฐ zedd-nginx-pods-label ๋๋ test-nginx-pods-label ์ค์ ํ๋๋ผ๋ ์๋ค๋ฉด ๋ ํ๋ฆฌ์นด์ ์ ํ์ผ๋ก ์ธ์งํ๋๋ก ํ๋ ๊ฒ์ด๋ค. ์ฌ์ฉํ ์ ์๋ operator์ ์ข ๋ฅ๋ก๋ In, NotIn, Exists, DoesNotExist, Gt, Lt ๋ฑ์ด ์๋ค.
3. ์ฌ๋ฌ ๊ฐ์ ๋ ํ๋ฆฌ์นด์ ์ ๊ด๋ฆฌํ์, ๋ํ๋ก์ด๋จผํธ(Deployment)
์ด๋ฒ ๋ชฉ์ฐจ์์๋ ์ฌ๋ฌ ๊ฐ์ ๋ ํ๋ฆฌ์นด์ ์ ๊ด๋ฆฌํ๋ ๋ํ๋ก์ด๋จผํธ์ ๋ํด ์์๋ณด์. ๋ํ๋ก์ด๋จผํธ๋ ๋ ํ๋ฆฌ์นด์ ๋ณด๋ค ์์ ๊ฐ๋ ์ ์ค๋ธ์ ํธ์ด๋ฉฐ, ํ๋ ์ญํ ์ ํฌ๊ฒ 2๊ฐ์ง์ด๋ค. ๋ ํ๋ฆฌ์นด์ ์ ๋ฆฌ๋น์ ๊ด๋ฆฌ ๋ฐ ๋กค๋ฐฑ ๊ธฐ๋ฅ๊ณผ ๋กค๋ง ์ ๋ฐ์ดํธ ๊ด๋ จ ๊ธฐ๋ฅ์ด๋ค. ์ฌ๊ธฐ์์๋ ์ ์์ธ ๋ ํ๋ฆฌ์นด์ ์ ๋ฆฌ๋น์ ๊ด๋ฆฌ ๋ฐ ๋กค๋ฐฑ ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด๋๋ก ํ์.
์ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ด์ํ๋ ํ๊ฒฝ์์๋ YAML ํ์ผ์ ํ ๋๋ ๋ ํ๋ฆฌ์นด์ ๋ง ์ ์ํด์ ์ฌ์ฉํ์ง ์๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ๋ ํ๋ฆฌ์นด์ ๊ณผ ํ์ ์ ๋ณด๋ฅผ ํจ๊ป ์ ์ํ๋ ๋ํ๋ก์ด๋จผํธ๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ YAML ํ์ผ์ ์ ์ํด์ ์ฌ์ฉํ๋ค. ๋น์ฐํ๊ฒ๋, ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ฉด ๊ทธ์ ๊ด๋ จ๋ ๋ ํ๋ฆฌ์นด์ , ํ๋ ํจ๊ป ์์ฑ๋๋ค. ์ด๋ฅผ ์์๋ณด๊ธฐ ์ํด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ์ํ YAML ํ์ผ ์์๋ฅผ ์ดํด๋ณด์.
apiVersion: apps/v1
kind: Deployment
metadata:
name: zedd-nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: zedd-nginx
template:
metadata:
name: zedd-nginx-pod
labels:
app: zedd-nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
์ YAML ํ์ผ์ ๋ฐฐํฌํด๋ณด๊ณ , ์์ฑํ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ณด์.
$ kubectl apply -f nginx-deployment.yaml
$ kubectl get deploy
์์ ๊ฐ์ด ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋์๋ค. READY ํญ๋ชฉ์ ์์ฑ๋ ํ์ ๊ฐ์์ด๊ณ , ํ์ฌ 3๊ฐ ๋ชจ๋ ์ด์ฉ๊ฐ๋ฅํ ์ํ(AVAILABLE)์ด๋ค. ํจ๊ป ์์ฑ๋ ํ๊ณผ ๋ ํ๋ฆฌ์นด์ ๋ ๊ฐ์ด ํ๋ฒ ์ดํด๋ณด์.
YAML์์ ์ ์ํ ๋๋ก 1๊ฐ์ ๋ ํ๋ฆฌ์นด์ ๊ณผ 3๊ฐ์ ํ์ด ์ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ ํ๋ฉด์์ ์ ๊น ์ฃผ๋ชฉํ ํค์๋๊ฐ ์๋ค ๋ฐ๋ก ๋ ํ๋ฆฌ์นด์ ๊ณผ ํ์ ์ด๋ฆ ํญ๋ชฉ์ ์๋ "9d878d95c" ๋ผ๋ ํค์๋์ด๋ค. ์ด๋ ํ์ ์์ฑํ๋ ํ ํ๋ฆฟ์ผ๋ก๋ถํฐ ์์ฑ๋ ์ฆ, YAML ํ์ผ ๋ด์ template ํค์๋ ๋ถ๋ถ์ผ๋ก ์ธํด ์๊ธด ๊ฐ์ด๋ค. ์ฃผ๋ชฉํ๋ ์ด์ ๋ ์ ์ ํ ๋ฑ์ฅํ๋ฏ๋ก ๋จธ๋ฆฟ์์ ๊ธฐ์ตํด๋์.
์ง๊ธ๊น์ง ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํด๋ณด๋ฉด์ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑํ ๋์๋ ๋ค๋ฅธ ์ฐจ๋ณ์ ์ด๋ ํธํ ์ ์ด ๋๊ปด์ก๋๊ฐ? ์์งํ ์๋๋ค. ๋จ์ง ๊ทธ๋ฅ YAML ํ์ผ์ ์์ฑ๋ ๋ด์ฉ๋ง ๋ฌ๋์ ๋ฟ, ์์ง๊น์ง๋ ๊ตณ์ด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด์๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค. ์ด์ ๋ํ๋ก์ด๋จผํธ๋ง์ ํน์ง์ ๋ํด ์์๋ณด์.
๋ํ๋ก์ด๋จผํธ๋ฅผ ๊ตณ์ด ์ฌ์ฉํ๋ ์ด์ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ดํธ์ ๋ฐฐํฌ๋ฅผ ๋์ฑ ํธํ๊ฒ ๋ง๋ค๊ธฐ ์ํจ์ด๋ค. ์ฆ, ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋๋ฐ, ์ฌ๊ธฐ์ '๊ด๋ฆฌํ๋ค' ๋ผ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ ๋ฐ์ดํธ ํ ๋ ๋ ํ๋ฆฌ์นด์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ๋ ๋ฆฌ๋น์ (Revision)์ ๋จ๊ฒจ์ ๋กค๋ฐฑ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค๋ ๊ฒ์ด๋ค. ๋ํ ๋ฌด์ค๋จ ์๋น์ค๋ฅผ ์ํ ํ์ ๋กค๋ง ์ ๋ฐ์ดํธ ์ ๋ต์ ์ง์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ค๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ์ ์ค์ต์ ํตํด ์ดํด๋ณด์. ์ดํด๋ณด๊ธฐ ์ํด์ ์ ์ ์์์ ์์ฑํ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ญ์ ํ๋ ๋์ผํ YAML ํ์ผ์ ๋ด์ฉ์ผ๋ก ๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ค์ ์์ฑํด๋ณด์. ๋จ, ์์ฑ ์ --record ์ต์ ์ ๋ฃ์ด์ฃผ๋ ๊ฒ๋ง ๋ค๋ฅด๋ค.
$ kubectl delete -f nginx-deployment.yaml
$ kubectl apply -f nginx-deployment.yaml --record
๋ํ๋ก์ด๋จผํธ๊ฐ ๋ค์ ์์ฑ๋์๋ค๋ฉด ์์ฑ ์ ์ค์ ํ ํ์ ์ด๋ฏธ์ง ๋ฒ์ ์ ๋ณ๊ฒฝํด๋ณด์. ์์์ ๋ช ๋ฒ ์ธ๊ธํ์ง๋ง ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. kubectl set image ๋ช ๋ น์ด๋ฅผ ์ฐ๊ฑฐ๋ ์ง์ YAML ํ์ผ์ ๋ณ๊ฒฝ ํ, kubect apply -f ๋ช ๋ น์ด๋ฅผ ์ฐ๋ ๋ฒ, ์๋๋ฉด kubectl edit ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด๋ ๋๋ค. ์ฌ๊ธฐ์์๋ ์ฒ์ ์ฌ์ฉํด๋ณด๋ kubectl set image ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด๋ณด์.
$ kubectl set image deployment zedd-nginx-deployment nginx=nginx:1.11 --record
์ ๋ช ๋ น์ด์์ nginx=nginx:1.11 ์์ ์ ๋ถ๋ถ์ 'nginx' ๋ผ๋ ๋จ์ด๋ ์ฐ๋ฆฌ๊ฐ ์์์ ์ ์ํ YAML ํ์ผ์์ spec.template.spec.containers.name์ ์๋ ํญ๋ชฉ์ ์๋ฏธํ๋ค. ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋ํ๋ก์ด๋จผํธ ์ด๋ฏธ์ง๊ฐ ๋ณ๊ฒฝ(updated)๋์๋ค๋ ์ถ๋ ฅ์ด ๋ฐ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ ํ๋ฆฌ์นด์ ๊ณผ ํ์ ๋ชฉ๋ก์ ์ถ๋ ฅํด๋ณด์.
์ ํ๋ฉด์ ์๋ซ๋ถ๋ถ์ธ ํ์ ๋ชฉ๋ก๋ถํฐ ์ดํด๋ณด์. ์๊น ์ฃผ๋ชฉํ๋ผ๊ณ ํ๋ ํด์ฌ๊ฐ ํค์๋์๋ "9d878d95c" ์์ "5fdb947f4b"๋ก ๋ฐ๋ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ํ๋ฆฌ์นด์ ๋ชฉ๋ก์ ์ดํด๋ณด๋ฉด "5fdb947f4b" ํค์๋๊ฐ ์ด๋ฆ์ ๋ค์ด๊ฐ ์๋ ๋ํ๋ก์ด๋จผํธ๊ฐ ์๋กญ๊ฒ ์๊ฒจ๋ฌ๋ค. ์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ๋ถ๋ถ์ ๊ทธ ์ด์ ์ ๋ฒ์ ์ด๋ผ๊ณ ํ ์ ์๋ "9d878d95c" ํค์๋๊ฐ ๋ค์ด๊ฐ์๋ ๋ ํ๋ฆฌ์นด์ ์ด ์ญ์ ๋์ง ์๊ณ ์ฌ์ ํ ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋จ, ์กด์ฌํ๊ธด ํ์ง๋ง ๊ทธ ๋ ํ๋ฆฌ์นด์ ์์ ์คํ ์ค์ธ ํ๋๋ ์กด์ฌํ์ง ์๊ณ ์์์ ์ ์ ์๋ค.
๋ค์ ๋งํด, ๋ํ๋ก์ด๋จผํธ๋ ํ์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ ํจ์ผ๋ก์จ ์ ๊ท ๋ฒ์ ์ ๋ ํ๋ฆฌ์นด์ ์ ์์ฑํ๋ ์ด์ ๋ฒ์ ์ ๋ ํ๋ฆฌ์นด์ ์ ์ญ์ ํ์ง ์๊ณ ๊ทธ๋๋ก ๋จ๊ฒจ๋๊ณ ์๋ค. ์ฆ, ์ด์ ์ ๋ณด๋ฅผ ๋ฆฌ๋น์ ์ผ๋ก์ ๋ณด์กดํ๊ณ ์๋ค๋ ๊ฒ์ด๋ค. ๋ฆฌ๋น์ ์ ๋ณด ์ธ๋ถ์ฌํญ์ ๋ํด์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ํํด์ฃผ๋ฉด ๋๋ค.
$ kubectl rollout hisotry deployment zedd-nginx-deployment
๊ทธ๋ฌ๋ฉด ์ ํ๋ฉด์ฒ๋ผ REVISION ๋ฒํธ์ ํด๋น ๋ฆฌ๋น์ ์ ๋ง๋ค ๋ ์ฌ์ฉํ kubectl ๋ช ๋ น์ด๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์๋ฏธํ๋ CHANGE-CAUSE ํญ๋ชฉ๋ ์ ์ ์๋ค. ๋จ, CHANGE-CAUSE ํญ๋ชฉ์ ์์์ ์ต์ด ๋ฒ์ ์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ ๋์ ์๋ก์ด ๋ฒ์ ์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ ๋ --record ์ต์ ์ ์ฃผ์ง ์์ผ๋ฉด <NONE> ๊ฐ์ด ๋ค์ด๊ฐ๋ค๋ ์ ๋ ์์ง๋ง์.
ํ์ฌ ๋ํ๋ก์ด๋จผํธ์ ๋ฒ์ ์ REVISION ๊ฐ์ด 2์ธ ์ํ์ด๋ค. ๊ทธ๋ฌ๋ฉด ๋ฒ์ 1๋ก ๋์๊ฐ๋ ๋กค๋ฐฑ ๊ธฐ๋ฅ์ ์ํํด๋ณด์. kubectl rollout undo ๋ช ๋ น์ด์ --to-revision ์ต์ ์ ๋์๊ฐ ๋ฆฌ๋น์ ๋ฒ์ ์ ๋ช ์ํด์ค๋ค. ๋น์ฐํ ์ฌ๊ธฐ์ ๋ฆฌ๋น์ ๋ฒ์ ์ ์ ํ๋ฉด์์ ํ์ธํ ์ ์๋ REVISION์ ๋์๋๋ ์ซ์์ด๋ค.
$ kubectl rollout undo deployment zedd-nginx-deployment --to-revision=1
$ kubectl get rs,pod
๋ฒ์ 1๋ก ๋กค๋ฐฑ ํ, ํ์ฌ ์ํ์ ๋ ํ๋ฆฌ์นด์ ๊ณผ ํ์ ๋ชฉ๋ก์ ๋ค์ ํ๋ฒ ์ถ๋ ฅํด๋ณด์๋ค.
ํ์ฌ ๋ ํ๋ฆฌ์นด์ , ํ ์ด๋ฆ์ ์ต์ด ๋ฒ์ ์ด์๋ ๋ ํ๋ฆฌ์นด์ ์ด๋ฆ์ ๋ถ์ด์๋ ํค์๋์ธ "9d878d95c"๊ฐ ๋ค์ ๋ถ์ด์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ง์ฝ ํ์ฌ ์ค์ ๋ ๋ ํ๋ฆฌ์นด์ , ํ์ ๋ฒ์ ์ ์ ๋ณด๊ฐ ๊ตฌ์ฒด์ ์ผ๋ก ๊ถ๊ธํ๋ค๋ฉด, ๊ทธ ๋ํ๋ก์ด๋จผํธ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด๋ณด๋ฉด ์ ์ ์๋ค. ๋น์ฐํ ๋ํ๋ก์ด๋จผํธ๋ kubectl describe ๋ช ๋ น์ด๊ฐ ์ ์ฉ์ด ๋๋ค. ๋ํ๋ก์ด๋จผํธ์ ์ ๋ณด ์ค์ Annotations ํญ๋ชฉ๊ณผ NewreplicaSet ํญ๋ชฉ์ ๋ณด๋ฉด ์ ์ ์๋ค.
$ kubect describe deployment zedd-nginx-deployment
์ด๋ ๊ฒ ํด์ ์ฐ๋ฆฌ๋ ๋ํ๋ก์ด๋จผํธ๊ฐ ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ๋ํ๋ก์ด๋จผํธ์ ๊ธฐ๋ฅ์ ๋ํด์ ์ค์ต๊ณผ ํจ๊ป ์์๋ณด์๋ค. ์ด์ ์ผ ์ข ์ค๋ฌด์์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ ์์ฃผ ์ฌ์ฉํ๋์ง์ ๋ํด ์๊ฒ ๋๋ ๊ฒ ๊ฐ๋ค.
์ด๋ ๊ฒ ํด์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์์ด์ ํ์์ ์ผ๋ก ์ตํ์ผ ํ ๊ฐ๋ ๋ค์ธ ํ, ๋ ํ๋ฆฌ์นด์ , ๊ทธ๋ฆฌ๊ณ ๋ํ๋ก์ด๋จผํธ์ ๋ํด ์์๋ณด์๋ค. ๋ค์ ํฌ์คํ ์์๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ๋ฐฐํฌํ ํ์ ์ธ๋ถ์์๋ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ์๋น์ค ๊ฐ๋ ์ ๋ํด์ ์์๋ณด๋๋ก ํ์. ์๋๋ ๋ณธ ํฌ์คํ ์ ์์ฑํ๋ฉด์ ์ ๋ฆฌํ kubectl ๋ช ๋ น์ด ํ์ด๋ค. ์์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ํ์ตํ๊ฑฐ๋ ์ด์ฉํ๋ฉด์ cheat sheet ์ฒ๋ผ ํ๋์ฉ ์ถ๊ฐ๋ ์ ์๋ค.
๋ช ๋ น์ด | ์๋ฏธ | ํน์ง |
kubectl get [OBJECT] | ํน์ ์ค๋ธ์ ํธ์ ๋ชฉ๋ก์ ์ถ๋ ฅ | |
kubectl describe [OBJECT] [OBJECT NAME] | ํน์ ์ค๋ธ์ ํธ์ ํน์ ์ด๋ฆ์ ๊ฐ๊ณ ์๋ ๋ฆฌ์์ค์ ์์ธํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ | |
kubectl exec -it [POD NAME] -c [CONTAINER NAME] [COMMAND] | ํน์ ํ๋์ ํน์ ์ปจํ ์ด๋๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์์ | docker exec ๊ณผ ์ ์ฌ |
kubectl logs [POD NAME] | ํน์ ํ๋์ ๋ก๊ทธ๋ฅผ ํ์ธ | |
kubectl delete -f [YAML FILENAME] | ํน์ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ | YAML ํ์ผ์ ์ง์ ํด์ ๊ทธ YAML ํ์ผ์ด ์์ฑํ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ |
kubectl delete pod [POD NAME] | ํน์ ํ์ ์ญ์ |