Kubernetes ๊ฐ์
Kubernetes ๊ฐ์ ๊ด๋ จ
์ฟ ๋ฒ๋คํฐ์ค(Kubernetes)๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ ์ ๋จผ์ ๋์ปค์ ๋ํด์ ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์ปค์ ๋ํด์ ๋ชจ๋ฅธ๋ค๋ฉด, Docker์ ๋ํด ๋จผ์ ํ์ต์ ํ๊ณ ์ค๊ธธ ๋ฐ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋?
์ฟ ๋ฒ๋คํฐ์ค(Kubernetes, ์ฝ์ด๋ก k8s)์ ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ์คํ์์ค ์์คํ ์ผ๋ก โ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฐ ๋๊ตฌโ ์ด๋ค ์ฌ๋ฌ ํธ์คํธ์์ ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๋ ค๋ ๊ฒฝ์ฐ์ ํธ๋ฆฌํ๊ณ , ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ ๋ฐ ๊ด๋ฆฌ๊ฐ ํธํ๊ณ ์์ ํ ์ ์๊ฒ ํด์ค๋ค.
Google์ด 2014๋ 6์์ ์์ํ Go์ผ๋ก ๋ง๋ ์คํ ์์ค ์ํํธ์จ์ด(Open source software; OSS)์ด๋ค.
docker run
๊ณผ docker-compose
์ ์ฐจ์ด์ ์ ๋์ผํ ํธ์คํธ์์ ์ฌ๋ฌ ์ปจํ
์ด๋ ๊ด๋ฆฌ ๋๋ ๋จ์ผ ์ปจํ
์ด๋ ๊ด๋ฆฌ์ธ์ง์ ๋ํ ์ฐจ์ด์ด๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ฉด ํธ์คํธ๊ฐ ์ค์ง๋๋ฉด ์ปจํ
์ด๋๋ ๊ฐ์ด ์ค์ง๊ฐ ๋์ด ๋ฒ๋ฆฐ๋ค. ๋ฐ๋ผ์, ํธ์คํธ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค๊ณ ์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ์ด๋ฌํ ์์ฑ๋ ํธ์คํธ ๊ทธ๋ฃน์ ํ ๋นํด๋ ๊ฒ์ด โ์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ด์
(Container Orchestration) ๋๊ตฌ"์ด๋ค. ์ด๋ฐ ๋๊ตฌ๋ก Kubernetes๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ค.
Kubernetes์ ํน์ง
K8s๋ผ๊ณ ๋ ์๋ ค์ง Kubernetes์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ผ๋ก๋ ์ปจํ ์ด๋์ผ๋ก ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ, ํ์ฅ, ๋ก๋ ๊ท ํ ์กฐ์ , ๋ก๊น , ๋ชจ๋ํฐ๋ง ๋ฑ์ด ์๋ค.
๋, ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด์์๋ ์ ๊ฒฝ์ ๋ง์ด ์จ์ผ ํ๋ ๋ฌธ์ ๋ก์, ๊ณ ๋ถํ ๋ฑ์ผ๋ก ์ด์์ด ๋ฐ์ํ์ ์กฐ์นํด์ผ ํ๊ฑฐ๋, ์ค์ผ์ผ ์์ ํ๊ฑฐ๋, ์๋ ์ฅ์ ์กฐ์น(Failover) ๋ฑ์ด ํ์ํ๋ค.
VM์ ์ฌ์ฉํ๋ ๊ตฌ์ฑ์์๋ ๊ฒฐ๊ตญ์๋ ๊ด๋ฆฌ๋ ๊ทธ VM ๋จ์๋ก ํด์ผ ๋์ ์ค์ผ์ผ ์์, ์๋ ์ฅ์ ์กฐ์น์ ์ค์ ๋ VM ๋จ์๋ก ํ ์ ๋ฐ์ ์๋ค Kubernetes๋ฅผ ์ฌ์ฉํ๋ฉด ์ปจํ ์ด๋ ๋จ์ ๋๋ ์ดํ๋ฆฌ์ผ์ด์ ๋จ์๋ก ๊ด๋ฆฌ ํ ์ ์๊ณ (์ค์ ๋ก VM์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์ดํ๋ฆฌ์ผ์ด์ ๋จ์๋ก ๊ด๋ฆฌํ๋ ๊ฒ ์ฒ๋ผ ๋ค๋ฅผ ์ ์๊ณ ), ์ค์ผ์ผ ์์, ์ฅ์ โโ์กฐ์น๋ ์์ฉ ํ๋ก๊ทธ๋จ ๋จ์๋ก ์ค์ ์ ์๋ค.
์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋๊ฐ?
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ํ๊ธฐ ์ํด์๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ํ์ํ๋ค.
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ด๋?
- ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ ์ธ๋ถํํ๊ณ ๊ฐ๊ฐ์ ๋ณ๋์ ํ๋ก์ธ์ค๋ก ๋์ํ๋ค. (cf. ๋ชจ๋๋ฆฌ์ ์ํคํ ์ฒ: Monolithic Architecture)
- ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ฐํ๊ณ ํ๋ ฅ์ ์ด๋ค.
- ๊ฐ๋ฐ ์ฒด์ ๋ ์ค์ผ์ผํ๊ฒ ๋์ํ๋ค.
์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์์คํ ์ ๋ณํ๋ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด์ ๋ณด๋๋ก ํ๊ฒ ๋ค.
์ด๊ฒ๋ง ๋ณด๋ฉด ์ฅ์ ๋ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ์ง๋ง, ๋ค๋ฅธ ํํธ์ผ๋ก ๊ตฌ์กฐ๋ ๋ณต์กํด์ ธ์ ๊ด๋ฆฌ๋ ์ด๋ ต๊ฒ ๋์๋ค.
- ์ปจํ ์ด๋์ ๊ธฐ๋์ด ๋ฒ๊ฑฐ๋กญ๋ค.
- ์ปจํ ์ด๋๊ฐ ํต์ ์ ์ ์ด๊ฐ ๋ณต์กํ๋ค.
- ์ปจํ ์ด๋์ ๋ฐ์ดํฐ ์ง์์ฑ์ ์ด๋ป๊ฒ ํ๋๊ฐ?
- ์ปจํ ์ด๋๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ์๊ฑฐ๋, ์ ์ง๊ฐ ๋์์๋ ํ๋ณต์ ์ด๋ป๊ฒ ํด์ผ ํ ๊ฒ์ธ๊ฐ?
์ด๋ฐ๊ฑธ ๋ถํธํ ์ ์ ํด๊ฒฐํด ์ฃผ๋ ๊ฒ์ด ์ฟ ๋ฒ๋คํฐ์ค์ด๋ค.
์ด๋ฐ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ Kubernetes๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์์ ์ด์ ์ ์๋์ ๊ฐ๋ค.
- ์ฌ๋ฌ ํธ์คํธ์ ์ฌ๋ฌ ์ปจํ ์ด๋์ ๋ก๋ ๋ฐธ๋ฐ์ฑ/์ํฌ๋ก๋๋ฅผ ๋ถ์ฐํ ์ ์๋ค.
- 1๊ฐ์ Pod(์ปจํ ์ด๋)๊ฐ ์ ์งํ์ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก ํ๋ณตํ ์ ์๋ค.
- ๋ฌด์ ์ง ๊ฐฑ์ (๋กค๋ง, ์ ๋ฐ์ดํธ)์ ํ ์ ์๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ ์ค์ Scale-up, Scale-down์ ํ ์ ์๋ค.
Kubernetes ๊ธฐ๋ฅ
ํด๋ฌ์คํฐ๋ง(Clustering)
- ์ฌ๋ฌ ์์คํ ์ ํด๋ฌ์คํฐ๋งํ๊ณ ๋ฆฌ์์ค ํ๋ง ํ ์ ์๋ค.
- ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋จธ์ ์ ๋ ธ๋(Node)๋ผ๊ณ ํ๋ค.
๋งค๋ํ์คํธ(manifest)๋ฅผ ํตํ ์ ์ธ์ ์์ ๊ด๋ฆฌ
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์์๋ฅผ ๋ฆฌ์์ค๋ก ๊ด๋ฆฌํ๋ค.
- ์์(resource)์ ์ ์๋ฅผ YAML๋ก ๊ธฐ์ ํ๋ค.
- ์ด๋ฅผ ๋งค๋ํ์คํธ๋ผ๊ณ ํ๋ค.
- ์์์ ์กฐ์์ด ์๋๋ผ, ์ ์๋ง์ ๊ธฐ์ ํ๋ค. ๊ทธ๋์ ์ ์ธ์ ์ด๋ผ๊ณ ํ๋ค.
๋ฆฌ์์ค ์ข ๋ฅ
- ์ปจํ ์ด๋ : ๋จ์ผ ์ปจํ ์ด๋. ์ง์ ์ ์ํ ์ ์๋ค.
- Pod : ์ปจํ ์ด๋๋ฅผ ํตํฉ ๊ด๋ฆฌํ๋ ๊ฒ. VM๊ณผ ๊ฐ์ ๊ฐ๋ . ๋ฐฐํฌ์ ์ต์ ๋จ์.
- Deployment : Pod์ ์ค์ผ์ผ๋ง์ ํ๋ ๊ฒ์ ๋งํ๋ค.
- Service : ๊ฐ์ ๋ผ์ฐํฐ ๋ฐ ๋ก๋ ๋ฐธ๋ฐ์์ ๊ฐ์ ๊ฒ์ ๋งํ๋ค.
- ConfigMap, Secret : ์ปจํ ์ด๋ ๋ด์ ์ค์ ํ์ผ ๋ฑ์ ๋ํ๋ด๋ ๊ฒ. Secret๋ ์ํธํ๋๋ค.
- PersistentVolume : ์ง์์ฑ ๋ณผ๋ฅจ. ํธ์คํธ ๋๋ ํฐ๋ฆฌ ๋ฐ NFS ๊ณต์ ๋ฑ.
์ ์ธ์ ์์ ๊ด๋ฆฌ
- ๋ฆฌ์์ค ์ ์๊ฐ ๋ฑ๋ก๋๋ฉด Kubernetes๋ ์ค์ ๋ฆฌ์์ค์ ์ํ๊ฐ ์ ์๋๋ก ์๋ํ๋ค.
- Pod์ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด,
- ๊ทธ๋ ๊ธฐ ์ํด์๋, ์ค๋๋ ์ปจํ ์ด๋๋ฅผ ์ง์ฐ๊ณ , ์๋ก์ด ์ปจํ ์ด๋์ ๊ธฐ๋์ ์ง์ํ๋ค.
- ๊ทธ๋ ๊ธฐ ํ๊ธฐ ํ๋ค๋ค๋ฉด, ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ด๋ฆ์ ๋ค์ ์์ฑ๋ Pod ์ ์๋ก ๋ฎ์ด ์ด๋ค.
๊ฐ์ ํ๋ซ ๋คํธ์ํฌ
- ๊ฐ Pod๋ ์ฌ๋ฌ ๋ ธ๋ ๋ถํฌ๋์ด ๋ฐฐํฌ๋๋๋ฐ, ๋ชจ๋ Pod๋ ๊ฐ์ ๋คํธ์ํฌ์ ๋์ผํ ์ธ๊ทธ๋จผํธ์ ์๋ค.
- ๊ฐ์ ๋คํธ์ํฌ๋ฅผ Kubernetes์์ Container๊ฐ ํต์ ์ ํ๋ ์ธํฐํ์ด์ค๋ CNI(Contaniner Network Interface)๋ก ํ์คํ๋์ด ์๋ค.
- ๋ค์ํ ์ข
๋ฅ์ ํ๋ฌ๊ทธ์ธ ์กด์ฌํ๋ค.
- ์๋ธ๋ท(Weave Net): VXLAN
- ์นผ๋ฆฌ์ฝ(calico): BGP
- ํ๋๋ฌ(flannel)
๊ฐ์ ๋คํธ์ํฌ ๋ด DNS
- ๋ก๋ ๋ฐธ๋ฐ์์ ๊ธฐ๋ฅ์ ํ๋ Service์๋ DNS๋ช ์ด ๋ถ๋๋ค.
- ์ด DNS ์ด๋ฆ์ ๊ฐ์ ๋คํธ์ํฌ ๋ด์ DNS๋ก IP ์ฃผ์๋ก ํด์ํ ์ ์๋ค.
- ์ฆ, Pod๋ฅผ Service์ ๋ค์ ์์ํ์ฌ, Pod์ DNS๋ช
์ผ๋ก ์ก์ธ์ค ํ ์ ์๋ค.
- Pod์ IP ์ฃผ์๋ ๋์ ์ผ๋ก ํ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์ Service ๊ฒฝ๋ก์ ์ก์ธ์ค๊ฐ ๊ธฐ๋ณธ์ด๋ค.
์์์ ๋ ผ๋ฆฌ์ ๋ถํ (๊ทธ๋ฃนํ)
- Namespace๋ผ๋ ๋ฆฌ์์ค๋ก, Pod๋ Service๋ฑ์ ๋ฆฌ์์ค๋ฅผ ๊ทธ๋ฃนํํ ์ ์๋ค.
- Namespace๋ง๋ค ์ก์ธ์ค๋ฅผ ๊ฒฉ๋ฆฌํ๊ฑฐ๋ ํ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์, ๊ด๋ฆฌ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ปจํ ์ด๋ ์์ฌ ๊ฐ์ ๋ฐ ์คํ ํ๋ง(Auto Healing)
- ์ปจํ ์ด๋์ ์์ฌ ๊ฐ์๋ฅผ ์ ์ํ ์ ์๋ค.
- ๋ค์ ์ค ํ๋๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํํ์ฌ ๊ฒฐ๊ณผ๋ก ์์ฌ๋ฅผ ํ์ธํ๋ค.
- HTTP ํด๋ง
- TCP ํ
- ๋ชจ๋ ๋ช ๋ น
- ์ปจํ ์ด๋๊ฐ ์ ์ง๋์๋ค๊ณ ํ๋จ๋๋ฉด, Kubernetes๊ฐ ์ฌ๊ธฐ๋ํด ์ค๋ค.
๊ทธ๋ฐ์
- Pod ๋ณต์
- Pod ๋กค๋ง ์ ๋ฐ์ดํธ
- ์์ท ์์ (Job)
- ์ ๊ธฐ ์คํ ํ์คํฌ(CronJob)
- Pod๋น ๋ค์์คํ์ด์ค๋น ๋ฆฌ์์ค(CPU, ๋ฉ๋ชจ๋ฆฌ) ์ ํ
- ๊ฐ์ ๋คํธ์ํฌ ์ก์ธ์ค ์ ์ฑ (NetworkPolicy)