๐ CS ์คํฐ๋/๋์ปค, ์ฟ ๋ฒ๋คํฐ์ค, ๋ฆฌ๋
์ค
[์ฟ ๋ฒ๋คํฐ์ค #2] โ์ฟ ๋ฒ๋คํฐ์ค ์ํคํ ์ฒ (Control Plane/Node) ์์๋ณด๊ธฐ
iknowDev
2023. 6. 8. 18:12
์ฟ ๋ฒ๋คํฐ์ค ์ปดํฌ๋ํธ๋ ์ปจํธ๋กค ํ๋ ์ธ(Control Plane) ์ปดํฌ๋ํธ์ ๋ ธ๋(Node) ์ปดํฌ๋ํธ๋ก ๋๋์ด๋ณผ ์ ์์ต๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ(Control Plane) | ๋ ธ๋(Node) ์ปดํฌ๋ํธ |
๊ตฌ์ฑ์์
|
๊ตฌ์ฑ์์
|
์ปจํธ๋กค ํ๋ ์ธ(Control Plane) ์ปดํฌ๋ํธ
- ๋ง์คํฐ ๋ ธ๋(Master Node)๋ฅผ ๋์ด ์ปจํธ๋กค ํ๋ ์ธ(Control Plane) ์ญํ ์ ์ํํฉ๋๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๊ธฐ๋ฅ ์ ์ด๋ฅผ ์ ์ฒด์ ์ผ๋ก ๋ด๋นํฉ๋๋ค.
- ๋ชจ๋ ๊ตฌ์ฑ์์๋ API Server๋ก๋ง ํต์ ํฉ๋๋ค. (Controller Manager๊ฐ etcd์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ API Server๋ฅผ ํตํด ์์ฒญ์ ๋ณด๋ด์ผ ํฉ๋๋ค.)
- ํด๋น ์์๋ค์ ๊ฐ๋ณ์ ํ๋ก์ธ์ค๋ก ๋์ํฉ๋๋ค.
- ์ฌ๋ฌ ๋ ธ๋์ ์ปจํธ๋กค ํ๋ ์ธ์ ๊ตฌ์ฑ ์์ ์ธ์คํด์ค๋ฅผ ๋ค์ ๋์ ๊ฐ์ฉ์ฑ์ ํฅ์ํ ์ ์์ต๋๋ค.
kube-apiserver
- ์๋ด ๋ฐ์คํฌ์ฒ๋ผ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ก ๋ค์ด์ค๋ ์์ฒญ์ ๊ฐ์ฅ ์์์ ์ ์ํ๋ ์ญํ ์ ํฉ๋๋ค.
- ๋ด๋ถ ๋ฐ ์ธ๋ถ ์์ฒญ์ด ์ ํจํ์ง ํ๋ณํ๊ณ ์ ํจํ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
- Kubernetes API๋ฅผ ๋ ธ์ถํ๋ Kubernetes ์ ์ด ํ๋ฉด์ ๊ตฌ์ฑ ์์์ ๋๋ค.
- etcd์ ์ ์ผํ๊ฒ ํต์ ํ๋ ๋ชจ๋๋ก ์ํ๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์กฐํํฉ๋๋ค.
- REST API ํํ
etcd
- ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ๋์ํ๊ธฐ ์ํด์ ํ์ํ ํด๋ฌ์คํฐ ๋ฐ ๋ฆฌ์์ค์ ๊ตฌ์ฑ ์ ๋ณด, ์ํ ์ ๋ณด ๋ฐ ๋ช ์ธ ์ ๋ณด๋ฅผ ํค-๊ฐํํ๋ก ์ ์ฅํ๋ ์ ์ฅ์์ ๋๋ค.
- ๋ชจ๋ ํด๋ฌ์คํฐ ๋ฐ์ดํฐ์ ๋ํ Kubernetes์ ๋ฐฑ์ ์ ์ฅ์๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ถ์ฐ ์์คํ ์ผ๋ก ๊ตฌ์ฑํด ๊ณ ๊ฐ์ฉ์ฑ์ ํ๋ณดํฉ๋๋ค.
- ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋ฐฑ์ ํ์์ ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ๋ฐฐํฌํ์์๋ etcd๋์ SQLite๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
kube-scheduler
- ํ ๋น๋ ๋ ธ๋๊ฐ ์๋ ์๋ก ์์ฑ๋ pod์ ๊ฐ์งํ์ฌ ์ด๋ค ๋ ธ๋๋ก ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํ๋ ์์ ์ ๋ด๋นํฉ๋๋ค.
- ๋ ธ๋ ๋ฐ Pod์ ๊ฐ์ข ์๊ตฌ์ฌํญ๊ณผ ์ ์ฝ์ฌํญ์ ์ข ํฉ์ ์ผ๋ก ํ๋จํ๋ ์ญํ ์ ํฉ๋๋ค.
- ๋ ธ๋์ ํ์ฌ์ํ์ Pod์ ์๊ตฌ์ฌํญ์ ์ฒดํฌํฉ๋๋ค.
kube-controller-manager
- API ์๋ฒ ๊ฐ์ ๊ธฐ๋ฅ์ ํตํด ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๊ฐ์ํ๊ณ ํด๋ฌ์คํฐ๋ฅผ ์ํ๋ ์ํ๋ก ์ด๋ํ๋๋ก ๋ณ๊ฒฝํฉ๋๋ค.
- ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ค์ํ ์ปจํธ๋กค๋ฌ๊ฐ ์กด์ฌํฉ๋๋ค.
- ์ค์ผ์ค๋ฌ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ํํ ์์ ํฌ๋๊ฐ ์คํ๋๊ฒ ํฉ๋๋ค.(๋์์์ด ์ํ๋ฅผ ์ฒดํฌํด ์ํ๋ ์ํ๋ฅผ ์ ์ง)
- ๋ ผ๋ฆฌ์ ์ผ๋ก๋ ๋ถ๋ฆฌ๋์ด์์ง๋ง ๋ณต์ก์ฑ์ ๋ฎ์ถ๊ธฐ ์ํด ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ์ปดํ์ผ๋์ด ๋จ์ผ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋ฉ๋๋ค.
๋ ธ๋(Node) ์ปดํฌ๋ํธ
- ์ปจํธ๋กค ํ๋ ์ธ ์ปดํฌ๋ํธ์ ์์ฒญ์ ๋ฐ์ ๊ฐ ๋ ธ๋์์ ๋์์ ๋ด๋นํฉ๋๋ค.
- Matser์ ํต์ ์ apiserver๋ง ๋ฐ๋ผ๋ด ๋๋ค.
kubelet
- ๋ ธ๋์์ ์ปจํ ์ด๋๊ฐ ๋์ํ๋๋ก ๊ด๋ฆฌํด ์ฃผ๋ ํต์ฌ ์์์ ๋๋ค.
- YAML์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ ์ฉํ๊ธฐ ์ํด kubectl ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ๋, ์ด YAML์ด kube-apiserver๋ก ์ ์ก๋ ํ kubelet์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. kubelet์ ์ด YAML์ ํตํด ์ ๋ฌ๋ Pod์ ์์ฑ ํน์ ๋ณ๊ฒฝํ๊ณ , ์ดํ ์ด YAML์ ๋ช ์๋ ์ปจํ ์ด๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
- ๊ฐ ๋ ธ๋์์ ์คํ๋ฉ๋๋ค.
Proxy
- ๋คํธ์ํฌ ํ๋ก์์ ๋ถํ ๋ถ์ฐ ์ญํ ์ ํฉ๋๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค๋ Pod IP๊ฐ ๋งค๋ฒ ๋ฐ๋๋๋ฐ์ ์ค๋ ์ด๋ ค์์ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๋ธ์ ํธ๋ฅผ ํตํด ๊ณ ์ ์ ์ผ๋ก Pod์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- iptables ๋๋ IPVS ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. (์ค์ ๋ง ๊ด๋ฆฌ)
Container Runtime
- Pod์ ํฌํจ๋ ์ปจํ ์ด๋ ์คํ์ ์ค์ง์ ์ผ๋ก ๋ด๋นํ๋ ์ ํ๋ฆฌ์ผ์ด์
Desired State
- ํ์ฌ ์ํ์ ์ํ๋ ์ํ๋ฅผ ๊ณ์ ์ฒดํฌํ๊ณ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์๋์ผ๋ก ์กฐ์น(ํ์ฌ ์ํ๋ฅผ ์ํ๋ ์ํ๋ก ๋ณ๊ฒฝ)ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ธ ์ฟ ๋ฒ๋คํฐ์ค์ ๊ตฌ๋ ์๋ฆฌ์ ํต์ฌ
- ๋ด๋ถ์ ์ผ๋ก Scheduler / Controller / Kubelet ๋ชจ๋ ์ด๋ฌํ cycle์ ํตํด etcd์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ฐ์ง
์กฐํ ํ๋ฆ
์กฐํ ๋ฐ์ ํ๋ฆ
- ์ ๋ณด ์กฐํ: Controller๊ฐ ์ฒดํฌํ๊ณ ์๋ ์ํ๋ฅผ ์กฐํํ ๋ API Server์ ๋ฌผ์ด๋ณธ๋ค.
- ์ ๋ณด ์กฐํ ๊ถํ ์ฒดํฌ: API Server๋ ์์ฒญ Controller๊ฐ ํด๋นํ๋ Resource๋ฅผ ๋ณผ ์ ์๋์ง ๊ถํ ์ฒดํฌ ํ, etcd์ ์ ๋ณด ์กฐํ๋ฅผ ํ๊ณ Controller์ ์๋ ค์ฃผ๊ฒ ๋๋ค.
์ํ ๋ณ๊ฒฝ ํ๋ฆ
- ์ํ๋ ์ํ ๋ณ๊ฒฝ: API Server๋ Controller์๊ฒ ์ํ๋ ์ํ ๋ณ๊ฒฝ์ ๋ํ ์ ๋ฌ์ ํ๋ค.
- ์ํ๋ ์ํ๋ก ๋ฆฌ๋ก์ค ๋ณ๊ฒฝ: ์กฐ์น๋ฅผ ํตํด ๋ฆฌ์์ค ๋ณ๊ฒฝ
- ๋ณ๊ฒฝ ์ฌํญ ์ ๋ฌ: API Server์๊ฒ ๋ณ๊ฒฝ ์ฌํญ ์ ๋ฌ
- ์ ๋ณด ๊ฐฑ์ ๊ถํ ์ฒดํฌ: ์กฐํ๊ฐ ์๋ ๋ณ๊ฒฝ ๊ถํ์ด ์๋์ง ์ฒดํฌ
- ์ ๋ณด ๊ฐฑ์ : etcd์ ์ ๋ณด ๊ฐฑ์
ํ๋์ Pod ์์ฑ ๊ณผ์
- ๊ด๋ฆฌ์๊ฐ API Server์ Pod์์ฒญ
- ์์ฒญ ๋ฐ์ API Server๋ etcd์ Pod ์์ฒญ์ ๊ธฐ๋ก
- ์ Pod์ ๊ณ์ ์ฒดํฌํ๋ Controller์ ์ํด ํ์ธ
- Controller๊ฐ API Server์๊ฒ Pod ํ ๋น ์์ฒญ
- API Server๋ etcd์ Pod ํ ๋น ์์ฒญ์ผ๋ก ์ํ ๋ณ๊ฒฝ
- ๊ณ์ ํ ๋น ์์ฒญ ํ์ธ ํ๋ Scheduler์ ์ํด ํ์ธ
- Scheduler๊ฐ API Server์๊ฒ Pod ํน์ ๋ ธ๋ ํ ๋น
- API Server๋ etcd์ Pod ํน์ ๋ ธ๋ ํ ๋น, ๋ฏธ์คํ ์ํ๋ก ์ ๋ฐ์ดํธ
- Kubelet์ด ๋ ธ๋ ์ค ๋ฏธ์คํ Pod ํ์ธ
- Kubelet์ด Pod ์์ฑ
- API Server๊ฐ etcd์ Pod ์์ฑ ์ ๋ฐ์ดํธ, Pod ํน์ ๋ ธ๋ ํ ๋น, ์คํ์ค ์ํ
์ฟ ๋ฒ๋คํฐ์ค ์์๋ณด๊ธฐ 3ํธ: ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ด๋ฃจ๊ณ ์๋ ์ฌ๋ฌ ๊ฐ์ง ๊ตฌ์ฑ ์์