Kubernetes - ChoDragon9/posts GitHub Wiki
์ ๋ฆฌ ํ์
์ฟ ๋ฒ๋คํฐ์ค๋?
์ฟ ๋ฒ๋คํฐ์ค๋ ์ปจํ ์ด๋๋ฅผ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ฐฐํฌ/ํ์ฅํ๊ณ ๊ด๋ฆฌ๋ฅผ ์๋ํํด์ฃผ๋ ์คํ์์ค ํ๋ซํผ์ด๋ค. ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ๋๋ฌด ๊ธธ์ด์ ํํ ์ผ์ด์ธ (k8s) ๋๋ ํ๋ธ(kube)๋ผ๊ณ ์ค์ฌ์ ๋ถ๋ฅธ๋ค.
ํน์ง
- ์๋น์ค๋ฉ์(Istio, linkerd), CI(Tekton, Spinnaker), ์ปจํ ์ด๋ ์๋ฒ๋ฆฌ์ค(Knative), ๋จธ์ ๋ฌ๋(kubeflow)์ด ๋ชจ๋ ์ฟ ๋ฒ๋คํฐ์ค ํ๊ฒฝ์์ ๋์๊ฐ๋ค.
- ๋ค์ํ ๋ฐฐํฌ๋ฐฉ์
- Deployment: ์๋ก์ด ๋ฒ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ ๋ต์ผ๋ก ๋ฌด์ค๋จ ๋ฐฐํฌ
- StatefulSets: ์คํ ์์๋ฅผ ๋ณด์ฅํ๊ณ ํธ์คํธ ์ด๋ฆ๊ณผ ๋ณผ๋ฅจ์ ์ผ์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ด ์์๋ ๋ฐ์ดํฐ๊ฐ ์ค์ํ ๊ฒฝ์ฐ ์ฌ์ฉ
- DaemonSet: ๋ก๊ทธ๋ ๋ชจ๋ํฐ๋ง ๋ฑ ๋ชจ๋ ๋ ธ๋๊ฐ ์ค์น๊ฐ ํ์ํ ๋ ์ฌ์ฉ
- Job, CronJob: ๋ฐฐ์น์ฑ ์์
- Ingress ์ค์
- ๋ค์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋์ ๋ก๋ ๋ฐธ๋ฐ์๋ก ์๋น์คํ๊ธฐ ์ํด Ingress๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- Label & Namespace
- ํ๋์ ํด๋ฌ์คํฐ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถํด์ ์ฌ์ฉํ ์ ์๋ค.
- ํ๋์ ํด๋ฌ์คํฐ์ ๋ค์ํ ํ๋ ์์ํฌ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์นํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ(
system
,default
)์ธ์ ์ฌ๋ฌ ๊ฐ์ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๋จ์
- ๋ณต์กํ๊ณ ์ด๋ฐ์ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ด๋ ต๋ค.
- YAML ์ค์ ํ์ผ์ ๋๋ฌด ๋ง๊ณ ํด๋ฌ์คํฐ๋ฅผ ๋ง๋๋ ๊ฒ๋ ์ฝ์ง ์๋ค.
์ฟ ๋ฒ๋คํฐ์ค ๊ธฐ๋ณธ ๊ฐ๋
Desired State
์ฟ ๋ฒ๋คํฐ์ค์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ Desired state - ์ํ๋ ์ํ๋ผ๋ ๊ฐ๋ ์ด๋ค. ์ํ๋ ์ํ๋ ๊ด๋ฆฌ์๊ฐ ๋ฐ๋ผ๋ ํ๊ฒฝ์ ์๋ฏธํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋ ์ผ๋ง๋ ๋ง์ ์น์๋ฒ๊ฐ ๋์ด ์์ผ๋ฉด ์ข์ผ์ง, ๋ช ๋ฒ ํฌํธ๋ก ์๋น์คํ๊ธฐ๋ฅผ ์ํ๋ ์ง๋ฅผ ์๋ฏธํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค๋ ํ์ฌ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ฉด์ ๊ด๋ฆฌ์๊ฐ ์ค์ ํ ์ํ๋ ์ํ๋ฅผ ์ ์งํ๋ ค๊ณ ๋ด๋ถ์ ์ผ๋ก ๋ค์ํ ์์ ์ ํ๋ ๋จ์ํ ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ฌํ ๊ฐ๋ ๋๋ฌธ์ ๊ด๋ฆฌ์๊ฐ ์๋ฒ๋ฅผ ๋ฐฐํฌํ ๋ ์ง์ ์ ์ธ ๋์์ ๋ช ๋ นํ์ง ์๊ณ ์ํ๋ฅผ ์ ์ธํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด "nginx ์ปจํ ์ด๋๋ฅผ ์คํํด์ค. ๊ทธ๋ฆฌ๊ณ 80 ํฌํธ๋ก ์คํํด์ค."๋ ํ์ฌ ์ํ๋ฅผ ์ํ๋ ์ํ๋ก ๋ฐ๊พธ๊ธฐ ์ํ ๋ช ๋ น์ด๊ณ "80ํฌํธ๋ฅผ ์คํํ nginx ์ปจํ ์ด๋๋ฅผ 1๊ฐ ์ ์งํด์ค"๋ ์ํ๋ ์ํ๋ฅผ ์ ์ธํ ๊ฒ์ด๋ค.
๋ช ๋ น๊ณผ ์ ์ธ์ CLI ๋ช ๋ น์ด์์๋ ๋๋ฌ๋๋ค.
docker run # ๋ช
๋ น
kubectl create # ์ํ ์์ฑ
์ฟ ๋ฒ๋คํฐ์ค์ ํต์ฌ์ ์ํ์ด๋ฉฐ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ค ์ํ๊ฐ ์๊ณ ์ด๋ป๊ฒ ์ํ๋ฅผ ์ ์ธํ๋์ง๋ฅผ ์์์ผ ํ๋ค.
Kubernetes Object
์ฟ ๋ฒ๋คํฐ์ค๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋์์ ์ค๋ธ์ ํธ๋ก ์ ์ํ๋ค.
Pod
์ฟ ๋ฒ๋คํฐ์ค์์ ๋ฐฐํฌํ ์ ์๋ ๊ฐ์ฅ ์์ ๋จ์์ ์ค๋ธ์ ํธ์ด๋ค. ํ ๊ฐ ์ด์์ ์ปจํ ์ด๋์ ์คํ ๋ฆฌ์ง, ๋คํธ์ํฌ ์์ฑ์ ๊ฐ์ง๋ค. Pod์ ์ํ ์ปจํ ์ด๋๋ ์คํ ๋ฆฌ์ง์ ๋คํธ์ํฌ๋ฅผ ๊ณต์ ํ๊ณ ์๋ก localhost๋ก ์ ๊ทผํ ์ ์๋ค. ์ปจํ ์ด๋๋ฅผ ํ๋๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ฐ๋์ Pod๋ก ๊ฐ์ธ์ ๊ด๋ฆฌํ๋ค.
ReplicaSet
Pod์ ์ฌ๋ฌ ๊ฐ(ํ ๊ฐ ์ด์) ๋ณต์ ํ์ฌ ๊ด๋ฆฌํ๋ ์ค๋ธ์ ํธ์ด๋ค. Pod๋ฅผ ์์ฑํ๊ณ ๊ฐ์๋ฅผ ์ ์งํ๋ ค๋ฉด ๋ฐ๋์ ReplicaSet์ ์ฌ์ฉํด์ผ ํ๋ค. ReplicaSet์ ๊ตฌ์ฑ์ ๋ณต์ ํ ๊ฐ์, ๊ฐ์๋ฅผ ์ฒดํฌํ ๋ผ๋ฒจ ์ ํ์, ์์ฑํ Pod์ ์ค์ ๊ฐ ๋ฑ์ ๊ฐ์ง๊ณ ์๋ค. ์ง์ ์ ์ผ๋ก ReplicaSet์ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋ Deployment๋ฑ ๋ค๋ฅธ ์คํ์ ํธ์ ์ํด์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
Service
๋คํธ์ํฌ์ ๊ด๋ จ๋ ์ค๋ธ์ ํธ์ด๋ค. Pod์ ์ธ๋ถ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํด์ฃผ๊ณ ์ฌ๋ฌ ๊ฐ์ Pod์ ๋ฐ๋ผ๋ณด๋ ๋ด๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์์ฑํ ๋๋ ์ฌ์ฉํ๋ค. ๋ด๋ถ DNS์ ์๋น์ค ์ด๋ฆ์ ๋๋ฉ์ธ์ผ๋ก ๋ฑ๋กํ๊ธฐ ๋๋ฌธ์ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ์ญํ ๋ ํ๋ค.
Volume
์ ์ฅ์์ ๊ด๋ จ๋ ์ค๋ธ์ ํธ์ด๋ค. ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์๋ ์๊ณ EBS๊ฐ์ ์คํ ๋ฆฌ์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ์ฌ ์ฌ์ฉํ ์๋ ์๋ค.
Object Spec - YAML
์ค๋ธ์ ํธ์ ๋ช ์ธ๋ YAML ํ์ผ๋ก ์ ์ํ๋ค. YAML ํ์ผ์ ์ค๋ธ์ ํธ์ ์ข ๋ฅ์ ์ํ๋ ์ํ๋ฅผ ์ ๋ ฅํ๋ค.
์ด๋ฌํ ๋ช ์ธ๋ ์์ฑ, ์กฐํ, ์ญ์ ๋ก ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ REST API๋ก ์ฝ๊ฒ ๋ ธ์ถํ ์ ์๋ค. ์ ๊ทผ ๊ถํ ์ค์ ๋ ๊ฐ์ ๊ฐ๋ ์ ์ ์ฉํ์ฌ ๋๊ฐ ์ด๋ค ์ค๋ธ์ ํธ์ ์ด๋ค ์์ฒญ์ ํ ์ ์๋์ง ์ ์ํ ์ ์๋ค.
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: busybox
image: busybox:1.25
์๊ตฌ๋๋ ํ๋
- apiVersion: ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ํ ์ฟ ๋ฒ๋คํฐ์ค API ๋ฒ์
- kind: ์ด๋ค ์ข ๋ฅ์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๊ณ ์ ํ๋ ์ง
- metadata
- name: ์ค๋ธ์ ํธ๋ฅผ ์ ์ผํ๊ฒ ๊ตฌ๋ถ์ง์ด ์ค ๋ฐ์ดํฐ. ์ด๋ฆ, UID ๊ทธ๋ฆฌ๊ณ ์ ํ์ ์ธ ๋ค์์คํ์ด์ค๋ฅผ ํฌํจ.
- spec
์ฟ ๋ฒ๋คํฐ์ค ๋ฐฐํฌ๋ฐฉ์
์ฟ ๋ฒ๋คํฐ์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ธฐ ์ํด ์ํ๋ ์ํ๋ฅผ ๋ค์ํ ์ค๋ธ์ ํธ์ ๋ผ๋ฒจ์ ๋ถ์ฌ ์ ์(YAML)ํ๊ณ API ์๋ฒ์ ์ ๋ฌํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค ์ํคํ ์ฒ
์ฟ ๋ฒ๋คํฐ์ค๋ ์ค์(Master)์ API ์๋ฒ์ ์ํ ์ ์ฅ์๋ฅผ ๋๊ณ ๊ฐ ์๋ฒ(Node)์ ์์ด์ ํธ(Kubelet)์ ํต์ ํ๋ ๋จ์ํ ๊ตฌ์กฐ์ด๋ค.
๋ง์คํฐ-๋ ธ๋ ๊ตฌ์กฐ
์ฟ ๋ฒ๋คํฐ์ค๋ ์ ์ฒด ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ง์คํฐ์ ์ปจํ ์ด๋๊ฐ ๋ฐฐํฌ๋๋ ๋ ธ๋๋ก ๊ตฌ์ฑ๋๋ค. ๋ชจ๋ ๋ช ๋ น์ ๋ง์คํฐ์ API ์๋ฒ๋ฅผ ํธ์ถํ๊ณ ๋ ธ๋๋ ๋ง์คํฐ์ ํต์ ํ๋ฉด์ ํ์ํ ์์ ์ ์ํํ๋ค. ํน์ ๋ ธ๋์ ์ปจํ ์ด๋์ ๋ช ๋ นํ๊ฑฐ๋ ๋ก๊ทธ๋ฅผ ์กฐํํ ๋๋ ๋ ธ๋์ ์ง์ ๋ช ๋ นํ๋ ๊ฒ ์๋๋ผ ๋ง์คํฐ์ ๋ช ๋ น์ ๋ด๋ฆฌ๊ณ ๋ง์คํฐ๊ฐ ๋ ธ๋์ ์ ์ํ์ฌ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์๋ตํ๋ค.