ํ๋(Pod)
- Container ์ Pod ๊ฐ๋
- container
- Pod ๋?
- ์ปจํ ์ด๋๋ฅผ ํํํ๋ K8S API์ ์ต์ ๋จ์, ๋ค์๋งํด ์ปจํ ์ด๋๋ฅผ ๋์์์ผ์ฃผ๋ ์ต์ ๋จ์
- Pod ์๋ ํ๋ ๋๋ ์ฌ๋ฌ๊ฐ์ ์ปจํ ์ด๋๊ฐ ํฌํจ๋ ์ ์์
1. Pod ์์ฑํ๊ธฐ (2๊ฐ์ง ๋ฐฉ์)
์ค์ต
- CLI์ผ๋ก pod ์์ฑ
2. multi-container Pod ์์ฑํ๊ธฐ
์ค์ต
- yaml๋ก pod ์์ฑ
- ํ๋์ pod์ centos ์ webserver ์ปจํ ์ด๋๊ฐ ๋ฐ๋ก ์กด์ฌ
- ip ๊ฐ ๋์ผํ๊ฒ ๊ณต์ ๋๋ค.
ํ๋(Pod)์ ๋์ flow
- pending : schduler๊ฐ worker node๋ค ์ค ์ด๋๊ณณ์ webserver ์ ์คํ์ํฌ์ง ์ ํํ๋ ๊ณผ์ ์ ์ผ์ปซ๋๋ค.
Question & Answer
- dry -run ์ต์
: ์คํํ์ง๋ง๊ณ ์คํ์ด ๋๋์ง๊น์ง๋ง ํ์ธํ๋ค.
# ์ปจํ ์ด๋ image 'redis123'์ ์คํํ๋ pod 'redis'๋ฅผ yaml์ ์ด์ฉํด ์์ฑํ์์ค. # ์์ ๋ง๋ redis pod์ image๋ฅผ redis๋ก ์์ ํ์ฌ ๋์์ํค์์ค. $ kubectl run redis --image=redis123 --dry-run -o yaml > redis.yaml # yaml ํ์ผ ํ๋๊ฐ ์๊น $ kubectl create -f redis.yaml $ kubectl get pods redis # ์๋ฌ ๋ฐ์ $ kubectl describe pod $ kubectl edit pod redis $ kubectl get pods
livenessProbe๋ฅผ ์ด์ฉํด self-healing Pod (kubelet์ผ๋ก ์ปจํ ์ด๋ ์ง๋จํ๊ธฐ)
- kubernetes Feacures - self-healing
- Restarts containers that fail, replaces and reschedules containers when nodes die, kills containers that donโt respond to your user-defined health check, and doesnโt advertise them to clients until they are ready to serve.
- ์ฃผ๊ธฐ์ ์ผ๋ก ์ํ๋ฅผ ํ์ธํ๋ค.
- failureThreshold : health check ์คํจ ํ์
init container๋ฅผ ์ ์ฉํ Pod
- ์ฑ ์ปจํ ์ด๋ ์คํ ์ ์ ๋ฏธ๋ฆฌ ๋์์ํฌ ์ปจํ ์ด๋
- ๋ณธ Cantainer๊ฐ ์คํ๋๊ธฐ ์ ์ ์ฌ์ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ
- ์ด๊ธฐํ ์ปจํ ์ด๋๊ฐ ๋ชจ๋ ์คํ๋ ํ์ ์ฑ ์ปจํ ์ด๋ ์คํ
- https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/ (์์ ์ ๊ณตํ๊ณ ์์)
์ค์ต
infra container(pause) ์ดํดํ๊ธฐ
- pod๊ฐ ์์ฑ๋ ๋ ํจ๊ป ์์ฑ๋๋ฉฐ, pod์ ip, hostname ์ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํด ์ฃผ๋ ์ปจํ ์ด๋์ด๋ค.
static Pod ๋ง๋ค๊ธฐ
- API ์๋ฒ์์ด ํน์ ๋ ธ๋์ ์๋ kubelet Daemon ๋์์ ์ํด ์ง์ ๊ด๋ฆฌ
- /etc/kubernetes/manifests/ ๋๋ ํ ๋ฆฌ์ k8s yaml ํ์ผ์ ์ ์ฅ ์ ์ ์ฉ๋จ
# API ๋์์์ด kubelet Daemon์ผ๋ก Pod ์คํ
# static Pod path๋ก ์ ์
# ์ ์๋ ๊ณณ์ Pod yaml๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋์ํ๋ค.
$ cat /var/lib/kubelet/config.yaml
Pod์ ๋ฆฌ์์ค(cpu, memory) ํ ๋นํ๊ธฐ
- Resource Requests
- ํ๋๋ฅผ ์คํํ๊ธฐ ์ํ ์ต์ ๋ฆฌ์์ค ์์ ์์ฒญ
- Resource Limits
- ํ๋๊ฐ ์ฌ์ฉํ ์ ์๋ ์ต๋ ๋ฆฌ์์ค ์์ ์ ํ
- Memory limit์ ์ด๊ณผํด์ ์ฌ์ฉ๋๋ ํ๋๋ ์ข ๋ฃ(OOM kill)๋๋ฉฐ ๋ค์ ์ค์ผ์ค๋ง ๋๋ค.
- OOM killer : out of Memory Killer ์ ์ฝใ ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃ์ํค๋ ์ญํ
- CPU๋ Milicore๋จ์ (1,000 Milicore = 1Core ) , Memory๋ Mbyte ๋จ์๋ก ํ ๋น
- https://kubernetes.io/docs/tasks/configure-pod-container/assign-cpu-resource/
- ์๋ฅผ ๋ค์ด CPU request๋ฅผ 500ms๋ก ํ๊ณ , limit์ 1000ms๋ก ํ๋ฉด ํด๋น ์ปจํ ์ด๋๋ ์ฒ์์ ์์ฑ๋ ๋ 500ms๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ, ์์คํ ์ฑ๋ฅ์ ์ํด์ ๋ ํ์ํ๋ค๋ฉด CPU๊ฐ ์ถ๊ฐ๋ก ๋ ํ ๋น๋์ด ์ต๋ 1000ms ๊น์ง ํ ๋น๋ ์ ์๋ค.
Pod์ ํ๊ฒฝ๋ณ์ ์ค์ ํ๊ธฐ
์ค์ต
Pod ๊ตฌ์ฑ ํจํด์ ์ข ๋ฅ
- Sidecar : App container์์ ์คํ๋๋ log๋ฅผ sidecar์ ๋ด์์ ์ ์กํจ.
- Adapter : ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ Adapter๋ก ๋๊ณ ์ App container๋ฅผ ํตํด์ ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๋ฐฉ์
- Ambassador : ๋ฐ์ดํฐ๊ฐ App container๋ก ๋ค์ด์ค๋ฉด ํด๋น ๋ด์ฉ์ Ambassador๊ฐ ๋ฐ์ ๊ทธ DB ์๋ฃ๋ฅผ ๋ค์ํ ๊ณณ์ผ๋ก ์ ์กํด์ฃผ๋ ์ญํ
Source
https://www.youtube.com/watch?v=0rYt3PcggzA&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=10
https://www.youtube.com/watch?v=ChArV14J6Ek&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=11
https://www.youtube.com/watch?v=-NeJS7wQu_Q&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=12
https://www.youtube.com/watch?v=ChArV14J6Ek&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=13
https://www.youtube.com/watch?v=qEu_znIYCz0&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=14
https://www.youtube.com/watch?v=lxCtyWPsb-0&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=15
https://www.youtube.com/watch?v=Uc-VnK19T7w&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=16
https://velog.io/@exljhun307/pod-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95%EA%B3%BC-%EC%8B%A4%ED%96%89-%ED%8C%A8%ED%84%B4
https://bcho.tistory.com/1291