์ด ์น์ ์ ๋ค์ค ํ์ด์ง ์ถ๋ ฅ ํ๋ฉด์. ์ฌ๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ํ๋ฆฐํธ.
ํด๋ฌ์คํฐ ๋ด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ทผ
- 1: ์ฟ ๋ฒ๋คํฐ์ค ๋์๋ณด๋๋ฅผ ๋ฐฐํฌํ๊ณ ์ ์ํ๊ธฐ
- 2: ํด๋ฌ์คํฐ ์ ๊ทผ
- 3: ๋ค์ค ํด๋ฌ์คํฐ ์ ๊ทผ ๊ตฌ์ฑ
- 4: ํฌํธ ํฌ์๋ฉ์ ์ฌ์ฉํด์ ํด๋ฌ์คํฐ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๊ธฐ
- 5: ํด๋ฌ์คํฐ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๊ธฐ ์ํด ์๋น์ค ์ฌ์ฉํ๊ธฐ
- 6: ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก ํธ์๋๋ฅผ ๋ฐฑ์๋์ ์ฐ๊ฒฐ
- 7: ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ์์ฑํ๊ธฐ
- 8: NGINX ์ธ๊ทธ๋ ์ค(Ingress) ์ปจํธ๋กค๋ฌ๋ก Minikube์์ ์ธ๊ทธ๋ ์ค ์ค์ ํ๊ธฐ
- 9: ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ชฉ๋ก ๋ณด๊ธฐ
- 10: ๊ณต์ ๋ณผ๋ฅจ์ ์ด์ฉํ์ฌ ๋์ผํ ํ๋์ ์ปจํ ์ด๋ ๊ฐ์ ํต์ ํ๊ธฐ
- 11: ํด๋ฌ์คํฐ์ DNS ๊ตฌ์ฑํ๊ธฐ
- 12: ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์๋น์ค์ ์ ๊ทผ
1 - ์ฟ ๋ฒ๋คํฐ์ค ๋์๋ณด๋๋ฅผ ๋ฐฐํฌํ๊ณ ์ ์ํ๊ธฐ
๋์๋ณด๋๋ ์น ๊ธฐ๋ฐ ์ฟ ๋ฒ๋คํฐ์ค ์ ์ ์ธํฐํ์ด์ค์ด๋ค. ๋์๋ณด๋๋ฅผ ํตํด ์ปจํ ์ด๋ํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ ์ ์๊ณ , ์ปจํ ์ด๋ํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํธ๋ฌ๋ธ์ํ ํ ์ ์์ผ๋ฉฐ, ํด๋ฌ์คํฐ ๋ฆฌ์์ค๋ค์ ๊ด๋ฆฌํ ์ ์๋ค. ๋์๋ณด๋๋ฅผ ํตํด ํด๋ฌ์คํฐ์์ ๋์ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๊ณ , ๊ฐ๋ณ์ ์ธ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ค์(์๋ฅผ ๋ค๋ฉด ๋ํ๋ก์ด๋จผํธ, ์ก, ๋ฐ๋ชฌ์ ๋ฑ) ์์ฑํ๊ฑฐ๋ ์์ ํ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ค์ผ์ผํ๊ฑฐ๋, ๋กค๋ง ์ ๋ฐ์ดํธ๋ฅผ ์ด๊ธฐํํ๊ฑฐ๋, ํ๋๋ฅผ ์ฌ์์ํ๊ฑฐ๋ ๋๋ ๋ฐฐํฌ ๋ง๋ฒ์ฌ๋ฅผ ์ด์ฉํด ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ์ ์๋ค.
๋ํ ๋์๋ณด๋๋ ํด๋ฌ์คํฐ ๋ด ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ค์ ์ํ์ ๋ฐ์ํ๋ ๋ชจ๋ ์๋ฌ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
๋์๋ณด๋ UI ๋ฐฐํฌ
๋์๋ณด๋ UI๋ ๊ธฐ๋ณธ์ผ๋ก ๋ฐฐํฌ๋์ง ์๋๋ค. ๋ฐฐํฌํ๋ ค๋ฉด ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํํ๋ค.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml
๋์๋ณด๋ UI ์ ๊ทผ
ํด๋ฌ์คํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด, ๋์๋ณด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ํ์ RBAC ์ค์ ์ ์ ๊ณตํ๋ค. ํ์ฌ, ๋์๋ณด๋๋ Bearer ํ ํฐ์ผ๋ก ๋ก๊ทธ์ธํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค. ๋ณธ ์์ฐ์ ์ํ ํ ํฐ์ ์์ฑํ๊ธฐ ์ํด์๋, ์ํ ์ฌ์ฉ์ ๋ง๋ค๊ธฐ ๊ฐ์ด๋๋ฅผ ๋ฐ๋ฅธ๋ค.
๊ฒฝ๊ณ :
์์ฐ ์ค ์์ฑํ ์ํ์ ์ฌ์ฉ์์๊ฒ๋ ๊ด๋ฆฌ์(admin) ๊ถํ์ด ๋ถ์ฌ๋๋ฉฐ, ์ด๋ ๊ต์ก ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉํ๋ค.์ปค๋งจ๋ ๋ผ์ธ ํ๋ก์
kubectl
์ปค๋งจ๋๋ผ์ธ ๋๊ตฌ๋ฅผ ์ด์ฉํด ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํํจ์ผ๋ก์จ ๋์๋ณด๋๋ก์
์ ์์ ํ์ฑํํ ์ ์๋ค.
kubectl proxy
kubectl์ http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/๋ฅผ ํตํด ๋์๋ณด๋์ ์ ์ํ ์ ์๊ฒ ํด์ค ๊ฒ์ด๋ค.
UI๋ ์ค์ง ์ปค๋งจ๋๊ฐ ์คํ๋ ๋จธ์ ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค. ์์ธ ๋ด์ฉ์ kubectl proxy --help
์ต์
์ ํ์ธํ๋ค.
์ฐธ๊ณ :
Kubeconfig ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ธ๋ถ ์์ด๋ดํฐํฐ ํ๋ก๋ฐ์ด๋ ๋๋ X.509 ์ธ์ฆ์๋ฅผ ์ง์ํ์ง ์๋๋ค.์ฐ์ปด ๋ทฐ
์ด๊ธฐ ํด๋ฌ์คํฐ ๋์๋ณด๋์ ์ ๊ทผํ๋ฉด, ํ์ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค.
์ด ํ์ด์ง๋ ์ฒซ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ๋ ๋ฒํผ์ด ์์ ๋ฟ๋ง ์๋๋ผ, ์ด ๋ฌธ์์ ๋งํฌ๋ฅผ ํฌํจํ๊ณ ์๋ค.
๊ฒ๋ค๊ฐ, ๋์๋ณด๋๊ฐ ์๋ ํด๋ฌ์คํฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก kube-system
๋ค์์คํ์ด์ค์ด ๋์์ค์ธ ์์คํ
์ ํ๋ฆฌ์ผ์ด์
์ ๋ณผ ์ ์๋ค.
์ปจํ ์ด๋ํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ
๋์๋ณด๋๋ฅผ ์ด์ฉํ์ฌ ์ปจํ ์ด๋ํ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ๋ก์ด๋จผํธ์ ๊ฐ๋จํ ๋ง๋ฒ์ฌ๋ฅผ ํตํ ์ ํ์ ์ธ ์๋น์ค๋ก ์์ฑํ๊ณ ๋ฐฐํฌํ ์ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์๋์ผ๋ก ์ง์ ํ ์ ์๊ณ , ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ์ ํฌํจํ YAML ๋๋ JSON ๋งค๋ํ์คํธ(manifest) ํ์ผ์ ์ ๋ก๋ํ ์ ์๋ค.
์์ํ๋ ํ์ด์ง์ ์์ ์ค๋ฅธ์ชฝ ์ฝ๋์ ์๋ CREATE ๋ฒํผ์ ํด๋ฆญํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ ์ ๋ณด ์ง์
๋ฐฐํฌ ๋ง๋ฒ์ฌ๋ ๋ค์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
์ฑ ์ด๋ฆ (ํ์): ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ. ๋ ์ด๋ธ ์ด๋ฆ์ ๋ฐฐํฌํ ๋ชจ๋ ๋ํ๋ก์ด๋จผํธ์ ์๋น์ค์ ์ถ๊ฐ๋์ด์ผ ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ์ ์ ํ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ค์์คํ์ด์ค ์์์ ์ ์ผํด์ผ ํ๋ค. ์๋ฌธ์๋ก ์์ํด์ผ ํ๋ฉฐ, ์๋ฌธ์ ๋๋ ์ซ์๋ก ๋๋๊ณ , ์๋ฌธ์, ์ซ์ ๋ฐ ๋์ฌ(-)๋ง์ ํฌํจํด์ผ ํ๋ค. 24 ๋ฌธ์๋ง์ ์ ํํ๋ค. ์ฒ์๊ณผ ๋์ ์คํ์ด์ค๋ ๋ฌด์๋๋ค.
์ปจํ ์ด๋ ์ด๋ฏธ์ง (ํ์): ๋ ์ง์คํธ๋ฆฌ์ ์ฌ๋ผ๊ฐ ํผ๋ธ๋ฆญ ๋์ปค ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋๋ ํ๋ผ์ด๋น ์ด๋ฏธ์ง(๋์ฒด๋ก Google Container Registry ๋๋ ๋์ปค ํ๋ธ์ ์ฌ๋ผ๊ฐ)์ URL. ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ฌ์์ ์ฝ๋ก ์ผ๋ก ๋๋๋ค.
ํ๋์ ์ (ํ์): ๋ฐฐํฌํ๊ณ ์ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ ๋ชฉํ ํ๋ ๊ฐ์. ๊ฐ์ ์์ ์ ์๋ง ํ์ฉ๋ฉ๋๋ค.
ํด๋ฌ์คํฐ์ ์๋ํ ํ๋์ ์๋ฅผ ์ ์งํ๊ธฐ ์ํด์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋ ๊ฒ์ด๋ค.
์๋น์ค (์ ํ): ์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, (์๋ฅผ ๋ค์ด, ํ๋ก ํธ์๋) ์๋ง๋ ํด๋ฌ์คํฐ ๋ฐ๊นฅ์ ํผ๋ธ๋ฆญ IP ์ฃผ์๋ฅผ ๊ฐ์ง (์ธ๋ถ ์๋น์ค) ์ธ๋ถ์ ์๋น์ค๋ฅผ ๋ ธ์ถ์ํค๊ณ ์ถ์ ์ ์๋ค.
์ฐธ๊ณ :
์ธ๋ถ ์๋น์ค๋ค์ ์ํด, ํ ๊ฐ ๋๋ ์ฌ๋ฌ ๊ฐ์ ํฌํธ๋ฅผ ์ด์ด ๋ ํ์๊ฐ ์๋ค.ํด๋ฌ์คํฐ ๋ด๋ถ์์๋ง ๋ณด๊ณ ์ถ์ ์ด๋ค ์๋น์ค๋ค์ด ์์ ๊ฒ์ด๋ค. ์ด๋ฅผ ๋ด๋ถ ์๋น์ค๋ผ๊ณ ํ๋ค.
์๋น์ค ํ์ ๊ณผ๋ ๋ฌด๊ดํ๊ฒ, ์๋น์ค ์์ฑ์ ์ ํํด์ ์ปจํ ์ด๋์ (๋ค์ด์ค๋ ํจํท์) ํฌํธ๋ฅผ ๋ฆฌ์จํ๋ค๋ฉด, ๋ ๊ฐ์ ํฌํธ๋ฅผ ์ ์ํด์ผ ํ๋ค. ์๋น์ค๋ ์ปจํ ์ด๋๊ฐ ๋ฐ๋ผ๋ณด๋ ํ๊ฒ ํฌํธ์ (๋ค์ด์ค๋ ํจํท์) ๋งตํํ๋ ํฌํธ๊ฐ ๋ง๋ค์ด์ ธ์ผ ํ ๊ฒ์ด๋ค. ์๋น์ค๋ ๋ฐฐํฌ๋ ํ๋์ ๋ผ์ฐํ ๋ ๊ฒ์ด๋ค. ์ง์ํ๋ ํ๋กํ ์ฝ์ TCP์ UDP์ด๋ค. ์๋น์ค๊ฐ ์ด์ฉํ๋ ๋ด๋ถ DNS ์ด๋ฆ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ์ผ๋ก ์ง์ ํ ๊ฐ์ด ๋ ๊ฒ์ด๋ค.
๋ง์ฝ ํ์ํ๋ค๋ฉด, ๋ ๋ง์ ์ธํ ์ ์ง์ ํ ์ ์๋ ์์ธํ ์ต์ ๋ณด๊ธฐ ์น์ ์์ ํ์ฅํ ์ ์๋ค.
์ค๋ช : ์ ๋ ฅํ๋ ํ ์คํธ๊ฐ์ ๋ํ๋ก์ด๋จผํธ์ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ถ๊ฐ๋ ๊ฒ์ด๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ๋ถ์ฌํญ์ ํ์๋ ๊ฒ์ด๋ค.
๋ ์ด๋ธ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ์ ์ธ ๋ ์ด๋ธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ๊ณผ ๋ฒ์ ์ด๋ค. ๋ฆด๋ฆฌ์ค, ํ๊ฒฝ, ํฐ์ด, ํํฐ์ , ๊ทธ๋ฆฌ๊ณ ๋ฆด๋ฆฌ์ค ํธ๋๊ณผ ๊ฐ์ ๋ ์ด๋ธ์ ๋ํ๋ก์ด๋จผํธ, ์๋น์ค, ๊ทธ๋ฆฌ๊ณ ํ๋๋ฅผ ์์ฑํ ๋ ์ถ๊ฐ์ ์ผ๋ก ์ ์ํ ์ ์๋ค.
์๋ฅผ ๋ค๋ฉด:
release=1.0 tier=frontend environment=pod track=stable
๋ค์์คํ์ด์ค: ์ฟ ๋ฒ๋คํฐ์ค๋ ๋์ผํ ๋ฌผ๋ฆฌ ํด๋ฌ์คํฐ๋ฅผ ๋ฐํ์ผ๋ก ์ฌ๋ฌ ๊ฐ์์ ํด๋ฌ์คํฐ๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฌํ ๊ฐ์ ํด๋ฌ์คํฐ๋ค์ ๋ค์์คํ์ด์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ช ๋ช ๋ ๊ทธ๋ฃน์ผ๋ก ๋ฆฌ์์ค๋ค์ ๋ถํ ํ ์ ์๋ค.
๋์๋ณด๋๋ ๋๋กญ๋ค์ด ๋ฆฌ์คํธ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ๋ค์์คํ์ด์ค๋ฅผ ์ ๊ณตํ๊ณ , ์๋ก์ด ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ ์ ์๋๋ก ํ๋ค. ๋ค์์คํ์ด์ค ์ด๋ฆ์ ์ต๋ 63๊ฐ์ ์์ซ์ ๋จ์ด์ ๋์(-)๋ฅผ ํฌํจํ๊ณ ์์ง๋ง ๋๋ฌธ์๋ฅผ ๊ฐ์ง์ง ๋ชปํ๋ค. ๋ค์์คํ์ด์ค ์ด๋ฆ์ ์ซ์๋ก๋ง ๊ตฌ์ฑํ ์ ์๋ค. ๋ง์ฝ ์ด๋ฆ์ 10์ด๋ผ๋ ์ซ์๋ก ์ธํ ํ๋ค๋ฉด, ํ๋๋ ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค๋ก ๋ฐฐ์ ํ๊ฒ ๋ ๊ฒ์ด๋ค.
๋ค์์คํ์ด์ค ์์ฑ์ด ์ฑ๊ณตํ๋ ๊ฒฝ์ฐ, ์์ฑ๋ ๋ค์์คํ์ด์ค๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ํ๋๋ค. ๋ง์ฝ ์์ฑ์ ์คํจํ๋ฉด, ์ฒซ ๋ฒ์งธ ๋ค์์คํ์ด์ค๊ฐ ์ ํ๋๋ค.
์ด๋ฏธ์ง ํ(Pull) ์ํฌ๋ฆฟ: ํน์ ๋์ปค ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊ฐ ํ๋ผ์ด๋นํ ๊ฒฝ์ฐ, ํ(Pull) ์ํฌ๋ฆฟ ์๊ฒฉ ์ฆ๋ช ์ ์๊ตฌํ๋ค.
๋์๋ณด๋๋ ๊ฐ๋ฅํ ๋ชจ๋ ์ํฌ๋ฆฟ์ ๋๋กญ๋ค์ด ๋ฆฌ์คํธ๋ก ์ ๊ณตํ๋ฉฐ, ์๋ก์ด ์ํฌ๋ฆฟ์ ์์ฑํ ์ ์๋๋ก ํ๋ค. ์ํฌ๋ฆฟ ์ด๋ฆ์ ์๋ฅผ ๋ค์ด
new.image-pull.secret
๊ณผ ๊ฐ์ด DNS ๋๋ฉ์ธ ์ด๋ฆ ๊ตฌ๋ฌธ์ผ๋ก ๋ฐ๋ฅด๊ธฐ๋ก ํ๋ค. ์ํฌ๋ฆฟ ๋ด์ฉ์ base64 ์ธ์ฝ๋ฉ ๋ฐฉ์์ด๋ฉฐ,.dockercfg
ํ์ผ๋ก ์ ์๋๋ค. ์ํฌ๋ฆฟ ์ด๋ฆ์ ์ต๋ 253 ๋ฌธ์๋ฅผ ํฌํจํ ์ ์๋ค.์ด๋ฏธ์ง ํ(Pull) ์ํฌ๋ฆฟ์ ์์ฑ์ด ์ฑ๊ณตํ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ์ผ๋ก ์ ํ๋๋ค. ๋ง์ฝ ์์ฑ์ ์คํจํ๋ฉด, ์ํฌ๋ฆฟ์ ํ์ฉ๋์ง ์๋๋ค.
CPU ์๊ตฌ ์ฌํญ (cores) ์ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ (MiB): ์ปจํ ์ด๋๋ฅผ ์ํ ์ต์ ๋ฆฌ์์ค ์ํ์ ์ ์ํ ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, ํ๋๋ CPU์ ๋ฉ๋ชจ๋ฆฌ ์ํ์ ๋์ง ์๊ณ ๋์ํ๋ค.
์ปค๋งจ๋ ์คํ ์ ์ปค๋งจ๋ ์ธ์ ์คํ: ๊ธฐ๋ณธ์ ์ผ๋ก, ์ปจํ ์ด๋๋ ์ ํ๋ ๋์ปค ์ด๋ฏธ์ง์ ๊ธฐ๋ณธ ์ํธ๋ฆฌํฌ์ธํธ ์ปค๋งจ๋๋ฅผ ์คํํ๋ค. ์ปค๋งจ๋ ์ต์ ๊ณผ ์ธ์๋ฅผ ๊ธฐ๋ณธ ์ต์ ์ ์ฐ์ ์ ์ฉํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
ํน๊ถ์ ๊ฐ์ง(privileged) ์ํ๋ก ์คํ: ๋ค์ ์ธํ ์ ํธ์คํธ์์ ๋ฃจํธ ๊ถํ์ ๊ฐ์ง ํ๋ก์ธ์ค๋ค์ด ํน๊ถ์ ๊ฐ์ง ์ปจํ ์ด๋์ ํ๋ก์ธ์ค๋ค๊ณผ ๋๋ฑํ์ง ์๋์ง ์ ์ํ๋ค. ํน๊ถ์ ๊ฐ์ง(privileged) ์ปจํ ์ด๋๋ ๋คํธ์ํฌ ์คํ๊ณผ ๋๋ฐ์ด์ค์ ์ ๊ทผํ๋ ๊ฒ์ ์กฐ์ํ๋๋ก ํ์ฉํ ์ ์๋ค.
ํ๊ฒฝ ๋ณ์: ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค๋ฅผ ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๋ ธ์ถํ๋ค. ํ๊ฒฝ ๋ณ์ ๋๋ ์ธ์๋ฅผ ํ๊ฒฝ ๋ณ์๋ค์ ๊ฐ์ผ๋ก ์ปค๋งจ๋๋ฅผ ํตํด ๊ตฌ์ฑํ ์ ์๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด ์๋น์ค๋ฅผ ์ฐพ๋๋ฐ ์ฌ์ฉ๋๋ค. ๊ฐ๋ค์
$(VAR_NAME)
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ณ์๋ค๋ก ์ฐธ์กฐํ ์ ์๋ค.
YAML ๋๋ JSON ํ์ผ ์ ๋ก๋
์ฟ ๋ฒ๋คํฐ์ค๋ ์ ์ธ์ ์ธ ์ค์ ์ ์ ๊ณตํ๋ค. ์ด ๋ฐฉ์์์๋ ๋ชจ๋ ์ค์ ์ด ๋งค๋ํ์คํธ(YAML ๋๋ JSON ์ค์ ํ์ผ)์ ์ ์ฅ๋๋ค. ๋งค๋ํ์คํธ๋ ์ฟ ๋ฒ๋คํฐ์ค API ๋ฆฌ์์ค ์คํค๋ง๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐฐํฌ ๋ง๋ฒ์ฌ๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ ์ฌํญ๋ค์ ์ง์ ํ๋ ๋์ , ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ ์ด์์ ๋งค๋ํ์คํธ๋ก ์ ์ํ ์ ์๊ณ ๋์๋ณด๋๋ฅผ ์ด์ฉํด์ ํ์ผ์ ์ ๋ก๋ํ ์ ์๋ค.
๋์๋ณด๋ ์ฌ์ฉ
๋ค์ ์น์ ๋ค์ ์ด๋ป๊ฒ ์ ๊ณตํ๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ์ฟ ๋ฒ๋คํฐ์ค ๋์๋ณด๋ UI์ ๋ชจ์ต์ ๋ณด์ฌ์ค๋ค.
ํ์
ํด๋ฌ์คํฐ์ ์ ์๋ ์ฟ ๋ฒ๋คํฐ์ค ์คํ์ ํธ๊ฐ ์์ผ๋ฉด, ๋์๋ณด๋๋ ์ด๊ธฐํ๋ ๋ทฐ๋ฅผ ์ ๊ณตํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค์ ์คํ์ ํธ๋ง์ด ๋ณด์ด๋๋ฐ, ์ด๋ ํ์ ์ฐฝ์ ์์นํ ๋ค์์คํ์ด์ค ์ ๋ ํฐ๋ฅผ ์ด์ฉํด ๋ณ๊ฒฝํ ์ ์๋ค.
๋์๋ณด๋๋ ๋ช ๊ฐ์ง ๋ฉ๋ด ์นดํ ๊ณ ๋ฆฌ ์ค์์ ๋๋ถ๋ถ์ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ์ข ๋ฅ์ ๊ทธ๋ฃน์ ๋ณด์ฌ์ค๋ค.
์ด๋๋ฏผ ๊ฐ์
ํด๋ฌ์คํฐ์ ๋ค์์คํ์ด์ค ๊ด๋ฆฌ์์๊ฒ ๋์๋ณด๋๋ ๋ ธ๋, ๋ค์์คํ์ด์ค ๊ทธ๋ฆฌ๊ณ ํผ์์คํดํธ ๋ณผ๋ฅจ๊ณผ ์ธ๋ถ์ฌํญ๋ค์ด ๋ณด์ฌ์ง๋ค. ๋ ธ๋๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ํตํ์ด CPU์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ณด์ฌ์ค๋ค. ์ธ๋ถ์ฌํญ์ ๊ฐ ๋ ธ๋๋ค์ ๋ํ ์ฌ์ฉ๋, ์ฌ์, ์ํ, ํ ๋น๋ ๋ฆฌ์์ค, ์ด๋ฒคํธ ๊ทธ๋ฆฌ๊ณ ๋ ธ๋์์ ๋์๊ฐ๋ ํ๋๋ฅผ ๋ณด์ฌ์ค๋ค.
์ํฌ๋ก๋
์ ํ๋ ๋ค์์คํ์ด์ค์์ ๊ตฌ๋๋๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ฌ์ค๋ค. ํด๋น ๋ทฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฌ๋ก๋ ์ข ๋ฅ(์์: ๋ํ๋ก์ด๋จผํธ, ๋ ํ๋ฆฌ์นด์ (ReplicaSet), ์คํ ์ดํธํ์ (StatefulSet))๋ฅผ ๋ณด์ฌ์ค๋ค. ๊ฐ๊ฐ์ ์ํฌ๋ก๋ ์ข ๋ฅ๋ ๋ถ๋ฆฌํ์ฌ ๋ณผ ์ ์๋ค. ๋ฆฌ์คํธ๋ ์๋ฅผ ๋ค์ด ๋ ํ๋ฆฌ์นด์ ์์ ์ค๋น๋ ํ๋์ ์ซ์ ๋๋ ํ๋์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ๊ฐ์ ์ํฌ๋ก๋์ ๋ํ ์ค์ฉ์ ์ธ ์ ๋ณด๋ฅผ ์์ฝํ๋ค.
์ํฌ๋ก๋์ ๋ํ ์ธ๋ถ์ ์ธ ๊ฒ๋ค์ ์ํ์ ์ฌ์ ์ ๋ณด, ์คํ์ ํธ๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋ค. ์๋ฅผ ๋ค์ด, ๋ ํ๋ฆฌ์นด์ ์ผ๋ก ๊ด๋ฆฌํ๋ ํ๋๋ค ๋๋ ์๋ก์ด ๋ ํ๋ฆฌ์นด์ ๊ณผ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์ํ Horizontal Pod Autoscalers ์ด๋ค.
์๋น์ค
์ธ๋ถ๋ก ๋ ธ์ถ๋๋ ์๋น์ค๋ค๊ณผ ํด๋ฌ์คํฐ ๋ด์ ๋ฐ๊ฒฌ๋๋ ์๋น์ค๋ค์ ํ์ฉํ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ค์ ๋ณด์ฌ์ค๋ค. ์ด๋ฌํ ์ด์ ๋ก ์๋น์ค์ ์ธ๊ทธ๋ ์ค๋ ํด๋ฌ์คํฐ๊ฐ์ ์ฐ๊ฒฐ์ ์ํ ๋ด๋ถ ์๋ํฌ์ธํธ๋ค๊ณผ ์ธ๋ถ ์ฌ์ฉ์๋ฅผ ์ํ ์ธ๋ถ ์๋ํฌ์ธํธ๋ค์ ์ํด ํ๊ฒํ ๋ ํ๋๋ค์ ๋ณด์ฌ์ค๋ค.
์คํ ๋ฆฌ์ง
์คํ ๋ฆฌ์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํผ์ํดํธ๋ณผ๋ฅจํด๋ ์ ๋ฆฌ์์ค๋ค์ ๋ณด์ฌ์ค๋ค.
์ปจํผ๊ทธ๋งต๊ณผ ์ํฌ๋ฆฟ
ํด๋ฌ์คํฐ์์ ๋์ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ด๋ธ ์ค์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ค์ ๋ณด์ฌ์ค๋ค. ์ปจํผ๊ทธ ์ค๋ธ์ ํธ๋ค์ ์์ ํ๊ณ ๊ด๋ฆฌํ ์ ์๋๋ก ํ์ฉํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์จ๊ฒจ์ ธ ์๋ ์ํฌ๋ฆฟ๋ค์ ๋ณด์ฌ์ค๋ค.
๋ก๊ทธ ๋ทฐ์ด
ํ๋ ๋ชฉ๋ก๊ณผ ์ธ๋ถ์ฌํญ ํ์ด์ง๋ค์ ๋์๋ณด๋์ ๊ตฌํ๋ ๋ก๊ทธ ๋ทฐ์ด์ ๋งํฌ๋๋ค. ๋ทฐ์ด๋ ๋จ์ผ ํ๋์ ์๋ ์ปจํ ์ด๋๋ค์ ๋ก๊ทธ๋ค์ ๋ด๋ ค๊ฐ๋ฉด ๋ณผ ์ ์๋๋ก ํ๋ค.
๋ค์ ๋ด์ฉ
๋ ๋ง์ ์ ๋ณด๋ ์ฟ ๋ฒ๋คํฐ์ค ๋์๋ณด๋ ํ๋ก์ ํธ ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ๋ค.
2 - ํด๋ฌ์คํฐ ์ ๊ทผ
์ฌ๊ธฐ์์๋ ํด๋ฌ์คํฐ์ ํต์ ์ ํ๋ ๋ค์ํ ๋ฐฉ์์ ๋ํด์ ๋ค๋ฃฐ ๊ฒ์ด๋ค.
์ฒ์์ด๋ผ๋ฉด kubectl์ ์ฌ์ฉํ์ฌ ์ ๊ทผ
์ต์ด๋ก ์ฟ ๋ฒ๋คํฐ์ค API์ ์ ๊ทผํ ๋ ์ฐ๋ฆฌ๋
์ฟ ๋ฒ๋คํฐ์ค CLI์ธ kubectl
์ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
ํด๋ฌ์คํฐ์ ์ ๊ทผํ๋ ค๋ฉด ํด๋ฌ์คํฐ์ ์์น์ ๋ณด๋ฅผ ์์์ผ ํ๊ณ ํด๋ฌ์คํฐ์ ์ ์ํ๊ธฐ ์ํ ์ธ์ฆ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ๋น์ ์ด Getting started guide๋ฅผ ๋ค ์งํํ์ ๋ ์๋์ผ๋ก ๊ตฌ์ฑ๋๊ฑฐ๋, ๋ค๋ฅธ ์ฌ๋์ด ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๋น์ ์๊ฒ ์ธ์ฆ์ ๋ณด์ ์์น์ ๋ณด๋ฅผ ์ ๊ณตํ ์๋ ์๋ค.
kubectl์ด ์ธ์งํ๋ ์์น์ ๋ณด์ ์ธ์ฆ์ ๋ณด๋ ๋ค์ ์ปค๋งจ๋๋ก ํ์ธํ๋ค.
kubectl config view
์ฌ๊ธฐ์์
kubectl
์ฌ์ฉ ์์๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ, ์์ ํ ๋ฌธ์๋
kubectl ๋ ํผ๋ฐ์ค์์ ํ์ธํ ์ ์๋ค.
REST API์ ์ง์ ์ ๊ทผ
kubectl์ apiserver์ ์์น ํ์ ๊ณผ ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ค. ๋ง์ฝ ๋น์ ์ด curl, wget ๋๋ ์น๋ธ๋ผ์ฐ์ ์ ๊ฐ์ http ํด๋ผ์ด์ธํธ๋ก REST API์ ์ง์ ์ ๊ทผํ๋ ค๊ณ ํ๋ค๋ฉด ์์น ํ์ ๊ณผ ์ธ์ฆ์ ํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
- kubectl์ proxy ๋ชจ๋๋ก ์คํ.
- ๊ถ์ฅํ๋ ์ ๊ทผ ๋ฐฉ์.
- ์ ์ฅ๋ apiserver ์์น๋ฅผ ์ฌ์ฉ.
- self-signed ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ apiserver์ identity๋ฅผ ๊ฒ์ฆ. MITM์ ๋ถ๊ฐ๋ฅ.
- apiserver ์ธ์ฆ.
- ์์ผ๋ก๋ ํด๋ผ์ด์ธํธ ์ธก์ ์ง๋ฅํ load balancing๊ณผ failover๊ฐ ๋ ๊ฒ์ด๋ค.
- ์ง์ ์ ์ผ๋ก http ํด๋ผ์ด์ธํธ์ ์์น์ ๋ณด์ ์ธ์ฆ์ ๋ณด๋ฅผ ์ ๊ณต.
- ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์.
- proxy ์ฌ์ฉ๊ณผ ํผ๋๋๋ ๋ช ๊ฐ์ง ํ์ ์ ํด๋ผ์ด์ธํธ ์ฝ๋์ ๊ฐ์ด ๋์ํ๋ค.
- MITM๋ก๋ถํฐ ๋ณดํธ๋ฅผ ์ํด root ์ธ์ฆ์๋ฅผ ๋น์ ์ ๋ธ๋ผ์ฐ์ ๋ก ์ํฌํธํด์ผ ํ๋ค.
kubectl proxy ์ฌ์ฉ
๋ค์ ์ปค๋งจ๋๋ kubectl์ ๋ฆฌ๋ฒ์ค ํ๋ก์(reverse proxy)์ฒ๋ผ ๋์ํ๋ ๋ชจ๋๋ฅผ ์คํํ๋ค. ์ด๋ apiserver์ ์์น์ง์ ๊ณผ ์ธ์ฆ์ ์ฒ๋ฆฌํ๋ค. ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ค.
kubectl proxy --port=8080
์์ธ ๋ด์ฉ์ kubectl proxy๋ฅผ ์ฐธ์กฐํ๋ค
์ดํ์ ๋น์ ์ curl, wget, ์น๋ธ๋ผ์ฐ์ ๋ก ๋ค์๊ณผ ๊ฐ์ด API๋ฅผ ํ์ํ ์ ์๋ค. localhost๋ IPv6 ์ฃผ์ [::1]๋ก๋ ๋์ฒดํ ์ ์๋ค.
curl http://localhost:8080/api/
๊ฒฐ๊ด๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
kubectl proxy๋ฅผ ์ฌ์ฉํ์ง ์์
kubectl apply
๋ฐ kubectl describe secret...
๋ช
๋ น๊ณผ grep/cut์ ํ์ฉํ์ฌ ๊ธฐ๋ณธ ์๋น์ค ์ด์นด์ดํธ์ ํ ํฐ์ ์์ฑํ๋ค.
๋จผ์ , ๊ธฐ๋ณธ ์๋น์ค์ด์นด์ดํธ๋ฅผ ์ํ ํ ํฐ์ ์์ฒญํ๋ ์ํฌ๋ฆฟ์ ์์ฑํ๋ค.
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: default-token
annotations:
kubernetes.io/service-account.name: default
type: kubernetes.io/service-account-token
EOF
๋ค์์ผ๋ก, ํ ํฐ ์ปจํธ๋กค๋ฌ๊ฐ ํด๋น ์ํฌ๋ฆฟ์ ํ ํฐ์ ์ฑ์ฐ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
while ! kubectl describe secret default-token | grep -E '^token' >/dev/null; do
echo "waiting for token..." >&2
sleep 1
done
๊ฒฐ๊ณผ๋ฅผ ์บก์ฒํ์ฌ ์์ฑ๋ ํ ํฐ์ ์ฌ์ฉํ๋ค.
APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
TOKEN=$(kubectl describe secret default-token | grep -E '^token' | cut -f2 -d':' | tr -d " ")
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
๊ฒฐ๊ณผ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
jsonpath
๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode)
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
๊ฒฐ๊ณผ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
์ ์์ ์์๋ --insecure
flag๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ MITM ๊ณต๊ฒฉ์ ๋ฐ์ ์ ์๋ ์ํ๋ก
๋๋ ๊ฒ์ด๋ค. kubectl๋ก ํด๋ฌ์คํฐ์ ์ ์ํ ๋ ์ ์ฅ๋ root ์ธ์ฆ์์ ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ค์
์๋ฒ ์ ์์ ์ฌ์ฉํ๋ค.
(์ด๋ค์ ~/.kube
๋๋ ํฐ๋ฆฌ์ ์ค์น๋๋ค.)
์ผ๋ฐ์ ์ผ๋ก self-signed ์ธ์ฆ์๊ฐ ํด๋ฌ์คํฐ ์ธ์ฆ์๋ก ์ฌ์ฉ๋๋ฏ๋ก ๋น์ ์ http ํด๋ผ์ด์ธํธ๊ฐ
root ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํน์ํ ์ค์ ์ ํ์๋ก ํ ๊ฒ์ด๋ค.
localhost์์ ์ ๊ณต๋๊ฑฐ๋ ๋ฐฉํ๋ฒฝ์ผ๋ก ๋ณดํธ๋๋ ๋ช๋ช ํด๋ฌ์คํฐ๋ค์์๋ apiserver๊ฐ ์ธ์ฆ์ ์๊ตฌํ์ง ์์ง๋ง ์ด๋ ํ์ค์ด ์๋๋ค. API์ ๋ํ ์ ๊ทผ ์ ์ด์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๊ฐ ์ด๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ ์๋์ง๋ฅผ ์ค๋ช ํ๋ค.
API์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ ๊ทผ
์ฟ ๋ฒ๋คํฐ์ค๋ ๊ณต์์ ์ผ๋ก Go์ Python ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ๋ค.
Go ํด๋ผ์ด์ธํธ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ทจ๋ํ๋ ค๋ฉด
go get k8s.io/client-go@kubernetes-<kubernetes-version-number>
์ปค๋งจ๋๋ฅผ ์คํํ๋ค. INSTALL.md์์ ์์ธํ ์ค์น ๋ฐฉ๋ฒ์ ์ ์ ์๋ค. https://github.com/kubernetes/client-go์์ ์ด๋ค ๋ฒ์ ผ์ด ์ง์๋๋์ง ํ์ธํ ์ ์๋ค. - client-go ํด๋ผ์ด์ธํธ ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ์. client-go๋ ์์ฒด์ ์ผ๋ก API ์ค๋ธ์ ํธ๋ฅผ ์ ์ํ๋ฏ๋ก ํ์ํ๋ค๋ฉด main ๋ ํฌ์งํฐ๋ฆฌ๋ณด๋ค๋ client-go์์ API ์ ์๋ค์ importํ๊ธฐ๋ฅผ ๋ฐ๋๋ค. ์ ํํ๊ฒ
import "k8s.io/client-go/kubernetes"
๋ก importํ๋ ๊ฒ์ ์๋ก ๋ค ์ ์๋ค.
Go ํด๋ผ์ด์ธํธ๋ apiserver์ ์์น์ง์ ๊ณผ ์ธ์ฆ์ kubectl CLI์ ๋์ผํ๊ฒ kubeconfig file์ ์ฌ์ฉํ ์ ์๋ค. ์์ ๋ฅผ ์ฐธ๊ณ ํ๋ค.
๋ง์ฝ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํด๋ฌ์คํฐ ๋ด์ ํ๋๋ก ๋ฐฐํฌ๋์๋ค๋ฉด ๋ค์ ์ฅ์ ์ฐธ์กฐํ๊ธฐ๋ฅผ ๋ฐ๋๋ค.
Python ํด๋ผ์ด์ธํธ
Python ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด pip install kubernetes
์ปค๋งจ๋๋ฅผ ์คํํ๋ค. ์ค์น ์ต์
์ ๋ํ ์์ธ ์ฌํญ์ Python Client Library page๋ฅผ ์ฐธ์กฐํ๋ค.
Python ํด๋ผ์ด์ธํธ๋ apiserver์ ์์น์ง์ ๊ณผ ์ธ์ฆ์ kubectl CLI์ ๋์ผํ๊ฒ kubeconfig file์ ์ฌ์ฉํ ์ ์๋ค. ์์ ๋ฅผ ์ฐธ์กฐํ๋ค.
๋ค๋ฅธ ์ธ์ด
๋ค๋ฅธ ์ธ์ด์์ API๋ฅผ ์ ์ํ๊ธฐ ์ํ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ ์กด์ฌํ๋ค. ์ด๋ค์ด ์ด๋ป๊ฒ ์ธ์ฆํ๋์ง๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๋ค.
ํ๋์์ API ์ ๊ทผ
ํ๋์์ API์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ, API ์๋ฒ๋ฅผ ์ฐพ๊ณ ์ธ์ฆํ๋ ๋ฐฉ์์ด ์ฝ๊ฐ ๋ค๋ฅผ ์ ์๋ค.
๋ ์์ธํ ๋ด์ฉ์ ํ๋ ๋ด์์ ์ฟ ๋ฒ๋คํฐ์ค API์ ์ ๊ทผ์ ์ฐธ์กฐํ๋ค.
ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์๋น์ค๋ก ์ ๊ทผ
์ด์ ์น์ ์์๋ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ์คํ๋๋ ๋ค๋ฅธ ์๋น์ค์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ํด๋ฌ์คํฐ ์๋น์ค์ ์ ๊ทผ ํ์ด์ง๋ฅผ ์ฐธ์กฐํ๋ค.
redirect ์์ฒญํ๊ธฐ
redirect ๊ธฐ๋ฅ์ deprecated๋๊ณ ์ ๊ฑฐ ๋์๋ค. ๋์ (์๋์) ํ๋ก์๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋ค.
๋ค์ํ ํ๋ก์๋ค
์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋น์ ์ด ์ ํ ์ ์๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ํ๋ก์๋ค์ด ์กด์ฌํ๋ค.
- ์ฌ์ฉ์์ ๋ฐ์คํฌํ์ด๋ ํ๋ ๋ด์์ ์คํํ๋ค
- localhost ์ฃผ์์์ ์ฟ ๋ฒ๋คํฐ์ค apiserver๋ก ํ๋ก์ํ๋ค
- ํ๋ก์ํ๋ ํด๋ผ์ด์ธํธ๋ HTTP๋ฅผ ์ฌ์ฉํ๋ค
- apiserver์ ํ๋ก์๋ HTTPS๋ฅผ ์ฌ์ฉํ๋ค
- apiserver๋ฅผ ์์น์ง์ ํ๋ค
- ์ธ์ฆ header๋ค์ ์ถ๊ฐํ๋ค
- apiserver ๋ด์ ๋นํธ์ธ bastion์ด๋ค
- ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ ์ฐ๊ฒฐํ ์ ์๋ ํด๋ฌ์คํฐ ์ธ๋ถ์ ์ฌ์ฉ์๋ฅผ ํด๋ฌ์คํฐ IP๋ก ์ฐ๊ฒฐํ๋ค
- apiserver process๋ค ๋ด์์ ์คํ๋๋ค
- ํ๋ก์ํ๋ ํด๋ผ์ด์ธํธ๋ HTTPS๋ฅผ ์ฌ์ฉํ๋ค(๋๋ apiserver๊ฐ http๋ก ๊ตฌ์ฑ๋์๋ค๋ฉด http)
- ํ๊ฒ์ผ๋ก์ ํ๋ก์๋ ๊ฐ์ฉ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์์ ์ํด์ HTTP ๋๋ HTTPS๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค
- ๋ ธ๋, ํ๋, ์๋น์ค์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์๋ค
- ์๋น์ค์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉด load balacingํ๋ค
- ๊ฐ ๋ ธ๋ ์์์ ์คํ๋๋ค
- UDP์ TCP๋ฅผ ํ๋ก์ํ๋ค
- HTTP๋ฅผ ์ธ์งํ์ง ์๋๋ค
- load balancing์ ์ ๊ณตํ๋ค
- ์๋น์ค์ ์ ๊ทผํ๋ ๋ฐ์๋ง ์ฌ์ฉ๋๋ค
apiserver(s) ์ ๋ฉด์ Proxy/Load-balancer:
- ์กด์ฌ๋ด์ฉ๊ณผ ๊ตฌํ์ฌํญ์ ํด๋ฌ์คํฐ ๋ณ๋ก ๋ค์ํ๋ค(์. nginx)
- ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ํ๋ ์ด์์ apiserver๋ค์ ์ฌ์ด์ ์์นํ๋ค
- apiserver๊ฐ ์ฌ๋ฌ ๋ ์กด์ฌํ๋ค๋ฉด load balancer๋ก ๋์ํ๋ค
์ธ๋ถ ์๋น์ค์ Cloud Load Balancer๋ค:
- Cloud provider๋ค์ ์ํด์ ์ ๊ณต๋๋ค(์. AWS ELB, Google Cloud Load Balancer)
- ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค์ ํ์
์ด
LoadBalancer
๋ผ๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ค - UDP/TCP ๋ง ์ฌ์ฉํ๋ค
- cloud provider๋ง๋ค ๊ตฌํ๋ ๋ด์ฉ์ด ์์ดํ๋ค
์ผ๋ฐ์ ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ์ฌ์ฉ์๋ค์ ์ฒ์ ๋ ํ์ ์ด ์๋ ๋ค๋ฅธ ๋ฐฉ์์ ๊ณ ๋ คํ ํ์๊ฐ ์์ง๋ง ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ๋๋จธ์ง ํ์ ์ ์ ์ ํ๊ฒ ๊ตฌ์ฑํด์ค์ผ ํ๋ค.
3 - ๋ค์ค ํด๋ฌ์คํฐ ์ ๊ทผ ๊ตฌ์ฑ
์ด ํ์ด์ง์์๋ ๊ตฌ์ฑ ํ์ผ์ ์ฌ์ฉํ์ฌ ๋ค์์ ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ ์๋๋ก
์ค์ ํ๋ ๋ฐฉ์์ ๋ณด์ฌ์ค๋ค. ํด๋ฌ์คํฐ, ์ฌ์ฉ์, ์ปจํ
์คํธ๊ฐ ํ๋ ์ด์์
๊ตฌ์ฑ ํ์ผ์ ์ ์๋ ๋ค์ kubectl config use-context
์ปค๋งจ๋๋ฅผ
์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค.
์ฐธ๊ณ :
ํด๋ฌ์คํฐ์ ์ ๊ทผํ ์ ์๋๋ก ์ค์ ํ๋๋ฐ ์ฌ์ฉ๋๋ ํ์ผ์ ์ข ์ข kubeconfig file ์ด๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ์ด๋ ๊ตฌ์ฑ ํ์ผ์ ์ฐธ์กฐํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋กkubeconfig
๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ์ผ์ด
๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ ๊ฒ์ ์๋๋ค.๊ฒฝ๊ณ :
์ ๋ขฐํ ์ ์๋ ์์ค์ kubeconfig ํ์ผ๋ง ์ฌ์ฉํด์ผ ํ๋ค. ํน์ ์ ์๋ kubeconfig ํ์ผ์ ์ ์ฑ์ฝ๋๋ฅผ ์คํํ๊ฑฐ๋ ํ์ผ์ ๋ ธ์ถ์ํฌ ์ ์๋ค. ์ ๋ขฐํ ์ ์๋ kubeconfig ํ์ผ์ ๊ผญ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด, ์ ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ฒ๋ผ ์ ์คํ ๊ฒ์ฌ๊ฐ ์ ํ๋์ด์ผ ํ๋ค.์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
kubectl์ด ์ค์น๋์๋์ง ํ์ธํ๋ ค๋ฉด,
kubectl version --client
์ ์คํํ๋ค. kubectl ๋ฒ์ ์ ํด๋ฌ์คํฐ์ API ์๋ฒ ๋ฒ์ ๊ณผ
๋ง์ด๋ ๋ฒ์ ํ๋ ์ฐจ์ด ์ด๋ด์ฌ์ผ
ํ๋ค.
ํด๋ฌ์คํฐ, ์ฌ์ฉ์, ์ปจํ ์คํธ ์ ์
๋น์ ์ด ๊ฐ๋ฐ ์์
์ ์ํ ํด๋ฌ์คํฐ์ ํ
์คํธ ์์
์ ์ํ ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
development
ํด๋ฌ์คํฐ์์๋ ํ๋ฐํธ ์๋ ๊ฐ๋ฐ์๋ค์ด frontend
๋ผ๋ ๋ค์์คํ์ด์ค์์
์์
์ ํ๊ณ ์๊ณ , ์คํ ๋ฆฌ์ง ๊ฐ๋ฐ์๋ค์ storage
๋ผ๋ ๋ค์์คํ์ด์ค์์ ์์
์ ํ๊ณ ์๋ค.
test
ํด๋ฌ์คํฐ์์๋ ๊ฐ๋ฐ์๋ค์ด default ๋ค์์คํ์ด์ค์์ ๊ฐ๋ฐํ๊ฑฐ๋ ํ์์ ๋ฐ๋ผ ๋ณด์กฐ
๋ค์์คํ์ด์ค๋ค์ ์์ฑํ๊ณ ์๋ค. development ํด๋ฌ์คํฐ์ ์ ๊ทผํ๋ ค๋ฉด ์ธ์ฆ์๋ก ์ธ์ฆ์ ํด์ผ ํ๊ณ ,
test ํด๋ฌ์คํฐ์ ์ ๊ทผํ๋ ค๋ฉด ์ฌ์ฉ์๋ค์๊ณผ ํจ์ค์๋๋ก ์ธ์ฆ์ ํด์ผ ํ๋ค.
config-exercise
๋ผ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๋ค. config-exercise
๋๋ ํฐ๋ฆฌ์
๋ค์ ๋ด์ฉ์ ๊ฐ์ง config-demo
๋ผ๋ ํ์ผ์ ์์ฑํ๋ค.
apiVersion: v1
kind: Config
preferences: {}
clusters:
- cluster:
name: development
- cluster:
name: test
users:
- name: developer
- name: experimenter
contexts:
- context:
name: dev-frontend
- context:
name: dev-storage
- context:
name: exp-test
๊ตฌ์ฑ ํ์ผ์ ํด๋ฌ์คํฐ๋ค, ์ฌ์ฉ์๋ค, ์ปจํ
์คํธ๋ค์ ๊ธฐ์ ํ๋ค. config-demo
ํ์ผ์ ๋ ํด๋ฌ์คํฐ๋ค๊ณผ
๋ ์ฌ์ฉ์๋ค, ์ธ ์ปจํ
์คํธ๋ค์ ๊ธฐ์ ํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ฅผ ๊ฐ์ง๋ค.
config-exercise
๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ์ปค๋งจ๋๋ค์ ์คํํ์ฌ ๊ตฌ์ฑ ํ์ผ์ ํด๋ฌ์คํฐ์
์ธ๋ถ์ฌํญ๋ค์ ์ถ๊ฐํ๋ค.
kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster test --server=https://5.6.7.8 --insecure-skip-tls-verify
์ฌ์ฉ์์ ์ธ๋ถ์ฌํญ๋ค์ ๊ตฌ์ฑ ํ์ผ์ ์ถ๊ฐํ๋ค.
์ฃผ์:
์ฟ ๋ฒ๋คํฐ์ค ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ์ ์ํธ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ์ํํ๋ค. ์๊ฒฉ ์ฆ๋ช ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ๋ณ๋๋ก ์ ์ฅํ๋ ๊ฒ์ด ๋ ๋์ ๋์์ด๋ค. client-go ์๊ฒฉ์ฆ๋ช ํ๋ฌ๊ทธ์ธ์ ์ฐธ๊ณ ํ๋ค.kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password
์ฐธ๊ณ :
- ์ฌ์ฉ์๋ฅผ ์ญ์ ํ๋ ค๋ฉด
kubectl --kubeconfig=config-demo config unset users.<name>
๋ฅผ ์คํํ๋ค. - ํด๋ฌ์คํฐ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด
kubectl --kubeconfig=config-demo config unset clusters.<name>
๋ฅผ ์คํํ๋ค. - ์ปจํ
์คํธ๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด
kubectl --kubeconfig=config-demo config unset contexts.<name>
๋ฅผ ์คํํ๋ค.
์ปจํ ์คํธ ์ธ๋ถ์ฌํญ๋ค์ ๊ตฌ์ฑ ํ์ผ์ ์ถ๊ฐํ๋ค.
kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-test --cluster=test --namespace=default --user=experimenter
config-demo
ํ์ผ์ ์ด์ด์ ์ธ๋ถ์ฌํญ๋ค์ด ์ถ๊ฐ๋์๋์ง ํ์ธํ๋ค. config-demo
ํ์ผ์ ์ด์ด๋ณด๋
๊ฒ ๋์ ์ config view
์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
kubectl config --kubeconfig=config-demo view
๋ ํด๋ฌ์คํฐ, ๋ ์ฌ์ฉ์, ์ธ ์ปจํ ์คํธ๋ค์ด ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ก ๋์จ๋ค.
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
- cluster:
insecure-skip-tls-verify: true
server: https://5.6.7.8
name: test
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: test
namespace: default
user: experimenter
name: exp-test
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
- name: experimenter
user:
# ๋ฌธ์ ์ฐธ๊ณ ์ฌํญ (์ด ์ค๋ช
์ ๋ช
๋ น ์ถ๋ ฅ์ ์ผ๋ถ๊ฐ ์๋๋ค.)
# ์ฟ ๋ฒ๋คํฐ์ค ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ์ ์ํธ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ์ํํ๋ค.
# ์๊ฒฉ ์ฆ๋ช
ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ
# ์๊ฒฉ ์ฆ๋ช
์ ๋ณ๋๋ก ์ ์ฅํ๋ ๊ฒ์ด ๋ ๋์ ๋์์ด๋ค.
# ๋ค์์ ์ฐธ๊ณ ํ์. https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
password: some-password
username: exp
์ fake-ca-file
, fake-cert-file
, fake-key-file
์ ์ธ์ฆ์ ํ์ผ๋ค์ ์ค์ ๊ฒฝ๋ก ์ด๋ฆ์ ์ํ
ํ๋ ์ด์คํ๋(placeholder)์ด๋ค.
๋น์ ์ ํ๊ฒฝ์ ๋ง๊ฒ ์ด๋ค์ ์ค์ ์ธ์ฆ์ ๊ฒฝ๋ก๋ก ๋ณ๊ฒฝํด์ค์ผ ํ๋ค.
๋ง์ฝ ๋น์ ์ด ์ธ์ฆ์ ํ์ผ๋ค์ ๊ฒฝ๋ก ๋์ ์ ์ฌ๊ธฐ์ ํฌํจ๋ base64๋ก ์ธ์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค๋ฉด
์ด ๊ฒฝ์ฐ ํค์ -data
์ ๋ฏธ์ฌ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. ์๋ฅผ ๋ค๋ฉด certificate-authority-data
,
client-certificate-data
, client-key-data
๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
์ปจํ
์คํธ๋ ์ธ ๊ฐ์ง(ํด๋ฌ์คํฐ, ์ฌ์ฉ์, ๋ค์์คํ์ด์ค) ์์๋ค๋ก ์ด๋ค์ง๋ค. ์๋ฅผ ๋ค์ด
dev-frontend
์ปจํ
์คํธ๋ "development
ํด๋ฌ์คํฐ์ frontend
๋ค์์คํ์ด์ค์ ์ ๊ทผํ๋๋ฐ
developer
์ฌ์ฉ์ ์๊ฒฉ์ฆ๋ช
์ ์ฌ์ฉํ๋ผ๊ณ ์๋ ค์ค๋ค."
ํ์ฌ ์ปจํ ์คํธ๋ฅผ ์ค์ ํ๋ค.
kubectl config --kubeconfig=config-demo use-context dev-frontend
์ด์ ๋น์ ์ด kubectl
์ปค๋งจ๋๋ฅผ ์
๋ ฅํ ๋๋ง๋ค dev-frontend
์ปจํ
์คํธ์ ๋ช
์๋ ํด๋ฌ์คํฐ์
๋ค์์คํ์ด์ค ์์์ ๋์ํ๊ฒ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ปค๋งจ๋๋ dev-frontend
์ปจํ
์คํธ ๋ด์ ๋ช
์๋
์ฌ์ฉ์ ์๊ฒฉ์ฆ๋ช
์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
ํ์ฌ ์ปจํ
์คํธ์ ๊ด๋ จ๋ ๊ตฌ์ฑ ์ ๋ณด๋ง์ ๋ณด๋ ค๋ฉด
--minify
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
kubectl config --kubeconfig=config-demo view --minify
dev-frontend
์ปจํ
์คํธ์ ๊ด๋ จ๋ ๊ตฌ์ฑ ์ ๋ณด๊ฐ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ก ํ์๋ ๊ฒ์ด๋ค.
apiVersion: v1
clusters:
- cluster:
certificate-authority: fake-ca-file
server: https://1.2.3.4
name: development
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
current-context: dev-frontend
kind: Config
preferences: {}
users:
- name: developer
user:
client-certificate: fake-cert-file
client-key: fake-key-file
์ด์ ๋น์ ์ด ์ ์ test ํด๋ฌ์คํฐ์์ ์์ ํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
ํ์ฌ ์ปจํ
์คํธ๋ฅผ exp-test
๋ก ๋ณ๊ฒฝํ๋ค.
kubectl config --kubeconfig=config-demo use-context exp-test
์ด์ ๋น์ ์ด ์คํํ๋ ๋ชจ๋ kubectl
์ปค๋งจ๋๋ test
ํด๋ฌ์คํฐ์
default ๋ค์์คํ์ด์ค์ ์ ์ฉ๋๋ฉฐ exp-test
์ปจํ
์คํธ์ ๋์ด๋
์ฌ์ฉ์์ ์๊ฒฉ์ฆ๋ช
์ ์ฌ์ฉํ ๊ฒ์ด๋ค.
ํ์ฌ์ ์ปจํ
์คํธ์ธ exp-test
์ ๊ด๋ จ๋ ์ค์ ์ ๋ณด์.
kubectl config --kubeconfig=config-demo view --minify
๋ง์ง๋ง์ผ๋ก ๋น์ ์ด development
ํด๋ฌ์คํฐ์ storage
๋ค์์คํ์ด์ค์์
์ ์ ์์
์ ํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
ํ์ฌ ์ปจํ
์คํธ๋ฅผ dev-storage
๋ก ๋ณ๊ฒฝํ๋ค.
kubectl config --kubeconfig=config-demo use-context dev-storage
ํ์ฌ ์ปจํ
์คํธ์ธ dev-storage
์ ๊ด๋ จ๋ ์ค์ ์ ๋ณด์.
kubectl config --kubeconfig=config-demo view --minify
๋ ๋ฒ์งธ ๊ตฌ์ฑ ํ์ผ ์์ฑ
config-exercise
๋๋ ํฐ๋ฆฌ์์ ๋ค์ ๋ด์ฉ์ผ๋ก config-demo-2
๋ผ๋ ํ์ผ์ ์์ฑํ๋ค.
apiVersion: v1
kind: Config
preferences: {}
contexts:
- context:
cluster: development
namespace: ramp
user: developer
name: dev-ramp-up
์ ๊ตฌ์ฑ ํ์ผ์ dev-ramp-up
์ด๋ผ๋ ์ ๊ท ์ปจํ
์คํธ๋ฅผ ์ ์ํ๋ค.
KUBECONFIG ํ๊ฒฝ ๋ณ์ ์ค์
KUBECONFIG
๋ผ๋ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํด๋ณด์. ๋ง์ฝ ๊ฐ์ง๊ณ ์๋ค๋ฉด,
์ดํ์ ๋ณต์ํ ์ ์๋๋ก KUBECONFIG
ํ๊ฒฝ ๋ณ์์ ํ์ฌ ๊ฐ์ ์ ์ฅํ๋ค.
์:
๋ฆฌ๋ ์ค
export KUBECONFIG_SAVED="$KUBECONFIG"
์๋์ฐ PowerShell
$Env:KUBECONFIG_SAVED=$ENV:KUBECONFIG
KUBECONFIG
ํ๊ฒฝ ๋ณ์๋ ๊ตฌ์ฑ ํ์ผ๋ค์ ๊ฒฝ๋ก์ ๋ฆฌ์คํธ์ด๋ค. ์ด ๋ฆฌ์คํธ๋
๋ฆฌ๋
์ค์ Mac์์๋ ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถ๋๋ฉฐ ์๋์ฐ์์๋ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถ๋๋ค.
KUBECONFIG
ํ๊ฒฝ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๋ฆฌ์คํธ์ ํฌํจ๋ ๊ตฌ์ฑ ํ์ผ๋ค์
์ต์ํด์ง๊ธธ ๋ฐ๋๋ค.
๋ค์ ์์ ๊ฐ์ด ์์๋ก KUBECONFIG
ํ๊ฒฝ ๋ณ์์ ๋ ๊ฐ์ ๊ฒฝ๋ก๋ค์ ๋ง๋ถ์ฌ๋ณด์.
๋ฆฌ๋ ์ค
export KUBECONFIG="${KUBECONFIG}:config-demo:config-demo-2"
์๋์ฐ PowerShell
$Env:KUBECONFIG=("config-demo;config-demo-2")
config-exercise
๋๋ ํฐ๋ฆฌ์์ ๋ค์ ์ปค๋งจ๋๋ฅผ ์
๋ ฅํ๋ค.
kubectl config view
๋น์ ์ KUBECONFIG
ํ๊ฒฝ ๋ณ์์ ๋์ด๋ ๋ชจ๋ ํ์ผ๋ค์ด ํฉ์ณ์ง ์ ๋ณด๊ฐ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ก
ํ์๋ ๊ฒ์ด๋ค. ํนํ, ํฉ์ณ์ง ์ ๋ณด๊ฐ config-demo-2
ํ์ผ์ dev-ramp-up
์ปจํ
์คํธ์ config-demo
ํ์ผ์ ์ธ ๊ฐ์ ์ปจํ
์คํธ๋ค์
๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ์ฃผ๋ชฉํ๊ธธ ๋ฐ๋๋ค.
contexts:
- context:
cluster: development
namespace: frontend
user: developer
name: dev-frontend
- context:
cluster: development
namespace: ramp
user: developer
name: dev-ramp-up
- context:
cluster: development
namespace: storage
user: developer
name: dev-storage
- context:
cluster: test
namespace: default
user: experimenter
name: exp-test
kubeconfig ํ์ผ๋ค์ ์ด๋ป๊ฒ ๋ณํฉํ๋์ง์ ๋ํ ์์ธ์ ๋ณด๋ kubeconfig ํ์ผ์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ์ ๊ทผ ๊ตฌ์ฑํ๊ธฐ๋ฅผ ์ฐธ์กฐํ๋ค.
$HOME/.kube ๋๋ ํฐ๋ฆฌ ํ์
๋ง์ฝ ๋น์ ์ด ์ด๋ฏธ ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ kubectl
์ ์ฌ์ฉํ์ฌ
ํด๋น ํด๋ฌ์คํฐ๋ฅผ ์ ์ดํ๊ณ ์๋ค๋ฉด, ์๋ง $HOME/.kube
๋๋ ํฐ๋ฆฌ์ config
๋ผ๋
ํ์ผ์ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด๋ค.
$HOME/.kube
๋ก ๊ฐ์ ์ด๋ค ํ์ผ๋ค์ด ์กด์ฌํ๋์ง ๋ณด์.
๋ณดํต config
๋ผ๋ ํ์ผ์ด ์กด์ฌํ ๊ฒ์ด๋ค. ํด๋น ๋๋ ํฐ๋ฆฌ ๋ด์๋ ๋ค๋ฅธ ๊ตฌ์ฑ ํ์ผ๋ค๋ ์์ ์ ์๋ค.
๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด ๋น์ ์ ์ด ํ์ผ๋ค์ ์ปจํ
์ธ ์ ์ต์ํด์ ธ์ผ ํ๋ค.
$HOME/.kube/config๋ฅผ KUBECONFIG ํ๊ฒฝ ๋ณ์์ ์ถ๊ฐ
๋น์ ์ด $HOME/.kube/config
ํ์ผ์ ๊ฐ์ง๊ณ ์๋๋ฐ KUBECONFIG
ํ๊ฒฝ ๋ณ์์ ๋ํ๋์ง ์๋๋ค๋ฉด KUBECONFIG
ํ๊ฒฝ ๋ณ์์ ์ถ๊ฐํด๋ณด์.
์:
๋ฆฌ๋ ์ค
export KUBECONFIG="${KUBECONFIG}:${HOME}/.kube/config"
์๋์ฐ Powershell
$Env:KUBECONFIG="$Env:KUBECONFIG;$HOME\.kube\config"
์ด์ KUBECONFIG
ํ๊ฒฝ ๋ณ์์ ๋ฆฌ์คํธ์ ํฌํจ๋ ๋ชจ๋ ํ์ผ๋ค์ด ํฉ์ณ์ง ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ๋ณด์.
config-exercise ๋๋ ํฐ๋ฆฌ์์ ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํํ๋ค.
kubectl config view
์ ๋ฆฌ
KUBECONFIG
ํ๊ฒฝ ๋ณ์๋ฅผ ์๋ ๊ฐ์ผ๋ก ๋๋๋ ค ๋์. ์๋ฅผ ๋ค๋ฉด:
๋ฆฌ๋ ์ค
export KUBECONFIG="$KUBECONFIG_SAVED"
์๋์ฐ PowerShell
$Env:KUBECONFIG=$ENV:KUBECONFIG_SAVED
kubeconfig์ ์ํด ํ์๋ ์ ๋ชฉ์ ํ์ธํ๊ธฐ
ํด๋ฌ์คํฐ ์ธ์ฆ ํ ์ด๋ค ์์ฑ(์ฌ์ฉ์ ์ด๋ฆ, ๊ทธ๋ฃน)์ ์ป์ ์ ์๋์ง ํญ์ ๋ช ํํ์ง๋ ์๋ค. ๋์์ ๋ ๊ฐ ์ด์์ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ ํจ์ฌ ๋ ์ด๋ ค์ธ ์ ์๋ค.
์ ํ๋์ด ์๋ ์ฟ ๋ฒ๋คํฐ์ค ์ปจํ
์คํธ์ ์ฌ์ฉ์ ์ด๋ฆ ๋ฑ์ ๋ํ,
์ฃผ์ฒด ์์ฑ์ ํ์ธํ๊ธฐ ์ํ 'kubectl' ์ํ ํ์ ๋ช
๋ น kubectl alpha auth whoami
์ด ์๋ค.
๋ ์์ธํ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ์ ์ธ์ฆ ์ ๋ณด์ ๋ํ API ์ก์ธ์ค ๋ฅผ ํ์ธํ๋ค.
๋ค์ ๋ด์ฉ
4 - ํฌํธ ํฌ์๋ฉ์ ์ฌ์ฉํด์ ํด๋ฌ์คํฐ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๊ธฐ
์ด ํ์ด์ง๋ kubectl port-forward
๋ฅผ ์ฌ์ฉํด์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋ด์์
์คํ์ค์ธ MongoDB ์๋ฒ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค. ์ด ์ ํ์ ์ฐ๊ฒฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋๋ฒ๊น
์ ์ ์ฉํ ์ ์๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์๋ฒ์ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ๊ฑฐ๋ ๋ ๋์์ผ ํจ. ๋ฒ์ : v1.10.๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ
kubectl version
.MongoDB Shell์ ์ค์นํ๋ค.
MongoDB ๋ํ๋ก์ด๋จผํธ์ ์๋น์ค ์์ฑํ๊ธฐ
MongoDB๋ฅผ ์คํํ๊ธฐ ์ํด ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-deployment.yaml
์ฑ๊ณต์ ์ธ ๋ช ๋ น์ด์ ์ถ๋ ฅ์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋๋ค๋ ๊ฒ์ ํ์ธํด์ค๋ค.
deployment.apps/mongo created
ํ๋ ์ํ๋ฅผ ์กฐํํ์ฌ ํ๋๊ฐ ์ค๋น๋์๋์ง ํ์ธํ๋ค.
kubectl get pods
์ถ๋ ฅ์ ํ๋๊ฐ ์์ฑ๋์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค.
NAME READY STATUS RESTARTS AGE mongo-75f59d57f4-4nd6q 1/1 Running 0 2m4s
๋ํ๋ก์ด๋จผํธ ์ํ๋ฅผ ์กฐํํ๋ค.
```shell
kubectl get deployment
์ถ๋ ฅ์ ๋ํ๋ก์ด๋จผํธ๊ฐ ์์ฑ๋์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค.
NAME READY UP-TO-DATE AVAILABLE AGE
mongo 1/1 1 1 2m21s
๋ํ๋ก์ด๋จผํธ๋ ์๋์ผ๋ก ๋ ํ๋ฆฌ์นด์ ์ ๊ด๋ฆฌํ๋ค. ์๋์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ ํ๋ฆฌ์นด์ ์ํ๋ฅผ ์กฐํํ๋ค.
kubectl get replicaset
์ถ๋ ฅ์ ๋ ํ๋ฆฌ์นด์ ์ด ์์ฑ๋์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค.
NAME DESIRED CURRENT READY AGE
mongo-75f59d57f4 1 1 1 3m12s
MongoDB๋ฅผ ๋คํธ์ํฌ์ ๋ ธ์ถ์ํค๊ธฐ ์ํด ์๋น์ค๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml
์ฑ๊ณต์ ์ธ ์ปค๋งจ๋์ ์ถ๋ ฅ์ ์๋น์ค๊ฐ ์์ฑ๋์๋ค๋ ๊ฒ์ ํ์ธํด์ค๋ค.
service/mongo created
์๋น์ค๊ฐ ์์ฑ๋์๋์ง ํ์ธํ๋ค.
kubectl get service mongo
์ถ๋ ฅ์ ์๋น์ค๊ฐ ์์ฑ๋์๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋ค.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mongo ClusterIP 10.96.41.183
3. MongoDB ์๋ฒ๊ฐ ํ๋ ์์์ ์คํ๋๊ณ ์๊ณ , 27017๋ฒ ํฌํธ์์ ์์ ํ๊ณ ์๋์ง ํ์ธํ๋ค.
```shell
# mongo-75f59d57f4-4nd6q ๋ฅผ ๋น์ ์ ํ๋ ์ด๋ฆ์ผ๋ก ๋์ฒดํ๋ค.
kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
์ถ๋ ฅ์ ํ๋ ๋ด MongoDB ํฌํธ ๋ฒํธ๋ฅผ ๋ณด์ฌ์ค๋ค.
27017
(27017์ ์ธํฐ๋ท ์์ MongoDB์ ํ ๋น๋ TCP ํฌํธ์ด๋ค.)
ํ๋์ ํฌํธ๋ฅผ ๋ก์ปฌ ํฌํธ๋ก ํฌ์๋ฉํ๊ธฐ
kubectl port-forward
๋ช ๋ น์ด๋ ํ๋ ์ด๋ฆ๊ณผ ๊ฐ์ด ๋ฆฌ์์ค ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ผ์นํ๋ ํ๋๋ฅผ ์ ํํด ํฌํธ ํฌ์๋ฉํ๋ ๊ฒ์ ํ์ฉํ๋ค.# mongo-75f59d57f4-4nd6q ๋ฅผ ๋น์ ์ ํ๋ ์ด๋ฆ์ผ๋ก ๋์ฒดํ๋ค. kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
์ด๊ฒ์
kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017
๋๋
kubectl port-forward deployment/mongo 28015:27017
๋๋
kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
kubectl port-forward service/mongo 28015:27017
์์ ๋ช ๋ น์ด๋ค์ ๋ชจ๋ ๋์ผํ๊ฒ ๋์ํ๋ค. ์ด์ ์ ์ฌํ๊ฒ ์ถ๋ ฅ๋๋ค.
Forwarding from 127.0.0.1:28015 -> 27017 Forwarding from [::1]:28015 -> 27017
์ฐธ๊ณ :
kubectl port-forward
๋ ํ๋กฌํํธ๋ฅผ ๋ฆฌํดํ์ง ์์ผ๋ฏ๋ก, ์ด ์ฐ์ต์ ๊ณ์ํ๋ ค๋ฉด ๋ค๋ฅธ ํฐ๋ฏธ๋์ ์ด์ด์ผ ํ๋ค.MongoDB ์ปค๋งจ๋๋ผ์ธ ์ธํฐํ์ด์ค๋ฅผ ์คํํ๋ค.
mongosh --port 28015
MongoDB ์ปค๋งจ๋๋ผ์ธ ํ๋กฌํํธ์
ping
๋ช ๋ น์ ์ ๋ ฅํ๋ค.db.runCommand( { ping: 1 } )
์ฑ๊ณต์ ์ธ ํ ์์ฒญ์ ๋ฐํํ๋ค.
{ ok: 1 }
์ ํ์ ์ผ๋ก kubectl ์ด ๋ก์ปฌ ํฌํธ๋ฅผ ์ ํํ๊ฒ ํ๊ธฐ
๋ง์ฝ ํน์ ๋ก์ปฌ ํฌํธ๊ฐ ํ์ํ์ง ์๋ค๋ฉด, kubectl
์ด ๋ก์ปฌ ํฌํธ๋ฅผ ์ ํ ๋ฐ ํ ๋นํ๊ฒ ํ์ฌ,
์กฐ๊ธ ๋ ๋จ์ํ ๋ฌธ๋ฒ์ผ๋ก ๋ก์ปฌ ํฌํธ ์ถฉ๋ ๊ด๋ฆฌ๋ฅผ ์ํ
๋ถ๋ด์ ์ค์ผ ์ ์๋ค.
kubectl port-forward deployment/mongo :27017
kubectl
๋๊ตฌ๋ ์ฌ์ฉ ์ค์ด ์๋ ๋ก์ปฌ ํฌํธ ๋ฒํธ๋ฅผ ์ฐพ๋๋ค (๋ฎ์ ํฌํธ ๋ฒํธ๋
๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ๋ ๊ฒ์ด๋ฏ๋ก, ๋ฎ์ ํฌํธ ๋ฒํธ๋ฅผ ํผํด์). ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
Forwarding from 127.0.0.1:63753 -> 27017
Forwarding from [::1]:63753 -> 27017
ํ ์
๋ก์ปฌ 28015 ํฌํธ์ ๋ํ ์ฐ๊ฒฐ์ MongoDB ์๋ฒ๊ฐ ์คํ์ค์ธ ํ๋์ 27017 ํฌํธ๋ก ํฌ์๋ฉ๋๋ค. ์ด ์ฐ๊ฒฐ๋ก ๋ก์ปฌ ์ํฌ์คํ ์ด์ ์์ ํ๋ ์์์ ์คํ ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋๋ฒ๊น ํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ :
kubectl port-forward
๋ TCP ํฌํธ์์๋ง ๊ตฌํ๋๋ค.
UDP ํ๋กํ ์ฝ์ ๋ํ ์ง์์
์ด์ 47862์์ ์ถ์ ๋๊ณ ์๋ค.๋ค์ ๋ด์ฉ
kubectl port-forward์ ๋ํด ๋ ์์๋ณธ๋ค.
5 - ํด๋ฌ์คํฐ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๊ธฐ ์ํด ์๋น์ค ์ฌ์ฉํ๊ธฐ
์ด ๋ฌธ์๋ ์ธ๋ถ ํด๋ผ์ด์ธํธ๊ฐ ํด๋ฌ์คํฐ์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ค. ์๋น์ค๋ ์คํ ์ค์ธ ๋ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ ๊ณตํ๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ชฉ์
- Hello World ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์ค ๋ ๊ฐ๋ฅผ ์คํํ๋ค.
- ๋ ธ๋ ํฌํธ๋ฅผ ๋ ธ์ถํ๋ ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
- ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ๊ธฐ ์ํด ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ๋ค.
๋ ๊ฐ์ ํ๋์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋น์ค ์์ฑํ๊ธฐ
๋ค์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ํ๋ก์ด๋จผํธ(Deployment) ์ค์ ํ์ผ์ด๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-world
spec:
selector:
matchLabels:
run: load-balancer-example
replicas: 2
template:
metadata:
labels:
run: load-balancer-example
spec:
containers:
- name: hello-world
image: gcr.io/google-samples/node-hello:1.0
ports:
- containerPort: 8080
protocol: TCP
ํด๋ฌ์คํฐ ๋ด Hello World ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ์. ์ ํ์ผ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ์.
kubectl apply -f https://k8s.io/examples/service/access/hello-application.yaml
์์ ๋ช ๋ น์ ๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ์ ์ฐ๊ด๋ ๋ ํ๋ฆฌ์นด์ (ReplicaSet) ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค. ๋ ํ๋ฆฌ์นด์ ์ ๋ ๊ฐ์ ํ๋๋ฅผ ๊ฐ๊ณ , ๊ฐ๊ฐ์ Hello World ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ค.
๋ํ๋ก์ด๋จผํธ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋ค.
kubectl get deployments hello-world kubectl describe deployments hello-world
๋ ํ๋ฆฌ์นด์ ์ค๋ธ์ ํธ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋ค.
kubectl get replicasets kubectl describe replicasets
๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ ธ์ถํ๋ ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
kubectl expose deployment hello-world --type=NodePort --name=example-service
์๋น์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋ค.
kubectl describe services example-service
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
Name: example-service Namespace: default Labels: run=load-balancer-example Annotations: <none> Selector: run=load-balancer-example Type: NodePort IP: 10.32.0.16 Port: <unset> 8080/TCP TargetPort: 8080/TCP NodePort: <unset> 31496/TCP Endpoints: 10.200.1.4:8080,10.200.2.5:8080 Session Affinity: None Events: <none>
์๋น์ค์ ๋ ธ๋ํฌํธ(NodePort) ๊ฐ์ ๋ฉ๋ชจํ์. ์๋ฅผ ๋ค์ด, ์์ ๊ฒฐ๊ณผ์์, ๋ ธ๋ํฌํธ ๊ฐ์ 31496์ด๋ค.
Hello World ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ธ ํ๋๋ฅผ ๋์ดํ๋ค.
kubectl get pods --selector="run=load-balancer-example" --output=wide
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
NAME READY STATUS ... IP NODE hello-world-2895499144-bsbk5 1/1 Running ... 10.200.1.4 worker1 hello-world-2895499144-m1pwt 1/1 Running ... 10.200.2.5 worker2
Hello World ํ๋๊ฐ ์คํ ์ค์ธ ๋ ธ๋๋ค ์ค ํ๋์ ๋ ธ๋์ ๋ํด ๊ณต์ฉ IP ์ฃผ์๋ฅผ ์ป์. ์ด ์ฃผ์๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์ด๋ป๊ฒ ํด๋ฌ์คํฐ๋ฅผ ์ค์นํ๋์ง์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์๋ฅผ ๋ค์ด, Minikube๋ฅผ ์ฌ์ฉํ๋ฉด,
kubectl cluster-info
๋ฅผ ์คํํ์ฌ ๋ ธ๋ ์ฃผ์๋ฅผ ์ ์ ์๋ค. Google Compute Engine ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๋ฉด,gcloud compute instances list
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ค์ ๊ณต์ฉ ์ฃผ์๋ฅผ ์ ์ ์๋ค.์ ํํ ๋ ธ๋์์ ๋ ธ๋ ํฌํธ์ ๋ํด TCP ํต์ ์ ํ์ฉํ๋๋ก ๋ฐฉํ๋ฒฝ ๊ท์น์ ์์ฑํ์. ์๋ฅผ ๋ค์ด, ์๋น์ค์ ๋ ธ๋ํฌํธ ๊ฐ์ด 31568์ธ ๊ฒฝ์ฐ, 31568 ํฌํธ๋ก TCP ํต์ ์ ํ์ฉํ๋๋ก ๋ฐฉํ๋ฒฝ ๊ท์น์ ์์ฑํ์. ๋ค๋ฅธ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๋ ๋ฐฉํ๋ฒฝ ๊ท์น์ ์ค์ ํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
Hello World ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทผ์ ์ํด ๋ ธ๋ ์ฃผ์์ ๋ ธ๋ ํฌํธ๋ฅผ ์ฌ์ฉํ์.
curl http://<public-node-ip>:<node-port>
<public-node-ip>
๋ ๋ ธ๋์ ๊ณต์ฉ IP ์ฃผ์์ด๊ณ ,<node-port>
๋ ์๋น์ค์ ๋ ธ๋ํฌํธ ๊ฐ์ด๋ค. ์ฑ๊ณต์ ์ธ ์์ฒญ์ ๋ํ ์๋ต์ hello ๋ฉ์์ง์ด๋ค.Hello Kubernetes!
์๋น์ค ์ค์ ํ์ผ ์ฌ์ฉํ๊ธฐ
kubectl expose
๋ฅผ ์ฌ์ฉํ๋ ๋์ ,
์๋น์ค ์ค์ ํ์ผ์ ์ฌ์ฉํด
์๋น์ค๋ฅผ ์์ฑํ ์ ์๋ค.
์ ๋ฆฌํ๊ธฐ
์๋น์ค๋ฅผ ์ญ์ ํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์.
kubectl delete services example-service
๋ํ๋ก์ด๋จผํธ, ๋ ํ๋ฆฌ์นด์ , Hello World ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ค์ธ ํ๋๋ฅผ ์ญ์ ํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์.
kubectl delete deployment hello-world
๋ค์ ๋ด์ฉ
ํํ ๋ฆฌ์ผ ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๊ฒฐํ๊ธฐ ๋ฐ๋ผํ๊ธฐ
6 - ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก ํธ์๋๋ฅผ ๋ฐฑ์๋์ ์ฐ๊ฒฐ
์ด ์์ ์ ํ๋ก ํธ์๋ ์ ๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋์ง๋ฅผ ์ค๋ช ํ๋ค. ๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ ์ธ์ฌํ๊ธฐ(hello greeter)์ด๋ค. ํ๋ก ํธ์๋๋ nginx ๋ฐ ์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํด ๋ฐฑ์๋๋ฅผ ๋ ธ์ถํ๋ค.
๋ชฉ์
- ๋ํ๋ก์ด๋จผํธ(Deployment) ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํด
์ํ
hello
๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์์ฑํ๊ณ ์คํํ๋ค. - ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค์ ์ฌ๋ฌ ๋ณต์ ๋ณธ์ผ๋ก ํธ๋ํฝ์ ๋ณด๋ธ๋ค.
- ๋ํ๋ก์ด๋จผํธ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ
nginx
ํ๋ก ํธ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์์ฑํ๊ณ ์คํํ๋ค. - ํธ๋ํฝ์ ๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ณด๋ด๋๋ก ํ๋ก ํธ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ค.
type=LoadBalancer
์ ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํด ํด๋ฌ์คํฐ ์ธ๋ถ์ ํ๋ก ํธ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ ธ์ถํ๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
์ด ์์ ์ ์ง์๋๋ ํ๊ฒฝ์ด ํ์ํ ์ธ๋ถ ๋ก๋๋ฐธ๋ฐ์๊ฐ ์๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ค. ๋ง์ฝ, ์ด๋ฅผ ์ง์ํ์ง ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด, ๋ ธ๋ํฌํธ ์๋น์ค ํ์ ์ ๋์ ์ฌ์ฉํ ์ ์๋ค.
๋ํ๋ก์ด๋จผํธ๋ฅผ ์ฌ์ฉํด ๋ฐฑ์๋ ์์ฑํ๊ธฐ
๋ฐฑ์๋๋ ์ธ์ฌํ๊ธฐ๋ผ๋ ๊ฐ๋จํ ๋ง์ดํฌ๋ก์๋น์ค์ด๋ค. ์ฌ๊ธฐ์ ๋ฐฑ์๋ ๋ํ๋ก์ด๋จผํธ ๊ตฌ์ฑ ํ์ผ์ด ์๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
selector:
matchLabels:
app: hello
tier: backend
track: stable
replicas: 3
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80
๋ฐฑ์๋ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/service/access/backend-deployment.yaml
๋ฐฑ์๋ ๋ํ๋ก์ด๋จผํธ์ ๊ดํ ์ ๋ณด๋ฅผ ๋ณธ๋ค.
kubectl describe deployment backend
๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
Name: backend
Namespace: default
CreationTimestamp: Mon, 24 Oct 2016 14:21:02 -0700
Labels: app=hello
tier=backend
track=stable
Annotations: deployment.kubernetes.io/revision=1
Selector: app=hello,tier=backend,track=stable
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
Pod Template:
Labels: app=hello
tier=backend
track=stable
Containers:
hello:
Image: "gcr.io/google-samples/hello-go-gke:1.0"
Port: 80/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: hello-3621623197 (3/3 replicas created)
Events:
...
hello
์๋น์ค ์ค๋ธ์ ํธ ์์ฑํ๊ธฐ
ํ๋ก ํธ์๋์์ ๋ฐฑ์๋๋ก ์์ฒญ์ ๋ณด๋ด๋ ํต์ฌ์ ๋ฐฑ์๋ ์๋น์ค์ด๋ค. ์๋น์ค๋ ๋ฐฑ์๋ ๋ง์ดํฌ๋ก์๋น์ค์ ์ธ์ ๋ ๋๋ฌํ๊ธฐ ์ํด ๋ณํ์ง ์๋ IP ์ฃผ์์ DNS ์ด๋ฆ ํญ๋ชฉ์ ์์ฑํ๋ค. ์๋น์ค๋ ํธ๋ํฝ์ ๋ณด๋ด๋ ํ๋๋ฅผ ์ฐพ๊ธฐ ์ํด ์ ๋ ํฐ๋ฅผ ์ฌ์ฉํ๋ค.
๋จผ์ , ์๋น์ค ๊ตฌ์ฑ ํ์ผ์ ์ดํด๋ณด์.
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
๊ตฌ์ฑ ํ์ผ์์ hello
๋ผ๋ ์ด๋ฆ์ ์๋น์ค๊ฐ app: hello
๋ฐ tier: backend
๋ ์ด๋ธ์ ๊ฐ๋
ํ๋์ ํธ๋ํฝ์ ๋ณด๋ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ฐฑ์๋ ์๋น์ค๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/service/access/backend-service.yaml
์ด ์์ ์์ hello
์ ํ๋ฆฌ์ผ์ด์
์ ๋ณต์ ๋ณธ 3๊ฐ๋ฅผ ์คํํ๋ backend
๋ํ๋ก์ด๋จผํธ๊ฐ ์๊ณ , ํด๋น ๋ฐฑ์๋๋ก ํธ๋ํฝ์ ๋ณด๋ด๋ ์๋น์ค๊ฐ ์๋ค. ๊ทธ๋ฌ๋, ์ด
์๋น์ค๋ ํด๋ฌ์คํฐ ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ํ์ธํ ์ ์๋ค.
ํ๋ก ํธ์๋ ์์ฑํ๊ธฐ
์ด์ ๋ฐฑ์๋๋ฅผ ์คํํ์ผ๋ฏ๋ก, ํด๋ฌ์คํฐ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ ํ๋ก ํธ์๋๋ฅผ ๋ง๋ค๊ณ , ๋ฐฑ์๋๋ก์ ์์ฒญ์ ํ๋ก์ํ์ฌ ๋ฐฑ์๋์ ์ฐ๊ฒฐํ ์ ์๋ค.
ํ๋ก ํธ์๋๋ ๋ฐฑ์๋ ์๋น์ค์ ์ง์ ๋ DNS ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ๋ฐฑ์๋
์์ปค ํ๋์ ์์ฒญ์ ๋ณด๋ธ๋ค. DNS ์ด๋ฆ์
examples/service/access/backend-service.yaml
๊ตฌ์ฑ ํ์ผ์
name
ํ๋ ๊ฐ์ธ hello
์ด๋ค.
ํ๋ก ํธ์๋ ๋ํ๋ก์ด๋จผํธ ์์ ํ๋๋ hello
๋ฐฑ์๋ ์๋น์ค์ ๋ํ ์์ฒญ์
ํ๋ก์ํ๋๋ก ๊ตฌ์ฑ๋ nginx ์ด๋ฏธ์ง๋ฅผ ์คํํ๋ค. ๋ค์์ nginx ๊ตฌ์ฑ ํ์ผ์ด๋ค.
# The identifier Backend is internal to nginx, and used to name this specific upstream
upstream Backend {
# hello is the internal DNS name used by the backend Service inside Kubernetes
server hello;
}
server {
listen 80;
location / {
# The following statement will proxy traffic to the upstream named Backend
proxy_pass http://Backend;
}
}
๋ฐฑ์๋์ ๊ฐ์ด, ํ๋ก ํธ์๋๋ ๋ํ๋ก์ด๋จผํธ์ ์๋น์ค๋ฅผ ๊ฐ๊ณ ์๋ค. ๋ฐฑ์๋
์๋น์ค์ ํ๋ก ํธ์๋ ์๋น์ค ๊ฐ์ ์ฃผ๋ชฉํด์ผ ํ ์ค์ํ ์ฐจ์ด์ ์ ํ๋ก ํธ์๋
์๋น์ค์ ๊ตฌ์ฑ์ type: LoadBalancer
๊ฐ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ,
์๋น์ค๊ฐ ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ํ๋ก๋น์ ๋ํ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ๊ณ
ํด๋ฌ์คํฐ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์์์ ์๋ฏธํ๋ค.
---
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
selector:
app: hello
tier: frontend
ports:
- protocol: "TCP"
port: 80
targetPort: 80
type: LoadBalancer
...
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
selector:
matchLabels:
app: hello
tier: frontend
track: stable
replicas: 1
template:
metadata:
labels:
app: hello
tier: frontend
track: stable
spec:
containers:
- name: nginx
image: "gcr.io/google-samples/hello-frontend:1.0"
lifecycle:
preStop:
exec:
command: ["/usr/sbin/nginx","-s","quit"]
...
ํ๋ก ํธ์๋ ๋ํ๋ก์ด๋จผํธ์ ์๋น์ค๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/service/access/frontend-deployment.yaml
kubectl apply -f https://k8s.io/examples/service/access/frontend-service.yaml
๊ฒฐ๊ณผ๋ ๋ ๋ฆฌ์์ค๊ฐ ์์ฑ๋์์์ ํ์ธํ๋ค.
deployment.apps/frontend created
service/frontend created
์ฐธ๊ณ :
nginx ๊ตฌ์ฑ์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ฐ์ ๋์๋ค. ์ด๋ฅผ ์คํํ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ ๊ตฌ์ฑ์ ๋ณด๋ค ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ์ปจํผ๊ทธ๋งต(ConfigMap)์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.ํ๋ก ํธ์๋ ์๋น์ค์ ํต์ ํ๊ธฐ
์ผ๋จ ๋ก๋๋ฐธ๋ฐ์ ํ์ ์ ์๋น์ค๋ฅผ ์์ฑํ๋ฉด, ์ด ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ์ธ๋ถ IP๋ฅผ ์ฐพ์ ์ ์๋ค.
kubectl get service frontend --watch
frontend
์๋น์ค์ ๊ตฌ์ฑ์ ๋ณด์ฌ์ฃผ๊ณ , ๋ณ๊ฒฝ ์ฌํญ์
์ฃผ์ํ๋ค. ์ฒ์์, ์ธ๋ถ IP๋ <pending>
์ผ๋ก ๋์ด๋๋ค.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend LoadBalancer 10.51.252.116 <pending> 80/TCP 10s
ํ์ง๋ง, ์ธ๋ถ IP๊ฐ ์์ฑ๋์๋ง์ ๊ตฌ์ฑ์
EXTERNAL-IP
์ ๋ชฉ ์๋์ ์๋ก์ด IP๋ฅผ ํฌํจํ์ฌ ๊ฐฑ์ ํ๋ค.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend LoadBalancer 10.51.252.116 XXX.XXX.XXX.XXX 80/TCP 1m
์ด์ ํด๋น IP๋ ํด๋ฌ์คํฐ ์ธ๋ถ์์ frontend
์๋น์ค์ ํต์ ํ๋๋ฐ
์ฌ์ฉ๋๋ค.
ํ๋ก ํธ์๋ ํตํด์ ํธ๋ํฝ ๋ณด๋ด๊ธฐ
์ด์ ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ์ฐ๊ฒฐ๋์๋ค. ํ๋ก ํธ์๋ ์๋น์ค์ ์ธ๋ถ IP์์ curl ๋ช ๋ น์ ์ฌ์ฉํด ์๋ํฌ์ธํธ์ ๋๋ฌํ ์ ์๋ค.
curl http://${EXTERNAL_IP} # ์์ ์์์ ๋ณธ EXTERNAL-IP๋ก ์์ ํ๋ค
๊ฒฐ๊ณผ๋ก ๋ฐฑ์๋์์ ์์ฑ๋ ๋ฉ์์ง๊ฐ ๋ณด์ธ๋ค.
{"message":"Hello"}
์ ๋ฆฌํ๊ธฐ
์๋น์ค๋ฅผ ์ญ์ ํ๊ธฐ ์ํด, ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์.
kubectl delete services frontend backend
๋ฐฑ์๋์ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์คํ ์ค์ธ ๋ํ๋ก์ด๋จผํธ, ๋ ํ๋ฆฌ์นด์ , ํ๋๋ฅผ ์ญ์ ํ๊ธฐ ์ํด, ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์.
kubectl delete deployment frontend backend
๋ค์ ๋ด์ฉ
- ์๋น์ค์ ๋ํด ๋ ์์๋ณธ๋ค.
- ์ปจํผ๊ทธ๋งต์ ๋ํด ๋ ์์๋ณธ๋ค.
- ์๋น์ค์ ํ๋์ฉ DNS์ ๋ํด ๋ ์์๋ณธ๋ค.
7 - ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ์์ฑํ๊ธฐ
์ด ๋ฌธ์๋ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ดํ์ฌ ์ค๋ช ํ๋ค.
์๋น์ค๋ฅผ ์์ฑํ ๋, ํด๋ผ์ฐ๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ์ต์ ์ ์ฌ์ฉํ ์ ์๋ค. ์ด๊ฒ์ ํด๋ฌ์คํฐ ๋ ธ๋์ ์ฌ๋ฐ๋ฅธ ํฌํธ๋ก ํธ๋ํฝ์ ์ ์กํ ์ ์๋๋ก ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ IP ์ฃผ์๋ฅผ ์ ๊ณตํ๋ค. ํด๋ฌ์คํฐ๊ฐ ์ง์๋๋ ํ๊ฒฝ๊ณผ ์ฌ๋ฐ๋ฅธ ํด๋ผ์ฐ๋ ๋ก๋ ๋ฐธ๋ฐ์ ์ ๊ณต์ ํจํค์ง ๊ตฌ์ฑ์ผ๋ก ์คํ๋๋ ๊ฒฝ์ฐ.
๋ํ, ์๋น์ค ๋์ ์ธ๊ทธ๋ ์ค(Ingress) ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์์ธํ ์ฌํญ์ ์ธ๊ทธ๋ ์ค(Ingress) ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํด๋ฌ์คํฐ๋ ๋ฐ๋์ ํด๋ผ์ฐ๋ ๋๋ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ๊ตฌ์ฑ์ ์ง์ํ๋ ํ๊ฒฝ์์ ์คํ ์ค์ด์ด์ผ ํ๋ค.
์๋น์ค ์์ฑ
๋งค๋ํ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ์์ฑํ๊ธฐ
์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ๊ธฐ ์ํด์, ์๋น์ค ๋งค๋ํ์คํธ์ ๋ค์์ ์ถ๊ฐํ๋ค.
type: LoadBalancer
๋งค๋ํ์คํธ๋ ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
type: LoadBalancer
kubectl๋ฅผ ์ด์ฉํ์ฌ ์๋น์ค ์์ฑํ๊ธฐ
๋ํ, kubectl expose
๋ช
๋ น์ด์ --type=LoadBalancer
ํ๋๊ทธ๋ฅผ ์ด์ฉํด
์๋น์ค๋ฅผ ์์ฑํ ์ ์๋ค.
kubectl expose deployment example --port=8765 --target-port=9376 \
--name=example-service --type=LoadBalancer
์ด ๋ช
๋ น์ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ์
๋ ํฐ๋ก ์ฐธ์กฐํ๋ ์๋ก์ด ์๋น์ค๋ฅผ ๋ง๋ ๋ค.
(์ ์์์ ๊ฒฝ์ฐ, example
๋ก ๋ช
๋ช
๋
๋ํ๋ก์ด๋จผํธ(Deployment) ).
๋ช
๋ น์ค ์ต์
ํ๋๊ทธ๋ฅผ ํฌํจํ, ๋ ์์ธํ ๋ด์ฉ์
kubectl expose
๋ ํผ๋ฐ์ค ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค.
IP ์ฃผ์ ์ฐพ๊ธฐ
kubectl
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด ์๋น์ค ์ ๋ณด๋ฅผ ์ป์ด,
์์ฑ๋ ์๋น์ค์ ๊ดํ IP ์ฃผ์๋ฅผ ์ฐพ์ ์ ์๋ค.
kubectl describe services example-service
์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
Name: example-service
Namespace: default
Labels: app=example
Annotations: <none>
Selector: app=example
Type: LoadBalancer
IP Families: <none>
IP: 10.3.22.96
IPs: 10.3.22.96
LoadBalancer Ingress: 192.0.2.89
Port: <unset> 8765/TCP
TargetPort: 9376/TCP
NodePort: <unset> 30593/TCP
Endpoints: 172.17.0.3:9376
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
๋ก๋ ๋ฐธ๋ฐ์์ IP ์ฃผ์๋ LoadBalancer Ingress
์์ ๋ํ๋๋ค.
์ฐธ๊ณ :
๋ง์ฝ ์๋น์ค๊ฐ Minikube์์ ์คํ๋๊ณ ์๋ค๋ฉด, ์๋์ ๋ช ๋ น์ ํตํด ํ ๋น๋ IP ์ฃผ์์ ํฌํธ๋ฅผ ์ฐพ์ ์ ์๋ค.
minikube service example-service --url
ํด๋ผ์ด์ธํธ ์์ค IP ๋ณด์กดํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก ๋์ ์ปจํ
์ด๋์ ๋ณด์ด๋ ์์ค IP๋ ํด๋ผ์ด์ธํธ์ ์๋ ์์ค IP๊ฐ ์๋๋ค.
ํด๋ผ์ด์ธํธ์ IP๋ฅผ ๋ณด์กดํ ์ ์๋๋ก ํ๋ ค๋ฉด,
์๋์ ์๋น์ค .spec
ํ๋ ๊ตฌ์ฑ์ ๋ฐ๋ฅธ๋ค.
.spec.externalTrafficPolicy
- ์ด ์๋น์ค๊ฐ ์ธ๋ถ ํธ๋ํฝ์ ๋ ธ๋-๋ก์ปฌ ๋๋ ํด๋ฌ์คํฐ-์ ์ฒด ์๋ํฌ์ธํธ๋ก ๋ผ์ฐํ ํ ์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ธ๋ค. ๋ ๊ฐ์ง ์ต์ ์ด ์๋ค.Cluster
(๊ธฐ๋ณธ) ๊ทธ๋ฆฌ๊ณLocal
.Cluster
๋ ํด๋ผ์ด์ธํธ ์์ค IP๋ฅผ ๊ฐ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ ธ๋์ ๋ํ ๋ ๋ฒ์งธ ํ(hop)์ ๋ฐ์์ํฌ ์ ์์ง๋ง, ์ ์ฒด์ ์ธ ๋ถํ ๋ถ์ฐ์์ ์ด์ ์ด ์๋ค.Local
์ ํด๋ผ์ด์ธํธ ์์ค IP๋ฅผ ๋ณด์กดํ๊ณLoadBalancer
์NodePort
ํ์ ์ ์๋น์ค์์ ๋ ๋ฒ์งธ ํ(hop) ๋ฐ์์ ํผํ ์ ์์ง๋ง, ํธ๋ํฝ ๋ถ์ฐ์ด ๋ถ๊ท ํ์ ์ธ ์ ์ฌ์ ์ธ ์ํ์ด ์๋ค..spec.healthCheckNodePort
- ์๋น์ค๋ฅผ ์ํ ํฌ์ค ์ฒดํฌ ๋ ธ๋ ํฌํธ(์ ์ ํฌํธ ๋ฒํธ)๋ฅผ ์ง์ ํ๋ค.healthCheckNodePort
๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, ์๋น์ค ์ปจํธ๋กค๋ฌ๊ฐ ํด๋ฌ์คํฐ์ ๋ ธํธ ํฌํธ ๋ฒ์์์ ํฌํธ๋ฅผ ํ ๋นํ๋ค. API ์๋ฒ ๋ช ๋ น์ค ํ๋๊ทธ--service-node-port-range
๋ฅผ ์ค์ ํ์ฌ ํด๋น ๋ฒ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค. ์๋น์คtype
์ดLoadBalancer
์ด๊ณexternalTrafficPolicy
๋ฅผLocal
๋ก ์ค์ ํ ๊ฒฝ์ฐ, ์๋น์ค๋healthCheckNodePort
๊ฐ ์ง์ ๋์๋ค๋ฉด, ์ฌ์ฉ์๊ฐ ์ง์ ํ ์ค์ ์ ์ด์ฉํ๋ค.
์๋น์ค ๋งค๋ํ์คํธ์์ externalTrafficPolicy
๋ฅผ Local
๋ก ์ค์ ํ๋ฉด ์ด ๊ธฐ๋ฅ์ด ์๋ํ๋ค.
์์:
apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
externalTrafficPolicy: Local
type: LoadBalancer
์์ค IP๋ฅผ ๋ณด์กดํ ๋ ์ฃผ์์ฌํญ ๋ฐ ์ ํ ์ฌํญ
์ผ๋ถ ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๋น์ค์์๋ ๋์๋ณ๋ก ๋ค๋ฅธ ๊ฐ์ค์น๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
๊ฐ ๋์์ ๊ฐ์ค์น๋ ๋ ธ๋๋ก ์ ์กํ๋ ํธ๋ํฝ์ ์ธก๋ฉด์์ ๊ท ๋ฑํ๊ฒ ๋ถ์ฌํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ํธ๋ํฝ์ ์๋ก ๋ค๋ฅธ ํ๋ ๊ฐ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ๋์ง ์๋๋ค. ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ ๊ฐ ๋ ธ๋์์ ๋์์ผ๋ก ์ฌ์ฉ๋๋ ํ๋์ ๊ฐ์๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ค.
์๋น์คํ๋๊ฐ์ << ๋
ธ๋๊ฐ์
์ด๊ฑฐ๋ ์๋น์คํ๋๊ฐ์ >> ๋
ธ๋๊ฐ์
์ธ ๊ฒฝ์ฐ์์
๊ฐ์ค์น ์์ด๋ ๊ฑฐ์ ๊ท ๋ฑํ ๋ถํฌ๋ฅผ ๋ณผ ์ ์๋ค.
๋ด๋ถ ํ๋ ๊ฐ ํธ๋ํฝ์ ClusterIP
์๋น์ค์์์ ๋น์ทํ๊ฒ ๋ชจ๋ ํ๋์์ ๋์ผํ ํ๋ฅ ๋ก IP ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ๋น์ง(Garbage) ์์ง ๋ก๋ ๋ฐธ๋ฐ์
Kubernetes v1.17 [stable]
์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๊ด๋ จ ์๋ ๋ก๋๋ฐธ๋ฐ์ ๋ฆฌ์์ค๋ type
์ด LoadBalancer
์ธ
์๋น์ค๊ฐ ์ญ์ ๋ ํ ์ฆ์ ์ ๋ฆฌ๋์ด์ผ ํ๋ค.
๊ทธ๋ฌ๋ ๊ด๋ จ ์๋น์ค๊ฐ ์ญ์ ๋ ํ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๊ฐ ๊ณ ์๊ฐ ๋๋ ์ฝ๋ ์ผ์ด์ค๊ฐ ๋ค์ํ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด ์๋น์ค ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ํ Finalizer Protection
์ด ๋์
๋์๋ค.
Finalizer
๋ฅผ ์ฌ์ฉํ๋ฉด, ์๋น์ค ๋ฆฌ์์ค๋ ๋ก๋๋ฐธ๋ฐ์ ๊ด๋ จ ๋ฆฌ์์ค๊ฐ ์ญ์ ๋ ๋๊น์ง ์ญ์ ๋์ง ์๋๋ค.
ํนํ ์๋น์ค์ type
์ด LoadBalancer
์ธ ๊ฒฝ์ฐ
์๋น์ค ์ปจํธ๋กค๋ฌ๋ service.kubernetes.io/load-balancer-cleanup
์ด๋ผ๋ ์ด๋ฆ์ finalizer
๋ฅผ ๋ถ์ธ๋ค.
finalizer
๋ (ํด๋ผ์ฐ๋) ๋ก๋ ๋ฐธ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ ํ์๋ง ์ ๊ฑฐ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์๋น์ค ์ปจํธ๋กค๋ฌ ์ถฉ๋(crash)๊ณผ ๊ฐ์ ์ฝ๋ ์ผ์ด์ค์์๋
๋ก๋ ๋ฐธ๋ฐ์ ๋ฆฌ์์ค๊ฐ ๊ณ ์๊ฐ ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ค.
์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ์ ๊ณต์
์ค์ํ ์ ์ ์ด ๊ธฐ๋ฅ์ ์ํ ๋ฐ์ดํฐ ๊ฒฝ๋ก๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ์ธ๋ถ์ ๋ก๋ ๋ฐธ๋ฐ์์์ ์ ๊ณตํ๋ค๋ ๊ฒ์ด๋ค.
์๋น์ค์ type
์ด LoadBalancer
๋ก ์ค์ ๋ ๊ฒฝ์ฐ,
์ฟ ๋ฒ๋คํฐ์ค๋ type
์ด ClusterIP
์ธ ๊ฒฝ์ฐ์ฒ๋ผ ๋๋ฑํ ๊ธฐ๋ฅ์ ํด๋ฌ์คํฐ ๋ด์ ํ๋์ ์ ๊ณตํ๊ณ
๊ด๋ จ ์ฟ ๋ฒ๋คํฐ์ค ํ๋๋ฅผ ํธ์คํ
ํ๋ ๋
ธ๋์ ๋ํ ํญ๋ชฉ์ผ๋ก (์ฟ ๋ฒ๋คํฐ์ค ์ธ๋ถ) ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ํ์ฅํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ์ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์, (ํ์ํ ๊ฒฝ์ฐ) ํฌ์ค ์ฒดํฌ ๋ฐ (ํ์ํ ๊ฒฝ์ฐ) ํจํท ํํฐ๋ง ๊ท์น์ ์์ฑ์ ์๋ํํ๋ค.
ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ๋ก๋ ๋ฐธ๋ฐ์์ ๋ํ IP ์ฃผ์๋ฅผ ํ ๋นํ๋ฉด ์ปจํธ๋กค ํ๋ ์ธ์ด ํด๋น ์ธ๋ถ IP ์ฃผ์๋ฅผ ์ฐพ์ ์๋น์ค ์ค๋ธ์ ํธ๋ฅผ ๊ฐฑ์ ํ๋ค.
๋ค์ ๋ด์ฉ
- ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๊ฒฐํ๊ธฐ ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผํ๊ธฐ
- ์๋น์ค์ ๋ํด ์์๋ณด๊ธฐ
- ์ธ๊ทธ๋ ์ค์ ๋ํด ์์๋ณด๊ธฐ
8 - NGINX ์ธ๊ทธ๋ ์ค(Ingress) ์ปจํธ๋กค๋ฌ๋ก Minikube์์ ์ธ๊ทธ๋ ์ค ์ค์ ํ๊ธฐ
์ธ๊ทธ๋ ์ค๋ ํด๋ฌ์คํฐ์ ์๋น์ค์ ๋ํ ์ธ๋ถ ์ก์ธ์ค๋ฅผ ํ์ฉํ๋ ๊ท์น์ ์ ์ํ๋ API ๊ฐ์ฒด์ด๋ค. ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ ์ธ๊ทธ๋ ์ค์ ์ค์ ๋ ๊ท์น์ ์ดํํ๋ค.
์ด ํ์ด์ง์์๋ HTTP URI์ ๋ฐ๋ผ ์์ฒญ์ Service web ๋๋ web2๋ก ๋ผ์ฐํ ํ๋ ๊ฐ๋จํ ์ธ๊ทธ๋ ์ค๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์๋ฒ์ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ๊ฑฐ๋ ๋ ๋์์ผ ํจ. ๋ฒ์ : 1.19.๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
Minikube ํด๋ฌ์คํฐ ์์ฑํ๊ธฐ
- Katacoda ํ์ฉํ๊ธฐ
- ๋ก์ปฌ์์ ์์ฑํ๊ธฐ
- ์ด๋ฏธ ๋ก์ปฌ์ Minikube๋ฅผ ์ค์นํ๋ค๋ฉด,
minikube start
๋ฅผ ์คํํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๋ค.
์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ ํ์ฑํ
NGINX ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ฅผ ํ์ฑํํ๊ธฐ ์ํด ๋ค์ ๋ช ๋ น์ ์คํํ๋ค.
minikube addons enable ingress
NGINX ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๊ฐ ์คํ ์ค์ธ์ง ํ์ธํ๋ค.
kubectl get pods -n ingress-nginx
์ฐธ๊ณ :
ํ๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ธฐ๊น์ง 1๋ถ ์ ๋ ์์๋ ์ ์๋ค.๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-g9g49 0/1 Completed 0 11m ingress-nginx-admission-patch-rqp78 0/1 Completed 1 11m ingress-nginx-controller-59b45fb494-26npt 1/1 Running 0 11m
kubectl get pods -n kube-system
์ฐธ๊ณ :
ํ๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ธฐ๊น์ง 1๋ถ ์ ๋ ์์๋ ์ ์๋ค.๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
NAME READY STATUS RESTARTS AGE default-http-backend-59868b7dd6-xb8tq 1/1 Running 0 1m kube-addon-manager-minikube 1/1 Running 0 3m kube-dns-6dcb57bcc8-n4xd4 3/3 Running 0 2m kubernetes-dashboard-5498ccf677-b8p5h 1/1 Running 0 2m nginx-ingress-controller-5984b97644-rnkrg 1/1 Running 0 1m storage-provisioner 1/1 Running 0 2m
nginx-ingress-controller-
๋ก ์์ํ๋ ํ๋๊ฐ ์๋์ง ํ์ธํ๋ค.
hello, world ์ฑ ๋ฐฐํฌํ๊ธฐ
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ํ๋ก์ด๋จผํธ(Deployment)๋ฅผ ์์ฑํ๋ค.
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
deployment.apps/web created
๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ ธ์ถ์ํจ๋ค.
kubectl expose deployment web --type=NodePort --port=8080
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
service/web exposed
์๋น์ค(Service)๊ฐ ์์ฑ๋๊ณ ๋ ธ๋ ํฌํธ์์ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๋ค.
kubectl get service web
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m
๋ ธ๋ํฌํธ(NodePort)๋ฅผ ํตํด ์๋น์ค์ ์ ์ํ๋ค.
minikube service web --url
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
http://172.17.0.15:31637
์ฐธ๊ณ :
Katacoda ํ๊ฒฝ๋ง ํด๋น: ํฐ๋ฏธ๋ ํจ๋ ์๋จ์์ ๋ํ๊ธฐ ๊ธฐํธ๋ฅผ ํด๋ฆญํ ๋ค์ Select port to view on Host 1์ ํด๋ฆญํ๋ค. ๋ ธ๋ํฌํธ(์ด ๊ฒฝ์ฐ '31637')๋ฅผ ์ ๋ ฅํ ๋ค์ Display Port๋ฅผ ํด๋ฆญํ๋ค.๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564
์ด์ Minikube IP ์ฃผ์์ ๋ ธ๋ํฌํธ๋ฅผ ํตํด ์ํ ์ฑ์ ์ก์ธ์คํ ์ ์๋ค. ๋ค์ ๋จ๊ณ์์๋ ์ธ๊ทธ๋ ์ค ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ ์ก์ธ์คํ ์ ์๋ค.
์ธ๊ทธ๋ ์ค ์์ฑํ๊ธฐ
๋ค์ ๋งค๋ํ์คํธ๋ hello-world.info๋ฅผ ํตํด ์๋น์ค๋ก ํธ๋ํฝ์ ๋ณด๋ด๋ ์ธ๊ทธ๋ ์ค๋ฅผ ์ ์ํ๋ค.
- ๋ค์ ํ์ผ์ ํตํด
example-ingress.yaml
์ ๋ง๋ ๋ค.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
ingressClassName: nginx
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ธ๊ทธ๋ ์ค ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
ingress.networking.k8s.io/example-ingress created
IP ์ฃผ์๊ฐ ์ค์ ๋์๋์ง ํ์ธํ๋ค.
kubectl get ingress
์ฐธ๊ณ :
์ด ์์ ์ ๋ช ๋ถ ์ ๋ ์์๋ ์ ์๋ค.
๋ค์ ์์์ ๊ฐ์ด, ADDRESS ์ด์์ IPv4 ์ฃผ์๋ฅผ ํ์ธํ ์ ์๋ค.
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress <none> hello-world.info 172.17.0.15 80 38s
ํธ์คํธ ์ปดํจํฐ์
/etc/hosts
ํ์ผ ๋งจ ์๋์ ๋ค์ ํ์ ์ถ๊ฐํ๋ค (๊ด๋ฆฌ์ ๊ถํ ํ์).172.17.0.15 hello-world.info
์ฐธ๊ณ :
Minikube๋ฅผ ๋ก์ปฌ์์ ์คํํ๋ ๊ฒฝ์ฐ 'minikube ip'๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ IP๋ฅผ ๊ฐ์ ธ์จ๋ค. ์ธ๊ทธ๋ ์ค ๋ชฉ๋ก์ ํ์๋๋ IP ์ฃผ์๋ ๋ด๋ถ IP๊ฐ ๋๋ค.์ด๋ ๊ฒ ํ๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๊ฐ hello-world.info URL์ ๋ํ ์์ฒญ์ Minikube๋ก ์ ์กํ๋ค.
์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๊ฐ ํธ๋ํฝ์ ์ ๋ฌํ๋์ง ํ์ธํ๋ค.
curl hello-world.info
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564
์ฐธ๊ณ :
Minikube๋ฅผ ๋ก์ปฌ์์ ์คํํ๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์์ hello-world.info์ ์ ์ํ ์ ์๋ค.
๋ ๋ฒ์งธ ๋ํ๋ก์ด๋จผํธ ์์ฑํ๊ธฐ
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ ๋ฒ์งธ ๋ํ๋ก์ด๋จผํธ๋ฅผ ์์ฑํ๋ค.
kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
deployment.apps/web2 created
๋ ๋ฒ์งธ ๋ํ๋ก์ด๋จผํธ๋ฅผ ๋ ธ์ถ์ํจ๋ค.
kubectl expose deployment web2 --port=8080 --type=NodePort
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
service/web2 exposed
๊ธฐ์กด ์ธ๊ทธ๋ ์ค ์์ ํ๊ธฐ
๊ธฐ์กด
example-ingress.yaml
๋งค๋ํ์คํธ๋ฅผ ํธ์งํ๊ณ , ํ๋จ์ ๋ค์ ์ค์ ์ถ๊ฐํ๋ค.- path: /v2 pathType: Prefix backend: service: name: web2 port: number: 8080
๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ค.
kubectl apply -f example-ingress.yaml
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
ingress.networking/example-ingress configured
์ธ๊ทธ๋ ์ค ํ ์คํธํ๊ธฐ
Hello World ์ฑ์ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ์ก์ธ์คํ๋ค.
curl hello-world.info
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Hello, world! Version: 1.0.0 Hostname: web-55b8c6998d-8k564
Hello World ์ฑ์ ๋ ๋ฒ์งธ ๋ฒ์ ์ ์ก์ธ์คํ๋ค.
curl hello-world.info/v2
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Hello, world! Version: 2.0.0 Hostname: web2-75cd47646f-t8cjk
์ฐธ๊ณ :
Minikube๋ฅผ ๋ก์ปฌ์์ ์คํํ๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ์์ hello-world.info ๋ฐ hello-world.info/v2์ ์ ์ํ ์ ์๋ค.
๋ค์ ๋ด์ฉ
- ์ธ๊ทธ๋ ์ค์ ๋ํด ๋ ๋ณด๊ธฐ.
- ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ์ ๋ํด ๋ ๋ณด๊ธฐ.
- ์๋น์ค์ ๋ํด ๋ ๋ณด๊ธฐ.
9 - ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ชฉ๋ก ๋ณด๊ธฐ
์ด ๋ฌธ์๋ kubectl์ ์ด์ฉํ์ฌ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ชฉ๋ก์ ์กฐํํ๋ ๋ฐฉ๋ฒ์ ๊ดํด ์ค๋ช ํ๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
์ด ์์ ์์๋ kubectl์ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ ๋ด ๋ชจ๋ ํ๋์ ์ ๋ณด๋ฅผ ์กฐํํ๊ณ , ๊ฒฐ๊ณผ๊ฐ์ ์์์ ๋ณ๊ฒฝํ์ฌ ๊ฐ ํ๋์ ๋ํ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ชฉ๋ก์ผ๋ก ์ฌ๊ตฌ์ฑํ ๊ฒ์ด๋ค.
๋ชจ๋ ๋ค์์คํ์ด์ค์ ๋ชจ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ
kubectl get pods --all-namespaces
๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ค์์คํ์ด์ค์ ๋ชจ๋ ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.- ์ปจํ
์ด๋ ์ด๋ฏธ์ง ์ด๋ฆ๋ง ์ถ๋ ฅํ๊ธฐ ์ํด
-o jsonpath={.items[*].spec.containers[*].image}
๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋ช ๋ น์ด๋ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฐ์ json์ ๋ฐ๋ณต์ ์ผ๋ก ํ์ฑํ์ฌ,image
ํ๋๋ง์ ์ถ๋ ฅํ๋ค.- jsonpath๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด Jsonpath ์ง์์ ํ์ธํ๋ค.
- ๋ค์์ ํ์ค ํด์ ์ด์ฉํด์ ๊ฒฐ๊ณผ๊ฐ์ ์ฒ๋ฆฌํ๋ค.
tr
,sort
,uniq
tr
์ ์ฌ์ฉํ์ฌ ๊ณต๋ฐฑ์ ์ค ๋ฐ๊พธ๊ธฐ๋ก ๋์ฒดํ๋ค.sort
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๊ฐ์ ์ ๋ ฌํ๋ค.uniq
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ๊ฐ์๋ฅผ ํฉ์ฐํ๋ค.
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
์ด jsonpath๋ ๋ค์๊ณผ ๊ฐ์ด ํด์ํ ์ ์๋ค.
.items[*]
: ๊ฐ ๊ฒฐ๊ณผ๊ฐ์ ๋ํ์ฌ.spec
: spec ๊ฐ์ ๊ฐ์ ธ์จ๋ค..containers[*]
: ๊ฐ ์ปจํ ์ด๋์ ๋ํ์ฌ.image
: image ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
์ฐธ๊ณ :
๋ช ๋ น์ด๋ก ํ๋์ ํ๋๋ฅผ ๊ฐ์ ธ์ฌ ๋, ์๋ฅผ ๋ค์ดkubectl get pod nginx
๋ผ๋ฉด,
jsonpath์์ .items[*]
๋ถ๋ถ์ ์๋ตํด์ผ ํ๋๋ฐ, ์ด๋ ๋ช
๋ น์ด๊ฐ ์์ดํ
๋ชฉ๋ก์ด ์๋
๋จ ํ ๊ฐ์ ์์ดํ
(์ฌ๊ธฐ์ ํ๋)์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์ ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.๊ฐ ํ๋์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ณด๊ธฐ
range
์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ด์ ๊ฒฐ๊ณผ๊ฐ์์ ๊ฐ๊ฐ์ ์์๋ค์
๋ฐ๋ณตํ์ฌ ์ถ๋ ฅํ ์ ์๋ค.
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
ํ๋ ๋ ์ด๋ธ๋ก ํํฐ๋ง๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ชฉ๋ก ๋ณด๊ธฐ
ํน์ ๋ ์ด๋ธ์ ๋ง๋ ํ๋๋ฅผ ์ง์ ํ๊ธฐ ์ํด์ -l ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ค. ์๋์
๋ช
๋ น์ด ๊ฒฐ๊ณผ๊ฐ์ app=nginx
๋ ์ด๋ธ์ ์ผ์นํ๋ ํ๋๋ง ์ถ๋ ฅํ๋ค.
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" -l app=nginx
ํ๋ ๋ค์์คํ์ด์ค๋ก ํํฐ๋ง๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ชฉ๋ก ๋ณด๊ธฐ
ํน์ ๋ค์์คํ์ด์ค์ ํ๋๋ฅผ ์ง์ ํ๋ ค๋ฉด, ๋ค์์คํ์ด์ค ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ค.
์๋์ ๋ช
๋ น์ด ๊ฒฐ๊ณผ๊ฐ์ kube-system
๋ค์์คํ์ด์ค์ ์๋ ํ๋๋ง ์ถ๋ ฅํ๋ค.
kubectl get pods --namespace kube-system -o jsonpath="{.items[*].spec.containers[*].image}"
jsonpath ๋์ Go ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ๋ชฉ๋ก ๋ณด๊ธฐ
jsonpath์ ๋์์ผ๋ก Kubectl์ Go ํ ํ๋ฆฟ์ ์ง์ํ๋ค. ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ์ ์์์ ์ง์ ํ ์ ์๋ค.
kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"
๋ค์ ๋ด์ฉ
์ฐธ์กฐ
- Jsonpath ์ฐธ์กฐ
- Go ํ ํ๋ฆฟ ์ฐธ์กฐ
10 - ๊ณต์ ๋ณผ๋ฅจ์ ์ด์ฉํ์ฌ ๋์ผํ ํ๋์ ์ปจํ ์ด๋ ๊ฐ์ ํต์ ํ๊ธฐ
์ด ํ์ด์ง์์๋ ๋์ผํ ํ๋์์ ์คํ ์ค์ธ ๋ ๊ฐ์ ์ปจํ ์ด๋ ๊ฐ์ ํต์ ํ ๋์, ์ด๋ป๊ฒ ๋ณผ๋ฅจ์ ์ด์ฉํ๋์ง ์ดํด๋ณธ๋ค. ์ปจํ ์ด๋ ๊ฐ์ ํ๋ก์ธ์ค ๋ค์์คํ์ด์ค ๊ณต์ ํ๊ธฐ๋ฅผ ํตํด ํต์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํ์.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
๋ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ํ๋ ์์ฑ
์ด ์ค์ต์์ ๋ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ํ๋๋ฅผ ์์ฑํ๋ค. ์ด ์ปจํ ์ด๋๋ค์ ํต์ ์ ์ฌ์ฉํ ์ ์๋ ๋ณผ๋ฅจ์ ๊ณต์ ํ๋ค. ์๋๋ ์ด ํ๋์ ๊ตฌ์ฑ ํ์ผ์ด๋ค.
apiVersion: v1
kind: Pod
metadata:
name: two-containers
spec:
restartPolicy: Never
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: nginx-container
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
- name: debian-container
image: debian
volumeMounts:
- name: shared-data
mountPath: /pod-data
command: ["/bin/sh"]
args: ["-c", "echo debian ์ปจํ
์ด๋์์ ์๋
ํ์ธ์ > /pod-data/index.html"]
์ด ๊ตฌ์ฑ ํ์ผ์๋ ํ๋๊ฐ shared-data
๋ก ๋ช
๋ช
ํ ๋ณผ๋ฅจ์ ๊ฐ์ง ๊ฒ์
์ ์ ์๋ค.
์ฒซ ๋ฒ์งธ ์ปจํ
์ด๋์๋ nginx ์น ์๋ฒ๋ฅผ ์คํํ๋ ๊ตฌ์ฑ ํ์ผ์ด ๋์ด๋์ด ์๋ค.
๊ณต์ ๋ณผ๋ฅจ์ ๋ง์ดํธ ๊ฒฝ๋ก๋ /usr/share/nginx/html
์ด๋ค.
๋ ๋ฒ์งธ ์ปจํ
์ด๋๋ debian ์ด๋ฏธ์ง ๊ธฐ๋ฐ์ด๊ณ , ๋ง์ดํธ ๊ฒฝ๋ก๋ /pod-data
์ด๋ค.
๋ ๋ฒ์งธ ์ปจํ
์ด๋๋ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ ํ์ ์ข
๋ฃํ๋ค.
echo debian ์ปจํ
์ด๋์์ ์๋
ํ์ธ์ > /pod-data/index.html
๋ ๋ฒ์งธ ์ปจํ
์ด๋๋ index.html
ํ์ผ์
nginx ์น ์๋ฒ์์ ํธ์คํ
ํ๋ ๋ฌธ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ(/usr/share/nginx/html/
)์ ์ ์ฅํ๋ค.
์ด์ , ํ๋์ ๋ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/pods/two-container-pod.yaml
ํ๋์ ์ปจํ ์ด๋์ ์ ๋ณด๋ฅผ ํ์ธํ๋ค.
kubectl get pod two-containers --output=yaml
์ถ๋ ฅ์ ์ผ๋ถ๋ ๋ค์๊ณผ ๊ฐ๋ค.
apiVersion: v1
kind: Pod
metadata:
...
name: two-containers
namespace: default
...
spec:
...
containerStatuses:
- containerID: docker://c1d8abd1 ...
image: debian
...
lastState:
terminated:
...
name: debian-container
...
- containerID: docker://96c1ff2c5bb ...
image: nginx
...
name: nginx-container
...
state:
running:
...
Debian ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋์์์ ์ ์ ์๊ณ , nginx ์ปจํ ์ด๋๋ ์์ง ์คํ ์ค์ด๋ค.
nginx ์ปจํ ์ด๋์ ์(shell)์ ์คํํ๋ค.
kubectl exec -it two-containers -c nginx-container -- /bin/bash
์์์ nginx ์น ์๋ฒ๊ฐ ์คํ ์ค์ธ์ง ํ์ธํ๋ค.
root@two-containers:/# apt-get update
root@two-containers:/# apt-get install curl procps
root@two-containers:/# ps aux
์ถ๋ ฅ์ ์๋์ ์ ์ฌํ๋ค.
USER PID ... STAT START TIME COMMAND
root 1 ... Ss 21:12 0:00 nginx: master process nginx -g daemon off;
Debian ์ปจํ
์ด๋์์ nginx ์น ์๋ฒ๊ฐ ํธ์คํ
ํ๋ ๋ฌธ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ index.html
ํ์ผ์ ์์ฑํ์์์ ์๊ธฐํ์.
curl
์ ์ด์ฉํ์ฌ nginx ์น ์๋ฒ์ HTTP GET ์์ฒญ์ ๋ณด๋ธ๋ค.
root@two-containers:/# curl localhost
์ถ๋ ฅ์ ๋ณด๋ฉด, nginx ์น ์๋ฒ์์ debian ์ปจํ ์ด๋์์ ์ฐ์ฌ์ง ์น ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ ์ ์๋ค.
debian ์ปจํ
์ด๋์์ ์๋
ํ์ธ์
ํ ์
ํ๋๊ฐ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ๊ฐ์ง ์ ์๋ ์ฃผ์ ์ด์ ๋ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์กฐํ ๋์ฐ๋ฏธ(helper) ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ๊ธฐ ์ํด์์ด๋ค. ๋์ฐ๋ฏธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ฐ์ ์ธ ์๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ ๊ฒฝ์ฐ(data puller)๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋ ๊ฒฝ์ฐ(data pusher)์ด๊ฑฐ๋ ํ๋ก์๊ฐ ์๋ค. ๋์ฐ๋ฏธ์ ๊ธฐ๋ณธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ์๋ก ๊ฐ์ ํต์ ์ ํด์ผ ํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ์ด๋ฒ ์์ ์์ ์ดํด๋ณธ ๊ฒ ๊ฐ์ด, ๊ณต์ ํ์ผ ์์คํ ์ ํตํ๊ฑฐ๋, ๋ฃจํ๋ฐฑ ๋คํธ์ํฌ ์ธํฐํ์ด์ค ๊ณง ๋ก์ปฌ ํธ์คํธ(localhost)๋ฅผ ํตํด์ ์ด๋ค์ง๋ค. ์ด ํจํด์ ํ๊ฐ์ง ์๋ ์น ์๋ฒ๊ฐ ๋์ฐ๋ฏธ ํ๋ก๊ทธ๋จ๊ณผ ํจ๊ป Git ์ ์ฅ์์์ ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์์ค๋ ๊ฒฝ์ฐ์ด๋ค.
์ด ์์ ์์ ๋ณผ๋ฅจ์ ํ๋์ ์๋ช ์ฃผ๊ธฐ ๋์ ์ปจํ ์ด๋๋ฅผ ์ํ ํต์ ๋ฐฉ๋ฒ์ผ๋ก ์ด์ฉํ๋ค. ํ๋๊ฐ ์ญ์ ๋๊ณ ์ฌ์์ฑ๋๋ฉด, ๊ณต์ ๋ณผ๋ฅจ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์์ด๋ฒ๋ฆฐ๋ค.
๋ค์ ๋ด์ฉ
ํฉ์ฑ ์ปจํ ์ด๋(composite container) ํจํด์ ๊ดํ์ฌ ๋ ๊ณต๋ถํ๋ค.
๋ชจ๋ ๊ตฌ์กฐ๋ฅผ ์ํ ํฉ์ฑ ์ปจํ ์ด๋ ๊ตฌ์กฐ์ ๊ดํ์ฌ ๋ ๊ณต๋ถํ๋ค.
ํ๋์์ ์ ์ฅ์๋ก ๋ณผ๋ฃธ์ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑํ๊ธฐ์ ๊ดํ์ฌ ํ์ธํ๋ค.
ํ๋์์ ์ปจํ ์ด๋ ๊ฐ์ ํ๋ก์ธ์ค ๋ค์์คํ์ด์ค๋ฅผ ๊ณต์ ํ๋ ํ๋ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฐธ๊ณ ํ๋ค.
๋ณผ๋ฅจ์ ํ์ธํ๋ค.
ํ๋์ ํ์ธํ๋ค.
11 - ํด๋ฌ์คํฐ์ DNS ๊ตฌ์ฑํ๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค๋ ์ง์ํ๋ ๋ชจ๋ ํ๊ฒฝ์์ ๊ธฐ๋ณธ์ผ๋ก ํ์ฑํ๋ DNS ํด๋ฌ์คํฐ ์ ๋์จ์ ์ ๊ณตํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค 1.11๊ณผ ์ดํ ๋ฒ์ ์์๋, CoreDNS๊ฐ ๊ถ์ฅ๋๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก kubeadm๊ณผ ํจ๊ป ์ค์น ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ CoreDNS ์ค์ ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๋, DNS ์๋น์ค ์ฌ์ฉ์ํ ํ๊ธฐ์ ๋ณธ๋ค. kube-dns์ ํจ๊ป ์ฟ ๋ฒ๋คํฐ์ค DNS๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์๋ ์ฟ ๋ฒ๋คํฐ์ค DNS ์ํ ํ๋ฌ๊ทธ์ธ์ ๋ณธ๋ค.
12 - ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์๋น์ค์ ์ ๊ทผ
์ด ํ์ด์ง๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์๋น์ค์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ํ์ธ์ ์ํด์, ๋ค์ ์ปค๋งจ๋๋ฅผ ์คํ kubectl version
.
ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์๋น์ค์ ์ ๊ทผ
์ฟ ๋ฒ๋คํฐ์ค์์, ๋ ธ๋, ํ๋ ๋ฐ ์๋น์ค๋ ๋ชจ๋ ๊ณ ์ ํ IP๋ฅผ ๊ฐ์ง๋ค. ๋น์ ์ ๋ฐ์คํฌํ PC์ ๊ฐ์ ํด๋ฌ์คํฐ ์ธ๋ถ ์ฅ๋น์์๋ ํด๋ฌ์คํฐ ์์ ๋ ธ๋ IP, ํ๋ IP, ์๋น์ค IP๋ก ๋ผ์ฐํ ๋์ง ์์์ ์ ๊ทผํ ์ ์์ ๊ฒ์ด๋ค.
์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
ํด๋ฌ์คํฐ ์ธ๋ถ์์ ๋ ธ๋, ํ๋ ๋ฐ ์๋น์ค์ ์ ์ํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ต์ ์ด ์๋ค.
- ํผ๋ธ๋ฆญ IP๋ฅผ ํตํด ์๋น์ค์ ์ ๊ทผํ๋ค.
- ํด๋ฌ์คํฐ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก
NodePort
๋๋LoadBalancer
ํ์ ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ค. ์๋น์ค์ kubectl expose ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ๋ค. - ํด๋ฌ์คํฐ ํ๊ฒฝ์ ๋ฐ๋ผ, ์๋น์ค๋ ํ์ฌ ๋คํธ์ํฌ์๋ง ๋ ธ์ถ๋๊ธฐ๋ ํ๋ฉฐ, ์ธํฐ๋ท์ ๋ ธ์ถ๋๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ ธ์ถ๋๋ ์๋น์ค์ ๋ณด์ ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค. ํด๋น ์๋น์ค๋ ์์ฒด์ ์ผ๋ก ์ธ์ฆ์ ์ํํ๋๊ฐ?
- ํ๋๋ ์๋น์ค ๋ค์ ์์น์ํจ๋ค. ๋๋ฒ๊น ๊ณผ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ๋ ํ๋ฆฌ์นด ์งํฉ์์ ํน์ ํ๋์ ์ ๊ทผํ๋ ค๋ฉด, ํ๋์ ๊ณ ์ ํ ๋ ์ด๋ธ์ ๋ฐฐ์นํ๊ณ ์ด ๋ ์ด๋ธ์ ์ ํํ๋ ์ ์๋น์ค๋ฅผ ์์ฑํ๋ค.
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ nodeIP๋ฅผ ํตํด ๋ ธ๋์ ์ง์ ์ ๊ทผํ ํ์๋ ์๋ค.
- ํด๋ฌ์คํฐ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก
- ํ๋ก์ ์์
(Proxy Verb)์ ์ฌ์ฉํ์ฌ ์๋น์ค, ๋
ธ๋ ๋๋ ํ๋์ ์ ๊ทผํ๋ค.
- ์๊ฒฉ ์๋น์ค์ ์ ๊ทผํ๊ธฐ ์ ์ apiserver ์ธ์ฆ๊ณผ ๊ถํ ๋ถ์ฌ๋ฅผ ์ํํ๋ค. ์๋น์ค๊ฐ ์ธํฐ๋ท์ ๋ ธ์ถ๋๊ฑฐ๋, ๋ ธ๋ IP์ ํฌํธ์ ์ ๊ทผํ๊ฑฐ๋, ๋๋ฒ๊น ํ๊ธฐ์ ์ถฉ๋ถํ ์์ ํ์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
- ํ๋ก์๋ ์ผ๋ถ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
- HTTP/HTTPS์์๋ง ์๋ํ๋ค.
- ์ฌ๊ธฐ์ ์ค๋ช ๋์ด ์๋ค.
- ํด๋ฌ์คํฐ์ ๋
ธ๋ ๋๋ ํ๋์์ ์ ๊ทผํ๋ค.
- ํ๋๋ฅผ ์คํํ ๋ค์, kubectl exec๋ฅผ ์ฌ์ฉํ์ฌ ์ ธ์ ์ฐ๊ฒฐํ๋ค. ํด๋น ์ ธ์์ ๋ค๋ฅธ ๋ ธ๋, ํ๋ ๋ฐ ์๋น์ค์ ์ฐ๊ฒฐํ๋ค.
- ์ผ๋ถ ํด๋ฌ์คํฐ๋ ํด๋ฌ์คํฐ์ ๋ ธ๋๋ก ssh๋ฅผ ํตํด ์ ๊ทผํ๋ ๊ฒ์ ํ์ฉํ๋ค. ๊ฑฐ๊ธฐ์์ ํด๋ฌ์คํฐ ์๋น์ค์ ์ ๊ทผํ ์ ์๋ค. ์ด๊ฒ์ ๋นํ์ค ๋ฐฉ๋ฒ์ด๋ฉฐ, ์ผ๋ถ ํด๋ฌ์คํฐ์์๋ ์๋ํ์ง๋ง ๋ค๋ฅธ ํด๋ฌ์คํฐ์์๋ ์๋ํ์ง ์๋๋ค. ๋ธ๋ผ์ฐ์ ๋ฐ ๊ธฐํ ๋๊ตฌ๊ฐ ์ค์น๋๊ฑฐ๋ ์ค์น๋์ง ์์ ์ ์๋ค. ํด๋ฌ์คํฐ DNS๊ฐ ์๋ํ์ง ์์ ์๋ ์๋ค.
๋นํธ์ธ ์๋น์ค ๊ฒ์
์ผ๋ฐ์ ์ผ๋ก kube-system์ ์ํด ํด๋ฌ์คํฐ์ ์คํ๋๋ ๋ช ๊ฐ์ง ์๋น์ค๊ฐ ์๋ค.
kubectl cluster-info
์ปค๋งจ๋๋ก ์ด ์๋น์ค์ ๋ฆฌ์คํธ๋ฅผ ๋ณผ ์ ์๋ค.
kubectl cluster-info
์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํ๋ค.
Kubernetes master is running at https://192.0.2.1
elasticsearch-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
kibana-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kibana-logging/proxy
kube-dns is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kube-dns/proxy
grafana is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
heapster is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
๊ฐ ์๋น์ค์ ์ ๊ทผํ๊ธฐ ์ํ ํ๋ก์-์์
URL์ด ํ์๋๋ค.
์๋ฅผ ๋ค์ด, ์ด ํด๋ฌ์คํฐ์๋ https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/
๋ก
์ ๊ทผํ ์ ์๋ (Elasticsearch๋ฅผ ์ฌ์ฉํ) ํด๋ฌ์คํฐ ์์ค ๋ก๊น
์ด ํ์ฑํ๋์ด ์๋ค. ์ ํฉํ ์๊ฒฉ ์ฆ๋ช
์ด ์ ๋ฌ๋๋ ๊ฒฝ์ฐ๋ kubectl proxy๋ฅผ ํตํด ๋๋ฌํ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ URL์์ ํ์ธํ ์ ์๋ค.
http://localhost:8080/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/
.
์ฐธ๊ณ :
์๊ฒฉ ์ฆ๋ช ์ ์ ๋ฌํ๊ฑฐ๋ kubectl proxy๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์ ์ ๊ทผํ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ค.apiserver ํ๋ก์ URL ์๋ ๊ตฌ์ฑ
์์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ, kubectl cluster-info
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์๋น์ค์ ํ๋ก์ URL์ ๊ฒ์ํ๋ค. ์๋น์ค ์๋ํฌ์ธํธ, ์ ๋ฏธ์ฌ ๋ฐ ๋งค๊ฐ ๋ณ์๋ฅผ ํฌํจํ๋ ํ๋ก์ URL์ ์์ฑํ๋ ค๋ฉด, ์๋น์ค์ ํ๋ก์ URL์ ์ถ๊ฐํ๋ฉด ๋๋ค.
http://
kubernetes_master_address
/api/v1/namespaces/
namespace_name
/services/
[https:]service_name[:port_name]
/proxy
ํฌํธ์ ๋ํ ์ด๋ฆ์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ, URL์ port_name ์ ์ง์ ํ ํ์๊ฐ ์๋ค. ๋ํ, ์ด๋ฆ์ด ์ง์ ๋ ํฌํธ์ ์ง์ ๋์ง ์์ ํฌํธ ๋ชจ๋์ ๋ํด, port_name ์๋ฆฌ์ ํฌํธ ๋ฒํธ๋ฅผ ๊ธฐ์ฌํ ์๋ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก, API ์๋ฒ๋ ์๋น์ค๋ก์ ํ๋ก์๋ฅผ HTTP๋ก ์ ๊ณตํ๋ค. HTTPS๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด, ์๋น์ค ์ด๋ฆ ์์ https:
๋ฅผ ์ถ๊ฐํ๋ค.
http://<์ฟ ๋ฒ๋คํฐ์ค_์ปจํธ๋กค_ํ๋ ์ธ_์ฃผ์>/api/v1/namespaces/<๋ค์์คํ์ด์ค_์ด๋ฆ>/services/<์๋น์ค_์ด๋ฆ>/proxy
URL์์ <์๋น์ค_์ด๋ฆ>
์ด ์ง์ํ๋ ํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
<์๋น์ค_์ด๋ฆ>
- ๊ธฐ๋ณธ ํฌํธ ๋๋ ์ด๋ฆ์ด ์ง์ ๋์ง ์์ ํฌํธ๋ก http๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์<์๋น์ค_์ด๋ฆ>:<ํฌํธ_์ด๋ฆ>
- ๊ธฐ์ฌ๋ ํฌํธ ์ด๋ฆ ๋๋ ํฌํธ ๋ฒํธ๋ก http๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์https:<์๋น์ค_์ด๋ฆ>:
- ๊ธฐ๋ณธ ํฌํธ ๋๋ ์ด๋ฆ์ด ์ง์ ๋์ง ์์ ํฌํธ๋ก https๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์(๋งจ ๋์ ์ฝ๋ก ์ ์ ์)https:<์๋น์ค_์ด๋ฆ>:<ํฌํธ_์ด๋ฆ>
- ๊ธฐ์ฌ๋ ํฌํธ ์ด๋ฆ ๋๋ ํฌํธ ๋ฒํธ๋ก https๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์
์์
Elasticsearch ์๋น์ค ์๋ํฌ์ธํธ
_search?q=user:kimchy
์ ์ ๊ทผํ๋ ค๋ฉด, ๋ค์์ ์ฌ์ฉํ๋ค.http://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy
Elasticsearch ํด๋ฌ์คํฐ ์ํ ์ ๋ณด
_cluster/health?pretty=true
์ ์ ๊ทผํ๋ ค๋ฉด, ๋ค์์ ์ฌ์ฉํ๋ค.https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true
์ํ ์ ๋ณด๋ ๋ค์๊ณผ ๋น์ทํ๋ค.
{ "cluster_name" : "kubernetes_logging", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 5, "active_shards" : 5, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 5 }
https Elasticsearch ์๋น์ค ์ํ ์ ๋ณด
_cluster/health?pretty=true
์ ์ ๊ทผํ๋ ค๋ฉด, ๋ค์์ ์ฌ์ฉํ๋ค.https://192.0.2.1/api/v1/namespaces/kube-system/services/https:elasticsearch-logging/proxy/_cluster/health?pretty=true
์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ์์ ์คํ๋๋ ์๋น์ค์ ์ ๊ทผ
๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ํ์์ค์ apiserver ํ๋ก์ URL์ ๋ฃ์ ์ ์๋ค. ๊ทธ๋ฌ๋,
- ์น ๋ธ๋ผ์ฐ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ํ ํฐ์ ์ ๋ฌํ ์ ์์ผ๋ฏ๋ก, ๊ธฐ๋ณธ (๋น๋ฐ๋ฒํธ) ์ธ์ฆ์ ์ฌ์ฉํด์ผ ํ ์๋ ์๋ค. Apiserver๋ ๊ธฐ๋ณธ ์ธ์ฆ์ ์๋ฝํ๋๋ก ๊ตฌ์ฑํ ์ ์์ง๋ง, ํด๋ฌ์คํฐ๋ ๊ธฐ๋ณธ ์ธ์ฆ์ ์๋ฝํ๋๋ก ๊ตฌ์ฑ๋์ง ์์ ์ ์๋ค.
- ์ผ๋ถ ์น ์ฑ, ํนํ ํ๋ก์ ๊ฒฝ๋ก ์ ๋์ฌ๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ ๋ฐฉ์์ผ๋ก URL์ ๊ตฌ์ฑํ๋ ํด๋ผ์ด์ธํธ ์ธก ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ์น ์ฑ์ด ์๋ํ์ง ์์ ์ ์๋ค.