Pod๋ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๊ฐ์ฅ ์์ ๋ฐฐํฌ ๋จ์์ด๋ค. ํ๋์ Pod ์์ ์๋ ์ปจํ ์ด๋๋ค์ ๋ค์์ ๊ณต์ ํ๋ค.
Pod์๋ ์ปจํ ์ด๋๊ฐ ํ๋๋ง ์์ ์๋, ์ฌ๋ฌ ๊ฐ๊ฐ ์์ ์๋ ์๋ค. ๋ณดํต์ 1 Pod = 1 ์ปจํ ์ด๋๊ฐ ๊ธฐ๋ณธ์ด๊ณ , ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ํ๋์ Pod์ ๋๋ ๊ฒ์ sidecar, init container ๊ฐ์ ํน์ ํจํด์์๋ง ์ฌ์ฉํ๋ค.
์ฟ ๋ฒ๋คํฐ์ค์ ๋ชจ๋ ๋ฆฌ์์ค๋ YAML(๋๋ JSON) ๋งค๋ํ์คํธ๋ก ์ ์ธํ๋ค. Pod๋ ๋ค์ ๋ค ๊ฐ์ ์ต์์ ํ๋๋ก ์ด๋ฃจ์ด์ง๋ค.
apiVersion: ๋ฆฌ์์ค๊ฐ ์ํ API ๊ทธ๋ฃน๊ณผ ๋ฒ์ ์ผ๋ก, Pod๋ ์ฝ์ด API ๊ทธ๋ฃน์ ์ํด `v1`์ ์ง์ ํ๋ค. kind: ๋ฆฌ์์ค์ ์ข
๋ฅ๋ก Pod์ ๊ฒฝ์ฐ `Pod`๋ฅผ ์ง์ ํ๋ค. metadata: ๋ฆฌ์์ค๋ฅผ ์๋ณํ๊ธฐ ์ํ ์ ๋ณด๋ก, ๊ฐ์ namespace ์์์ `name`์ ์ ์ผํด์ผ ํ๋ค. spec: ์ด Pod๊ฐ ์ด๋ป๊ฒ ๋์ํด์ผ ํ๋์ง์ ๋ํ ์ ์ธ์ ๋ช
์ธ๋ฅผ ๊ธฐ์ ํ๋ค. apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
์ฃผ์ ํ๋์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
metadata.name: namespace ๋ด์์ Pod๋ฅผ ์๋ณํ๋ ์ด๋ฆ์ผ๋ก, DNS-1123 subdomain ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค. (์๋ฌธ์ / ์ซ์ / `-`, ์์๊ณผ ๋์ ์์ซ์) metadata.labels: ์์์ key-value ์์ผ๋ก, ๋ค๋ฅธ ๋ฆฌ์์ค๊ฐ ์ด Pod๋ฅผ ์ฐพ์ ๋ ๋งค์นญ ํค๋ก ์ฌ์ฉ๋๋ค. spec.containers: Pod๋ฅผ ๊ตฌ์ฑํ๋ ์ปจํ
์ด๋ ๋ชฉ๋ก์ผ๋ก, ์ปจํ
์ด๋๊ฐ ํ๋์ฌ๋ -๋ก ์์ํ๋ค. spec.containers[].image: ์ฌ์ฉํ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ก, ์ด์ ํ๊ฒฝ์์๋ ๋ช
์์ ํ๊ทธ๋ฅผ ๊ถ์ฅํ๋ค. spec.containers[].ports: ์ปจํ
์ด๋๊ฐ listen ์ค์ธ ํฌํธ๋ฅผ ์ ์ธํ๋ค. ์ด ํ๋ ์์ฒด๊ฐ ์ธ๋ถ์ ํฌํธ๋ฅผ ์ฌ๋ ๊ฒ์ ์๋๋ฉฐ, ๋์ค์ Service ๋ฆฌ์์ค๋ฅผ ํตํด ์ธ๋ถ์ ๋
ธ์ถํ ์ ์๋ค. ์์ฑํ ๋งค๋ํ์คํธ๋ฅผ ํด๋ฌ์คํฐ์ ๋ฐ์ํ๊ณ ์ํ๋ฅผ ํ์ธํด๋ณด์.
kubectl apply -f - ๋งค๋ํ์คํธ ์ ์ฉ kubectl apply -f pod.yamlapply๋ ์ ์ธ์ ๋ช
๋ น์ด๋ค. ๋งค๋ํ์คํธ์ ์ ์๋ ์ํ์ ํด๋ฌ์คํฐ์ ํ์ฌ ์ํ๋ฅผ ๋น๊ตํด ์ฐจ์ด์ ๋ง ๋ฐ์ํ๋ค. kubectl create -f๊ฐ ์์ง๋ง, create๋ ๋ฆฌ์์ค๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ฉด ์๋ฌ๋ฅผ ๋ฐํํ๋ค. kubectl get pods - ๋ฆฌ์์ค ์กฐํ kubectl get pods # ํ์ฌ namespace์ ๋ชจ๋ Pod
kubectl get pods nginx-pod # ํน์ Pod ํ๋
kubectl get pods -o wide # IP, ๋ ธ๋ ์ ๋ณด๊น์ง ํฌํจ
kubectl get pods -A # ๋ชจ๋ namespace ์กฐํ
kubectl get pods nginx-pod -o yaml # spec๊ณผ status ์ ์ฒด
๊ธฐ๋ณธ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 3m
READY: (Ready ์ํ์ธ ์ปจํ
์ด๋ ์) / (์ ์ฒด ์ปจํ
์ด๋ ์). readiness probe๊ฐ ์ฑ๊ณตํ ์ปจํ
์ด๋๋ง Ready ์ํ๊ฐ ๋๋ค. STATUS: Pod์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ผ๋ก, Pending, Running, Succeeded, Failed, Unknown ์ค ํ๋์ ๊ฐ์ ๊ฐ์ง๋ค. RESTARTS: kubelet์ด ์ปจํ
์ด๋๋ฅผ ์ฌ์์ํ ํ์๋ก, ์ปจํ
์ด๋๊ฐ ๋น์ ์ ์ข
๋ฃ๋ ๋๋ง๋ค ์ฆ๊ฐํ๋ค. Pod์๋ ํด๋ฌ์คํฐ ๋ด๋ถ์์ ๋ผ์ฐํ ๊ฐ๋ฅํ ๊ณ ์ ํ IP๊ฐ ํ ๋น๋๋ค. (๊ตฌ์ฒด์ ์ธ IP ๋์ญ์ CNI ํ๋ฌ๊ทธ์ธ ์ค์ ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.)
kubectl get pods nginx-pod -o wide
# NAME READY STATUS ... IP NODE
# nginx-pod 1/1 Running ... 10.244.1.5 worker-1
์ด IP๋ ํ๋ฐ์ฑ์ผ๋ก, Pod๊ฐ ์ฌ์์๋๊ฑฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ก ์ฎ๊ฒจ๊ฐ๋ฉด ๋ฐ๋๊ฒ ๋๋ค. ๋ฐ๋ผ์ Pod IP๋ฅผ ๋ค๋ฅธ ๊ณณ์์ ์ง์ ์ฐธ์กฐํด์ ์ ๋๋ฉฐ, ์์ ๋ ์๋ํฌ์ธํธ๊ฐ ํ์ํ๋ค๋ฉด Service ๊ฐ์ ์ถ์ํ๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
kubectl delete - ๋ฆฌ์์ค ์ญ์ kubectl delete pod nginx-pod # ์ด๋ฆ์ผ๋ก ์ญ์
kubectl delete -f pod.yaml # ๋งค๋ํ์คํธ๋ก ์ญ์
apply๋ก ์์ฑํ ๋ฆฌ์์ค๋ ๊ฐ์ ๋งค๋ํ์คํธ๋ก delete -f ๋ช
๋ น์ ์คํํ๋ ๊ฒ์ด ์์ ํ๋ค. ๋งค๋ํ์คํธ์ ์ ์๋ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ํ ๋ฒ์ ์ ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ญ์ ์ ์ฆ์ ์ข
๋ฃ๊ฐ ์๋, graceful termination ์ ์ฐจ๋ฅผ ๊ฑฐ์น๋ค.
SIGTERM์ ๋ณด๋ธ๋ค. terminationGracePeriodSeconds (๊ธฐ๋ณธ๊ฐ 30์ด) ๋์ ๊ธฐ๋ค๋ฆฐ๋ค. ์ด ์๊ฐ ์์ ํ๋ก์ธ์ค๊ฐ ์ ์ ์ข
๋ฃ๋ผ์ผ ํ๋ค. SIGKILL๋ก ๊ฐ์ ์ข
๋ฃํ๋ค. ์ด ๋ฉ์ปค๋์ฆ ๋๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์งํ ์ค์ธ ์์ฒญ์ ๋ง๋ฌด๋ฆฌํ๊ณ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ ์๊ฐ์ ํ๋ณดํ ์ ์๋ค. --grace-period=0 --force ์ต์
์ผ๋ก ์ฆ์ ์ข
๋ฃ ํ ์๋ ์์ง๋ง, ๋ฐ์ดํฐ ์ ์ค ์ํ์ด ์์ด ์ด์ ํ๊ฒฝ์์๋ ๊ถ์ฅ๋์ง ์๋๋ค.
์คํ ์ค์ธ Pod์ ์ํ์ ์ด๋ฒคํธ, ๋ก๊ทธ๋ฅผ ํ์ธํ๊ฑฐ๋ ๋ด๋ถ์ ์ง์ ๋ค์ด๊ฐ์ผ ํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
kubectl describe pod - ์์ธ ์ ๋ณด์ ์ด๋ฒคํธ kubectl describe pod nginx-podget -o yaml์ด ๋งค๋ํ์คํธ๋ฅผ ๊ทธ๋๋ก ๋ณด์ฌ์ค๋ค๋ฉด, describe๋ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ํํ๋ก ์ ๋ฆฌํ๊ณ ๋ง์ง๋ง์ Events ์น์
์ ๋ถ์ธ๋ค. ์ด๋ฏธ์ง ํ ์คํจ, ์ค์ผ์ค๋ง ์คํจ ๋ฑ์ ๋ก๊ทธ๊ฐ Events์ ๊ธฐ๋ก๋์ด ๋๋ฒ๊น
์ ์ ์ฉํ๋ค.
kubectl logs - ์ปจํ
์ด๋ ๋ก๊ทธ ํ์ธ kubectl logs nginx-podlogs๋ ์ปจํ
์ด๋์ stdout๊ณผ stderr๋ฅผ ๋ณด์ฌ์ค๋ค. ๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์
์ด ํ์ผ์ ์ง์ ๋ก๊ทธ๋ฅผ ์ฐ๋ฉด kubectl logs๋ก๋ ํ์ธํ ์ ์๋ค.
k8s ํ๊ฒฝ์์๋ stdout/stderr๋ก ์ถ๋ ฅํ๋ ๊ฒ์ด ํ์ค์ด๋ฉฐ, ๊ทธ ์ถ๋ ฅ์ ์ปจํ
์ด๋ ๋ฐํ์์ด ๋
ธ๋์ ํ์ผ๋ก ์์งํ๋ค.
์ถ๊ฐ๋ก -p(previous) ์ต์
์ ๋ถ์ด๋ฉด ์ง์ ์ ์ข
๋ฃ๋ ์ธ์คํด์ค์ ๋ก๊ทธ๋ฅผ ๋ณผ ์ ์๋ค.
kubectl exec - ์ปจํ
์ด๋ ๋ด๋ถ ์ง์
kubectl exec -it nginx-pod -- /bin/bashdocker exec์ ๋น์ทํ๊ฒ ๋์ํ๋ค. -i๋ stdin ์ฐ๊ฒฐ, -t๋ TTY ํ ๋น์ผ๋ก, ์ธํฐ๋ํฐ๋ธ ์
ธ๋ก ๋ค์ด๊ฐ๋ ค๋ฉด ๋ณดํต -it ์ต์
์ ํจ๊ป ์ด๋ค.
์ฃผ์ํ ์ ์ ์ปจํ
์ด๋์ ์
ธ ๋ฐ์ด๋๋ฆฌ๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ฉฐ, ์ด์ ํ๊ฒฝ์์ exec๋ก ์ํ๋ฅผ ์ง์ ๊ฑด๋๋ฆฌ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค.
์ง๊ธ๊น์ง Pod๋ฅผ ์์ฑํ๊ณ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ดค๋ค. ๋ง์ง๋ง์ผ๋ก, ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ ์ปจํ ์ด๋ ์์ Pod๋ผ๋ ํ ๋จ๊ณ์ ์ถ์ํ๋ฅผ ๋๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ถ์ํ๊ฐ ์ด๋ป๊ฒ ์ค์ ๋ก ๊ตฌํ๋๋์ง๋ฅผ ์ ๋ฆฌํด๋ณด์.
๋์ปค ๊ฐ์ ์ปจํ
์ด๋ ๋ฐํ์์ด ๋ค๋ฃจ๋ ๋จ์๋ ๊ฐ๋ณ ์ปจํ
์ด๋์ด๋ค. ๋ฐ๋ฉด ์ฟ ๋ฒ๋คํฐ์ค๋ ํ ๋จ๊ณ ์์ ๋จ์์ธ Pod๋ฅผ ๋๋ค.
์ด์ ๋ ํจ๊ป ๋์ํด์ผ ํ๋ ์ปจํ
์ด๋๋ค์ ๊ฐ์ ๋ฆฌ๋
์ค ๋ค์์คํ์ด์ค๋ก ๋ฌถ์ด, ํ๋์ ๋จ์๋ก ์ค์ผ์ค๋งํ๊ธฐ ์ํด์์ด๋ค.
๊ฐ์ Pod์ ์ํ ์ปจํ
์ด๋๋ค์ ๋ค์ ๋ค์์คํ์ด์ค๋ฅผ ๊ณต์ ํ๋ค.
๋ฐ๋ฉด Mount ๋ค์์คํ์ด์ค(ํ์ผ์์คํ
)๋ ๊ณต์ ํ์ง ์๋๋ค. ์ปจํ
์ด๋ ๊ฐ ํ์ผ ๊ณต์ ๋ ๋ณ๋์ ๋ณผ๋ฅจ์ ํตํด ์ด๋ฃจ์ด์ง๋ฉฐ, PID ๋ค์์คํ์ด์ค๋ ๊ธฐ๋ณธ๊ฐ์ ๋น๊ณต์ ์ด๋ค.
ํ์ ์ spec.shareProcessNamespace: true๋ก ๋ช
์ํด์ผ ํ๋ค.
์ด ๊ณต์ ๋ชจ๋ธ ์์์ sidecar ํจํด์ด ๊ฐ๋ฅํด์ง๋ค. ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์ด๋ ์์ ๋ก๊น
, ํ๋ก์, ์๋น์ค ๋ฉ์ ๊ฐ์ ๋ณด์กฐ ์ปจํ
์ด๋๋ฅผ ํจ๊ป ๋๊ณ , ๊ฐ์ IP์ ๊ฐ์ ๋ณผ๋ฅจ์ ๊ณต์ ํ ์ฑ ํ์
ํ๊ฒ ๋ง๋๋ ๋ฐฉ์์ด๋ค. ์ด๋ ๊ฒ ํ Pod๋ ๊ฒฐ๊ตญ ํ๋์ ์๊ฒฐ๋ ์ ํ๋ฆฌ์ผ์ด์
๋จ์๊ฐ ๋๋ค.
๋ํ ๊ฐ์ Pod์ ๋ชจ๋ ์ปจํ
์ด๋๋ ๊ฐ์ ์์ปค ๋
ธ๋์์ ํจ๊ป ์คํ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค. ์ด๋ ๋จ์ํ ์ถ์ํ๊ฐ ์๋๋ผ ๊ฐํ ์ ์ฝ ์กฐ๊ฑด์ด๋ค. (๋ค์์คํ์ด์ค ๊ณต์ ๋ ๋จ์ผ ๋
ธ๋ ์์์๋ง ์ฑ๋ฆฝํ๊ธฐ ๋๋ฌธ)
๊ทธ๋ ๋ค๋ฉด ์ด ๋ค์์คํ์ด์ค ๊ณต์ ๋ ์ค์ ๋ก ์ด๋ป๊ฒ ๊ตฌํ๋ ๊น? ๋ต์ Pause ์ปจํ
์ด๋์ ์๋ค.
Pause ์ปจํ
์ด๋๋ ๊ฐ Pod๋ง๋ค ์๋์ผ๋ก ํจ๊ป ์์ฑ๋๋ ์ธํ๋ผ ์ปจํ
์ด๋๋ค. ์ฌ์ฉ์๊ฐ ์์ฑํ ๋งค๋ํ์คํธ์๋ ๋ฑ์ฅํ์ง ์์ง๋ง, kubelet์ด Pod์ ๋์ธ ๋ ๊ฐ์ฅ ๋จผ์ ์์ฑํ๋ค. ์ญํ ์ ๋ค์๊ณผ ๊ฐ๋ค.
์์ปค ๋ ธ๋๋ฅผ ํตํด ์ง์ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
ps aux | grep pause