ํ ํ์ฌ๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ์ฒ์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค. ์ด์ํ์ด kubectl๋ก Pod ๋ฐฐํฌ ๋ช ๋ น์ ์คํํ์ง๋ง, ์ด๋ค ์์ปค ๋ ธ๋์๋ Pod๊ฐ ์ค์ผ์ค๋ง๋์ง ์์ต๋๋ค. ์กฐ์ฌ ๊ฒฐ๊ณผ ์์ปค ๋ ธ๋์ ํน์ ์ปดํฌ๋ํธ๊ฐ ๋์ํ์ง ์๊ณ ์์์ต๋๋ค.
Pod๋ฅผ ์์ปค ๋ ธ๋์ ์ค์ ๋ก ์คํ์ํค๋ ์ญํ ์ ๋ด๋นํ๋ ์ปดํฌ๋ํธ๋ ๋ฌด์์ ๋๊น?
- kube-apiserver
- etcd
- kube-scheduler
- kubelet
์ ๋ต ๋ฐ ํด์ค ๋ณด๊ธฐ
kubelet์ ๊ฐ ์์ปค ๋ ธ๋์์ ์คํ๋๋ฉฐ, ๋ง์คํฐ ๋ ธ๋๋ก๋ถํฐ Pod ๋ฐฐํฌ ์ง์๋ฅผ ๋ฐ์ ์ค์ ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- kube-apiserver โ ๋ง์คํฐ ๋ ธ๋์ API ์ง์ ์
- etcd โ ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- kube-scheduler โ Pod๋ฅผ ์ด๋ค ๋ ธ๋์ ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํ ๋ฟ, ์ง์ ์คํํ์ง ์์
๊ฐ๋ฐํ์ด Nginx ์น ์๋ฒ๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฐฐํฌํ๋ ค๊ณ ํฉ๋๋ค. YAML ๋งค๋ํ์คํธ ํ์ผ์ ์์ฑํ์ฌ Pod๋ฅผ ์ ์ํ๋ ค๋๋ฐ, ๋งค๋ํ์คํธ์ ๋ฐ๋์ ํฌํจํด์ผ ํ๋ ํต์ฌ ์ ๋ณด๊ฐ ์๋ ๊ฒ์ ๋ฌด์์ ๋๊น?
- ์ฌ์ฉํ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์ด๋ฆ (์: nginx:latest)
- Pod์ metadata (์ด๋ฆ, ๋ ์ด๋ธ ๋ฑ)
- apiVersion๊ณผ kind
- Pod๊ฐ ๋ฐฐํฌ๋ ์์ปค ๋ ธ๋์ IP ์ฃผ์
์ ๋ต ๋ฐ ํด์ค ๋ณด๊ธฐ
์ฟ ๋ฒ๋คํฐ์ค ๋งค๋ํ์คํธ์ ํต์ฌ ๊ตฌ์ฑ ์์๋ ๋ค์ ๋ค ๊ฐ์ง์ ๋๋ค:
apiVersion: # API ๋ฒ์
kind: # ๋ฆฌ์์ค ์ข
๋ฅ (Pod, Service ๋ฑ)
metadata: # ์ด๋ฆ, ๋ ์ด๋ธ ๋ฑ
spec: # ์ปจํ
์ด๋ ์ด๋ฏธ์ง, ํฌํธ ๋ฑ ์์ธ ์คํPod๊ฐ ์ด๋ค ๋ ธ๋์ ๋ฐฐ์น๋ ์ง๋ kube-scheduler๊ฐ ์๋์ผ๋ก ๊ฒฐ์ ํ๋ฏ๋ก, ์์ปค ๋ ธ๋์ IP ์ฃผ์๋ฅผ ๋งค๋ํ์คํธ์ ์ง์ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
ํ ํ์ด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ ๋ด๋ถ์์ ํ๋ก ํธ์๋ Pod์ ๋ฐฑ์๋ Pod๋ฅผ ์ด์ํ๊ณ ์์ต๋๋ค. ํ๋ก ํธ์๋ Pod๊ฐ ๋ฐฑ์๋ Pod์ ์ ๊ทผํด์ผ ํ๋๋ฐ, ๋ฐฑ์๋ Pod๊ฐ ์ฌ์์๋ ๋๋ง๋ค IP๊ฐ ๋ณ๊ฒฝ๋์ด ํต์ ์ด ๋๊ธฐ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํด์ผ ํ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ ๋ฌด์์ ๋๊น?
- ConfigMap
- Namespace
- Service
- PersistentVolume
์ ๋ต ๋ฐ ํด์ค ๋ณด๊ธฐ
Service๋ Pod ์์ ๊ณ ์ ๋ ์ ๊ทผ ํฌ์ธํธ(IP์ DNS ์ด๋ฆ)๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐฑ์๋ Pod์ IP๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ Service๊ฐ ์๋์ผ๋ก ์ ์ Pod์ ํธ๋ํฝ์ ์ ๋ฌํด ์ฃผ๋ฏ๋ก ํต์ ์ด ๋๊ธฐ์ง ์์ต๋๋ค.
- ConfigMap โ ์ค์ ๋ฐ์ดํฐ ์ ์ฅ์ฉ
- Namespace โ ๋ฆฌ์์ค ๊ฒฉ๋ฆฌ์ฉ
- PersistentVolume โ ๋ฐ์ดํฐ ์๊ตฌ ์ ์ฅ์ฉ
์ด์ํ์ด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ์ปจํ ์ด๋๊ฐ ์คํ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค. ์์ปค ๋ ธ๋์ ์ ์ํ์ฌ ํ์ธํด๋ณด๋ ์ปจํ ์ด๋ ๋ฐํ์(containerd)์ด ์ค์ง๋ ์ํ์์ต๋๋ค.
์ปจํ ์ด๋ ๋ฐํ์์ ์ญํ ๋ก ๊ฐ์ฅ ์ฌ๋ฐ๋ฅธ ์ค๋ช ์ ๋ฌด์์ ๋๊น?
- ํด๋ฌ์คํฐ์ ๋ชจ๋ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค.
- ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ค์ ์ปจํ ์ด๋๋ฅผ ์์ฑยท์คํยท์ญ์ ํ๋ ์ํํธ์จ์ด์ด๋ค.
- ์ธ๋ถ ํธ๋ํฝ์ ํด๋ฌ์คํฐ ๋ด๋ถ์ Pod๋ก ์ ๋ฌํ๋ ๋ก๋๋ฐธ๋ฐ์์ด๋ค.
- Pod๋ฅผ ์ด๋ค ๋ ธ๋์ ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํ๋ ์ค์ผ์ค๋ง ์์ง์ด๋ค.
์ ๋ต ๋ฐ ํด์ค ๋ณด๊ธฐ
์ปจํ ์ด๋ ๋ฐํ์(containerd, CRI-O ๋ฑ)์ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ํ(pull)ํ๊ณ ์ค์ ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑยท์คํยท์ญ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
- A โ etcd
- C โ Service / Ingress
- D โ kube-scheduler
์ ์ ์์ง๋์ด๊ฐ ์ฟ ๋ฒ๋คํฐ์ค ๋ง์คํฐ ๋ ธ๋์ ๊ตฌ์ฑ ์์๋ฅผ ํ์ตํ๊ณ ์์ต๋๋ค.
๋ค์ ์ค ๋ง์คํฐ ๋ ธ๋(Control Plane)์ ๊ตฌ์ฑ ์์๋ก๋ง ์ฌ๋ฐ๋ฅด๊ฒ ๋ฌถ์ธ ๊ฒ์ ๋ฌด์์ ๋๊น?
- kubelet, kube-proxy, ์ปจํ ์ด๋ ๋ฐํ์
- kube-apiserver, kube-scheduler, kube-controller-manager, etcd
- kube-apiserver, kubelet, etcd, kube-proxy
- kube-scheduler, kube-proxy, ์ปจํ ์ด๋ ๋ฐํ์, etcd
์ ๋ต ๋ฐ ํด์ค ๋ณด๊ธฐ
๋ง์คํฐ ๋ ธ๋(Control Plane) ์ ํต์ฌ ๊ตฌ์ฑ ์์:
| ์ปดํฌ๋ํธ | ์ญํ |
|---|---|
| kube-apiserver | ๋ชจ๋ ์์ฒญ์ ์ง์ ์ (API ์๋ฒ) |
| kube-scheduler | Pod๋ฅผ ์ ์ ํ ๋ ธ๋์ ๋ฐฐ์น |
| kube-controller-manager | ํด๋ฌ์คํฐ ์ํ๋ฅผ ์ํ๋ ์ํ๋ก ์ ์ง |
| etcd | ํด๋ฌ์คํฐ ์ํ ๋ฐ์ดํฐ ์ ์ฅ์ |
์์ปค ๋ ธ๋์ ๊ตฌ์ฑ ์์: kubelet, kube-proxy, ์ปจํ ์ด๋ ๋ฐํ์
์ํฉ ์ค๋ช : ํด๋ผ์ฐ๋ ์์ง๋์ด์ธ ๋น์ ์ fisa-dev๋ผ๋ ์ด๋ฆ์ ๋ค์์คํ์ด์ค(Namespace)์ ์น ์๋ฒ ํ๋(Pod)๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด YAML ํ์ผ์ ์์ฑํ๊ณ kubectl apply -f web-server.yaml ๋ช ๋ น์ ์คํํ์ต๋๋ค.
ํ์ง๋ง ๋ช ๋ถ์ด ์ง๋๋ ์๋น์ค๊ฐ ์ ์ ์๋ํ์ง ์์ ์ํ๋ฅผ ํ์ธํด ๋ณด๋, ํ๋์ ์ํ๊ฐ ImagePullBackOff๋ก ํ์๋๊ณ ์์ต๋๋ค. ๋น์ ์ ์ด ๋ฌธ์ ๊ฐ ์ด๋ฏธ์ง ์ด๋ฆ ์คํ ๋๋ฌธ์ธ์ง, ์๋๋ฉด ์ปจํ ์ด๋ ๋ฐํ์์ด ์ด๋ฏธ์ง๋ฅผ ์ฐพ์ง ๋ชปํด์ ๋ฐ์ํ ๊ฒ์ธ์ง ๊ตฌ์ฒด์ ์ธ ์์ธ์ ํ์ ํ๊ณ ์ ํฉ๋๋ค.
๋ํ, ์ด ํ๋๊ฐ ํด๋ฌ์คํฐ ๋ด์ ์ด๋ค ๋ ธ๋(Node)์ ์ค์ผ์ค๋ง ๋์๋์ง์ ํ๋์ IP ์ฃผ์๋ ํจ๊ป ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฐ์ฅ ์ ์ ํ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋ ๋ช ๋ น์ด๋ ๋ฌด์์ ๋๊น?
- kubectl logs web-server -n fisa-dev
- kubectl get pod web-server -n fisa-dev
- kubectl describe pod web-server -n fisa-dev
- kubectl exec -it web-server -n fisa-dev -- /bin/bash
- Pod Lifecycle: Pending โ ContainerCreating โ Running
- ์ค๋ฅ ์ ImagePullBackOff, CrashLoopBackOff ๋ฑ์ด ๋ฐ์ํ ์ ์์.
- Control Plane: Scheduler๊ฐ ํ๋๋ฅผ ์ ์ ํ Node์ ๋ฐฐ์นํ๋ ๊ณผ์ ์ ์ดํดํด์ผ ํจ.
- Troubleshooting: ์ผ๋ฐ์ ์ผ๋ก get โ describe โ logs ์์๋ก ์ง๋จ์ ์งํํจ.
์ ๋ต ๋ฐ ํด์ค ๋ณด๊ธฐ
-
describe ๋ช ๋ น์ด๊ฐ ์ ๋ต์ธ ์ด์ :
- Events ์น์ : kubectl describe๋ ๋ฆฌ์์ค์ ์์ธ ์ ๋ณด๋ฟ๋ง ์๋๋ผ ํ๋จ์ Events ๋ก๊ทธ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ImagePullBackOff ๋ฐ์ ์ "Failed to pull image..." ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ธํ ์ ์๋ ๊ฐ์ฅ ํ์คํ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ธํ๋ผ ์ ๋ณด: ๋ฌธ์ ์์ ์๊ตฌํ Node(์ด๋ ์์ปค ๋ ธ๋์ ๋ฐฐํฌ๋๋์ง), IP(ํ๋ ์ฃผ์), Labels, Namespace ์ ๋ณด๋ฅผ ๋ชจ๋ ํฌํจํ๊ณ ์์ต๋๋ค.
-
์ค๋ต ๋ถ์:
- 1๋ฒ (logs): ์ปจํ ์ด๋ ๋ด๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๋ ฅ ๋ก๊ทธ๋ฅผ ๋ด ๋๋ค. ์ง๊ธ์ฒ๋ผ ์ด๋ฏธ์ง๋ฅผ ๋ชป ๊ฐ์ ธ์์ ์ปจํ ์ด๋๊ฐ ์์ฑ์กฐ์ฐจ ๋์ง ์์ ๋จ๊ณ(ImagePullBackOff)์์๋ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
- 2๋ฒ (get): ํ๋์ ์ํ(Status)๋ง ์์ฝํด์ ๋ณด์ฌ์ค๋๋ค. ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์์ธ์ด๋ ๋ ธ๋ ๋ฐฐ์น ์ ๋ณด๊น์ง๋ ๋์ค์ง ์์ต๋๋ค. ๋ฌผ๋ก -o wide ์ต์ ์ ๋ถ์ด๋ฉด IP์ ๋ ธ๋๋ ๋ณด์ด์ง๋ง, ์๋ฌ ์์ธ์ ์ ์ ์์ต๋๋ค.
- 4๋ฒ (exec): ์คํ ์ค์ธ ์ปจํ ์ด๋์ ์ ์ํ๋ ๋ช ๋ น์ ๋๋ค. ํ๋๊ฐ Running ์ํ๊ฐ ์๋๋ฏ๋ก ๋ช ๋ น์ด ์คํจํฉ๋๋ค.