Kubernetes๋?
๐kubernetes ๋? ์ปจํ ์ด๋ํ๋ ์ํฌ๋ก๋์ ์๋น์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ปจํ ์ด๋ ์คํ์์ค ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ
Orchestration์ด ํ์ํ ์ด์
- ์๋ํ๋ ์ค์ผ์ผ๋ง, ๋กค์์ ๋ฐ ๋กค๋ฐฑ
- ์๋ํ๋ ๋ณต๊ตฌ(self-healing), ๋น ํจํน(bin packing)
- ์ํฌ๋ฆฟ๊ณผ ๊ตฌ์ฑ ๊ด๋ฆฌ
- ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ
- ์คํ ๋ฆฌ์ง ์ค์ผ์คํธ๋ ์ด์
- ์ ์ธ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ด์(laC)
kubernetes๊ฐ ์กด์ฌํด์ผ ํ๋ ์ด์ ?
- ๋ถ์ฐ์์คํ ์ ํ๋ ฅ์ ์ผ๋ก ์คํํ๊ธฐ ์ํ ํ๋ ์์ํฌ ์ ๊ณต
- ์ดํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ์ฅ์ ์กฐ์น๋ฅผ ํ ์ ์๋๋ก ๋ง๋ค์ด์ฃผ๋ ํ๊ฒฝ ์ ๊ณต.
kubernetes์ ์ฅ์
- kubernetes๋ ์์ ์คํ์์ค, ๊ฐ์ฅ ํ๋ถํ ์์ฝ์์คํ
- kubernetes๋ everything as code๋ฅผ ๊ตฌํ
- ์ด๋์๋ ๊ตฌ๋ ๊ฐ๋ฅ(onprem, private/public cloud … local ๊น์ง)
- ๋์ณ๋๋ ๋ ํผ๋ฐ์ค ๊น์ง!
01. Container Orchestration ๊ตฌ์กฐ

- ๋ ธ๋ ๊ด๋ฆฌ๋ถํฐ ์์ ์ฌ๋ผ๊ฐ๋ ์๋น์ค, ์ปจํ ์ด๋ ๊ด๋ฆฌ, ๋ฆฌ์์ค ๊ด๋ฆฌ, ์ค์ผ์ค๋ง, ์ค์ผ์ผ๋ง, ๋ฐฐ์น ๋ฐ ๋ฐฐํฌ, ํ์๊ด๋ฆฌ, ๊ฐ์ฉ์ฑ ํ๋ณด ๋ฑ ์ด์ ์ ๋ฐ์ ๊ฑธ์น ๋ชจ๋ ์์ ์ ๊ด์ฌ๋ฅผ ํ๊ฒ ๋๋ค.
โ Kubernetes ์ํคํ ์ฒ

1. Control plane
- kube-apiserver, etcd, kube-schduler, kube-controller-manager
2. Data plane
- kubelet, kube-proxy, container runtime
๊ฐ ๊ตฌ์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋์์ ํ์ธํ์!!
02. minikube cluster ๋ก ์ค์ต ์์
๊ฐ ๊ตฌ์ฑ์ ๋ํด ์์ธํ๊ฒ ์์๋ณด๊ธฐ ์ ์, ์ค์ต์ฉ ๋๊ตฌ๋ก 'minikube'๋ฅผ ์ฑํ
ํ์ OS : Macbook M3 pro
โ terminal์์ minikube ์คํ

minikube start -- ํด๋ฌ์คํฐ ์์
minikube status -- ์ํ์ ๋ณด ๋ณด๊ธฐ
์ ๊น! minikube๋ docker container ์์์ ๊ตฌ๋๋๋ ๋๊ตฌ์ด๋ฏ๋ก docker ์ฌ์ ์ค์น๊ฐ ๋์ผํ๋ค!!!

โ minikube ๋์ ๋ฐฉ์
ํด๋ฌ์คํฐ ์ธ์ฆ ์ ๋ณด์ context ์ ๋ณด๋ฅผ ์์๋ณด๊ธฐ ์ํด 'kubeconfig' ํ์ธ

