Kubernetes : ETCD, Kube-ApiServer, Kube-Controller-Manager, Kube-Scheduler, Kubelet, Kube-Proxy

mizuยท2026๋…„ 8์›” 18์ผ

K8S

๋ชฉ๋ก ๋ณด๊ธฐ
3/11

๐Ÿค– ChatGPT๊ฐ€ ๊ทธ๋ ค์ค€ K8S Component ๊ด€๋ จ ์ด๋ฏธ์ง€


1. Kubernetes Cluster Architecture

๋จผ์ € 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๋Š” ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•œ๋‹ค.

์ด์ œ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž.


2. kube-apiserver

Kubernetes์˜ ๋ชจ๋“  ์š”์ฒญ์ด ๋ชจ์ด๋Š” ์ค‘์•™ ์ธํ„ฐํŽ˜์ด์Šค

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 ์š”์ฒญ์€ ๋ฐ”๋กœ ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค

API ์š”์ฒญ์„ ์กฐ๊ธˆ ๋” ์„ธ๋ถ„ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

Request
   โ”‚
   โ–ผ
Authentication
   โ”‚
   โ–ผ
Authorization
   โ”‚
   โ–ผ
Admission Control
   โ”‚
   โ–ผ
Validation
   โ”‚
   โ–ผ
Persist

Authentication

๋ˆ„๊ฐ€ ์š”์ฒญํ–ˆ๋Š”๊ฐ€?

์‚ฌ์šฉ์ž ๋˜๋Š” ServiceAccount ๋“ฑ์˜ ์‹ ์›์„ ํ™•์ธํ•œ๋‹ค.

Authorization

์ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”๊ฐ€?

RBAC ๊ฐ™์€ ๊ถŒํ•œ ๊ด€๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐ๋œ๋‹ค.

Admission Control

์ธ์ฆ๊ณผ ์ธ๊ฐ€ ์ดํ›„ ์š”์ฒญ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•œ๋‹ค.

๋”ฐ๋ผ์„œ API Server๋ฅผ ๋‹จ์ˆœํžˆ "REST API ์„œ๋ฒ„"๋ผ๊ณ ๋งŒ ์™ธ์šฐ๊ธฐ๋ณด๋‹ค๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Client
   โ”‚
   โ–ผ
kube-apiserver
   โ”‚
   โ”œโ”€ Authentication
   โ”œโ”€ Authorization
   โ”œโ”€ Admission
   โ””โ”€ Validation

API Server๊ฐ€ Pod๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์ด ์žˆ๋‹ค.

kube-apiserver๋Š” Pod๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

API Server์˜ ์ฑ…์ž„์€ ๋‹ค๋ฅธ Kubernetes Component๋“ค์ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ฝ๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Kubernetes ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ shared state์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” frontend๋ผ๊ณ  ์„ค๋ช…ํ•œ๋‹ค.

ํ•œ ์ค„ ์ •๋ฆฌ

kube-apiserver
= Kubernetes Cluster์˜ Front Door

3. etcd

Kubernetes Cluster State๋ฅผ ์ €์žฅํ•˜๋Š” Key-Value Store

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

๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์ด etcd์— ์ง์ ‘ ์ ‘๊ทผํ• ๊นŒ?

์—ฌ๊ธฐ๊ฐ€ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ 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 Backup์ด ์ค‘์š”ํ• ๊นŒ?

etcd์—๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

๋”ฐ๋ผ์„œ etcd ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ์œผ๋ฉด Kubernetes Object ์ƒํƒœ ์—ญ์‹œ ์žƒ์„ ์ˆ˜ ์žˆ๋‹ค.

Kubernetes ๊ณต์‹ ๋ฌธ์„œ ์—ญ์‹œ etcd๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ backup plan์„ ๊ฐ–๋Š” ๊ฒƒ์„ ๊ฐ•ํ•˜๊ฒŒ ๊ถŒ์žฅํ•œ๋‹ค.

