8์ XNUMX์ผ ์ปจํผ๋ฐ์ค์์
์ ํต์ ๋ฐ๋ผ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ๊ธฐ์๊ฒ ์๊ฐํฉ๋๋ค.
K8s์ ํต์ฌ ๋ฐ ์ถ๊ฐ ์ฌํญ
Kubernetes๋ ์ ๊ณ์ ์ค๋ซ๋์ ํ๋ฆฝ๋ ๊ด๋ฆฌ ์ ๊ทผ ๋ฐฉ์์ ๋ณํ์ํค๊ณ ์์ต๋๋ค.
- ๊ทธ ๋๋ถ์ ์ถ์ํ, ์ฐ๋ฆฌ๋ ๋ ์ด์ ๊ตฌ์ฑ ์ค์ ์ด๋ ๋ช ๋ น(Chef, Ansible...) ์คํ๊ณผ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์์ ํ์ง ์๊ณ ์ปจํ ์ด๋, ์๋น์ค ๋ฑ์ ๊ทธ๋ฃนํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ฐ๋ฆฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์์ค๋ฅผ ์๊ฐํ์ง ์๊ณ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ค๋นํ ์ ์์ต๋๋ค. ํน์ ์ฌ์ดํธ, ์ถ์ ์์ : ๋ฒ ์ด๋ฉํ, ๊ณต๊ธ์ ์ค ํ๋์ ํด๋ผ์ฐ๋ ๋ฑ
- K8์ ์ฌ์ฉํ๋ฉด ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ชจ๋ฒ ์ฌ๋ก ์ธํ๋ผ ๊ตฌ์ฑ: ํ์ฅ ๊ธฐ์ , ์๊ฐ ๋ณต๊ตฌ, ๋ด๊ฒฐํจ์ฑ ๋ฑ
๊ทธ๋ฌ๋ ๋ฌผ๋ก ๋ชจ๋ ๊ฒ์ด ์์กฐ๋กญ๊ฒ ์งํ๋๋ ๊ฒ์ ์๋๋๋ค. Kubernetes ์ญ์ ์๋ก์ด ๊ณผ์ ๋ฅผ ์๊ฒจ์ฃผ์์ต๋๋ค.
Kubernetes ์๋ ๋ชจ๋ ์ฌ์ฉ์์ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒฐํฉ์ ๋๋ค. ํต์ฌ Kubernetes๋ ๋ค์์ ์กด์ฌํ๋ ์ต์ํ์ ํ์ ๊ธฐ๋ฅ ์ธํธ๋ง ๋ด๋นํฉ๋๋ค. ๊ฐ ๋ฌด๋ฆฌ:
Kubernetes ์ฝ์ด๋ ์ปจํ
์ด๋ ๊ทธ๋ฃนํ, ํธ๋ํฝ ๊ด๋ฆฌ ๋ฑ์ ์ํ ๊ธฐ๋ณธ ๊ธฐ๋ณธ ์์ ์ธํธ๋ฅผ ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ ๋ํด ๋ ์์ธํ ์ด์ผ๊ธฐํ์ต๋๋ค.
๋ฐ๋ฉด, K8s๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ํ์ฅํ์ฌ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ซ๋ ๋ฐ ๋์์ด ๋๋ ์ข์ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํน์ ํ โ ์ฌ์ฉ์ ์๊ตฌ. Kubernetes์ ๋ํ ์ถ๊ฐ ์ฌํญ์ [ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด] ํด๋ฌ์คํฐ๋ฅผ "์ฌ๋ฐ๋ฅธ ๋ชจ์"์ผ๋ก ๋ง๋๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ ์ค์นํ๊ณ ๊ตฌ์ฑํด์ผ ํ๋ ํด๋ฌ์คํฐ ๊ด๋ฆฌ์์ ์ฑ ์์ ๋๋ค. ์ด๊ฒ๋ค์ ์ด๋ค ์ข ๋ฅ์ ์ถ๊ฐ ์ฌํญ์ ๋๊น? ๋ช ๊ฐ์ง ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ถ๊ฐ ๊ธฐ๋ฅ์ ์
Kubernetes๋ฅผ ์ค์นํ ํ ๋
ธ๋ ๋ด๋ถ์ ๋
ธ๋ ๊ฐ Pod์ ์ํธ ์์ฉ์ ๊ผญ ํ์ํ ๋คํธ์ํน์ด ์์ฒด์ ์ผ๋ก ์๋ํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋๋ ์ ์์ต๋๋ค. Kubernetes ์ปค๋์ ํ์ํ ์ฐ๊ฒฐ์ ๋ณด์ฅํ์ง ์๊ณ ๋์ ๋คํธ์ํฌ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ธํฐํ์ด์ค (
๊ฐ๊น์ด ์๋ก๋ ๋ฐ์ดํฐ ์คํ ๋ฆฌ์ง ์๋ฃจ์
(๋ก์ปฌ ๋์คํฌ, ๋คํธ์ํฌ ๋ธ๋ก ์ฅ์น, Ceph...)์ด ์์ต๋๋ค. ์ฒ์์๋ ํต์ฌ์ ์์์ง๋ง ์ถํ๊ณผ ํจ๊ป
๋ค๋ฅธ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์
๊ตฌ-์ปจํธ๋กค๋ฌ (๊ทธ๋ค์ ๋ฆฌ๋ทฐ๋ฅผ ์ฐธ์กฐํ์ธ์
์ฐ๋ฆฌ์ ์ต๊ทผ ๊ธฐ์ฌ ). -
์ธ์ฆ ๊ด๋ฆฌ์ : -
์ฐ์ฐ์ ์ธ๊ธ๋ ์ธ์ฆ์ ๊ด๋ฆฌ์๋ฅผ ํฌํจํ๋ ์ ์ฒด ์ถ๊ฐ ๊ธฐ๋ฅ ํด๋์ค์ด๋ฉฐ ๊ธฐ๋ณธ ์์์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ์ํฉ๋๋ค. ๊ทธ๋ค์ ์์ ๋ ผ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์์๋ ฅ์ ์ํด์๋ง ์ ํ๋๋ฉฐ ๊ธฐ์ฑ ์ธํ๋ผ ๊ตฌ์ฑ ์์(์: DBMS)๋ฅผ ๊ธฐ๋ณธ ์์๋ก ์ ํํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ปจํ ์ด๋ ์ธํธ ๋ฐ ํด๋น ์ค์ ๋ณด๋ค ์์ ํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค. ์๋ง์ ์คํผ๋ ์ดํฐ๊ฐ ์์ฑ๋์์ต๋๋ค. ๊ทธ ์ค ๋ค์๊ฐ ์์ง ์์ฐ ์ค๋น๊ฐ ๋์ง ์์๋๋ผ๋ ์ด๋ ์๊ฐ ๋ฌธ์ ์ผ ๋ฟ์ ๋๋ค. - ์ธก์ ํญ๋ชฉ - Kubernetes๊ฐ ์ธํฐํ์ด์ค(Metrics API)๋ฅผ ๊ตฌํ(Prometheus ์ด๋ํฐ, Datadog ํด๋ฌ์คํฐ ์์ด์ ํธ์ ๊ฐ์ ํ์ฌ ์ถ๊ฐ ๊ธฐ๋ฅ...)์์ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ ๋ค๋ฅธ ๊ทธ๋ฆผ์ ๋๋ค.
- ์ ๋ชจ๋ํฐ๋ง ๋ฐ ํต๊ณ, ์ค์ ๋ก๋ ํ์ํ ๋ฟ๋ง ์๋๋ผ
ํ๋ก๋ฉํ ์ฐ์ค์ ๊ทธ๋ผํ๋ , kube-state-metrics, node-exporter ๋ฑ๋ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ถ๊ฐ ์ฌํญ์ ์ ์ฒด ๋ชฉ๋ก์ด ์๋๋๋ค... ์๋ฅผ ๋ค์ด, ํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ค์นํ๊ณ ์๋ Flant ํ์ฌ์๋ 29๊ฐ ์ถ๊ฐ (๋ชจ๋ ์ด 249๊ฐ์ Kubernetes ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค). ๊ฐ๋จํ ๋งํด์, ์ถ๊ฐ ์์ด๋ ํด๋ฌ์คํฐ์ ์๋ช ์ ๋ณผ ์ ์์ต๋๋ค.
์คํ ๋ฉ์ด์
์ด์์๋ ์ฐ๋ฆฌ๊ฐ ๋งค์ผ ์ ํ๋ ์ผ์์ ์ธ ์์ ์ ์๋ํํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ฐ์ฐ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํ๋ฅญํ ์๋ฃจ์ ์ด ๋ ์ ์๋ ์ค์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง๊ฐ ํฌํจ๋ ๊ฐ์ธ(์ฆ, ๋ก๊ทธ์ธ ํ์) ๋ ์ง์คํธ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ฐ ํฌ๋์๋ ๋ ์ง์คํธ๋ฆฌ์์ ์ธ์ฆ์ ํ์ฉํ๋ ํน์ ๋น๋ฐ์ด ํ ๋น๋ ๊ฒ์ผ๋ก ๊ฐ์ ๋ฉ๋๋ค. ์ฐ๋ฆฌ์ ์๋ฌด๋ ํฌ๋๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ ์ ์๋๋ก ์ด ๋น๋ฐ์ด ๋ค์์คํ์ด์ค์์ ๋ฐ๊ฒฌ๋๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ (๊ฐ๊ฐ์๋ ๋น๋ฐ์ด ํ์ํจ)์ด ์์ ์ ์์ผ๋ฉฐ ๋น๋ฐ ์์ฒด๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ์ ์ฉํ๋ฏ๋ก ์๋์ผ๋ก ๋น๋ฐ์ ๋ฐฐ์นํ๋ ์ต์ ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ด์์๊ฐ ๊ตฌ์กฐ์ ๋์ญ๋๋ค. ๋ค์์คํ์ด์ค๊ฐ ๋ํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค๊ณ ์ด ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์์คํ์ด์ค์ ๋น๋ฐ์ ์ถ๊ฐํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ํฌ๋์์ ์ธํฐ๋ท์ผ๋ก์ ์ก์ธ์ค๋ ๊ธ์ง๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ก๋ ํ์ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์์คํ์ด์ค์ ํน์ ๋ ์ด๋ธ์ด ์์ผ๋ฉด ํน์ ๊ธฐ์ ์ด ํ์ํ์ง ์๊ณ ์ก์ธ์ค ๊ถํ ๋ฉ์ปค๋์ฆ์ด ๊ฐ๋จํ๊ฒ ์๋ํ๋ ๊ฒ์ด ๋ ผ๋ฆฌ์ ์ ๋๋ค. ์ฌ๊ธฐ์ ๊ตํ์์ด ์ฐ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋์์ค ์ ์๋์? ๋ ์ด๋ธ์ด ๋ค์์คํ์ด์ค์ ๋ํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ ์ธํฐ๋ท ์ก์ธ์ค์ ๋ํ ์ ์ ํ ์ ์ฑ ์ ์ถ๊ฐํ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฑ๋ฉ๋๋ค.
- ๋น์ทํ ์ํฉ: ํน์ ํญ๋ชฉ์ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๋๋ฌ์ , ์ ์ฌํ ๋ผ๋ฒจ(์ผ์ข ์ ์ ๋์ฌ ํฌํจ)์ด ์๋ ๊ฒฝ์ฐ. ์ด์์์์ ํ๋์ ๋ปํ๋ค...
๋ชจ๋ ํด๋ฌ์คํฐ์์๋ ์ผ์์ ์ธ ์์ ์ ํด๊ฒฐํด์ผ ํ๋ฉฐ ๋ฐ๋ฅด๊ฒ ์ด๋ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค.
์ค๋ช ๋ ๋ชจ๋ ์ด์ผ๊ธฐ๋ฅผ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. Kubernetes์์ ํธ์ํ ์์ ์ ์ํด ํ์ํ ๊ฒ: ใ ) ์ถ๊ฐ ๊ธฐ๋ฅ ์ค์น, ๋น) ์ด์์๋ฅผ ๊ฐ๋ฐํ๋ค (์ผ์์ ์ธ ๊ด๋ฆฌ ์์ ์ ํด๊ฒฐํ๊ธฐ ์ํด)
Kubernetes์ ๋ํ ์ค๋ช ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฐ๋จํฉ๋๋ค.
... ๊ทธ๋ฐ๋ฐ ๋ค์๊ณผ ๊ฐ์ ์ฌ์ค์ด ๋ฐํ์ก์ต๋๋ค.
- Kubernetes API๋ ์๋ฌํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ค์ ์ค์ํ ๊ธฐ๋ฅ์ ๋๋ค.
- ํ๋ก๊ทธ๋๋ฐ๋ ๋ชจ๋ ์ฌ๋์ ์ํ ๊ฒ์ ์๋๋๋ค(Go ์ธ์ด๋ ํน๋ณํ ํ๋ ์์ํฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ํธํ๋ ์ธ์ด๋ก ์ ํ๋์์ต๋๋ค.
์ฐ์ฐ์ SDK ); - ์ํฉ์ ํ๋ ์์ํฌ ์์ฒด์ ์ ์ฌํฉ๋๋ค.
ํ๋จ ๋ผ์ธ : ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ๋ ค๋ฉด (์ด์์๋) ํด์ผ ํ๋ค ์๋นํ ์์์ ์๋นํ๋ค ์ฌ๋ฃ ๊ณต๋ถํ๊ธฐ. ์ด๋ "๋๊ท๋ชจ" ์ด์์, ์๋ฅผ ๋ค์ด MySQL DBMS์ ๊ฒฝ์ฐ์ ์ ํฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์์ ์ค๋ช ํ ์(๋น๋ฐ ๊ณต๊ฐ, ์ธํฐ๋ท์ ๋ํ ํฌ๋ ์ก์ธ์ค...)๋ฅผ ๊ธฐ์ตํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๋ ค๋ ๊ฒฝ์ฐ ์๋น๋ ๋ ธ๋ ฅ์ด ์ง๊ธ ํ์ํ ๊ฒฐ๊ณผ๋ณด๋ค ํฌ๋ค๋ ๊ฒ์ ์ดํดํ ๊ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋๋ ๋ง๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ง์ ์์์ ์๋นํ๊ณ ์ฑ๋ช
์๋ฅผ ์์ฑํ๋ ๋ฐ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ฐพ๊ฑฐ๋ ๊ตฌ์ ๋ฐฉ์์ผ๋ก(๊ทธ๋ฌ๋ ๋น ๋ฅด๊ฒ) ์ํํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด - ์ด๋ฌํ ๊ทน๋จ ์ฌ์ด์ ์ ์ถฉ์์ ์ฐพ๊ธฐ ์ํด - ์ฐ๋ฆฌ๋ ์์ฒด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ ์ฐ์ฐ์
๊ทธ๋ ์ด๋ป๊ฒ ์ผํฉ๋๊น? ํด๋ฌ์คํฐ์๋ ์ ธ ์ฐ์ฐ์๊ฐ ํฌํจ๋ Go ๋ฐ์ด๋๋ฆฌ๊ฐ ํฌํจ๋ Pod๊ฐ ์์ต๋๋ค. ๊ทธ ์์๋ ์ธํธ๊ฐ ์์ด์ ํํฌ (์์ธํ ๋ด์ฉ์ ์๋ ์ฐธ์กฐ). ์ ์ด์์ ์์ฒด๋ ํน์ ํญ๋ชฉ์ ๊ตฌ๋ ํฉ๋๋ค. ๊ฐ๋ฐ Kubernetes API์์ ๋ฐ์ ์ ํด๋น ํํฌ๋ฅผ ์์ํฉ๋๋ค.
์ ์ด์์๋ ์ด๋ค ์ด๋ฒคํธ์ ์ด๋ค ํํฌ๋ฅผ ํธ์ถํ ์ง ์ด๋ป๊ฒ ์ ์ ์๋์? ์ด ์ ๋ณด๋ ํํฌ ์์ฒด๋ฅผ ํตํด ์ ์ด์์์๊ฒ ์ ์ก๋๋ฉฐ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ์ํ๋ฉ๋๋ค.
ํํฌ๋ ๋จ์ผ ์ธ์๋ฅผ ํ์ฉํ๋ Bash ์คํฌ๋ฆฝํธ ๋๋ ๊ธฐํ ์คํ ํ์ผ์
๋๋ค. --config
JSON์ผ๋ก ์๋ตํฉ๋๋ค. ํ์๋ ๊ด์ฌ ์๋ ๊ฐ์ฒด์ ์๋ตํด์ผ ํ๋ ์ด๋ฒคํธ(์ด๋ฌํ ๊ฐ์ฒด์ ๋ํด)๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ฐ๋ฆฌ ์์ ์ค ํ๋์ธ ์
ธ ์ฐ์ฐ์์ ๋ํ ๊ตฌํ์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์
์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ธ ๋ ์ง์คํธ๋ฆฌ์ ์ก์ธ์คํ๊ธฐ ์ํ ๋น๋ฐ์ ๋ถํดํฉ๋๋ค. ๋ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ฐ์ต: 1. Hook ์์ฑ
์ฐ์ Hook์์ ์ฒ๋ฆฌํ๊ฒ ์ต๋๋ค. --config
, ์ด๋ ์ฐ๋ฆฌ๊ฐ ๋ค์์คํ์ด์ค, ํนํ ๋ค์์คํ์ด์ค๊ฐ ์์ฑ๋ ์๊ฐ์ ๊ด์ฌ์ด ์์์ ๋ํ๋
๋๋ค.
[[ $1 == "--config" ]] ; then
cat << EOF
{
"onKubernetesEvent": [
{
"kind": "namespace",
"event": ["add"]
}
]
}
EOF
โฆ
๋ ผ๋ฆฌ๋ ์ด๋ค ๋ชจ์ต์ผ๊น์? ๋ํ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
โฆ
else
createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
kubectl create -n ${createdNamespace} -f - << EOF
Kind: Secret
...
EOF
fi
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ด๋ค ๋ค์์คํ์ด์ค๊ฐ ์์ฑ๋์๋์ง ํ์ธํ๋ ๊ฒ์ด๊ณ , ๋ ๋ฒ์งธ ๋จ๊ณ๋ ๋ค์์ ์ฌ์ฉํ์ฌ ๋ค์์คํ์ด์ค๋ฅผ ๋ง๋๋ ๊ฒ์
๋๋ค. kubectl
์ด ๋ค์์คํ์ด์ค์ ๋น๋ฐ์
๋๋ค.
์ฐ์ต: 2. ์ด๋ฏธ์ง ์กฐ๋ฆฝํ๊ธฐ
๋จ์ ๊ฒ์ ์์ฑ๋ ํํฌ๋ฅผ ์ ์ด์์์๊ฒ ์ ๋ฌํ๋ ๊ฒ๋ฟ์ ๋๋ค. ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์ ธ ์ฐ์ฐ์ ์์ฒด๋ Docker ์ด๋ฏธ์ง๋ก ์ ๊ณต๋๋ฏ๋ก ์ฐ๋ฆฌ์ ์์ ์ ์ด ์ด๋ฏธ์ง์ ํน์ ๋๋ ํฐ๋ฆฌ์ ํํฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
FROM flant/shell-operator:v1.0.0-beta.1
ADD my-handler.sh /hooks
๋จ์ ๊ฒ์ ๊ทธ๊ฒ์ ์กฐ๋ฆฝํ๊ณ ๋ฐ์ด๋ด๋ ๊ฒ๋ฟ์ ๋๋ค.
$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1
๋ง์ง๋ง ์์ ์ ์ด๋ฏธ์ง๋ฅผ ํด๋ฌ์คํฐ์ ๋ฐฐํฌํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ์ ๊ฐ:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-operator
spec:
template:
spec:
containers:
- name: my-operator
image: registry.example.com/my-operator:v1 # 1
serviceAccountName: my-operator # 2
์ฃผ์ํด์ผ ํ ๋ ๊ฐ์ง ์ฌํญ์ด ์์ต๋๋ค.
- ์๋ก ์์ฑ๋ ์ด๋ฏธ์ง ํ์;
- ์ด๋ ์ต์ํ Kubernetes์ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ๊ณ ๋ค์์คํ์ด์ค์ ๋น๋ฐ์ ํ ๋นํ ์ ์๋ ๊ถํ์ด ํ์ํ ์์คํ ๊ตฌ์ฑ ์์์ด๋ฏ๋ก ํํฌ์ ๋ํ ServiceAccount(๋ฐ ๊ท์น ์ธํธ)๋ฅผ ์์ฑํฉ๋๋ค.
๊ฒฐ๊ณผ - ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค ์น์ฒ๋ค์๊ฒ ๋น๋ฐ์ ๋ถํดํ๊ธฐ ์ํ ์ฐ์ฐ์๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก Kubernetes๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
๊ธฐํ ์ ์ฐ์ฐ์ ๊ธฐ๋ฅ
ํํฌ๊ฐ ์๋ํ ์ ํํ ์ ํ์ ๊ฐ์ฒด๋ฅผ ์ ํํ๋ ค๋ฉด, ํํฐ๋งํ ์ ์์ด์, ํน์ ๋ผ๋ฒจ์ ๋ฐ๋ผ ์ ํ(๋๋ matchExpressions
):
"onKubernetesEvent": [
{
"selector": {
"matchLabels": {
"foo": "bar",
},
"matchExpressions": [
{
"key": "allow",
"operation": "In",
"values": ["wan", "warehouse"],
},
],
}
โฆ
}
]
์ ๊ณต ์ค๋ณต ์ ๊ฑฐ ๋ฉ์ปค๋์ฆ, jq ํํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํฐ JSON ๊ฐ์ฒด๋ฅผ ์์ ๊ฐ์ฒด๋ก ๋ณํํ ์ ์์ผ๋ฉฐ, ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ๋ ค๋ ๋งค๊ฐ๋ณ์๋ง ๋จ์ต๋๋ค.
ํํฌ๊ฐ ํธ์ถ๋๋ฉด ์ ์ฐ์ฐ์๊ฐ ์ด๋ฅผ ์ ๋ฌํฉ๋๋ค. ๊ฐ์ฒด ๋ฐ์ดํฐ, ์ด๋ค ํ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํํฌ๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์ด๋ฒคํธ๋ Kubernetes ์ด๋ฒคํธ๋ก ์ ํ๋์ง ์์ต๋๋ค. ์ ธ ์ด์์๋ ๋ค์์ ์ง์ํฉ๋๋ค. ์๊ฐ์ ๋ฐ๋ผ ํํฌ ํธ์ถ (๊ธฐ์กด ์ค์ผ์ค๋ฌ์ crontab๊ณผ ์ ์ฌ) ๋ฐ ํน๋ณ ์ด๋ฒคํธ ์์์. ์ด๋ฌํ ๋ชจ๋ ์ด๋ฒคํธ๋ ๊ฒฐํฉ๋์ด ๋์ผํ ํํฌ์ ํ ๋น๋ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฐ์ฐ์์ ๋ ๊ฐ์ง ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํจ๊ณผ๊ฐ์๋ค ๋น๋๊ธฐ์ ์ผ๋ก. Kubernetes ์ด๋ฒคํธ(์: ์์ฑ๋๋ ๊ฐ์ฒด)๊ฐ ์์ ๋์์ผ๋ฏ๋ก ๋ค๋ฅธ ์ด๋ฒคํธ(์: ์ญ์ ๋๋ ๋์ผํ ๊ฐ์ฒด)๊ฐ ํด๋ฌ์คํฐ์์ ๋ฐ์ํ ์ ์์ผ๋ฉฐ ํํฌ๋ ์ด๋ฅผ ์ค๋ช ํด์ผ ํฉ๋๋ค. ํํฌ๊ฐ ์ค๋ฅ์ ํจ๊ป ์คํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์๊ธฐํ๋ค ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ๋๊น์ง(์ด ๋์์ ๋ณ๊ฒฝ๋ ์ ์์)
- ์์ถํ๋ค ์ธก์ ํญ๋ชฉ ์ ธ ์ฐ์ฐ์๊ฐ ์๋ํ๋์ง ํ์ธํ ์ ์๋ Prometheus์ ๊ฒฝ์ฐ ๊ฐ ํํฌ์ ๋ํ ์ค๋ฅ ์์ ํ์ฌ ๋๊ธฐ์ด ํฌ๊ธฐ๋ฅผ ์์๋ณด์ธ์.
๋ณด๊ณ ์์ ์ด ๋ถ๋ถ์ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ถ๊ฐ ๊ธฐ๋ฅ ์ค์น
์ฟ ๋ฒ๋คํฐ์ค๋ก ํธ์ํ ์์ ์ ์ํด์๋ ์ ๋์จ ์ค์น๊ฐ ํ์ํ๋ค๋ ์ ๋ ์ธ๊ธ๋๋ค. ์ง๊ธ ์ฐ๋ฆฌ ํ์ฌ๊ฐ ๊ฑธ์ด์จ ๊ธธ์ ์๋ก ๋ค์ด ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ฌ๋ฌ ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ์ฌ Kubernetes ์์ ์ ์์ํ์ผ๋ฉฐ ์ฌ๊ธฐ์ ์ถ๊ฐ๋ ๊ฒ์ Ingress๋ฟ์ด์์ต๋๋ค. ํด๋ฌ์คํฐ๋ง๋ค ๋ค๋ฅด๊ฒ ์ค์นํด์ผ ํ๊ณ , ๋ฒ ์ด๋ฉํ, AWS ๋ฑ ๋ค์ํ ํ๊ฒฝ์ ๋ง๊ฒ ์ฌ๋ฌ YAML ๊ตฌ์ฑ์ ๋ง๋ค์์ต๋๋ค.
ํด๋ฌ์คํฐ๊ฐ ๋ง์์๋ก ๊ตฌ์ฑ๋ ๋ง์์ก์ต๋๋ค. ๋ํ ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ตฌ์ฑ ์์ฒด๋ฅผ ๊ฐ์ ํ์ผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ์๋นํ ์ด์ง์ ์ด ๋์์ต๋๋ค.
๋ชจ๋ ๊ฒ์ ์ ๋ฆฌํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์คํฌ๋ฆฝํธ(install-ingress.sh
)๋ ๋ฐฐํฌํ ํด๋ฌ์คํฐ ์ ํ์ ์ธ์๋ก ์ฌ์ฉํ์ฌ ํ์ํ YAML ๊ตฌ์ฑ์ ์์ฑํ๊ณ ์ด๋ฅผ Kubernetes์ ์ถ์ํ์ต๋๋ค.
์์ปจ๋, ์ฐ๋ฆฌ์ ์ถ๊ฐ ๊ฒฝ๋ก์ ๊ทธ์ ๊ด๋ จ๋ ์ถ๋ก ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- YAML ๊ตฌ์ฑ์ผ๋ก ์์ ํ๋ ค๋ฉด ํ ํ๋ฆฟ ์์ง์ด ํ์ํฉ๋๋ค(์ฒซ ๋ฒ์งธ ๋จ๊ณ์์๋ ๊ฐ๋จํ sed์ ๋๋ค).
- ํด๋ฌ์คํฐ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ ์ ๋ฐ์ดํธ์ ํ์์ฑ์ด ์๊ฒผ์ต๋๋ค(๊ฐ์ฅ ์ด๊ธฐ ์๋ฃจ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ Git์ ๋ฃ๊ณ cron์ ์ฌ์ฉํ์ฌ ์ ๋ฐ์ดํธํ๊ณ ์คํํ๋ ๊ฒ์ด์์ต๋๋ค).
- Prometheus์๋ ์ ์ฌํ ์คํฌ๋ฆฝํธ๊ฐ ํ์ํ์ต๋๋ค(
install-prometheus.sh
) ๊ทธ๋ฌ๋ ํจ์ฌ ๋ ๋ง์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ ์ฅ ๊ณต๊ฐ(์ข์ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ์ง์ค์ ๋ฐ ํด๋ฌ์คํฐ)์ด ํ์ํ๊ณ ์ผ๋ถ ๋ฐ์ดํฐ(๋น๋ฐ๋ฒํธ)๊ฐ ์๋์ผ๋ก ์์ฑ๋ ์ ์๋ค๋ ์ฌ์ค์ด ์ฃผ๋ชฉํ ๋งํฉ๋๋ค. - ์ ์ ๋ ๋ง์ ์์ ํด๋ฌ์คํฐ์ ์๋ชป๋ ๊ฒ์ ๋ฐฐํฌํ ์ํ์ด ์ง์์ ์ผ๋ก ์ปค์ง๊ณ ์์ผ๋ฏ๋ก ์ค์น ๊ด๋ฆฌ์๊ฐ (์ฆ, ๋ ๊ฐ์ ์คํฌ๋ฆฝํธ: Ingress ๋ฐ Prometheus์ฉ) ์ค๋น๊ฐ ํ์ํ์ต๋๋ค(Git์ ์ฌ๋ฌ ๋ถ๊ธฐ, ํด๋น ํด๋ฌ์คํฐ์์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํ ์ฌ๋ฌ ํฌ๋ก : ์์ ๋๋ ํ ์คํธ ํด๋ฌ์คํฐ).
- ั
kubectl apply
์ ์ธ์ ์ด์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์๋ง ์๊ณ ์ํ์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ฑฐ๋ ์ญ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ํ๊ธฐ๊ฐ ์ด๋ ค์์ก์ต๋๋ค. - ๋น์ ์ ํ ๊ตฌํํ์ง ์์๋ ์ผ๋ถ ๊ธฐ๋ฅ์ด ๋๋ฝ๋์์ต๋๋ค.
- ํด๋ฌ์คํฐ ์ ๋ฐ์ดํธ ๊ฒฐ๊ณผ์ ๋ํ ์์ ํ ์ ์ด,
- ํด๋ฌ์คํฐ(๊ฒ์)์์ ์ป์ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ผ๋ถ ๋งค๊ฐ๋ณ์(์ค์น ์คํฌ๋ฆฝํธ์ ๋ํ ์ ๋ ฅ) ์๋ ๊ฒฐ์ ,
- ์ง์์ ์ธ ๋ฐ๊ฒฌ์ ํํ๋ก ๋ ผ๋ฆฌ์ ๋ฐ์ ์ ์ด๋ฃฌ๋ค.
์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ์ถ์ ๋ ๊ฒฝํ์ ๋ค๋ฅธ ํ๋ก์ ํธ์ ํ ๋ด์์ ๊ตฌํํ์ต๋๋ค.
์ ๋์จ ์ด์์
์ด๋ ์ด๋ฏธ ์ธ๊ธ๋ ์ ์ฐ์ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ ์ฒด ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ฐ์ฐ์ ํํฌ์ ๋ค์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๊ฐ์น ์ ์ฅ,
- ํฌ๊ตฌ ์ฐจํธ,
- ๊ตฌ์ฑ ์์ ๊ฐ์น ์ ์ฅ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ - ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ - Helm์๊ฒ ์ฐจํธ๋ฅผ ๋ค์ ๋กค๋งํ๋๋ก ์์ฒญํฉ๋๋ค.
๋ฐ๋ผ์ Kubernetes์ ์ด๋ฒคํธ์ ๋ฐ์ํ๊ณ ํํฌ๋ฅผ ์คํํ ์ ์์ผ๋ฉฐ ์ด ํํฌ์์ ์คํ ๋ฆฌ์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๊ทธ ํ์ ์ฐจํธ๊ฐ ๋ค์ ๋ค์ด๋ก๋๋ฉ๋๋ค. ๊ฒฐ๊ณผ ๋ค์ด์ด๊ทธ๋จ์์๋ ํํฌ ์ธํธ์ ์ฐจํธ๋ฅผ ํ๋์ ๊ตฌ์ฑ ์์๋ก ๋ถ๋ฆฌํฉ๋๋ค. ๊ธฐ์ค ์น์:
๋ง์ ๋ชจ๋์ด ์์ ์ ์์ผ๋ฉฐ ์ฌ๊ธฐ์ ๊ธ๋ก๋ฒ ํํฌ, ๊ธ๋ก๋ฒ ๊ฐ ์ ์ฅ์ ๋ฐ ์ด ๊ธ๋ก๋ฒ ์ ์ฅ์๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด์ Kubernetes์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋ฉด ๊ธ๋ก๋ฒ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๋ฐ์ํ๊ณ ๊ธ๋ก๋ฒ ์ ์ฅ์์์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฐ์ง๋์ด ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ชจ๋์ด ๋กค์์๋ฉ๋๋ค.
์ด ๊ตฌ์ฑํ๋ ์์ ๋ช
์๋ ์ถ๊ฐ ๊ธฐ๋ฅ ์ค์น์ ๋ํ ๋ชจ๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํฉ๋๋ค.
- Helm์ ํ ํ๋ฆฟ ์์ฑ ๋ฐ ์ ์ธ์ฑ์ ๋ด๋นํฉ๋๋ค.
- ์๋ ์ ๋ฐ์ดํธ ๋ฌธ์ ๋ ์ผ์ ์ ๋ฐ๋ผ ๋ ์ง์คํธ๋ฆฌ๋ก ์ด๋ํ์ฌ ์ ์์คํ ์ด๋ฏธ์ง๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์ด๋ฅผ ๋กค์์(์: "์์ฒด")ํ๋ ๊ธ๋ก๋ฒ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ๋์์ต๋๋ค.
- ํด๋ฌ์คํฐ์ ์ค์ ์ ์ ์ฅํ๋ ๊ฒ์ ๋ค์์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. ์ปจํผ๊ทธ๋งต, ์ ์ฅ์์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค(์์ ์ ์ ์ฅ์์ ๋ก๋๋จ).
- ๋น๋ฐ๋ฒํธ ์์ฑ, ๊ฒ์ ๋ฐ ์ง์์ ์ธ ๊ฒ์๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ๋์์ต๋๋ค.
- Docker๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ ํ๊ทธ ๋๋ถ์ ์คํ ์ด์ง์ด ๋ฌ์ฑ๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ๋ ์ํ๋ฅผ ์ดํดํ ์ ์๋ ์ธก์ ํญ๋ชฉ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ํฐ๋ง๋ฉ๋๋ค.
์ด ์ ์ฒด ์์คํ ์ Go์์ addon-operator๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ ํํ๋ก ๊ตฌํ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค์ด์ด๊ทธ๋จ์ด ๋ ๋จ์ํด ๋ณด์ ๋๋ค.
์ด ๋ค์ด์ด๊ทธ๋จ์ ์ฃผ์ ๊ตฌ์ฑ์์๋ ๋ชจ๋ ์ธํธ์
๋๋ค. (์๋ ํ์์ผ๋ก ๊ฐ์กฐ ํ์). ์ด์ ์ฝ๊ฐ์ ๋
ธ๋ ฅ์ผ๋ก ํ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ํ ๋ชจ๋์ ์์ฑํ ์ ์์ผ๋ฉฐ ํด๋น ๋ชจ๋์ด ๊ฐ ํด๋ฌ์คํฐ์ ์ค์น๋๊ณ ์
๋ฐ์ดํธ๋๋ฉฐ ํด๋ฌ์คํฐ์ ํ์ํ ์ด๋ฒคํธ์ ์๋ตํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
"ํ๋ํธ"๋
addon-operator ๋ชจ๋์ ์ด๋์ ๊ตฌํ ์ ์๋์? ์ฐ๋ฆฌ ๋์๊ด ์ถํ์ ์ฐ๋ฆฌ์ ๋ค์ ๋จ๊ณ์ด๋ฉฐ ์ฌ๋ฆ์ ์ถํํ ๊ณํ์ ๋๋ค.
๋น๋์ค ๋ฐ ์ฌ๋ผ์ด๋
๊ณต์ฐ ์์(~50๋ถ):
๋ณด๊ณ ์ ๋ฐํ:
PS
์ฐ๋ฆฌ ๋ธ๋ก๊ทธ์ ๋ค๋ฅธ ๋ณด๊ณ ์:
- ยซ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ Kubernetes "; (Dmitry Stolyarov; HighLoad++์์ 8๋ 2018์ XNUMX์ผ); - ยซ
๋ชจ๋ํฐ๋ง ๋ฐ Kubernetes "; (Dmitry Stolyarov; 28๋ 2018์ XNUMX์ผ RootConf์์); - ยซ
Kubernetes ๋ฐ GitLab์ ์ฌ์ฉํ CI/CD ๋ชจ๋ฒ ์ฌ๋ก "; (Dmitry Stolyarov; HighLoad++์์ 7๋ 2017์ XNUMX์ผ); - ยซ
์๊ท๋ชจ ํ๋ก์ ํธ์์์ Kubernetes ๊ฒฝํ "; (Dmitry Stolyarov; 6๋ 2017์ XNUMX์ผ RootConf์์).
๋ค์ ์ถํ๋ฌผ์๋ ๊ด์ฌ์ด ์์ผ์ค ๊ฒ์ ๋๋ค.
์ถ์ฒ : habr.com