๋ฐ์ํ
Kubernetes Concept
Kubernetes
- ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ, ํ์ฅ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์๋ํํ๊ธฐ ์ํ ์คํ์์ค ์ค์ผ์คํธ๋ ์ด์ ์์คํ
- ์ฌ์ฉ ์ด์
- ์๋ฒ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋๊ท๋ชจ ์๋น์ค๋ฅผ ์ด์ํ๋ ๊ธฐ์ ๋ค์ ํฐ ๋น์ฉ ์ ๊ฐ ํจ๊ณผ
- ์ฌ๋ฌ ์๋น์ค์์ ์๋ฒ ์์์ ๊ณต์ ํด์ ์ฌ์ฉ ๊ฐ๋ฅ
VM vs Container
- VM ๊ฐ์ํ๋ ๋ณ๋์ Guest OS๋ฅผ ๊ฐ์ง๊ณ ์คํํจ
- ์ปจํ ์ด๋๋ Host OS์ ์ปค๋์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ๊ณ VM๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณต
Container Runtime
- ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ ์ํํธ์จ์ด (Docker, containerd, CRI-O)
- k8s์์๋ v1.23๊น์ง๋ง Docker๋ฅผ ์ง์ํ๊ณ ๊ทธ ์ดํ ๋ฒ์ ์์ deprecated, ๋์ปค๋ณด๋ค ๊ฐ๊ฒฐํ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ containerd๋ฅผ ์ฌ์ฉ
Kubernetes ์ฉ์ด
- Node: k8s์ ์์ปค ์ญํ
- Pod: k8s์ ์ต์ ๋ฐฐํฌ ๋จ์๋ก์, ํ๋ ์ด์์ ์ปจํ ์ด๋(๋์ปค ์ปจํ ์ด๋ ํฌํจ)๋ฅผ ํฌํจํ๊ณ ์ด๋ค์ ๊ด๋ฆฌ
- Service: ์ธ๋ถ์์ pod์ ์ ๊ทผ์ ์ํ ์ฐ๊ฒฐ
- Namespace: k8s์์ ํ๋์ ํด๋ฌ์คํฐ ๋ด์์ ๋ฆฌ์์ค ๊ทธ๋ฃน์ ๊ฒฉ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ถ์์ ๊ฐ๋
- ResourceQuota: ๊ฐ ๋ค์์คํ์ด์ค์ ์ ์ฒด ๋ฆฌ์์ค๋ฅผ ์ ํ
- LimitRange: ์ปจํ ์ด๋๋ ํ๋์ ๋ฆฌ์์ค ์ ํ
- ConfigMap: ์ค์ ์ ๋ณด๋ฅผ ์ ์ํ๊ณ Pod์ ์ ๋ฌ
- Secrets: ์ํธ,ํ ํฐ๊ณผ ๊ฐ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ์ค๋ธ์ ํธ
- Controller: ํด๋ฌ์คํฐ์ ์ํ๋ฅผ ๊ด์ฐฐํ๊ณ ํ์ํ ๊ฒฝ์ฐ์ ํ๋์ ์์ฑ ๋๋ ๋ณ๊ฒฝ์ ์์ฒญํ๋ ์ปจํธ๋กค ๋ฃจํ
- Replication Controller(Deprecated), ReplicatSet: ํ๋๊ฐ ์ฃฝ์ผ๋ฉด ๊ฐ์งํด์ ๋ณต๊ตฌ, ์ค์ผ์ผ ์ธ-์์, ์คํํ ํ๋์ ๊ฐ์๋ฅผ ์ง์ ํ ์ ์๊ณ ์ง์ ํ ๊ฐ์๋งํผ ํ๋๊ฐ ์ ์ง๋๋๋ก ๊ด๋ฆฌ
- Deployment: ๋ฐฐํฌ ํ์ ํ๋๋ฅผ ์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋, ์ ๊ทธ๋ ์ด๋ ๋ฌธ์ ๋ฐ์์ ์ฝ๊ฒ ๋กค๋ฐฑ
- DaemonSet: ํ ๋ ธ๋์ ํ๋๊ฐ ํ๋๋ง ์ ์ง (Prometheus - ์ฑ๋ฅ ์์ง, fluentd - ๋ก๊ทธ ์์ง, GlusterFS - ์คํ ๋ฆฌ์ง ๊ตฌ์ฑ)
- CronJob: Job์ ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ (Job์ ํน์ ์์
๋ง ์คํ ํ ์ข
๋ฃ)
Architecture
Kubernetes Architecture
- Control Plane (master)
- API ์๋ฒ (kube-api-server): ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ ๊ณตํ๋ฉฐ, ํด๋ฌ์คํฐ ๊ด๋ฆฌ์ ์ค์ฌ ์ญํ
- ์ค์ผ์ค๋ฌ (kube-scheduler): ํ๋(Pod)๋ฅผ ๋ ธ๋์ ํ ๋นํ๋ ์ญํ
- ์ปจํธ๋กค๋ฌ ๋งค๋์ (kube-controller-manager): ๋ค์ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํ. ์ด๋ค ์ปจํธ๋กค๋ฌ๋ ๋ณต์ ์ปจํธ๋กค๋ฌ, ์๋ํฌ์ธํธ ์ปจํธ๋กค๋ฌ, ๋ค์์คํ์ด์ค ์ปจํธ๋กค๋ฌ ๋ฑ์ ํฌํจ
- etcd: ๋ชจ๋ ํด๋ฌ์คํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ผ๊ด์ฑ ์๋ ํค-๊ฐ ์ ์ฅ์
- Node (worker)
- container runtime: ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๋ฐํ์ (docker, containerd, cri-o)
- kubelet: api-server์ ์ํด ํ ๋น๋ ํ๋๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ
- kube-proxy: ๊ฐ ๋ ธ๋์ ๋คํธ์ํฌ ํ๋ก์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ํ๋ ๊ฐ์ ๋คํธ์ํฌ๋ฅผ ๊ด๋ฆฌ
Kubernetes Cluster Architecture
- Networking
- Pod Network
- Pause Container: ํ๋ ๋ด์ ์ปจํ ์ด๋ ๊ฐ ํต์ ์ ๊ด๋ฆฌ
- CNI Plugin: ๋
ธ๋ ๋ด,์ธ ํ๋๊ฐ์ ํต์ ์ ๊ด๋ฆฌ
- CNI(Container Network Interface)๋ ์ปจํ
์ด๋๊ฐ ์์ฑ๋ ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ
- Calico, Weavenet, Flannel
- kubenet ์ด๋ผ๋ ์์ฒด ํ๋ฌ๊ทธ์ธ์ ์ ๊ณตํ์ง๋ง ๋คํธ์ํฌ ๊ธฐ๋ฅ์ด ์ ํ์ ์ธ ๋จ์ ์ผ๋ก, 3rd-party ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ
- CNI(Container Network Interface)๋ ์ปจํ
์ด๋๊ฐ ์์ฑ๋ ๋ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ
- Service Network
- ์๋น์ค๋ฅผ ํ๋๋ CNI์ ์ฐ๊ฒฐํด์ ์๋น์ค๋ฅผ ํตํด ํ๋๋ก ํต์
- Pod Network
- Storage
- hostPath๋ก ๋ด๋ถ ๋ ธ๋ ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ธ๋ถ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
- ๋ด๋ถ ํด๋ฌ์คํฐ์ 3rd-party ์คํ ๋ฆฌ์ง ์๋ฃจ์ ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
- Logging
- Core Pipeline
- ์ฟ ๋ฒ๋คํฐ์ค ์์ฒด ๊ธฐ๋ฅ(CLI)์ผ๋ก ๋ก๊น
- metric-server๋ก ๊ฐ ๋
ธ๋์ ๋ชจ๋ํฐ๋ง ์ ๋ณด๊ฐ ์์ง
- kubectl top, kubectl log CLI ๋ช ๋ น์ ํตํด ๋ชจ๋ํฐ๋ง
- Service Pipeline
- ๋ณ๋์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ ๊ตฌ์ฑ
- ๋ชจ๋ํฐ๋ง ๊ด๋ จ๋ ํ๋๋ค์ด ์์ฑ๋จ > ํ๋๋ค์ด ๊ฐ๊ฐ์ ๋
ธ๋์์ ์๋ฒ๋ก ๋ก๊ทธ๋ฅผ ์์ง > ํด๋น ์ ๋ณด๋ค์ UI๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ์ ๊ณต
- ๋ชจ๋ํฐ๋ง ๊ด๋ จ๋ ํ๋๋ค์ด ์์ฑ๋จ > ํ๋๋ค์ด ๊ฐ๊ฐ์ ๋
ธ๋์์ ์๋ฒ๋ก ๋ก๊ทธ๋ฅผ ์์ง > ํด๋น ์ ๋ณด๋ค์ UI๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ์ ๊ณต
- ๋ณ๋์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํด์ ๊ตฌ์ฑ
- Core Pipeline
Object
Pod
- ํ๋๋ k8s์ ์ต์ ๋ฐฐํฌ ๋จ์๋ก์, ํ๋ ์ด์์ ์ปจํ ์ด๋(๋์ปค ์ปจํ ์ด๋ ํฌํจ)๋ฅผ ํฌํจํ๊ณ ์ด๋ค์ ๊ด๋ฆฌ
- ํ๋๋ด์ ์ปจํ ์ด๋๋ค์ ํฌํธ ์ค๋ณต๋ ์ ์์
- ํ๋๋ฅผ ์์ฑํ๋ฉด ip๋ ์๋ ํ ๋น๋๊ณ ํ๋ฐ์ฑ์ ํน์ง์ ๊ฐ์ง (ํด๋ฌ์คํฐ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ)
- Label
- key-value ํํ๋ก ํ๋ ์ฌ์ฉ ๋ชฉ์ ์ ๊ตฌ๋ถํ๊ณ ํ๋์ ๋ผ๋ฒจ์ ์๋น์ค์์ selector๋ก ์ฐ๊ฒฐ ๊ฐ๋ฅ
- Node Schedule
- ํ๋๋ฅผ ๋ง๋ค ๋ ๋ ธ๋๋ฅผ ์ง์ ์ ํ (nodeSelector ๋ช ์)
- ์ฟ ๋ฒ๋คํฐ์ค ์ค์ผ์ค๋ฌ๊ฐ ๋ ธ๋๋ฅผ ์ง์ (request,limit ๋ฉ๋ชจ๋ฆฌ ์ง์ ๊ฐ๋ฅ)
Service
- ์๋น์ค๋ pod์ ์ ๊ทผ์ ์ํ ์ฐ๊ฒฐ์ ์ ๊ณต
- ClusterIP
- ํ๋๋ ์ฑ๋ฅ์ด๋ ์์คํ
์ฅ์ ๋ก ์ฌ์์ฑ๋๋ฉด ํ๋์ ip๊ฐ ๋ณ๊ฒฝ๋์ด ์ ๋ขฐ์ฑ์ด ๋จ์ด์ง
- ์๋น์ค์ ip๋ฅผ ํตํด์ ์ ๊ทผํ๋ฉด ํ๋์ ํญ์ ์ฐ๊ฒฐ ๊ฐ๋ฅ
- Service Type์ Default ์ค์
- ์๋น์ค์ ์ฌ๋ฌ ํ๋๋ฅผ ์ฐ๊ฒฐํ๋ฉด ์๋น์ค๊ฐ ํธ๋ํฝ ๋ถ์ฐ์ ํด์ค
- ์ธ๋ถ ์ ๊ทผ ๋ถ๊ฐ, ํด๋ฌ์คํฐ ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์ด์์, ๋ด๋ถ ๋์๋ณด๋ ์ฉ๋
- ํ๋๋ ์ฑ๋ฅ์ด๋ ์์คํ
์ฅ์ ๋ก ์ฌ์์ฑ๋๋ฉด ํ๋์ ip๊ฐ ๋ณ๊ฒฝ๋์ด ์ ๋ขฐ์ฑ์ด ๋จ์ด์ง
- NodePort
- ๋ชจ๋ ๋ ธ๋์ ๊ฐ์ ์๋น์ค ํฌํธ๊ฐ ํ ๋น (port: 30000~32767)
- ์ธ๋ถ์์ ํด๋น ๋ ธ๋์ ํฌํธ๋ก ์ ์์ ์๋น์ค์ ์ฐ๊ฒฐ > ์๋น์ค์ ์ฐ๊ฒฐ๋์ด ์๋ ํ๋์ ํธ๋ํฝ์ ์ ๋ฌ
- ๋ด๋ถ๋ง ์ฐ๊ฒฐ, ๋ฐ๋ชจ๋ ์์ ์ฐ๊ฒฐ ์ฉ๋
- LoadBalancer
- ๋ก๋๋ฐธ๋ฐ์ค๊ฐ ์์ฑ๋์ด ๊ฐ๊ฐ์ ๋ ธ๋๋ก ํธ๋ํฝ ๋ถ์ฐ (๋ณ๋์ ํ๋ฌ๊ทธ์ธ ์ค์น ํ์)
- ์ธ๋ถ ์์คํ ๋ ธ์ถ ์ฉ๋
Volume
- emptyDir
- pod์์์ ์ปจํ ์ด๋๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ํ๋ ์ญ์ ์ ๋ณผ๋ฅจ ์์ด์ง
- hostPath
- ๊ฐ ๋ ธ๋์ path๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ์ฌ์ฉ, ํ๋๋ค์ด ๋ ธ๋ ๋ณผ๋ฅจ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํ๋๊ฐ ์ญ์ ๋ผ๋ ๋ณผ๋ฅจ ์ ์ง
- ํ๋๊ฐ ์ฌ์์ฑ๋ ๋ ๋ค๋ฅธ ๋ ธ๋์ ์๊ธฐ๋ฉด ๋ฌธ์
- ํ๋ ์์ ์ด ํ ๋น๋์ด ์๋ ๋ ธ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋ ์ธ ๊ฒฝ์ฐ ์ฌ์ฉ
- ํ๋ ์์ฑ ์ ๋ ธ๋์ ํด๋น ๊ฒฝ๋ก๊ฐ ์์ด์ผ ํจ
- PVC/PV
- User(์๋น์ค๋ด๋น์), Admin(์ด์์) ์์ญ์ ๋๋๊ณ
- Admin์ ๊ฐ๊ฐ์ pv(nfs,git..) ์ ์
- User๋ pv๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด pvc๋ฅผ ์์ฑ
- k8s๊ฐ pvc์ ์ ํฉํ pv๋ฅผ ์ฐ๊ฒฐ ํด์ค
- ํ๋ ์์ฑ์ pvc๋ฅผ ์ฌ์ฉ
- Dynamic Provisioning
- StorageClass์ ํ๋ก๋น์ ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก PV๋ฅผ ์์ฑํด์ PVC์ Bound ์ํค๋ ๊ธฐ๋ฅ
ConfigMap, Secret
- ์ปจํ ์ด๋ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ ์ค์ ๊ฐ๋ค์ ์ธ๋ถ์์ ๊ด๋ฆฌ
- secret์ value๋ Base64๋ก ์ธ์ฝ๋ฉํด์ ๊ฐ์ ๋ฃ์ด์ผ ํจ
- ์ฌ์ฉ ๋ฐฉ๋ฒ
- Env (Literal) - ์ค์ ์ ์์ ๊ฐ์ ์ ์
- Env (File) - ์ค์ ์ File์ ๋งคํ, ํ์ผ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ฉด ํ๋์ ๋ฐ์๋์ง ์์
- Volume Mount (File) - ์ค์ ์ ๋ง์ดํธ ์ ๋ณด ๋ฑ๋ก, ํ์ผ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ฉด ํ๋์ ๋ฐ์๋จ
- ์ ์ฉ ํ ํ์ธ์ ์ปจํ ์ด๋ ์ ์ ํ env ๋ช ๋ น์ด ์คํ
Ingress
- ์ฌ๋ฌ ์๋น์ค๊ฐ์ ํธ๋ํฝ์ ๋ถ์ฐํ ์ ์๊ณ , ๋๋ฉ์ธ ๋๋ ๊ฒฝ๋ก ๊ธฐ๋ฐ์ผ๋ก ํน์ ์๋น์ค๋ก ํธ๋ํฝ์ ๋ผ์ฐํ
- L4/L7์ ์ญํ ์ Ingress๊ฐ ๋์ ํด์ค
- Ingress๋ฅผ ์ฌ์ฉํ๋ฉด Service LoadBalancer ์ Canary Upgrade ๊ฐ๋ฅ
- Ingress Controller (NGINX, Kong) ํ๋ฌ๊ทธ์ธ ์ค์น๊ฐ ํ์
Controller
Replication Controller(Deprecated), ReplicaSet
- ํด๋ฌ์คํฐ ๋ด์์ ์ง์ ๋ ๋ณต์ ์์ ํ๋๋ฅผ ํญ์ ์คํ๋๋๋ก ๊ด๋ฆฌํ๋ ์ญํ
- Template
- ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ ๋ ํ ํ๋ฆฟ์ผ๋ก ํ๋์ ๋ด์ฉ์ ์ ์
- ํ๋๊ฐ ๋ค์ด๋๋ฉด ํ ํ๋ฆฟ์ผ๋ก ์ฌ์์ฑ
- Replicas
- replicas ๊ฐ ๋งํผ ํ๋ ์๋ฅผ ๊ด๋ฆฌ
- Selector
- Replication Controller์ selector๋ ํค์ ๋ผ๋ฒจ์ด ๊ฐ์ ํ๋๋ค๋ง ์ฐ๊ฒฐ์ ํด์ค
- ReplicaSet์ selector
- matchLabels - Replication Controller์ selector์ ๊ฐ์ ๊ธฐ๋ฅ
- matchExpressions - ๋ฐธ๋ฅ๋ฅผ ๋ค์ํ ์กฐ๊ฑด์ผ๋ก ํ๋๋ค์ ์ฐ๊ฒฐ ๊ฐ๋ฅ
Deployment
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ์ ์ ๋ฐ์ดํธ๋ฅผ deployment๋ก ์ฝ๊ฒ ๊ฐ๋ฅ
- ์
๋ฐ์ดํธ ๋ฐฉ์
- ReCreate
- ์ ๋ฐ์ดํธ์ deployment๋ ํ๋๋ฅผ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ์๋น์ค ๋ค์ด ํ์์ด ๋ฐ์
- Rolling Update (default)
- ์ ๋ฐ์ดํธ์ deployment๋ 1๋์ ์ถ๊ฐ ํ๋๋ฅผ ์์ฑํ๊ณ ์ด์ ๋ฒ์ ์ ํ๋๋ฅผ ์ญ์ ํ๋ ๋ฐฉ์
- ์ถ๊ฐ์ ์ธ ์์์ ํ์ํ์ง๋ง ์๋น์ค ๋ค์ด ํ์์ด ์์
- Blue/Green
- deployment ๊ธฐ๋ฅ์ ์๋๊ณ ๊ธฐ์กด ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ๋ฒ์ ์ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌ์ฑ ํ ์ ๋ ํฐ์ ๋ผ๋ฒจ๋ง ๋ณ๊ฒฝํ์ฌ ๋ฒ์ ์ ๊ทธ๋ ์ด๋
- ์์ ์ฌ์ฉ๋์ด ๊ธฐ์กด 2๋ฐฐ, ์๋น์ค ๋ค์ด ํ์์ด ์์
- Canary
- ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ๋ก ์ ์ ๋๋ ํธ๋ํฝ์ URL ๊ฒฝ๋ก๋ก ๊ตฌ๋ถํ์ฌ ์๋น์ค์ ์ฐ๊ฒฐ์ ํด์ฃผ๋ ์ญํ
- ReCreate
SatefulSet
- Stateless Application
- ๋ฐฐํฌ๋ ์ฌ๋ฌ ์ฑ์ด ๋ชจ๋ ๋์ผ ์ญํ ์ ์ํ
- Web Server (Apache, NGINX, IIS)
- ReplicatSet (Controller)
- ๊ณต์ฉ ๋ณผ๋ฅจ ์ฌ์ฉ ๊ฐ๋ฅ
- Stateful Application
- ๊ฐ๊ฐ์ ์ฑ๋ง๋ค ์์ ์ ์ญํ ์ด ์์ (mongoDB - Primary, Secondary, Arbiter)
- Database (mongoDB, MariaDB, redis)
- StatefulSet (Controller)
- ํ๋๋ง๋ค ์ญํ ์ด ๋ค๋ฅด๊ธฐ์ ๊ฐ๋ณ ๋ณผ๋ฅจ์ผ๋ก ๊ตฌ์ฑ
Autoscaler
- HPA (Horizontal Pod Autoscaler)
- ํ๋์ ๊ฐ์๋ฅผ ์ฆ๊ฐํด์ฃผ๋ ์ค์
- HPA๋ฅผ ์์ฑํ๊ณ ์ปจํธ๋กค๋ฌ์ ์ฐ๊ฒฐ > HPA๋ ๋ฆฌ์์ค ์ํ๋ฅผ ๊ฐ์ > ์ํ ์ํ ๊ฐ์ง > ์ปจํธ๋กค๋ฌ์ reaplicas ์๋ฅผ ์ฆ๊ฐ > ์ปจํธ๋กค๋ฌ๋ ํ๋๋ฅผ ์ถ๊ฐ ์์ฑ (์ค์ผ์ผ ์์)
- ๊ธฐ๋์ด ๋น ๋ฅด๊ฒ ๋๋ App, Stateless App์์ ์ฌ์ฉ ๊ถ์ฅ
- VPA (Vertical Pod Autoscaler)
- ํ๋์ ๋ฆฌ์์ค๋ฅผ ์ฆ๊ฐํด์ฃผ๋ ์ค์
- VPA๋ฅผ ์์ฑํ๊ณ ์ปจํธ๋กค๋ฌ์ ์ฐ๊ฒฐ > VPA๋ ๋ฆฌ์์ค ์ํ๋ฅผ ๊ฐ์ > VPA๊ฐ ์ํ ์ํ๋ฅผ ๊ฐ์ง > ํ๋๋ฅผ ์ฌ๊ธฐ๋ํ๋ฉด์ ๋ฆฌ์์ค๋ฅผ ์ค์ผ์ผ ์
- Statelful App์์ ์ฌ์ฉ ๊ถ์ฅ
- ํ ์ปจํธ๋กค๋ฌ์์ VPA, HPA๋ฅผ ํจ๊ป ์ฌ์ฉ ๋ถ๊ฐ
- CA (Cluster Autoscaler)
- ๋ ธ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ ์ค์
- ์์ปค ๋
ธ๋์ ์์ ๋ชจ๋ ์์ง > ์ค์ผ์ค๋ฌ๋ CA์๊ฒ ๋
ธ๋ ์์ฑ์ ์์ฒญ > ์ฌ์ ์ CA๋ฅผ ํน์ ํด๋ผ์ฐ๋ ํ๋ก๋ฐ์ด๋(GCP, AWS, Azure)์ ์ฐ๊ฒฐํ๋ค๋ฉด > ํ๋ก๋ฐ์ด๋์ ๋
ธ๋๋ฅผ ์์ฑํ๊ณ ์ค์ผ์ค๋ฌ๋ ํด๋น ๋
ธ๋์ ํ๋๋ฅผ ๋ฐฐ์น
Pod
Lifecycle
๐ ์ฐธ๊ณ URL
ReadnessProbe, LivenessProbe
- ReadnessProbe
- ํ๋๊ฐ ์ฌ์์ฑ ๋๋ฉด์, ์ปจํ ์ด๋์ App์ด ์ ์์ ์ผ๋ก ๊ตฌ๋์ด ์๋ฃ๋์ด์ผ ํ๋ ์ฐ๊ฒฐ์ ํ์ฉ
- Exec (commnad) ์ต์ ์ผ๋ก ํ์ผ ์กด์ฌ ์ฌ๋ถ๋ฅผ ์ฒดํฌ
- LivenessProbe
- ํ๋๋ฅผ ์์ฑํ ๋ LivenessProbe ์ต์ ์ ์ ์ฉํ๋ฉด, ์ปจํ ์ด๋์ App์ ์ฅ์ ์ํ๋ฅผ ๊ฐ์ํ๊ณ ๋ฌธ์ ๋ฐ์์ ํ๋๋ฅผ ์ฌ๊ธฐ๋ํ์ฌ ์ง์์ ์๋ฌ ์ํ๋ฅผ ๋ฐฉ์ง
- httpGet์ผ๋ก response status๊ฐ 200์ด ์๋ ๊ฒฝ์ฐ ํ๋๋ฅผ ์ฌ๊ธฐ๋
QoS Classes (Quality of Service)
- k8s์์๋ ์์์ด ๋ถ์กฑํ ๊ฒฝ์ฐ App์ ์ค์๋์ ๋ฐ๋ผ ํ๋๋ฅผ ๋ค์ด์์ผ ์์์ ํ๋ณด
- Qos๋ containers์ resources(request,limit) ์์ฑ์ผ๋ก ํ๋ ์ฐ์ ์์๊ฐ ๊ฒฐ์ ๋จ
- ์ฐ์ ์์: Guaranteed > Burstable > BestEffort
- Guaranteed
- ํ๋์ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ์๋ค๋ฉด, ์ด ์ปจํ ์ด๋์ request, limit ์ค์ ์ด ์์ด์ผ ํจ
- request, limit์๋ mem,cpu ๋ชจ๋ ์ค์ ๋์ด ์์ด์ผ ํจ
- ๊ฐ ์ปจํ ์ด๋์ mem,cpu์ request, limit์ ๊ฐ์ด ๊ฐ์์ผ ํจ
- Burstable
- ์ปจํ ์ด๋์ request,limit ์ค์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ
- BestEffort
- ํ๋์ ์ด๋ค ์ปจํ ์ด๋ ๋ด์๋ request, limit ์ค์ ์ด ์์ด์ผ ํจ
Node Scheduling
- ์ค์ผ์ค๋ฌ๋ ์๋์ ํ๋ ์ค์ ๋ค๋ก ๋ค์ํ ์กฐ๊ฑด์ ํ๋ ๋ฐฐ์น๊ฐ ๊ฐ๋ฅ
- NodeName
- ์ค์ผ์ค๋ฌ์๋ ์๊ด ์์ด ํ๋์ ์ง์ ํ ๋ ธ๋๋ก๋ง ํ ๋น
- ๋ ธ๋ ๋ค์์ด ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ฌ์ฉํ์ง ์๋ ์ค์
- NodeSelector
- ํ๋์ key-value ๋ผ๋ฒจ์ ์ ์ํ์ฌ, ๋ผ๋ฒจ๊ณผ ์ผ์นํ๋ ๋ ธ๋์ ํ ๋น
- key-value๊ฐ ๋งค์นญ์ด ๋์ด์ผ๋ง ๋ ธ๋์ ํ ๋น, ๋งค์นญ๋๋ ๋ผ๋ฒจ์ด ์์ผ๋ฉด ํ๋๋ ๋ ธ๋ ํ ๋น์ด ๋์ง ์์ ์๋ฌ ๋ฐ์
- NodeAffinity
- ํ๋์ key๋ง ์ค์ ํด๋ ์ค์ผ์ค๋ฌ๊ฐ ํด๋น key๊ฐ ์ผ์นํ๋ (์์์ด ๋ง์) ๋ ธ๋๋ก ํ ๋น
- ์กฐ๊ฑด์ ๋ง์ง ์๋ key๋ฅผ ๊ฐ์ง๊ณ ์๋๋ผ๋, ์ค์ผ์ค๋ฌ๊ฐ ํ๋จํ์ฌ (์์์ด ๋ง์) ๋ ธ๋๋ก ํ ๋น
- Pod Affinity
- web, server ํ๋๊ฐ hostpath์ pv๋ฅผ ์ฌ์ฉํ ๋, ํ๋๋ค์ ๊ฐ์ ๋ ธ๋๋ก ํ ๋น ์ํค๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
- Pod Anti-Affinity
- master, slave ๊ตฌ์กฐ๋ก ๊ฐ์ ๋ ธ๋์ ํ๋๊ฐ ํ ๋น๋๋ฉด ์๋๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
- Toleration / Taint
- GPU ๋ ธ๋์ Taint๋ฅผ ์ค์ ํ๋ฉด Toleration์ด ์๋ ํ๋๋ง ํด๋น ๋ ธ๋์ ํ ๋น ๋จ