๊ทธ๋ž˜์„œ CKA์—์„œ๋Š” etcd์˜ ๊ฐœ๋…๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค์Œ ์ž‘์—… ์—ญ์‹œ ์ค‘์š”ํ•˜๋‹ค.

etcd snapshot save
etcd snapshot restore

ํ•œ ์ค„ ์ •๋ฆฌ

etcd
= Kubernetes Cluster State Store

4. kube-controller-manager

Current State๋ฅผ Desired State์— ๋งž์ถ˜๋‹ค

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๋‹ค.


Controller Manager๋Š” Controller ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋‹ค

kube-controller-manager๋ผ๋Š” ์ด๋ฆ„ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ Controller๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฝ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” Kubernetes์— ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ํ•ต์‹ฌ Control Loop๋ฅผ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰ํ•œ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ Controller Manager๋ฅผ core control loops๋ฅผ ํฌํ•จํ•˜๋Š” daemon์ด๋ผ๊ณ  ์„ค๋ช…ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ Controller๋“ค์ด ์กด์žฌํ•œ๋‹ค.

Node Controller
Job Controller
EndpointSlice Controller
ServiceAccount Controller
...

Controller์™€ Scheduler์˜ ์ฐจ์ด

๋‘ ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์„ ๊ตฌ๋ถ„ํ•ด๋ณด์ž.

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 ์ง‘ํ•ฉ

5. kube-scheduler

Pod๋ฅผ ์–ด๋А Node์—์„œ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค

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

Scheduler๋Š” ์–ด๋–ค ์กฐ๊ฑด์„ ๋ณผ๊นŒ?

CKA์—์„œ ํŠนํžˆ ๋‹ค์Œ ์š”์†Œ๋“ค์„ Scheduling๊ณผ ์—ฐ๊ฒฐํ•ด์„œ ์•Œ์•„๋‘˜ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

Resource Requests

resources:
  requests:
    cpu: 500m
    memory: 256Mi

Node๊ฐ€ Pod์˜ Resource Request๋ฅผ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

nodeSelector

nodeSelector:
  disktype: ssd

ํŠน์ • Label์„ ๊ฐ€์ง„ Node๋ฅผ ์„ ํƒํ•˜๋„๋ก ์ œํ•œํ•œ๋‹ค.

Node Affinity

Node Label ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋” ๋‹ค์–‘ํ•œ ๋ฐฐ์น˜ ์กฐ๊ฑด์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Pod Affinity / Anti-Affinity

ํŠน์ • Pod์™€ ๊ฐ€๊นŒ์ด ๋ฐฐ์น˜ํ•˜๊ฑฐ๋‚˜ ์„œ๋กœ ๋–จ์–ด๋œจ๋ ค ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

Scheduler๋Š” ์ƒˆ๋กœ์šด Pod๋ฅผ Schedulingํ•  ๋•Œ Pod์˜ Affinity / Anti-Affinity Rule์„ ํ˜„์žฌ Cluster State์™€ ํ•จ๊ป˜ ํ‰๊ฐ€ํ•œ๋‹ค.

Taints / Tolerations

ํŠน์ • Node์—์„œ ์ผ๋ฐ˜์ ์ธ Pod๊ฐ€ Scheduling๋˜์ง€ ์•Š๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ Scheduler๊ฐ€ Taint๋ฅผ ํ™•์ธํ•˜๋ฉฐ, matching Toleration์„ ๊ฐ€์ง„ Pod๊ฐ€ ํ•ด๋‹น Node์— Scheduling๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์„ค๋ช…ํ•œ๋‹ค.


Scheduler๊ฐ€ Pod๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค

Scheduler๊ฐ€ ํ•˜๋Š” ์ผ์€ ๋‹ค์Œ๊นŒ์ง€๋‹ค.

Pod
 โ”‚
 โ””โ”€โ”€โ”€โ”€โ–ถ Worker Node 2

