
๐ค ChatGPT๊ฐ ๊ทธ๋ ค์ค K8S Component ๊ด๋ จ ์ด๋ฏธ์ง
๋จผ์ Kubernetes ํด๋ฌ์คํฐ์ ํฐ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด์.
โโโโโโโโโโโโโโโโโโโโโโโ Control Plane โโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ kube-apiserver โ
โ / | \ โ
โ / | \ โ
โ etcd scheduler controller-manager โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Kubernetes API
โผ
โโโโโโโโโโโโโโโโโโโโโโโ Worker Node โโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ kubelet โ
โ โ โ
โ โผ โ
โ Container Runtime โ
โ โ โ
โ โผ โ
โ Pod โ
โ โ
โ kube-proxy โ
โ Service Networking โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Control Plane์๋ ๋ํ์ ์ผ๋ก ๋ค์ ์ปดํฌ๋ํธ๊ฐ ์กด์ฌํ๋ค.
kube-apiserver
etcd
kube-scheduler
kube-controller-manager
Worker Node์์๋ ๋ํ์ ์ผ๋ก ๋ค์ ์ปดํฌ๋ํธ๊ฐ ๋์ํ๋ค.
kubelet
container runtime
kube-proxy
Kubernetes ๊ณต์ ๋ฌธ์์์๋ API Server, etcd, Scheduler, Controller Manager๋ฅผ Control Plane Component๋ก, kubelet๊ณผ kube-proxy ๋ฑ์ Node Component๋ก ๊ตฌ๋ถํ๋ค.
์ฒ์์๋ ๋ค์์ฒ๋ผ ์ดํดํ๋ฉด ์ฝ๋ค.
Control Plane์ ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ํ๋จํ๋ฉฐ, Worker Node๋ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ค.
์ด์ ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ํ๋์ฉ ์ดํด๋ณด์.
kube-apiserver๋ Kubernetes API๋ฅผ ์ ๊ณตํ๋ Control Plane Component๋ค.
Kubernetes ๊ณต์ ๋ฌธ์์์๋ API Server๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๋ค.
API Server๋ API Object์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ๊ตฌ์ฑํ๋ฉฐ REST ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
๋ํ Kubernetes์ shared state์ ์ ๊ทผํ๊ธฐ ์ํ frontend ์ญํ ์ ํ๋ฉฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ด ์ด๋ฅผ ํตํด ์ํธ์์ฉํ๋ค.
์ฝ๊ฒ ๋งํ๋ฉด,
Kubernetes ๋ด๋ถ์ ์ค์ ํต์ ์ฐฝ๊ตฌ
๋ผ๊ณ ๋ณผ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ๋ช ๋ น์ ์คํํ๋ค๊ณ ํ์.
kubectl apply -f deployment.yaml
kubectl์ด ์ง์ etcd์ ์ ๊ทผํด์ Deployment๋ฅผ ์ ์ฅํ์ง ์๋๋ค.
kubectl
โ
โผ
kube-apiserver
โ
โผ
etcd
์์ฒญ์ ๋จผ์ Kubernetes API Server๋ก ์ ๋ฌ๋๋ค.
API ์์ฒญ์ ์กฐ๊ธ ๋ ์ธ๋ถํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
Request
โ
โผ
Authentication
โ
โผ
Authorization
โ
โผ
Admission Control
โ
โผ
Validation
โ
โผ
Persist
๋๊ฐ ์์ฒญํ๋๊ฐ?
์ฌ์ฉ์ ๋๋ ServiceAccount ๋ฑ์ ์ ์์ ํ์ธํ๋ค.
์ด ์ฌ์ฉ์๊ฐ ํด๋น ์์ ์ ์ํํ ๊ถํ์ด ์๋๊ฐ?
RBAC ๊ฐ์ ๊ถํ ๊ด๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ์ฐ๊ฒฐ๋๋ค.
์ธ์ฆ๊ณผ ์ธ๊ฐ ์ดํ ์์ฒญ์ ์ถ๊ฐ์ ์ผ๋ก ๊ฒ์ฌํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ค.
๋ฐ๋ผ์ API Server๋ฅผ ๋จ์ํ "REST API ์๋ฒ"๋ผ๊ณ ๋ง ์ธ์ฐ๊ธฐ๋ณด๋ค๋ ๋ค์์ฒ๋ผ ์ดํดํ๋ ๊ฒ์ด ์ข๋ค.
Client
โ
โผ
kube-apiserver
โ
โโ Authentication
โโ Authorization
โโ Admission
โโ Validation
์ฌ๊ธฐ์ ์ค์ํ ์ ์ด ์๋ค.
kube-apiserver๋ Pod๋ฅผ ์ง์ ์คํํ์ง ์๋๋ค.
API Server์ ์ฑ ์์ ๋ค๋ฅธ Kubernetes Component๋ค์ด ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ์ฝ๊ณ ๋ณ๊ฒฝํ ์ ์๋๋ก API๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค. Kubernetes ๊ณต์ ๋ฌธ์์์๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ shared state์ ์ํธ์์ฉํ๋ frontend๋ผ๊ณ ์ค๋ช ํ๋ค.
kube-apiserver
= Kubernetes Cluster์ Front Door
etcd๋ Kubernetes๊ฐ ์ฌ์ฉํ๋ consistent and highly-available key-value store๋ค.
Kubernetes ๊ณต์ ๋ฌธ์๋ etcd๋ฅผ Kubernetes์ ๋ชจ๋ cluster data๋ฅผ ์ ์ฅํ๋ backing store๋ก ์ค๋ช ํ๋ค.
์ฆ, Kubernetes์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ๊น๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ Kubernetes Object์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ค.
Pod
Deployment
Service
ConfigMap
Secret
Node
Namespace
...
์ฐ๋ฆฌ๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ์ฌ์ฉํ ์ ์๋ ๊ฒ๋ ํด๋ฌ์คํฐ์ ์ํ๊ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
kubectl get pods
kubectl get deployments
kubectl get services
์ฌ๊ธฐ๊ฐ ์ค์ํ ํฌ์ธํธ๋ค.
์ผ๋ฐ์ ์ผ๋ก Scheduler, Controller Manager, kubelet ๊ฐ์ Kubernetes Component๋ API Server๋ฅผ ์ค์ฌ์ผ๋ก ํด๋ฌ์คํฐ ์ํ์ ์ํธ์์ฉํ๋ค.
kubectl โโโโโโโโโโโโโโ
โ
scheduler โโโโโโโโโโโโค
โ
controller-manager โโโผโโโถ kube-apiserver โโโโถ etcd
โ
kubelet โโโโโโโโโโโโโโค
โ
kube-proxy โโโโโโโโโโโ
ํนํ Kubernetes PKI ๋ฌธ์๋ฅผ ๋ณด๋ฉด Scheduler, Controller Manager, kubelet, kube-proxy ๋ฑ์ด API Server์ ํต์ ํ๊ธฐ ์ํ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์กฐ๋ฅผ ํ์ธํ ์ ์๋ค. ๋ฐ๋๋ก etcd์ ์ ๊ทผํ๊ธฐ ์ํ Client Certificate๋ API Server ์ธก์ ์กด์ฌํ๋ค.
๋ฐ๋ผ์ ์ํคํ ์ฒ๋ฅผ ๊ณต๋ถํ ๋๋ ์ฐ์ ๋ค์ ํ๋ฆ์ ๊ธฐ์ตํ๋ฉด ๋๋ค.
Component
โ
โผ
kube-apiserver
โ
โผ
etcd
etcd์๋ ํด๋ฌ์คํฐ ์ํ๊ฐ ์ ์ฅ๋๋ค.
๋ฐ๋ผ์ etcd ๋ฐ์ดํฐ๋ฅผ ์์ผ๋ฉด Kubernetes Object ์ํ ์ญ์ ์์ ์ ์๋ค.
Kubernetes ๊ณต์ ๋ฌธ์ ์ญ์ etcd๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ backup plan์ ๊ฐ๋ ๊ฒ์ ๊ฐํ๊ฒ ๊ถ์ฅํ๋ค.
๊ทธ๋์ CKA์์๋ etcd์ ๊ฐ๋ ๋ฟ ์๋๋ผ ๋ค์ ์์ ์ญ์ ์ค์ํ๋ค.
etcd snapshot save
etcd snapshot restore
etcd
= Kubernetes Cluster State Store
Kubernetes๋ฅผ ์ดํดํ๋ ํต์ฌ ๊ฐ๋ ์ค ํ๋๊ฐ Desired State๋ค.
์๋ฅผ ๋ค์ด Deployment๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค๊ณ ํ์.
spec:
replicas: 3
์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
Desired State
Pod = 3
ํ์ฌ Pod๋ 3๊ฐ๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์๋ค.
Desired : 3
Current : 3
๊ทธ๋ฐ๋ฐ Pod ํ๋๊ฐ ์ฌ๋ผ์ง๋ค๋ฉด?
Desired : 3
Current : 2
Desired State์ Current State ์ฌ์ด์ ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค.
์ด ์ฐจ์ด๋ฅผ ๊ฐ์งํด์ ํ์ฌ ์ํ๋ฅผ ์ํ๋ ์ํ์ ๊ฐ๊น๊ฒ ๋ง๋๋ ์ญํ ์ ์ํํ๋ ๊ฒ์ด Controller๋ค.
Kubernetes ๊ณต์ ๋ฌธ์์ ์ ์๊ฐ ์ด ๊ฐ๋ ์ ๋งค์ฐ ์ ์ค๋ช ํ๋ค.
Controller๋ ํด๋ฌ์คํฐ ์ํ๋ฅผ ๊ฐ์ํ๊ณ ํ์ํ ๋ณ๊ฒฝ์ ๋ง๋ค๊ฑฐ๋ ์์ฒญํ๋ control loop๋ค.
๊ฐ Controller๋ ํ์ฌ ์ํ๋ฅผ ์ํ๋ ์ํ์ ๋ ๊ฐ๊น๊ฒ ์ด๋์ํค๋ ค ํ๋ค.
์ด๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
Desired State
โ
โ compare
โผ
Current State
โ
โผ
Controller
โ
โผ
Reconcile
โ
โโโโโโโโโโโโโโโโโ
โ
๋ค์ ์ํ ํ์ธ
์ด๊ฒ์ด Kubernetes์์ ์์ฃผ ๋ฑ์ฅํ๋ Reconciliation Loop๋ค.
kube-controller-manager๋ผ๋ ์ด๋ฆ ๋๋ฌธ์ ํ๋์ Controller๋ผ๊ณ ์๊ฐํ๊ธฐ ์ฝ๋ค.
ํ์ง๋ง ์ค์ ๋ก๋ Kubernetes์ ํฌํจ๋ ์ฌ๋ฌ ํต์ฌ Control Loop๋ฅผ ํ๋์ ํ๋ก์ธ์ค์์ ์คํํ๋ค. ๊ณต์ ๋ฌธ์์์๋ Controller Manager๋ฅผ core control loops๋ฅผ ํฌํจํ๋ daemon์ด๋ผ๊ณ ์ค๋ช ํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ Controller๋ค์ด ์กด์ฌํ๋ค.
Node Controller
Job Controller
EndpointSlice Controller
ServiceAccount Controller
...
๋ ์ปดํฌ๋ํธ์ ์ญํ ์ ๊ตฌ๋ถํด๋ณด์.
Pod๊ฐ 3๊ฐ ์์ด์ผ ํ๋๋ฐ ํ์ฌ 2๊ฐ๋ฟ์ด๋ค.
Controller์ ์๊ฐ์ ๋ค์์ ๊ฐ๊น๋ค.
"Pod๊ฐ ํ๋ ๋ถ์กฑํ๋ค.
ํ๋๊ฐ ๋ ํ์ํ ์ํ๋ค."
์๋ก์ด Pod๊ฐ ๋ง๋ค์ด์ก๋ค.
์ด๋ฒ์๋ Scheduler๊ฐ ํ๋จํ๋ค.
"์ด Pod๋ Worker Node 2์ ๋ฐฐ์นํ์."
์ฆ,
Controller Manager
โ WHAT needs to happen
Scheduler
โ WHERE should it run
kube-controller-manager
= Desired State๋ก ์๋ ด์ํค๋ Control Loop ์งํฉ
Pod๊ฐ ๋ง๋ค์ด์ก๋ค๊ณ ๋ฐ๋ก Worker Node์์ ์คํ๋๋ ๊ฒ์ ์๋๋ค.
๋จผ์ ์ด๋ Node์์ ์คํํ ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
๊ทธ ์ญํ ์ ํ๋ ๊ฒ์ด kube-scheduler๋ค.
Kubernetes ๊ณต์ ๋ฌธ์๋ Scheduling์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ๋ค.
Pod๋ฅผ Node์ ์ฐ๊ฒฐํด kubelet์ด ์คํํ ์ ์๋๋ก ํ๋ ๊ณผ์ ์ด๋ค.
Scheduler๋ Scheduling Queue์ ์๋ Pod๋ง๋ค ๋ฐฐ์น ๊ฐ๋ฅํ Node๋ฅผ ์ฐพ๋๋ค. ์ด๋ Pod์ ์ ์ฝ ์กฐ๊ฑด๊ณผ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค ๋ฑ์ ๊ณ ๋ คํ๋ค.
Pod
โ
โผ
kube-scheduler
โ
โโโโโโโโโโโผโโโโโโโโโโ
โผ โผ โผ
Node A Node B Node C
X O O
โ
โผ
Node B
CKA์์ ํนํ ๋ค์ ์์๋ค์ Scheduling๊ณผ ์ฐ๊ฒฐํด์ ์์๋ ํ์๊ฐ ์๋ค.
resources:
requests:
cpu: 500m
memory: 256Mi
Node๊ฐ Pod์ Resource Request๋ฅผ ์์ฉํ ์ ์์ด์ผ ํ๋ค.
nodeSelector:
disktype: ssd
ํน์ Label์ ๊ฐ์ง Node๋ฅผ ์ ํํ๋๋ก ์ ํํ๋ค.
Node Label ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ค์ํ ๋ฐฐ์น ์กฐ๊ฑด์ ํํํ ์ ์๋ค.
ํน์ Pod์ ๊ฐ๊น์ด ๋ฐฐ์นํ๊ฑฐ๋ ์๋ก ๋จ์ด๋จ๋ ค ๋ฐฐ์นํ ์ ์๋ค.
Scheduler๋ ์๋ก์ด Pod๋ฅผ Schedulingํ ๋ Pod์ Affinity / Anti-Affinity Rule์ ํ์ฌ Cluster State์ ํจ๊ป ํ๊ฐํ๋ค.
ํน์ Node์์ ์ผ๋ฐ์ ์ธ Pod๊ฐ Scheduling๋์ง ์๋๋ก ์ ํํ ์ ์๋ค.
๊ณต์ ๋ฌธ์์์๋ Scheduler๊ฐ Taint๋ฅผ ํ์ธํ๋ฉฐ, matching Toleration์ ๊ฐ์ง Pod๊ฐ ํด๋น Node์ Scheduling๋ ์ ์๋ค๊ณ ์ค๋ช ํ๋ค.
Scheduler๊ฐ ํ๋ ์ผ์ ๋ค์๊น์ง๋ค.
Pod
โ
โโโโโโถ Worker Node 2
์ฆ Placement๋ฅผ ๊ฒฐ์ ํ๋ค.
์ค์ ๋ก Worker Node์์ Pod ์คํ์ ๋ด๋นํ๋ ๊ฒ์ kubelet์ด๋ค.
Scheduler = WHERE
kubelet = RUN
kubelet์ ๊ฐ Node์์ ๋์ํ๋ค.
Kubernetes ๊ณต์ ๋ฌธ์์์๋ kubelet์ ๋งค์ฐ ๋ช ํํ๊ฒ ์ ์ํ๋ค.
kubelet์ ๊ฐ Node์์ ์คํ๋๋ primary node agent๋ค.
Scheduler๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ์ ํ๋ค๊ณ ํ์.
nginx-pod
โ
โผ
worker-node-2
์ด์ Worker Node 2์์ ๋๊ตฐ๊ฐ ์ค์ Pod๋ฅผ ์คํ์์ผ์ผ ํ๋ค.
๊ทธ ์ญํ ์ ๋ด๋นํ๋ ๊ฒ์ด kubelet์ด๋ค.
kube-apiserver
โ
โผ
kubelet
โ
โผ
Container Runtime
โ
โผ
Pod
์กฐ๊ธ ๋ ์ ํํ๊ฒ ๋ณด๋ฉด kubelet์ Container Runtime์ ์ด์ฉํ๋ค.
๋ํ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ Runtime์ด ์๋ค.
containerd
CRI-O
๊ทธ๋ฆฌ๊ณ kubelet๊ณผ Container Runtime ์ฌ์ด์๋ CRI(Container Runtime Interface)๊ฐ ์กด์ฌํ๋ค.
Kubernetes ๊ณต์ ๋ฌธ์์์๋ CRI๋ฅผ kubelet๊ณผ Container Runtime ์ฌ์ด์ ์ฃผ์ ํต์ ํ๋กํ ์ฝ๋ก ์ค๋ช ํ๋ค. ๋ํ CRI๋ฅผ ํตํด kubelet์ด ๋ค์ํ Container Runtime์ ์ฌ์ฉํ ์ ์๋ค.
kubelet
โ
โ CRI
โผ
Container Runtime
โ
โผ
Container
CKA์์ Node ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ๋ค๋ฉด kubelet์ ์ค์ํ ํ์ธ ๋์์ด๋ค.
์๋ฅผ ๋ค์ด kubelet ์ํ๋ฅผ ํ์ธํ ์ ์๋ค.
systemctl status kubelet
๋ก๊ทธ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ธํ ์ ์๋ค.
journalctl -u kubelet
kubelet์ Node์ ํต์ฌ Agent์ด๊ธฐ ๋๋ฌธ์ kubelet์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น Node์์ Pod Lifecycle ๊ด๋ฆฌ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
kubelet
= Node์์ Pod ์คํ์ ์ฑ
์์ง๋ Agent
Pod์๋ ๊ฐ๊ฐ IP๊ฐ ์กด์ฌํ๋ค.
ํ์ง๋ง Pod๋ ์์ฑ๋๊ณ ์ญ์ ๋๋ฉฐ ๋ค์ ์์ฑ๋ ๊ฒฝ์ฐ ์ฃผ์๋ ๋ฌ๋ผ์ง ์ ์๋ค.
๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ๋ณ Pod IP๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ ํฉํ์ง ์๋ค.
Kubernetes์์๋ ์ด๋ฅผ ์ํด Service๋ผ๋ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ค.
Service
โ
โโโโโโโโโโโโผโโโโโโโโโโโ
โผ โผ โผ
Pod A Pod B Pod C
์ ํต์ ์ธ Kubernetes ๊ตฌ์ฑ์์ Service์ Virtual IP ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ๋ ํต์ฌ ์ปดํฌ๋ํธ๊ฐ kube-proxy๋ค.
Kubernetes ๊ณต์ ๋ฌธ์๋ kube-proxy๋ฅผ ๊ฐ Node์์ ์คํ๋๋ Kubernetes Network Proxy๋ก ์ค๋ช ํ๋ค. ๋ํ Kubernetes API์ ์ ์๋ Service๋ฅผ Node์ ๋ฐ์ํ๋ค.
Service Networking ๊ด๋ จ ๊ณต์ ๋ฌธ์์์๋ ๋ ๋ช ํํ๊ฒ,
ExternalName์ ์ ์ธํ Service์ Virtual IP ๋ฉ์ปค๋์ฆ ๊ตฌํ์ kube-proxy๊ฐ ๋ด๋นํ๋ค.
๊ณ ์ค๋ช ํ๋ค.
์ด๋ฆ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋ ์ฌ๋ฆฌ๊ธฐ ์ฝ๋ค.
Packet
โ
โผ
kube-proxy process
โ
โผ
Pod
ํ์ง๋ง kube-proxy์ ํต์ฌ์ ์ด๊ฒ๋ณด๋ค Service๋ฅผ ๊ตฌํํ๊ธฐ ์ํ Node์ Packet Forwarding Rule์ ๊ด๋ฆฌํ๋ค๋ ๋ฐ ์๋ค.
๊ฐ kube-proxy Instance๋ Kubernetes Control Plane์์ Service์ EndpointSlice์ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ๋ฅผ ๊ฐ์ํ๋ค.
๊ฐ๋ ์ ์ผ๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
Service
โ
โผ
kube-proxy
โ
โ network rule ๊ตฌ์ฑ
โผ
Node Networking
โ
โผ
Backend Pod
๋ฐ๋ผ์ kube-proxy๋ฅผ ๊ณต๋ถํ ๋๋ ๋ค์์ฒ๋ผ ๊ธฐ์ตํ๋ ๊ฒ์ด ๋ ์ ํํ๋ค.
kube-proxy
= Service์ Virtual IP / Traffic Forwarding ๊ตฌํ
์ด์ ์ฌ์ฏ ์ปดํฌ๋ํธ๋ฅผ ํ๋์ ํ๋ฆ์ผ๋ก ์ฐ๊ฒฐํด๋ณด์.
๋ค์ ๋ช ๋ น์ ์คํํ๋ค๊ณ ๊ฐ์ ํ๋ค.
kubectl apply -f deployment.yaml
๊ทธ๋ฆฌ๊ณ Deployment์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ๋์ด ์๋ค.
spec:
replicas: 3
์ฌ์ฉ์์ ์์ฒญ์ด Kubernetes API Server๋ก ์ ๋ฌ๋๋ค.
kubectl
โ
โผ
kube-apiserver
API Server๋ Kubernetes API์ Frontend๋ก์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
kube-apiserver
โ
โผ
etcd
etcd๋ Kubernetes Cluster Data๋ฅผ ์ ์ฅํ๋ backing store๋ค.
์ฌ์ฉ์๋ ๋ค์ ์ํ๋ฅผ ์ํ๋ค.
Desired Pod = 3
ํ์ฌ Pod๊ฐ ์๋ค๋ฉด Controller๊ฐ ์ฐจ์ด๋ฅผ ๋ฐ๊ฒฌํ๋ค.
Desired : 3
Current : 0
Controller๋ Current State๊ฐ Desired State์ ๊ฐ๊น์์ง๋๋ก ํ์ํ ๋ณ๊ฒฝ์ ์์ฒญํ๋ค.
๊ฐ๋ ์ ์ผ๋ก๋ ๋ค์ ๊ณผ์ ์ด ๋ฐ์ํ๋ค.
Deployment
โ
โผ
ReplicaSet
โ
โผ
Pod
์์ฑ๋ Pod๋ ์ด๋ Node์์ ์คํ๋ ์ง ๊ฒฐ์ ๋์ด์ผ ํ๋ค.
Pod
โ
โผ
Scheduler
โ
โโโ Node A
โโโ Node B โ ์ ํ
โโโ Node C
Scheduler๋ Pod์ ์กฐ๊ฑด๊ณผ Node์ ๊ฐ์ฉ Resource ๋ฑ์ ๋ฐํ์ผ๋ก ์ ์ ํ Node๋ฅผ ๊ฒฐ์ ํ๋ค.
Node๊ฐ ๊ฒฐ์ ๋๋ฉด ํด๋น Node์ kubelet์ด Pod ์คํ์ ๋ด๋นํ๋ค.
API Server
โ
โผ
kubelet
โ
โผ
Container Runtime
โ
โผ
Pod
kubelet์ Node Agent์ด๋ฉฐ Container Runtime๊ณผ CRI๋ฅผ ํตํด ์ํธ์์ฉํ๋ค.
Service๊ฐ ์์ฑ๋์ด ์๋ค๋ฉด kube-proxy๋ Service์ EndpointSlice ์ ๋ณด๋ฅผ ๊ฐ์ํ๊ณ Service Virtual IP๊ฐ Backend๋ก ์ฐ๊ฒฐ๋ ์ ์๋๋ก ํ์ํ ๋คํธ์ํฌ ๋์์ ๊ตฌํํ๋ค.
Client
โ
โผ
Service
โ
โผ
kube-proxy๊ฐ ๊ด๋ฆฌํ๋
Network Rules
โ
โผ
Pod
kubectl
โ
โผ
โโโโโโโโโโโโโโโโ
โ kube-apiserverโ
โโโโโโโโโฌโโโโโโโ
โ
โโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
etcd Controller Scheduler
State ์ ์ฅ Reconcile Placement
โ
โผ
Worker Node
โ
โผ
kubelet
โ
CRI
โ
โผ
Container Runtime
โ
โผ
Pod
Service๊ฐ ์กด์ฌํ๋ฉด
kube-proxy
โ
โผ
Service Networking
์ด ๊ตฌ์กฐ์์ ์ค์ํ ๊ฒ์ ๊ฐ๊ฐ์ ์ฑ ์์ ๊ตฌ๋ถํ๋ ๊ฒ์ด๋ค.
kube-apiserver
โ ์์ฒญ๊ณผ ์ํ ์ ๊ทผ์ ์ค์ฌ
etcd
โ ์ํ ์ ์ฅ
kube-controller-manager
โ Desired State๋ก ์๋ ด
kube-scheduler
โ Node ์ ํ
kubelet
โ Node์์ Pod ์คํ
kube-proxy
โ Service Networking
| Component | ํต์ฌ ์ง๋ฌธ | ์ญํ |
|---|---|---|
| kube-apiserver | ํด๋ฌ์คํฐ์ ์ด๋ป๊ฒ ์ ๊ทผํ๋๊ฐ? | Kubernetes API |
| etcd | ์ํ๋ฅผ ์ด๋์ ์ ์ฅํ๋๊ฐ? | Cluster State |
| controller-manager | ํ์ํ ์ํ๋ ๋ฌด์์ธ๊ฐ? | Reconciliation |
| scheduler | ์ด๋์์ ์คํํ ๊น? | Pod Placement |
| kubelet | ์ค์ ๋ก ์ด๋ป๊ฒ ์คํํ ๊น? | Pod Lifecycle |
| kube-proxy | Service ํธ๋ํฝ์ ์ด๋ป๊ฒ ์ ๋ฌํ ๊น? | Service Networking |
ํนํ ๋ค์ ์ธ ๊ฐ์ง๋ ํ์คํ๊ฒ ๊ตฌ๋ถํ์.
Controller
"Pod๊ฐ ํ๋ ๋ ํ์ํ๋ค."
Scheduler
"๊ทธ Pod๋ Node B์์ ์คํํ์."
kubelet
"Node B์์ ๊ทธ Pod๋ฅผ ์ค์ ๋ก ์คํํ๊ฒ ๋ค."
์ปดํฌ๋ํธ ์ฌ์ฏ ๊ฐ๋ฅผ ๊ณต๋ถํ์ง๋ง Kubernetes์ ๋์ ์๋ฆฌ๋ ๊ฒฐ๊ตญ ํ๋์ ํ๋ฆ์ผ๋ก ์ ๋ฆฌํ ์ ์๋ค.
Desired State
โ
โผ
Current State ๊ด์ฐฐ
โ
โผ
์ฐจ์ด ํ์ธ
โ
โผ
Reconcile
โ
โผ
Desired State์ ๊ฐ๊น์์ง
โ
โโโโโโโโโ ๋ค์ ๊ด์ฐฐ
Kubernetes ๊ณต์ ๋ฌธ์ ์ญ์ Controller๋ฅผ ํ์ฌ Cluster State๋ฅผ Desired State์ ๊ฐ๊น๊ฒ ์์ง์ด๋ Control Loop๋ก ์ค๋ช ํ๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํ๋ค๋ฉด,
replicas: 3
Kubernetes์์ ์ค์ํ ๊ฒ์ ๋จ์ํ "Pod ์ธ ๊ฐ๋ฅผ ์์ฑํ๋ค"๊ฐ ์๋๋ค.
ํ์ฌ Pod๊ฐ ๋ ๊ฐ๊ฐ ๋์๋ค๋ฉด ๋ค์ ์ธ ๊ฐ๋ก ๋ง๋ค๊ณ ,
Desired : 3
Current : 2
๋ค์ ์ธ ๊ฐ๊ฐ ๋๋ฉด ์๋ฌด๊ฒ๋ ํ์ง ์๋ ์์ผ๋ก,
Observe
โ
Compare
โ
Reconcile
โ
Observe
์ด ๊ณผ์ ์ ๊ณ์ ๋ฐ๋ณตํ๋ค.
๊ทธ๋์ Kubernetes Architecture๋ฅผ ์ดํดํ ๋๋ ์ปดํฌ๋ํธ ์ด๋ฆ์ ์ธ์ฐ๋ ๊ฒ๋ณด๋ค,
๋๊ฐ ์ํ๋ฅผ ์ ์ฅํ๊ณ , ๋๊ฐ ์ํ๋ฅผ ๊ด์ฐฐํ๊ณ , ๋๊ฐ ๋ฐฐ์น๋ฅผ ๊ฒฐ์ ํ๊ณ , ๋๊ฐ ์ค์ ๋ก ์คํํ๋๊ฐ
๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ ๋๋ฉด ์ดํ ๋ฐฐ์ฐ๊ฒ ๋๋ Deployment, ReplicaSet, DaemonSet, StatefulSet, Scheduling, HPA ๊ฐ์ ๊ฐ๋ ๋ ํ๋์ ํ๋ฆ ์์์ ์ดํดํ ์ ์๋ค.
๋ง์ง๋ง์ผ๋ก ์ํ์ฉ์ผ๋ก ๊ฐ์ฅ ์์ถํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
kube-apiserver = API
etcd = State
kube-controller-manager = Reconcile
kube-scheduler = Placement
kubelet = Execution
kube-proxy = Service Network
๊ทธ๋ฆฌ๊ณ Pod ์์ฑ ํ๋ฆ์ ๋ค์ ์์๋ก ๊ธฐ์ตํ๋ค.
kubectl
โ
API Server
โ
etcd
โ
Controller
โ
Scheduler
โ
kubelet
โ
Container Runtime
โ
Pod
๋จ, ์ด ๊ทธ๋ฆผ์ ์ปดํฌ๋ํธ์ ์ญํ ์ ์ดํดํ๊ธฐ ์ํ ๋ ผ๋ฆฌ์ ์ธ ํ๋ฆ์ด๋ค. Kubernetes์ ์ค์ ๋ด๋ถ ๋์์ด ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์์์ ์๋๋ก ์ง์ ํธ์ถ๋๋ ํ๋์ ๋๊ธฐ์ ํ์ดํ๋ผ์ธ์ด๋ผ๋ ์๋ฏธ๋ ์๋๋ค. Controller, Scheduler, kubelet ๋ฑ์ API Server๋ฅผ ํตํด ํด๋ฌ์คํฐ ์ํ๋ฅผ ๊ด์ฐฐํ๊ณ ๊ฐ์์ Control Loop์ ๋ฐ๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ค.