2023. 11. 22. 23:27ใBACKEND/Docker & Kubernetes
๐ Kubernetes Series
๋ชจ๋ Kubernetes ์๋ฆฌ์ฆ๋ฅผ ํ์ธํ์๋ ค๋ฉด ์๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
Kubernetes Architecture
์ฟ ๋ฒ๋คํฐ์ค ์ํคํ ์ฒ๋ ์ปจํ ์ด๋ํ๋ ์ํฌ๋ก๋๋ฅผ ์์ ์ ์ด๊ณ ์ ์ ๊ฐ๋ฅํ ํ๊ฒฝ์ ์ ๊ณตํ๊ธฐ ์ํด,
์ฌ๋ฌ ์๋ฒ์ ํด๋ฌ์คํฐ์ ๋ถ์ฐ๋ ์ปดํฌ๋ํธ๋ค์ด ํจ๊ป ๋์ํ๋ ์งํฉ์ ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ํฌ๊ฒ ์ปจํธ๋กค ํ๋ ์ธControl plane๊ณผ ์์ปค ๋ ธ๋ Worker Node ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ง๊ธ๋ถํฐ ์ฟ ๋ฒ๋คํฐ์ค ์ํคํ ์ฒ์ ์ค์ ์์๋ค์ ์ดํดํ๋๋ก ํด๋น ๊ฐ๋ ์ ๋ค๋ฃจ๋ฉฐ,
๋ณธ ๊ธ์์๋ ์ปจํธ๋กค ํ๋ ์ธ์ ํด๋นํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์์ปค ๋ ธ๋์ ํด๋นํ๋ ๊ธ์ ๋ค์ ๊ธ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.
Kubernetes Components
Kubernetes ์ํคํ ์ฒ๋ master-worker ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
์ปจํธ๋กค ํ๋ ์ธ์ ํด๋นํ๋ master๋ ์์ปค ๋ ธ๋๋ค์ ๊ด๋ฆฌํ๋ฉฐ,
Pod๋ค๋ก ์บก์ํ๋ ์ปจํ ์ด๋๋ค์ ์์ปค ๋ ธ๋๋ค ๋ด์ ๋ฐฐํฌ๋์ด ์คํ๋ฉ๋๋ค.
๊ทธ๋ผ ์ง๊ธ๋ถํฐ ์๋ ์ํคํ ์ฒ์ ๋ํ๋, ์ค์ ๊ตฌ์ฑ ์์์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
Control Plane
Control Plane์ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์ ๋ด๋นํ๋ฉฐ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
Control Plane์ ์๋์ ๊ฐ์ ๋ค ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ฐ๊ฐ ํน์ ์์ ์ ๋ด๋นํฉ๋๋ค.
โ๏ธ kube-apiserver: Kubernetes API๋ฅผ ๋ ธ์ถํ๋ ์ปดํฌ๋ํธ kubectl ๋ก๋ถํฐ ๋ฆฌ์์ค๋ฅผ ์กฐ์ํ๋ผ๋ ์ง์๋ฅผ ๋ฐ์
โ๏ธ etcd: ๊ณ ๊ฐ์ฉ์ฑ์ ๊ฐ์ถ ๋ถ์ฐ key-value ์คํ ์ด, ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ฐฑํน ์คํ ์ด๋ก ์ฌ์ฉ๋จ
โ๏ธ kube-scheduler: ๋ ธ๋๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ์ปจํ ์ด๋๋ฅผ ๋ฐฐ์นํ ์ ์ ํ ๋ ธ๋๋ฅผ ์ ํ
โ๏ธ kube-controller-manager: ๋ฆฌ์์ค๋ฅผ ์ ์ดํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํ
์ด๋ฌํ ๊ตฌ์ฑ ์์๋ค์ ํจ๊ป ์๋ํ์ฌ ๊ฐ Kubernetes ํด๋ฌ์คํฐ์ ์ํ๊ฐ ๋ฏธ๋ฆฌ ์ ์๋ ์ํ๋ ์ํ desired state ์ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค.
๐ kube-apiserver
kube API ์๋ฒ๋ ์ฌ์ฉ์·์ปดํฌ๋ํธ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์ฝ๊ฒ ํต์ ํ ์ ์๋๋ก ํฉ๋๋ค.
๋๋ฌผ๊ฒ, ๋ชจ๋ํฐ๋ง ์์คํ ์ด๋ ์จ๋ํํฐ ์๋น์ค๋ค์ด ํด๋ฌ์คํฐ๋ค ๊ฐ ํต์ ํ๊ธฐ ์ํด ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
kubectl๊ณผ ๊ฐ์ CLI๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ ๋๋, API ์๋ฒ์ ํต์ ํ๊ธฐ ์ํด HTTP REST API๋ฅผ ์ฌ์ฉํ๋๋ฐ์.
ํ์ง๋ง, ์ค์ผ์ค๋ฌ ๋ฐ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ๋ด๋ถ ํด๋ฌ์คํฐ ๊ตฌ์ฑ ์์๋ gRPC ๋ฐฉ์์ผ๋ก ํต์ ํฉ๋๋ค.
API ์๋ฒ๋ TLS๋ฅผ ํตํ ์์ ์ฑ์ ์ํด ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ํธํ ํต์ ์ ํฉ๋๋ค.
kube-apiserver์ ์ฃผ์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โ๏ธ API ์์ฒญ์ ๊ด๋ฆฌ
โ๏ธ API ๊ฐ์ฒด ๊ฒ์ฆ
โ๏ธ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ authenticate & authorize
โ๏ธ ์ปจํธ๋กค ํ๋ ์ธ๊ณผ ์์ปค ๋ ธ๋ ์ปดํฌ๋ํธ๋ค ์ฌ์ด์์ ์์น ์กฐ์ ์ฒ๋ฆฌ
โ๏ธ ...
API ์๋ฒ๋ etcd์์๋ง ์๋ํฉ๋๋ค.
๋, ๋ด์ฅ๋ bastion API ์๋ฒ ํ๋ก์๋ฅผ ํฌํจํ๋๋ฐ, ์ด๋ฅผ ํตํด Cluster IP ์๋น์ค์ ๋ํ ์ธ๋ถ ์ก์ธ์ค๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
๐ etcd
etcd๋ key-value ๋ฐ์ดํฐ ์ ์ฅ์์
๋๋ค.
Kubernetes ํด๋ฌ์คํฐ์์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ํด ์ค๊ณ๋์๋๋ฐ,
๊ฐ๋ น Pod ๋ค์ด๋ ๊ฐ Pod๋ค์ ์ํ, ๊ทธ๋ฆฌ๊ณ Namespace ๋ค๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
๊ฐ๋จํ ๋งํ๋ฉด, ๋ง์ฝ kubectl์ ์ฌ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค ์ค๋ธ์ ํธ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ป์ผ๋ ค๊ณ ํ๋ค๋ฉด,
๋ฐ๋ก etcd์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋๋ค.
Kubernetes๋ ๋ถ์ฐํ ์์คํ
์ผ๋ก ๋ถ์ฐํ ํน์ฑ์ ์ง์ํ๋ etcd์ ๊ฐ์ ํจ์จ์ ์ธ ๋ถ์ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํฉ๋๋ค.
๋ฐฑ์๋ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌbackend service discovery ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญํ ์ ๋์์ ์ํํฉ๋๋ค.
Kubernetes ํด๋ฌ์คํฐ์ ๋๋ผ๊ณ ํ ์ ์์ต๋๋ค.
etcd๋ ๋ณด์์ ์ํด ์ค์ง API ์๋ฒ์์๋ง ์ ๊ทผํ ์ ์์ต๋๋ค.
etcd๋ ์ผ๊ด์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ์๊ฒฉํ๊ฒ ์งํค๊ธฐ ์ํด raft consensus algorithm ์ ์ฌ์ฉํฉ๋๋ค.
๊ณ ๊ฐ์ฉ์ฑ๊ณผ ๋
ธ๋ ์ฅ์ ์ ๊ฒฌ๋ ์ ์๋๋ก leader-member ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
๋ํ Pod๊ณผ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ฐฐํฌํ ๋๋ etcd
์์ ์ํธ๋ฆฌ๊ฐ ์์ฑ๋ฉ๋๋ค.
โ๏ธ Key-Value Data
etcd๋ gRPC๋ฅผ ์ด์ฉํ key-value API๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฐธ๊ณ ๋ก, gRPC ๊ฒ์ดํธ์จ์ด๋ ๋ชจ๋ HTTP API ํธ์ถ์ gRPC ๋ฉ์์ง๋ก ๋ณํํ๋ RESTful ํ๋ก์๋ก,
Kubernetes์ ์ด์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
Kubernetes ๊ฐ์ฒด์ ๋ชจ๋ ๊ตฌ์ฑ, ์ํ ๋ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
๋ฉํ๋ฐ์ดํฐ์๋ pods, secrets, daemonsets, deployments, configmaps, statefulsets ๋ฑ์ด ์์ต๋๋ค.
๋ชจ๋ ๊ฐ์ฒด๋ /registry
๋๋ ํ ๋ฆฌ key ์๋์ key-value ํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค์ Nginx๋ผ๋ ์ด๋ฆ์ Pod ์ ๋ณด๋ /registry/pods/default/nginx
์๋์ ์์ต๋๋ค
โ๏ธ Watch
Kubernetes์ api-server๋ etcd
์ watch ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ์ํ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค.
๋ ๊ตฌ์ฒด์ ์ผ๋ก๋, ํด๋ผ์ด์ธํธ๊ฐ Watch() API๋ฅผ ์ด์ฉํด ์ด๋ฒคํธ๋ฅผ subscribe ํ ์ ์๋๋ก ํด์ค๋๋ค.
Kube-api-server๋ etcd์ watch ๊ธฐ๋ฅ์ ์ด์ฉํด ๊ฐ์ฒด์ ์ํ ๋ณํ๋ฅผ ์ถ์ ํฉ๋๋ค.
Control Plane์์ ์ ์ผํ ๐ Statefulset ์ปดํฌ๋ํธ์ด๊ธฐ๋ ํฉ๋๋ค.
Statefulsets: Pod ์งํฉ์ Deployment์ Scaling์ ๊ด๋ฆฌํ๋ฉฐ, ํ๋๋ค์ ์์ ๋ฐ ๊ณ ์ ์ฑ์ ๋ณด์ฅ. ์ํ๋ฅผ ๊ฐ์ง ์ฑ์ ์ฌ์ฉ๋๋ API ๊ฐ์ฒด
๐ kube-scheduler
kube-scheduler๋ ์์ปค ๋ ธ๋์์ Kubernetes pod์ ์ค์ผ์ค๋ง์ ๋ด๋นํฉ๋๋ค.
ํ Pod๋ฅผ ๋ฐฐํฌํ ๋ CPU, memory, affinity, taints ๋ tolerations, priority, persistent volumes (PV) ๋ฑ๊ณผ ๊ฐ์ ํฌ๋ ์๊ตฌ ์ฌํญ์ ์ง์ ํฉ๋๋ค.
์ค์ผ์ค๋ฌ์ ์ฃผ๋ ์ญํ ์ ์์ฑ๋ ์์ฒญ์ ์๋ณํ๊ณ , ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ Pod๊ฐ ๋ฐฐ์น๋ ๊ฐ์ฅ ์ ํฉํ ๋
ธ๋๋ฅผ ์ ํํ๋ ๊ฒ์
๋๋ค.
๋ค์ ์ด๋ฏธ์ง๋ ์ค์ผ์ค๋ฌ ์๋ ๋ฐฉ์์ ๋ณด์ฌ์ค๋๋ค.
ํ๋์ Kubernetes ํด๋ฌ์ค ๋ด์๋ ํ๋ ์ด์์ ์์ปค ๋ ธ๋๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ๊ณผ์ฐ ์ด๋ป๊ฒ ์ค์ผ์ค๋ฌ๋ ๋ชจ๋ ์์ปค ๋ ธ๋๋ค ์ค์์ ํ๋๋ฅผ ์ง์ ํ ๊น์?
์ค์ผ์ค๋ฌ๋ Scheduling cycle๊ณผ Binding cycle ๋ ๋จ๊ณ๋ก ๋์ด ์๊ณ , ์ด๋ฅผ ๋์ ํฉ์ณ ์ค์ผ์ค๋ง ์ปจํ ์คํธ๋ผ๊ณ ํฉ๋๋ค.
scheduling cycle์ ์์ปค ๋ ธ๋๋ฅผ ์ ํํ๊ณ , binding cycle์ ๊ทธ ๋ณํ๋ฅผ ํด๋ฌ์คํฐ์ ์ ์ฉํฉ๋๋ค.
scheduling cycle์์๋ kube-scheduler๋ ์ต์ ์ ๋ ธ๋๋ฅผ ์ ํํ๊ธฐ ์ํด, filtering ๊ณผ scoring ์์ ์ ์ํํฉ๋๋ค.
binding cycle์์๋ binding ์ด๋ฒคํธ๋ฅผ ์์ฑํฉ๋๋ค.
1. Scheduling Cycle: Filtering
Pod๋ฅผ ์ค์ผ์คํ ์ ์๋ ๊ฐ์ฅ ์ ํฉํ ๋ ธ๋๋ฅผ ์ฐพ์ต๋๋ค.
์๋ฅผ ๋ค์ด, Pod๋ฅผ ์คํํ ์์์ด ์๋ ์์ปค ๋ ธ๋๊ฐ 5๊ฐ์ธ ๊ฒฝ์ฐ์๋ 5๊ฐ์ ๋ ธ๋๋ฅผ ๋ชจ๋ ์ ํํฉ๋๋ค.
๋ ธ๋๊ฐ ์์ผ๋ฉด pod๋ ์ค์ผ์ค์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ์ค์ผ์ค๋ง ํ scheduling queue ๋ก ์ด๋ํฉ๋๋ค.
๋๊ท๋ชจ์ ํด๋ฌ์คํฐ์ผ ๊ฒฝ์ฐ, 100๊ฐ์ ์์ปค ๋ ธ๋๊ฐ ์๋ค๊ณ ์น๋ฉด, ์ค์ผ์ค๋ฌ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ์ํํ์ง ์์ต๋๋ค.
round-robin ๋ฐฉ์์ผ๋ก ๋จผ์ 50% ์ด์์ ๋ ธ๋์ ๋ํด ์์ฐจ์ ์ผ๋ก ์กฐํiterate ํฉ๋๋ค.
50%๋ผ๊ณ ๋งํ ์ด์ ๋, percentageOfNodesToScore
๋ผ๋ ์ค์ผ์ค๋ฌ ๊ตฌ์ฑ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ์ฐธ๊ณ ํ๋ฉฐ,
๊ธฐ๋ณธ๊ฐ์ด ์ผ๋ฐ์ ์ผ๋ก 50%
์
๋๋ค.
์์ปค ๋ ธ๋๊ฐ ์ฌ๋ฌ ์์ญzone ์ ๋ถ์ฐ๋์ด ์์ผ๋ฉด, ์ค์ผ์ค๋ฌ๋ ๋ค๋ฅธ ์์ญzone ์ ๋ ธ๋๊น์ง ์์ฐจ์ ์ผ๋ก ์กฐํiterate ํฉ๋๋ค.
๋งค์ฐ ํฐ ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ์๋, percentageOfNodesToScore
์ ๊ธฐ๋ณธ๊ฐ์ 5%์
๋๋ค.
์ค์ผ์ค๋ฌ๋ ์ค์ผ์ค๋ง์ ์ํด ํญ์ ์ฐ์ ์์๊ฐ ๋์ pod๋ค์ ์ฐ์ ์์๊ฐ ๋ฎ์ pod๋ค๋ณด๋ค ๋จผ์ ๋ฐฐ์นํฉ๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋, pod๊ฐ ์ ํ๋ ๋ ธ๋์์ ์คํ๋๊ธฐ ์์ํ ํ์, pod๊ฐ ์ ๊ฑฐ๋๊ฑฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ค๋ก ์ด๋๋ ์ ์์ต๋๋ค.
ref. Pod ์ฐ์ ์์ ๊ฐ์ด๋
2. Scheduling Cycle: Scoring
์ค์ผ์ค๋ฌ๊ฐ ํํฐ๋ง๋ ์์ปค ๋ ธ๋๋ค์ ์ ์๋ฅผ ๋ถ์ฌํ์ฌ ๋ ธ๋๋ค์ ์์๋ฅผ ๋งค๊น๋๋ค.
์ค์ผ์ค๋ฌ๋ ์ฌ๋ฌ ์ค์ผ์ค๋ง ํ๋ฌ๊ทธ์ธ๋ค์ ํธ์ถํ์ฌ ์ค์ฝ์ด๋ง์ ํฉ๋๋ค.
๊ทธ์ค, ๊ฐ์ฅ ๋์ ์์๋ฅผ ๊ฐ์ง๋ ์์ปค ๋ ธ๋๊ฐ ํฌ๋ ์ค์ผ์ฅด๋ง์ ์ํด ์ ํ๋ฉ๋๋ค.
๋ง์ฝ ๋ชจ๋ ๋ ธ๋๋ค์ด ๋์ผํ ์์๋ฅผ ๊ฐ์ง๋ฉด, ํ ๋ ธ๋๊ฐ ์์๋ก ์ ํ๋ฉ๋๋ค.
3. Binding cycle: Binding Event
๋ ธ๋๊ฐ ์ ํ๋๋ฉด, ์ค์ผ์ค๋ฌ๋ API์๋ฒ์ binding ์ด๋ฒคํธ๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ binding ์ด๋ฒคํธ๋, pod์ node๋ฅผ bindingํ๋ ์ด๋ฒคํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ง์ ์ปค์คํ ํ ์ค์ผ์ค๋ฌ๋ฅผ ์์ฑํด์ ๊ธฐ๋ณธ ์ค์ผ์ค๋ฌ์ ํจ๊ป ๋ ์ค์ผ์ค๋ฌ๋ฅผ ํด๋ฌ์คํฐ ๋ด ๋์์ ์คํํ ์ ์์ต๋๋ค.
pod๋ฅผ ๋ฐฐํฌํ ๋๋ pod ๋งค๋ํ์คํธ์์ ์ฌ์ฉ์ ์ง์ ์ค์ผ์ค๋ฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์ ์ง์ ์ค์ผ์ค๋ฌ ๋ก์ง์ ๊ธฐ๋ฐ์ผ๋ก ์ค์ผ์ค๋ง ๊ฒฐ์ ์ด ๋ด๋ ค์ง๊ฒ ๋ฉ๋๋ค.
์ค์ผ์ค๋ฌ์ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฅํ ์ค์ผ์ค๋ง ํ๋ ์์ํฌ๊ฐ ์์ต๋๋ค.
์ฆ, ์ฌ์ฉ์ ์ง์ ํ๋ฌ๊ทธ์ธ์ ์ค์ผ์ค๋ง ์ํฌํ๋ก์ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๐ kube-controller-manager
Kube-controller-manager๋ ๋ชจ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ,
์ปจํธ๋กค๋ฌ๋ ํด๋ฌ์คํฐ๋ฅผ ์ํ๋ ์ํ๋ก ์ ์งํ๊ธฐ ์ํด ์ง์์ ์ผ๋ก ์๋ํฉ๋๋ค.
์ปค์คํ ํ ๋ฆฌ์์ค๋ฅผ ์ ์ํ์ฌ custom controllers๊ณผ ํจ๊ป ์ฌ์ฉํด์ kubernetes ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
์ปจํธ๋กค๋ฌ๋ ๋ฌดํํ ์ปจํธ๋กค ๋ฃจํ๋ฅผ ์คํํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก,
์ง์์ ์ผ๋ก ์คํ๋๋ฉด์ ์ํ๋ ๋ฌผ์ฒด์ ์ํ๋ฅผ ์ค์ ์ ๋น๊ตํ๋ฉฐ ๊ด์ฐฐํ๋ฉฐ ๋์ด ์ต๋ํ ๊ฐ๊น์์ง๋๋ก ์กฐ์ ํฉ๋๋ค.
๊ฐ ์ปจํธ๋กค๋ฌ๋ ํ์ฌ ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ํ๋ ์ํ์ ๊ฐ๊น๊ฒ ์ด๋ํ๋ ค๊ณ ํฉ๋๋ค.
Controller ?
๋ก๋ณดํฑ์ค(robotics)๋ ์๋ํ ์ฅ์น(automation)์์๋,
์ ์ด ๋ฃจํ control loop ๋ ์์คํ ์ ์ํ๋ฅผ ์กฐ์ ํ๊ธฐ ์ํด ๋ฌดํ ๋ฃจํ์ ๋๋ค.
์ ์ด ๋ฃจํ์ ์์๋ฅผ ๋ค์๋ฉด, '์จ๋ ์กฐ์ ๊ธฐ'๊ฐ ์์ต๋๋ค.
์จ๋๋ฅผ ์ค์ ํ๋ฉด ์จ๋ ์กฐ์ ๊ธฐ๋ ์ํ๋ ์ํ๋ฅผ ์๋ ค์ค๋๋ค.
์ค์ ์ค๋ด ์จ๋๋ ํ์ฌ ์ํ์ด๋ฉฐ,
์ด ํ์ฌ ์ํ๋ฅผ ์ํ๋ ์ํ์ ๊ฐ๊น๊ฒ ๋ง๋ค๋๋ก ์จ๋ ์กฐ์ ๊ธฐ๋ ์ฅ์น๋ฅผ ์ผ๊ฑฐ๋ ๋๋ ์ญํ ์ ํฉ๋๋ค.
−−
Kubernetes ์์ ์ปจํธ๋กค๋ฌ๋ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๊ด์ฐฐํ ๋ค์,
ํ์ํ ๊ณณ์ ๋ณ๊ฒฝ์ํค๊ฑฐ๋ ๋ณ๊ฒฝ์ ์์ฒญํ๋ ์ปจํธ๋กค ๋ฃจํ์ ๋๋ค.
๊ฐ ์ปจํธ๋กค๋ฌ๋ ํ์ฌ ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ํ๋ ์ํ์ ๊ฐ๊น์์ง๋๋ก ์กฐ์ ํฉ๋๋ค.
๊ฐ๋ น, ๋งค๋ํ์คํธ ํ์ผ (YAML) ์์ ์ํ๋ ์ํ๋ฅผ ์ง์ ํ๊ณ Deployment ๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค.
์ด ๋, ๋ ๊ฐ์ ๋ ํ๋ฆฌ์นด์ ๊ฐ๊ฐ ํ๋์ volume mount์ configmap ๋งต ๋ฑ์ ์ง์ ํฉ๋๋ค.
๋ด์ฅ๋ ๋ฐฐํฌ ์ปจํธ๋กค๋ฌ๋ ๋ฐฐํฌ๊ฐ ํญ์ ์ํ๋ ์ํ๋ก ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ฌ์ฉ์๊ฐ 5๊ฐ์ ๋ ํ๋ฆฌ์นด์ผ๋ก deployment ๋ฅผ ์
๋ฐ์ดํธํ๋ฉด,
๋ฐฐํฌ ์ปจํธ๋กค๋ฌ๊ฐ ์ํ๋ ์ํ์ธ 5๊ฐ์ ๋ ํ๋ฆฌ์นด๊ฐ ๋๋๋ก ํ์ธํ๊ณ ์กฐ์ ํฉ๋๋ค.
Kube-controller-manager๋ Kubernetes์ ๋ชจ๋ Controller๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
Kubernetes๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ ๊ฒ ์ค, ์ค์ํ Controller ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Node controller: ๋ ธ๋๊ฐ ๋ค์ด๋์์ ๋ ์ด๋ฅผ ์ธ์งํ๊ณ ์๋ตํ๋ ์ญํ
- Job Controller (Kubernetes Jobs): ์ผํ์ฑ ์์ ์ ๋ํ๋ด๋ ์์ ๊ฐ์ฒด๋ฅผ ๊ด์ฐฐํ ๋ค์, Pods๋ฅผ ์์ฑํ์ฌ ํด๋น ์์ ์ ์๋ฃํ๋๋ก ์คํ
- Endpoints controller: EndpointSlice ๊ฐ์ฒด๋ฅผ ์ฑ์ Populates (Service ๋ค๊ณผ Pod ๋ค ์ฌ์ด์ ๋งํฌ ์ ๊ณต)
- ServiceAccounts controller: ์๋ก์ด Namespace ์ ๋ํ ๊ธฐ๋ณธ ServiceAccounts๋ฅผ ์์ฑํฉ๋๋ค.
- Deployment controller
- Replicaset controller
- DaemonSet controller
- CronJob Controller
- Namespace controller
...
๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ ์ปจํธ๋กค๋ฌ๋ ๋ณ๊ฐ์ ํ๋ก์ธ์ค์ด์ง๋ง,
๋ณต์ก์ฑ์ ์ค์ด๊ธฐ ์ํด ๋ชจ๋ ํ๋์ ๋ฐ์ด๋๋ฆฌ๋ก ์ปดํ์ผ๋์ด ํ๋์ ํ๋ก์ธ์ค๋ก ์คํ๋ฉ๋๋ค.
๐ cloud-controller-manager
Cloud Controller Manager, CCM
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค ํ๋ ์ธ ์ปดํฌ๋ํธ ์ค ํ๋๋ก, ํด๋ผ์ฐ๋ ์ปจํธ๋กค ๋ก์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
Kubernetes๊ฐ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ฐฐํฌ๋๋ฉด cloud-controller-manager ๋
Cloud Platform API์ Kubernetes ํด๋ฌ์คํฐ ์ฌ์ด์ ๋ธ๋ฆฌ์ง ์ญํ ์ ํฉ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํต์ฌ ๊ตฌ์ฑ ์์๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์๋ํ ์ ์์ผ๋ฉฐ,
ํด๋ผ์ฐ๋ ๊ณต๊ธ์๊ฐ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค์ ํตํฉํ ์ ์์ต๋๋ค.
(์๋ฅผ ๋ค์ด, ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ AWS ํด๋ผ์ฐ๋ API ๊ฐ์ ์ธํฐํ์ด์ค)
ํด๋ผ์ฐ๋ ์ปจํธ๋กค๋ฌ ํตํฉ์ ํตํด Kubernetes ํด๋ฌ์คํฐ๋ instances (for nodes), Load Balancers (for services), and Storage Volumes (for persistent volumes)๊ณผ ๊ฐ์ ํด๋ผ์ฐ๋ ๋ฆฌ์์ค๋ฅผ ํ๋ก๋น์ ๋ํ ์ ์์ต๋๋ค.
์จํ๋ ๋ฏธ์ค ํ๊ฒฝ์์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์คํ์ํจ๋ค๋ฉด, ํด๋ฌ์คํฐ๋ cloud-controller-manager ๋ฅผ ๊ฐ์ง ์์ต๋๋ค.
kube-controller-manager์ ๋ง์ฐฌ๊ฐ์ง๋ก, cloud-controller-manager๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฌ๋ฌ๊ฐ์ ๋ ๋ฆฝ๋ ์ ์ด ๋ฃจํ๋ฅผ ํ๋์ ๋ฐ์ด๋๋ฆฌ๋ก ๊ฒฐํฉ์์ผ ํ๋์ ํ๋ก์ธ์ค๋ก ์คํ์ํต๋๋ค.
์ฑ๋ฅ์ ํฅ์์ํค๊ฑฐ๋ ์ฅ์ ๋ฅผ ๊ฒฌ๋ ์ ์๋๋กtolerate failures ํ๊ธฐ ์ํด, ์ํ ํ์ฅ(ํ๋ ์ด์์ ๋ณต์ฌ๋ณธ ์คํ ) ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ค์ ์ปจํธ๋กค๋ฌ๋ ํด๋ผ์ฐ๋ ํด๋ผ์ฐ๋ ์ ๊ณต์ dependency ๋ค์ ๊ฐ์ง ์ ์์ต๋๋ค:
โ๏ธ Node controller
์๋ต ์ค๋จ ํ, ํด๋ผ์ฐ๋์์ ๋ ธ๋๊ฐ ์ญ์ ๋์๋์ง ํ์ธํ๊ธฐ ์ํด ํด๋ผ์ฐ๋ ์ ๊ณต์๋ฅผ ํ์ธํฉ๋๋ค.
ํด๋ผ์ฐ๋ ์ ๊ณต์ API์ ๋ํํ์ฌ ๋ ธ๋ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
์๋ฅผ ๋ค์ด, node labeling & annotation, hostname ๊ฐ์ ธ์ค๊ธฐ, CPU & memory ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ, nodes health ๋ฑ
โ๏ธ Route controller
๊ธฐ๋ณธunderlying ํด๋ผ์ฐ๋ ์ธํ๋ผ์คํธ๋ญ์ฒ์์ Route๋ฅผ ์ค์ ํฉ๋๋ค.
ํด๋ผ์ฐ๋ ํ๋ซํผ์ ๋คํธ์ํฌ ๋ผ์ฐํ ์ ์ค์ ํ๋ ์ฑ ์์ ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ํตํด Pod๋ค์ด ์๋ก ํต์ ํ ์ ์์ต๋๋ค.
โ๏ธ Service controller
ํด๋ผ์ฐ๋ ์ ๊ณต์ ๋ก๋๋ฐธ๋ฐ์ ์์ฑ, ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ ํฉ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์๋น์ค๋ฅผ ์ํ ๋ก๋ ๋ฐธ๋ฐ์ ๋ฐฐํฌ๋ IP ์ฃผ์ ํ ๋น์ ์ฑ ์์ง๋๋ค.
์ ๋ฐ์ ์ผ๋ก Cloud Controller Manager๋ kubernetes๊ฐ ์ฌ์ฉํ๋ ํด๋ผ์ฐ๋๋ฅผ ์ํ ๋ฆฌ์์ค์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํฉ๋๋ค.
| Ref. |
๐ Kubernetes Architecture and Components with Diagram
๐ Kubernetes Architecture Explained
'BACKEND > Docker & Kubernetes' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kubernetes Deployment, ์ ๋๋ก ์ดํดํ๊ธฐ (0) | 2024.03.17 |
---|---|
Kubernetes Architecture, ์ ๋๋ก ์ดํดํ๊ธฐ (0) | 2024.03.03 |
Docker Swarm, ์ ๋๋ก ์ดํดํ๊ธฐ - Swarm & Service (2) | 2023.10.30 |
Docker, ์ ๋๋ก ์ฌ์ฉํ๊ธฐ - Commands (2) | 2023.10.17 |
Docker Network, ์ ๋๋ก ์ดํดํ๊ธฐ (2) (1) | 2022.02.15 |
Backend Software Engineer
๐๐ฎ๐ง ยท ๐๐ฎ๐๐ค๐ฃ๐๐จ๐ช๐ฃ ๐๐๐ง๐