์ฆ‰ Placement๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

์‹ค์ œ๋กœ Worker Node์—์„œ Pod ์‹คํ–‰์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์€ kubelet์ด๋‹ค.

ํ•œ ์ค„ ์ •๋ฆฌ

Scheduler = WHERE

kubelet   = RUN

6. kubelet

Worker Node์˜ Agent

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๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค

์กฐ๊ธˆ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๋ณด๋ฉด 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 Troubleshooting๊ณผ kubelet

CKA์—์„œ Node ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ๋‹ค๋ฉด kubelet์€ ์ค‘์š”ํ•œ ํ™•์ธ ๋Œ€์ƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด kubelet ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

systemctl status kubelet

๋กœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

journalctl -u kubelet

kubelet์€ Node์˜ ํ•ต์‹ฌ Agent์ด๊ธฐ ๋•Œ๋ฌธ์— kubelet์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น Node์—์„œ Pod Lifecycle ๊ด€๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

ํ•œ ์ค„ ์ •๋ฆฌ

kubelet
= Node์—์„œ Pod ์‹คํ–‰์„ ์ฑ…์ž„์ง€๋Š” Agent

7. kube-proxy

Service Networking์„ ๊ตฌํ˜„ํ•œ๋‹ค

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๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

๊ณ  ์„ค๋ช…ํ•œ๋‹ค.


kube-proxy๊ฐ€ ๋ชจ๋“  Packet์„ ์ง์ ‘ 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 ๊ตฌํ˜„

8. ํ•˜๋‚˜์˜ Pod๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณผ์ •

์ด์ œ ์—ฌ์„ฏ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜์˜ ํ๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐํ•ด๋ณด์ž.

๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

kubectl apply -f deployment.yaml

๊ทธ๋ฆฌ๊ณ  Deployment์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

spec:
  replicas: 3

Step 1. kubectl โ†’ kube-apiserver

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด Kubernetes API Server๋กœ ์ „๋‹ฌ๋œ๋‹ค.

kubectl
   โ”‚
   โ–ผ
kube-apiserver

API Server๋Š” Kubernetes API์˜ Frontend๋กœ์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.


Step 2. API Object์˜ ์ƒํƒœ๊ฐ€ etcd์— ์ €์žฅ๋œ๋‹ค

kube-apiserver
      โ”‚
      โ–ผ
     etcd

etcd๋Š” Kubernetes Cluster Data๋ฅผ ์ €์žฅํ•˜๋Š” backing store๋‹ค.


Step 3. Controller๊ฐ€ Desired State๋ฅผ ๋งž์ถ˜๋‹ค

์‚ฌ์šฉ์ž๋Š” ๋‹ค์Œ ์ƒํƒœ๋ฅผ ์›ํ•œ๋‹ค.

Desired Pod = 3

ํ˜„์žฌ Pod๊ฐ€ ์—†๋‹ค๋ฉด Controller๊ฐ€ ์ฐจ์ด๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค.

Desired : 3
Current : 0

Controller๋Š” Current State๊ฐ€ Desired State์— ๊ฐ€๊นŒ์›Œ์ง€๋„๋ก ํ•„์š”ํ•œ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•œ๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ๋Š” ๋‹ค์Œ ๊ณผ์ •์ด ๋ฐœ์ƒํ•œ๋‹ค.

Deployment
    โ”‚
    โ–ผ
ReplicaSet
    โ”‚
    โ–ผ
Pod

Step 4. Scheduler๊ฐ€ Node๋ฅผ ์„ ํƒํ•œ๋‹ค

์ƒ์„ฑ๋œ Pod๋Š” ์–ด๋А Node์—์„œ ์‹คํ–‰๋ ์ง€ ๊ฒฐ์ •๋˜์–ด์•ผ ํ•œ๋‹ค.

Pod
 โ”‚
 โ–ผ