- kubectl์ด kubernetes์ ํต์ ํ ๋ ํ์ํ ์ ์ ๋์์ ์๋ฒ์ ๋ณด, ์ธ์ฆ์ ๋ณด ๋ฑ์ ์ ์
- ๊ธฐ๋ณธ์์น : ~/.kube/config
- ๊ด๋ฆฌ์ ๋ณด : cluster, users, context, current-context ๋ฑ
2-1. kubectl์ ๊ฐ๋จํ๊ฒ ์ฌ์ฉ
์ด part์์๋ ๋๋จํ๊ฒ ์ค์ต์ ํ๋ ๊ฒ์ด ์๋, kubernetes ๋ ธ๋ ๊ตฌ์ฑ์ ๋ํด ์์๋ณด๋ ์๊ฐ!!

< ๋
ธ๋ ํ์ธ >
kubectl get nodes
< ๋ค์์คํ์ด์ค ํ์ธ>
kubectl get namespace
< Pod์ namespace ๊น์ง ๊ฐ์ด ํ์ธ >
kubectl get pods
kubectl get pods -A
kubectl get all
kubectl get all -A
03. Kubernetes ๊ตฌ์ฑ ์์
์์์ ๋ค๋ค๋ control plane๊ณผ data plane์ ๋ํด ์์ธํ๊ฒ ์์๋ณด์.
3-1. Control plane
โถ etcd, api server, schduler
ETCD
- kuberentes ์์ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํค-๊ฐ ํํ๋ก ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- etcd๊ฐ ๋ค์ด๋๋ฉด ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฏธ์๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฉ์ฑ์ด ๋งค์ฐ ์ค์ํ๋ค.
- ํด๋ฌ์คํฐ๋งํ์ฌ ๋ถ์ฐ ์คํํ๋ RSM (Replicated State Machine) ๊ตฌ์กฐ
โ HA ๊ตฌ์ฑ

โ ETCD ๊ตฌ์ฑ ํ์ธ
kubectl describe pod etcd-minikube -n kube-system
โ etcdctl๋?

- etcd๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ์ ํธ๋ฆฌํฐ
- api version 2์ 3๊ฐ ์์ (์ค์ ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก v2๋ฅผ ์ฌ์ฉ)
- etcdctl์ด etcd API Server์ ์ธ์ฆํ ์ ์๋๋ก ์ธ์ฆ์ ํ์ผ ๊ฒฝ๋ก ์ง์ ํ์.
kube-apiserver ์ญํ