Scheduler
 โ”‚
 โ”œโ”€โ”€ Node A
 โ”œโ”€โ”€ Node B  โ† ์„ ํƒ
 โ””โ”€โ”€ Node C

Scheduler๋Š” Pod์˜ ์กฐ๊ฑด๊ณผ Node์˜ ๊ฐ€์šฉ Resource ๋“ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ ์ ˆํ•œ Node๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.


Step 5. kubelet์ด Pod๋ฅผ ์‹คํ–‰ํ•œ๋‹ค

Node๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด ํ•ด๋‹น Node์˜ kubelet์ด Pod ์‹คํ–‰์„ ๋‹ด๋‹นํ•œ๋‹ค.

API Server
    โ”‚
    โ–ผ
 kubelet
    โ”‚
    โ–ผ
Container Runtime
    โ”‚
    โ–ผ
   Pod

kubelet์€ Node Agent์ด๋ฉฐ Container Runtime๊ณผ CRI๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค.


Step 6. Service๊ฐ€ ์žˆ๋‹ค๋ฉด kube-proxy๊ฐ€ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค

Service๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด kube-proxy๋Š” Service์™€ EndpointSlice ์ •๋ณด๋ฅผ ๊ฐ์‹œํ•˜๊ณ  Service Virtual IP๊ฐ€ Backend๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ๋™์ž‘์„ ๊ตฌํ˜„ํ•œ๋‹ค.

Client
   โ”‚
   โ–ผ
Service
   โ”‚
   โ–ผ
kube-proxy๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š”
Network Rules
   โ”‚
   โ–ผ
Pod

9. ์ „์ฒด ํ๋ฆ„ ์ •๋ฆฌ

                       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

10. CKA์—์„œ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‰ฌ์šด ์ปดํฌ๋„ŒํŠธ ๋น„๊ต

Componentํ•ต์‹ฌ ์งˆ๋ฌธ์—ญํ• 
kube-apiserverํด๋Ÿฌ์Šคํ„ฐ์— ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๋Š”๊ฐ€?Kubernetes API
etcd์ƒํƒœ๋ฅผ ์–ด๋””์— ์ €์žฅํ•˜๋Š”๊ฐ€?Cluster State
controller-managerํ•„์š”ํ•œ ์ƒํƒœ๋Š” ๋ฌด์—‡์ธ๊ฐ€?Reconciliation
scheduler์–ด๋””์—์„œ ์‹คํ–‰ํ• ๊นŒ?Pod Placement
kubelet์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ• ๊นŒ?Pod Lifecycle
kube-proxyService ํŠธ๋ž˜ํ”ฝ์€ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ• ๊นŒ?Service Networking

ํŠนํžˆ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€๋Š” ํ™•์‹คํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜์ž.

Controller
"Pod๊ฐ€ ํ•˜๋‚˜ ๋” ํ•„์š”ํ•˜๋‹ค."

Scheduler
"๊ทธ Pod๋Š” Node B์—์„œ ์‹คํ–‰ํ•˜์ž."

kubelet
"Node B์—์„œ ๊ทธ Pod๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค."

11. Kubernetes Architecture์˜ ํ•ต์‹ฌ โ€” Reconciliation

์ปดํฌ๋„ŒํŠธ ์—ฌ์„ฏ ๊ฐœ๋ฅผ ๊ณต๋ถ€ํ–ˆ์ง€๋งŒ 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 ๊ฐ™์€ ๊ฐœ๋…๋„ ํ•˜๋‚˜์˜ ํ๋ฆ„ ์•ˆ์—์„œ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.


CKA ํ•œ ์ค„ ์•”๊ธฐ

๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œํ—˜์šฉ์œผ๋กœ ๊ฐ€์žฅ ์••์ถ•ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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์— ๋”ฐ๋ผ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

profile
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž โœจ

0๊ฐœ์˜ ๋Œ“๊ธ€