- kubernetes API๋ฅผ ์ ๊ณตํ๋ ํต์ฌ ๊ตฌ์ฑ ์์
- kubernetes ํ๋ก ํธ ์ค๋๋ก์ ํด๋ฌ์คํฐ๋ก ์จ ์์ฒญ์ ์ ํจ์ฑ์ ๊ฒ์ฆ
- ๋ค๋ฅธ ์ปดํฌ๋ํธ ๊ฐ ํต์ ์ ์ค์ฌ
- kubectl ์ ํธ๋ฆฌํฐ๊ฐ ์ ๊ทผํ๋ ์ฃผ์ฒด.
โ ๊ตฌ์ฑ ํ์ธ
kubectl describe pod -n kube-system kube-apiserver-minikube
kube-schduler
- ํด๋ฌ์คํฐ ์์์ ์์ ํ ๋น์ด ๊ฐ๋ฅํ ๋ ธ๋ ์ค ์๋ง์ ๋ ธ๋๋ฅผ ์ ํํ๋ ์ญํ
- Label, Selector, Affinity, Taint, Toleration ๊ธฐ๋ฅ๊ณผ ํจ๊ป ๋์ํ๋ค.
๐Pod ์ค์ผ์ค๋ง
1. ํ์์ฑ
- ๋จธ์ ๋ฌ๋ ์ํฌ๋ก๋๋ฅผ ๋๋ฆฌ๋ ํน์ pod๋ GPU๊ฐ ํ์ฌ๋ node์์๋ง ๋์์ผ ํ๋ค.
- consumer๋ค์ ๋คํธ์ํฌ intensiveํ๋ฏ๋ก ์ ์ฉ node group์ ์ฐ๊ณ ์ถ๋ค.
- ํ๋ณ๋ก node๋ฅผ ๋๋ ์ ์ฌ์ฉํ๊ณ ์ถ๋ค.
2. ๋ถ๋ฅ
- ์ฌ์ฉ์๊ฐ ํน์ ๋
ธ๋์ pod๋ฅผ ๋ฐฐ์นํ๊ณ ์ถ์ ๋
- nodeSelector, Node Affinity, Node Anti-Affinity … ๋ฑ ๊ธฐ์ ์ ์ฌ์ฉ
- ๊ด๋ฆฌ์๊ฐ ํน์ ๋
ธ๋์๋ pod๊ฐ ๋ฐฐ์น๋๋ ๊ฒ์ ๋ง๊ณ ์ถ์ ๋
- Taints, Tolerations ๊ธฐ์ ์ ์ฌ์ฉ.
โ Taints and Toleration
์ด๋ค pod๊ฐ ์ด๋ค node์ ์ค์ผ์ค๋ง ๋ ์ ์๋์ง๋ฅผ ์ ํ.
ex) kubernetes์ control node์๋ pod๊ฐ ์ค์ผ์ค๋ง๋์ง ์๋๋ก taint๊ฐ ๋์ด ์๋ค.
- Taints : node๊ฐ ๊ฐ์ง๊ฒ ๋๋ ์ฑ๊ฒฉ. ex) taint: blue
- Toleration : pod๊ฐ ๊ฐ์ง๊ฒ ๋๋ taint์ ๋ํ toleration. ex) toleration: blue
์ฆ, node์ taint๊ฐ blue๋ก ์ค์ ๋์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
pod์ toleration์ผ๋ก blue๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด ์ค์ผ์ค๋ง ๋๊ณ , ์๋ค๋ฉด ์ค์ผ์ค๋ง ๋์ง ์๋๋ค.
โ Labels and Selector (Affinity)
- NodeSelector
- ๋ ธ๋์๋ ๋ผ๋ฒจ์ ํ ๋นํ๊ณ , ํ๋์๋ nodeSelector ํ๋๋ฅผ ์ถ๊ฐํ์ฌ ํน์ ๋ ธ๋์์ ๊ตฌ๋๋๋๋ก.
- ๋ค๋ง, NodeSelector๋ ์ฌ๋ฌ ๊ฐ์ ํ ๋นํ๊ฑฐ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ์๋ ์ด๋ ค์.
- NodeAffinity
- ์ฌ๋ฌ advanced ํ ๋น์ ํ ์ ์๋ ๋งํผ ๋ฌธ๋ฒ์ด ๋ค์ ๋ณต์กํ๋ค.
controller-manager
- ๋ค์ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํํ๋ ๊ตฌ์ฑ ์์
- ๋ ธ๋ ์ปจํธ๋กค๋ฌ, ์ก ์ปจํธ๋กค๋ฌ, ์๋ํฌ์ธํธ ์ปจํธ๋กค๋ฌ, ๋ ํ๋ฆฌ์ผ์ด์ ์ปจํธ๋กค๋ฌ ๋ฑ ๊ฐ ์ค๋ธ์ ํธ๋ฅผ ๊ดํ .
โ ์ญํ
- ๊ฐ ์ค๋ธ์ ํธ์ ์ํ๋ฅผ ๊ด์ฐฐํ๊ณ , ํ์ํ ๊ฒฝ์ฐ state๋ฅผ ๋ง์ถ๋ ์ญํ ์ ํ๋ค.
- ์ปจํธ๋กค๋ฌ ๊ฐ๊ฐ์ ๋ ผ๋ฆฌ์ ์ด๊ณ ๊ฐ๋ณ์ ์ธ ํ๋ก์ธ์ค์ง๋ง ์ฟ ๋ฒ๋คํฐ์ค์ ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํด ํจํค์งํ ๋์ด์ ์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค๋ฌ ๋งค๋์ ๋ผ๋ ์ฑ๊ธ ํ๋ก์ธ์ค๋ก ๊ด๋ฆฌ๋๋ค.
โ ๊ตฌ์ฑ ํ์ธ [pod ์์ธ ํ์ธ]
kubectl describe pod kube-controller-manager-minikube -n kube-system
โ ์ปจํธ๋กค๋ฌ ๋์ ์์
๋ ธ๋์ ๋ฌธ์ ๊ฐ ์๊ฒผ์๋์ ๋ ธ๋ ์ปจํธ๋กค๋ฌ ๋์ (์๊ฐ์ ์ปค์คํฐ ๋ง์ด์ง์ด ๊ฐ๋ฅํ๋ค)
- 5s ๋ง๋ค status check๋ฅผ ์งํ (node monitor period)
- hearbeat๊ฐ ๋์ฐฉํ์ง ์์ผ๋ฉด 40s๋ฅผ ๋๊ธฐํ๊ณ , unreachable๋ก ๋งํนํ๋ค.
- (node monitor grace period)
- ์ถ๊ฐ๋ก 5m์ ๋ ๋๊ธฐํ๋ค. (pod eviction timeout)
- ๋ณต๊ตฌ๋์ง ์์ผ๋ฉด ํด๋น node์ pod๋ค์ ์ ์ node๋ก ์ฌ๋ฐฐํฌ (pod๊ฐ replicaset์ผ ๊ฒฝ์ฐ๋ง ํด๋น)
3-2. Data plane
โถ kubelet, kube-proxy, container runtime
kubelet
๊ฐ ๋ ธ๋์์ ์คํ๋๋ ์์ด์ ํธ๋ก, Kubernetes Master Node๋ก๋ถํฐ Pod ์ฌ์์ ์์ ํ๊ณ ์ด๋ฅผ ์คํํ๋ ์ญํ .
- ๊ฐ kubernetes ๋ ธ๋์์ ๋์ํ๋ node agent
- ์ปจํ ์ด๋ ๋ฐํ์๊ณผ ์ฐ๊ณํ์ฌ ์ปจํ ์ด๋์ ๊ธฐ๋ ๋ฐ ์ ์ง ๋ฑ์ ๊ด๋ฆฌ
- Pod์ ์ปจํ ์ด๋ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ค.
- ํ๋ ์คํ ์ค์ ์ kube-apiserver๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ ํ๋ ์ปจํ ์ด๋์ ์คํ์ ์ง์ ์ ์ผ๋ก ๊ด๋ฆฌ
- pod๊ฐ ์๋ ํ๋ก์ธ์ค์ ํํ๋ก ๋ฌ๋ค.
โ ์ฃผ์ ๊ธฐ๋ฅ
1. Pod ๊ด๋ฆฌ
- kubelet์ ํน์ ๋ ธ๋์์ ์คํ๋์ด์ผ ํ Pod์ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํฉ๋๋ค.
- Pod์ ์ํ๊ฐ ์ฌ์๊ณผ ์ผ์นํ๋์ง ํ์ธํ๊ณ , ํ์ํ ๊ฒฝ์ฐ Pod๋ฅผ ์์ํ๊ฑฐ๋ ์ฌ์์ํฉ๋๋ค.
2. ์ปจํ ์ด๋ ๋ฐํ์ ํตํฉ
- kubelet์ Docker, containerd ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ์ปจํ ์ด๋ ๋ฐํ์๊ณผ ํตํฉ๋์ด ์๋ํฉ๋๋ค.
- CRI (Container Runtime Interface)๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์ปจํ ์ด๋ ๋ฐํ์๊ณผ ํธํ๋ฉ๋๋ค.
3. ํฌ์ค ์ฒดํฌ
- kubelet์ Liveness Probe์ Readiness Probe๋ฅผ ํตํด ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํฉ๋๋ค.
- ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ปจํ ์ด๋๋ฅผ ์ฌ์์ํ๊ฑฐ๋ ๋ค๋ฅธ ์กฐ์น๋ฅผ ์ทจํฉ๋๋ค.
4. ๋ก๊ทธ์ ๋ชจ๋ํฐ๋ง
- kubelet์ ๊ฐ Pod์ ๋ก๊ทธ๋ฅผ ์์งํ๊ณ , ๋ชจ๋ํฐ๋ง ๋๊ตฌ์ ํตํฉํ์ฌ ์์คํ ์ ์ํ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
5. ๋ ธ๋ ์ํ ๊ด๋ฆฌ
- kubelet์ ๋ ธ๋์ ๋ฆฌ์์ค ์ฌ์ฉ๋(CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฑ)์ ๋ชจ๋ํฐ๋งํ๊ณ , ์ด๋ฅผ API ์๋ฒ์ ๋ณด๊ณ ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ํด๋ฌ์คํฐ์ ์์ ๊ด๋ฆฌ๊ฐ ์ํํ๊ฒ ์ด๋ฃจ์ด์ง๋๋ค.
โ ๊ตฌ์ฑ ํ์ธ
< kubelet ํ์ธ >
minikube status
< kube-system ๋ค์์คํ์ด์ค์ configmap >
kubectl get configmap -n kube-system
< kubelet configmap ํ์ธ >
kubectl describe configmap kubelet-config -n kube-system
< kubelet ํ์ธ >
ps -ef | grep kubelet
systemctl status kubelet
< kubelet ๋ก๊ทธ ํ์ธ >
journalctl -u kubelet
โ โ kubelet์ configmap ์ผ๋ก ๊ด๋ฆฌ๋๋ฉฐ, ์ ์ฅ์์น๋ ์๋์ ๊ฐ๋ค.
/etc/kubernetes/kubelet-config.yaml ํ์ผ์ ์ ์ฅ
kube-proxy
node์ pod๋ผ๋ฆฌ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ญํ ์ ์ง๋๋ค.
- worker node์ daemon set ํํ๋ก ํ๋์ฉ ๋ ์์.
- ํด๋ฌ์คํฐ ๋ด ๊ฐ ๋ ธ๋์์ ์คํ๋๋ ๋คํธ์ํฌ ํ๋ก์
- ๊ฐ์ ๋คํธ์ํฌ์ ๋์์ ๊ด๋ฆฌ
- IP translation๊ณผ Routing
โ ๊ตฌ์ฑ ํ์ธ
kubectl get configmap -n kube-system | grep -i kube-proxy
kubectl describe configmap -n kube-system kube-proxy
Core DNS (kube-dns)
- kubernetes ํด๋ฌ์คํฐ ๋ด๋ถ์ ์ฃผ์ ํด์์ด๋ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๋ด๋ถ DNS ์๋ฒ (add-on)
- kube 1.12 ๋ฒ์ ์ ์๋ kube-dns ๋ผ๋ ์ด๋ฆ์ด์์ผ๋, ์ดํ์๋ CoreDNS ๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉ.

โ ๊ตฌ์ฑ ํ์ธ
kubectl describe configmap -n kube-system coredns
โ ๋๋ฉ์ธ ํธ์ถ ํ ์คํธ
1. ๋ค์์คํ์ด์ค ์์ฑ
kubectl create namespace app
2. test pod (nginx image) ์์ฑ
kubectl run nginx --image nginx -n app
3. test pod ์์ฑ ํ์ธ
kubectl get pod -n app
4. ์์ธ ์ ๋ณด ํ์ธ
kubectl get pod -n app -o wide
โ ์๋น์ค ํธ์ถ
1. Static IP๋ก ํธ์ถ
kubectl run curl -it --rm --image curlimages/curl -- sh
curl 172.17.0.3 (pod IP ์ฃผ์)
2. ์๋น์ค์ ํ ๋นํ ์ปค์คํ ํ ์ด๋ฆ์ผ๋ก ํธ์ถ
- [ curl podIP-๋ค์์คํ์ด์ค-์๋น์คํ์ -๋ฃจํธ์ฃผ์ ]
curl 172-17-0-3.app.pod.cluster.local