๋ฉ๋ชจ. ๋ฒ์ญ: ์ ๋ฝ์ ์ฌํ ์ ๋ณด ์ ๊ณต์ ์ฒด์ธ Omio์ ๋๋ผ์ด ์ญ์ฌ๋ฅผ ํตํด ๋ ์๋ ๊ธฐ๋ณธ ์ด๋ก ๋ถํฐ Kubernetes ๊ตฌ์ฑ์ ํฅ๋ฏธ๋กญ๊ณ ์ค์ฉ์ ์ธ ๋ณต์ก์ฑ๊น์ง ์๋ดํฉ๋๋ค. ์ด๋ฌํ ์ฌ๋ก์ ์ต์ํด์ง๋ฉด ์์ผ๊ฐ ๋์ด์ง ๋ฟ๋ง ์๋๋ผ ์ฌ์ํ ๋ฌธ์ ๋ ์๋ฐฉํ ์ ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ด ์ ์๋ฆฌ์ ๋ฉ์ถฐ ์๊ณ , ์ํ ํ์ธ์ ์๋ตํ์ง ์๊ณ , ์ด์ ๋ฅผ ์ ์ ์๋ ์ ์ด ์์ต๋๊น? ํ ๊ฐ์ง ๊ฐ๋ฅํ ์ค๋ช
์ CPU ๋ฆฌ์์ค ํ ๋น๋ ์ ํ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ด ๊ธ์์ ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ ๋ด์ฉ์
๋๋ค.
TL; DR :
CFS ํ ๋น๋ ๋ฒ๊ทธ๊ฐ ์๋ Linux ์ปค๋ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Kubernetes์์ CPU ์ ํ์ ๋นํ์ฑํํ๊ฑฐ๋ Kubelet์์ CFS ํ ๋น๋์ ๋นํ์ฑํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํต์ฌ์๋
์ค๋ฏธ์ค์์ ์ ์ฒด ์ธํ๋ผ๋ Kubernetes์์ ๊ด๋ฆฌ๋ฉ๋๋ค.. ๋ชจ๋ ์ํ ์ ์ฅ ๋ฐ ์ํ ๋น์ ์ฅ ์ํฌ๋ก๋๋ Kubernetes์์๋ง ๋ ์ ์ ์ผ๋ก ์คํ๋ฉ๋๋ค(Google Kubernetes Engine ์ฌ์ฉ). ์ง๋ XNUMX๊ฐ์ ๋์ ์ฐ๋ฆฌ๋ ๋ฌด์์์ ์ธ ์๋ ์ ํ๋ฅผ ๊ด์ฐฐํ๊ธฐ ์์ํ์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์ง๋๊ฑฐ๋ ์ํ ํ์ธ์ ๋ํ ์๋ต์ด ์ค์ง๋๊ณ , ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ๋ฑ์ ํ์์ด ๋ฐ์ํฉ๋๋ค. ์ด ํ๋์ ์ค๋ซ๋์ ์ฐ๋ฆฌ๋ฅผ ํผ๋์ค๋ฝ๊ฒ ๋ง๋ค์๊ณ ๋ง์นจ๋ด ์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ์ฌ๊ฐํ๊ฒ ๋ฐ์๋ค์ด๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๊ธฐ์ฌ ์์ฝ :
- ์ปจํ ์ด๋์ Kubernetes์ ๋ํ ๋ช ๋ง๋
- CPU ์์ฒญ ๋ฐ ์ ํ์ด ๊ตฌํ๋๋ ๋ฐฉ๋ฒ
- ๋ฉํฐ ์ฝ์ด ํ๊ฒฝ์์ CPU ์ ํ์ด ์๋ํ๋ ๋ฐฉ์
- CPU ์กฐ์ ์ ์ถ์ ํ๋ ๋ฐฉ๋ฒ
- ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๋์์ค.
์ปจํ ์ด๋์ Kubernetes์ ๋ํ ๋ช ๋ง๋
Kubernetes๋ ๋ณธ์ง์ ์ผ๋ก ์ธํ๋ผ ์ธ๊ณ์ ํ๋ ํ์ค์ ๋๋ค. ์ฃผ์ ์์ ์ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ ์ ๋๋ค.
์ปจํ ์ด๋
๊ณผ๊ฑฐ์๋ ์๋ฒ์์ ์คํํ๊ธฐ ์ํด Java JAR/WAR, Python Egg ๋๋ ์คํ ํ์ผ๊ณผ ๊ฐ์ ์ํฐํฉํธ๋ฅผ ๋ง๋ค์ด์ผ ํ์ต๋๋ค. ํ์ง๋ง ์ด๋ฅผ ์๋์ํค๋ ค๋ฉด ๋ฐํ์ ํ๊ฒฝ(Java/Python) ์ค์น, ํ์ํ ํ์ผ์ ์ฌ๋ฐ๋ฅธ ์์น์ ๋ฐฐ์น, ํน์ ์ด์ ์ฒด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ๋ณด์ฅ ๋ฑ ์ถ๊ฐ ์์ ์ ์ํํด์ผ ํ์ต๋๋ค. ์ฆ, ๊ตฌ์ฑ ๊ด๋ฆฌ์ ์ธ์ฌํ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํ์ต๋๋ค(์ข ์ข ๊ฐ๋ฐ์์ ์์คํ ๊ด๋ฆฌ์ ์ฌ์ด์ ๋ ผ์์ ์์ธ์ด ๋๊ธฐ๋ ํ์ต๋๋ค).
์ปจํ ์ด๋๋ ๋ชจ๋ ๊ฒ์ ๋ณํ์์ผฐ์ต๋๋ค. ์ด์ ์ํฐํฉํธ๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ๋ฟ๋ง ์๋๋ผ ์์ ํ ์คํ ํ๊ฒฝ(Java/Python/...)๊ณผ ํ์ํ ํ์ผ/ํจํค์ง๋ฅผ ํฌํจํ๋ ์ผ์ข ์ ํ์ฅ ์คํ ํ์ผ๋ก ํํ๋ ์ ์์ต๋๋ค. ๋ฌ๋ฆฌ๋ค. ์ถ๊ฐ ๋จ๊ณ ์์ด ์ปจํ ์ด๋๋ฅผ ๋ค๋ฅธ ์๋ฒ์ ๋ฐฐํฌํ๊ณ ์คํํ ์ ์์ต๋๋ค.
๋ํ ์ปจํ ์ด๋๋ ์์ฒด ์๋๋ฐ์ค ํ๊ฒฝ์์ ์๋ํฉ๋๋ค. ์์ฒด ๊ฐ์ ๋คํธ์ํฌ ์ด๋ํฐ, ์ก์ธ์ค๊ฐ ์ ํ๋ ์์ฒด ํ์ผ ์์คํ , ์์ฒด ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ, CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์์ฒด ์ ํ ๋ฑ์ด ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ Linux ์ปค๋์ ํน์ ํ์ ์์คํ ์ธ ๋ค์์คํ์ด์ค ๋๋ถ์ ๊ตฌํ๋ฉ๋๋ค.
Kubernetes
์์ ์ธ๊ธํ๋ฏ์ด Kubernetes๋ ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ดํฐ์ ๋๋ค. ์๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋จธ์ ํ์ ์ ๊ณตํ ๋ค์ "Kubernetes, ํ๋ก์ธ์ 2๊ฐ์ ๊ฐ๊ฐ 3GB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ถ ๋ด ์ปจํ ์ด๋ ์ธ์คํด์ค XNUMX๊ฐ๋ฅผ ์์ํ๊ณ ๊ณ์ ์คํํ์!"๋ผ๊ณ ๋งํฉ๋๋ค. Kubernetes๊ฐ ๋๋จธ์ง ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ฌ์ ์ฉ๋์ ์ฐพ๊ณ , ์ปจํ ์ด๋๋ฅผ ์์ํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ค์ ์์ํ๋ฉฐ, ๋ฒ์ ๋ณ๊ฒฝ ์ ์ ๋ฐ์ดํธ๋ฅผ ์ถ์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Kubernetes๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋์จ์ด ๊ตฌ์ฑ ์์๋ฅผ ์ถ์ํํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋ฐ ์คํ์ ์ ํฉํ ๋ค์ํ ์์คํ ์ ๋ง๋ค ์ ์์ต๋๋ค.
์ผ๋ฐ์ธ์ ๊ด์ ์์ ๋ณธ Kubernetes
Kubernetes์ ์์ฒญ ๋ฐ ์ ํ์ด๋ ๋ฌด์์ ๋๊น?
์ข์์, ์ง๊ธ๊น์ง ์ปจํ ์ด๋์ Kubernetes๋ฅผ ๋ค๋ฃจ์์ต๋๋ค. ๋ํ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๋์ผํ ์์คํ ์ ์์ ์ ์๋ค๋ ๊ฒ๋ ์๊ณ ์์ต๋๋ค.
๊ณต๋ ์ํํธ์ ๋น์ ํ ์ ์์ต๋๋ค. ๋์ ๊ฑด๋ฌผ(๊ธฐ๊ณ/์ฅ์น)์ ๊ฐ์ ธ์ ์ฌ๋ฌ ์์ฐจ์ธ(์ปจํ ์ด๋)์๊ฒ ์๋ํฉ๋๋ค. Kubernetes๋ ๋ถ๋์ฐ ์ค๊ฐ์ธ ์ญํ ์ ํฉ๋๋ค. ์ธ์ ์๊ฐ ์๋ก ์ถฉ๋ํ์ง ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง๋ฌธ์ด ์๊น๋๋ค. ์๋ฅผ ๋ค์ด ๊ทธ๋ค ์ค ํ ๋ช ์ด ํ์ฅ์ค์ ๋ฐ๋์ ๋์ ๋น๋ฆฌ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ฌ๊ธฐ์์ ์์ฒญ๊ณผ ์ ํ์ด ์ ์ฉ๋ฉ๋๋ค. CPU ์๋ขฐ ๊ณํ ๋ชฉ์ ์ผ๋ก๋ง ํ์ํฉ๋๋ค. ์ด๋ ์ปจํ ์ด๋์ '์์๋ฆฌ์คํธ'์ ๊ฐ์ ๊ฒ์ผ๋ก, ๊ฐ์ฅ ์ ํฉํ ๋ ธ๋๋ฅผ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋์์ CPU ํ๋ ์๋ ๊ณ์ฝ๊ณผ ๋น๊ตํ ์ ์์ต๋๋ค. ์ปจํ ์ด๋์ ๋ํ ๋จ์๋ฅผ ์ ํํ์๋ง์ ํ ์ ์์๊ฑฐ์ผ. ์ ํด์ง ํ๊ณ๋ฅผ ๋ฐ์ด๋์ผ์ธ์. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ...
Kubernetes์์ ์์ฒญ ๋ฐ ์ ํ์ด ๊ตฌํ๋๋ ๋ฐฉ๋ฒ
Kubernetes๋ CPU ์ ํ์ ๊ตฌํํ๊ธฐ ์ํด ์ปค๋์ ๋ด์ฅ๋ ์กฐ์ ๋ฉ์ปค๋์ฆ(ํด๋ก ์ฃผ๊ธฐ ๊ฑด๋๋ฐ๊ธฐ)์ ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ๋๋ฅผ ์ด๊ณผํ๋ฉด ์กฐ์ ์ด ํ์ฑํ๋ฉ๋๋ค(์ฆ, ๋ ์ ์ CPU ์ฃผ๊ธฐ๋ฅผ ์์ ํจ). ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์์ฒญ๊ณผ ์ ํ์ ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ๋๋ฏ๋ก ๊ฐ์งํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ํฌ๋์ ๋ง์ง๋ง ๋ค์ ์์ ์ํ, ์ฆ "OOMKilled"์ธ์ง ํ์ธํ์ธ์. K8s๋ cgroup์ด ์๋ ์ฌ์ฉ๋์ ๋ฐ๋ผ ์ธก์ ํญ๋ชฉ๋ง ์ ๊ณตํ๋ฏ๋ก CPU ์กฐ์ ์ ๊ทธ๋ฆฌ ๊ฐ๋จํ์ง ์์ต๋๋ค.
CPU ์์ฒญ
CPU ์์ฒญ์ด ๊ตฌํ๋๋ ๋ฐฉ๋ฒ
๋จ์ํ๋ฅผ ์ํด 4์ฝ์ด CPU๋ฅผ ๊ฐ์ถ ๋จธ์ ์ ์๋ก ๋ค์ด ํ๋ก์ธ์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
K8s๋ ์ ์ด ๊ทธ๋ฃน ๋ฉ์ปค๋์ฆ(cgroups)์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค(๋ฉ๋ชจ๋ฆฌ ๋ฐ ํ๋ก์ธ์) ํ ๋น์ ์ ์ดํฉ๋๋ค. ๊ณ์ธต์ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ ๊ทธ๋ฃน์ ์์ ๊ทธ๋ฃน์ ํ๊ณ๋ฅผ ์์๋ฐ์ต๋๋ค. ๋ฐฐํฌ ์ธ๋ถ ์ ๋ณด๋ ๊ฐ์ ํ์ผ ์์คํ
(/sys/fs/cgroup
). ํ๋ก์ธ์์ ๊ฒฝ์ฐ ์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. /sys/fs/cgroup/cpu,cpuacct/*
.
K8s๋ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค cpu.share
ํ๋ก์ธ์ ๋ฆฌ์์ค๋ฅผ ํ ๋นํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๋ฃจํธ cgroup์ 4096๊ฐ์ CPU ๋ฆฌ์์ค ๊ณต์ ๋ฅผ ์ป์ต๋๋ค. ์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ก์ธ์ ์ฑ๋ฅ์ 100%์
๋๋ค(1 ์ฝ์ด = 1024; ์ด๋ ๊ณ ์ ๊ฐ์
๋๋ค). ๋ฃจํธ ๊ทธ๋ฃน์ ๋ฑ๋ก๋ ์์์ ์ง๋ถ์ ๋ฐ๋ผ ์์์ ๋น๋ก์ ์ผ๋ก ๋ถ๋ฐฐํฉ๋๋ค. cpu.share
, ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ์ฐจ๋ก๋ก ๊ทธ๋ค์ ํ์ ๋ฑ์ ๋ํด์๋ ๋์ผํ ์์
์ ์ํํฉ๋๋ค. ์ผ๋ฐ์ ์ธ Kubernetes ๋
ธ๋์์ ๋ฃจํธ cgroup์๋ ์ธ ๊ฐ์ ํ์ ํญ๋ชฉ์ด ์์ต๋๋ค. system.slice
, user.slice
ะธ kubepods
. ์ฒ์ ๋ ํ์ ๊ทธ๋ฃน์ ์ค์ํ ์์คํ
๋ก๋์ K8 ์ธ๋ถ์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ง์ง๋ง - kubepods
โ ํฌ๋ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด Kubernetes์์ ์์ฑ๋ฉ๋๋ค.
์์ ๋ค์ด์ด๊ทธ๋จ์ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ํ์ ๊ทธ๋ฃน์ด ๊ฐ๊ฐ ์์ ํ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. 1024 kuberpod ํ์ ๊ทธ๋ฃน์ด ํ ๋น๋ ๊ณต์ 4096 ์ฃผ์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ฐ๋ฅํฉ๋๊น? ๊ฒฐ๊ตญ ๋ฃจํธ ๊ทธ๋ฃน์ ๋ค์์๋ง ์ก์ธ์คํ ์ ์์ต๋๋ค. 4096 ๊ทธ๋ ์ ํ์์ ์ง๋ถ ํฉ๊ณ๊ฐ ์ด ์ซ์๋ฅผ ํฌ๊ฒ ์ด๊ณผํฉ๋๋ค.6144)? ์์ ์ ์ด ๊ฐ์ด ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋นํ๋ฏ๋ก Linux ์ค์ผ์ค๋ฌ(CFS)๊ฐ ์ด ๊ฐ์ ์ฌ์ฉํ์ฌ CPU ๋ฆฌ์์ค๋ฅผ ๋น๋ก์ ์ผ๋ก ํ ๋นํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ฒ์ ๋ ๊ทธ๋ฃน์ 680 ์ค์ ์ง๋ถ(16,6๊ฐ ์ค 4096%), kubepod๋ ๋๋จธ์ง ์ง๋ถ์ ๋ฐ์ต๋๋ค. 2736 ์ฃผ์ ๊ฐ๋ ์ค์ง ์๊ฐ์ด ๋ฐ์ํ๋ฉด ์ฒ์ ๋ ๊ทธ๋ฃน์ ํ ๋น๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
๋คํํ ์ค์ผ์ค๋ฌ์๋ ์ฌ์ฉ๋์ง ์๋ CPU ๋ฆฌ์์ค ๋ญ๋น๋ฅผ ๋ฐฉ์งํ๋ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. "์ ํด" ์ฉ๋์ ๊ธ๋ก๋ฒ ํ๋ก ์ ์กํ๊ณ , ์ฌ๊ธฐ์ ์ถ๊ฐ ํ๋ก์ธ์ ์ฑ๋ฅ์ด ํ์ํ ๊ทธ๋ฃน์ ๋ฐฐํฌ๋ฉ๋๋ค(์ ์ก์ ๋ฐ์ฌ๋ฆผ ์์ค์ ํผํ๊ธฐ ์ํด ์ผ๊ด์ ์ผ๋ก ๋ฐ์ํฉ๋๋ค). ์์์ ๋ชจ๋ ์์์ ๋ํด์๋ ์ ์ฌํ ๋ฐฉ๋ฒ์ด ์ ์ฉ๋ฉ๋๋ค.
์ด ๋ฉ์ปค๋์ฆ์ ํ๋ก์ธ์ ์ฑ๋ฅ์ ๊ณต์ ํ ๋ถ๋ฐฐ๋ฅผ ๋ณด์ฅํ๊ณ ์ด๋ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฆฌ์์ค๋ฅผ "ํ์น๋" ์ผ์ด ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
CPU ์ ํ
K8์ ์ ํ ๋ฐ ์์ฒญ ๊ตฌ์ฑ์ด ๋น์ทํด ๋ณด์ด์ง๋ง ๊ตฌํ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฆ ๋๋ค. ๊ฐ์ฅ ์คํด์ ์์ง๊ฐ ์๋ ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋ฌธ์ํ๋์ง ์์ ๋ถ๋ถ.
K8์ด ์ฐธ์ฌํฉ๋๋ค cfs_period_us
ะธ cfs_quota_us
cgroup ๋๋ ํ ๋ฆฌ(ํ์ผ๋ ์ฌ๊ธฐ์ ์์) cpu.share
).
๊ฐ์ง ์์ cpu.share
, ํ ๋น๋์ ๋ค์์ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค. ๊ธฐ๊ฐ, ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ก์ธ์ ์ ๋ ฅ์ด ์๋๋๋ค. cfs_period_us
๊ธฐ๊ฐ(์ํฌํฌ)์ ์ง์ ์๊ฐ์ ์ง์ ํฉ๋๋ค. ํญ์ 100000ฮผs(100ms)์
๋๋ค. K8s์๋ ์ด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ต์
์ด ์์ง๋ง ํ์ฌ๋ ์ํ ๋ฒ์ ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ค์ผ์ค๋ฌ๋ ํด๋น ์ํฌํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ๋ ํ ๋น๋์ ๋ค์ ์์ํฉ๋๋ค. ๋ ๋ฒ์งธ ํ์ผ cfs_quota_us
, ๊ฐ ์ํฌํฌ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์๊ฐ(ํ ๋น๋)์ ์ง์ ํฉ๋๋ค. ๋ง์ดํฌ๋ก์ด ๋จ์๋ก๋ ์ง์ ๋ฉ๋๋ค. ํ ๋น๋์ ์ํฌํฌ ๊ธธ์ด๋ฅผ ์ด๊ณผํ ์ ์์ต๋๋ค. ์ฆ, 100ms๋ณด๋ค ํด ์ ์์ต๋๋ค.
16์ฝ์ด ์ปดํจํฐ(Omio์์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ปดํจํฐ ์ ํ)์ ๋ํ ๋ ๊ฐ์ง ์๋๋ฆฌ์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋๋ฆฌ์ค 1: ์ค๋ ๋ 2๊ฐ ๋ฐ 200ms ์ ํ. ์ ํ ์์
์๋๋ฆฌ์ค 2: ์ค๋ ๋ 10๊ฐ ๋ฐ 200ms ์ ํ. 20ms ํ์ ์กฐ์ ์ด ์์๋๊ณ , 80ms ํ์ ํ๋ก์ธ์ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค๊ฐ ๋ค์ ์์๋ฉ๋๋ค.
CPU ์ ํ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. 2 ์ปค๋; Kubernetes๋ ์ด ๊ฐ์ 200ms๋ก ๋ณํํฉ๋๋ค. ์ด๋ ์ปจํ ์ด๋๊ฐ ์ ํ ์์ด ์ต๋ 200ms์ CPU ์๊ฐ์ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ฌ๋ฏธ๊ฐ ์์๋๋ ๊ณณ์
๋๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ํ ๋น๋์ 200ms์
๋๋ค. ๋ณํํด์ ์์
ํ๋ ๊ฒฝ์ฐ 10 12์ฝ์ด ๋จธ์ ์ ์ค๋ ๋(์๋๋ฆฌ์ค 2์ ๊ทธ๋ฆผ ์ฐธ์กฐ), ๋ค๋ฅธ ๋ชจ๋ ํฌ๋๊ฐ ์ ํด ์ํ์ธ ๋์ ํ ๋น๋์ ๋จ 20ms(10 * 20ms = 200ms์ด๋ฏ๋ก) ๋ด์ ์์ง๋๊ณ ์ด ํฌ๋์ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ ์ง๋ฉ๋๋ค. ยป (์กฐ์ ํ) ๋ค์ 80ms ๋์. ์ด๋ฏธ ์ธ๊ธํ
ํฌ๋์ ์ ํ์ ํ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
ํฌ๋์ ๋ก๊ทธ์ธํ๊ณ ์คํํ๋ฉด ๋ฉ๋๋ค. cat /sys/fs/cgroup/cpu/cpu.stat
.
-
nr_periods
- ์ค์ผ์ค๋ฌ ๊ธฐ๊ฐ์ ์ด ์ -
nr_throttled
โ ์ปดํฌ์ง์ ์ ์กฐ์ ๊ธฐ๊ฐ ์nr_periods
; -
throttled_time
โ ๋์ ์กฐ์ ์๊ฐ(๋๋ ธ์ด)์ ๋๋ค.
์ ๋ง ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋ ๊ฑธ๊น์?
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์ ์ ํ์ด ๋ฐ์ํฉ๋๋ค. ๊ฐ๋ ๊ทธ ์ฌ๋์ด ๋ค์ด์์ XNUMX ํ ๊ณ์ฐ๋ณด๋ค ๊ฐํ๋ค!
์ด๋ก ์ธํด ์ค๋น ํ์ธ ์คํจ, ์ปจํ ์ด๋ ์ ์ง, ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋๊น, ์๋น์ค ํธ์ถ ๋ด ์๊ฐ ์ด๊ณผ ๋ฑ ๋ค์ํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ก ์ธํด ๊ถ๊ทน์ ์ผ๋ก ๋๊ธฐ ์๊ฐ์ด ์ฆ๊ฐํ๊ณ ์ค๋ฅ์จ์ด ๋์์ง๋๋ค.
๊ฒฐ์ ๊ณผ ๊ฒฐ๊ณผ
์ฌ๊ธฐ์์๋ ๋ชจ๋ ๊ฒ์ด ๊ฐ๋จํฉ๋๋ค. ์ฐ๋ฆฌ๋ CPU ์ ํ์ ํฌ๊ธฐํ๊ณ ํด๋ฌ์คํฐ์ OS ์ปค๋์ ๋ฒ๊ทธ๊ฐ ์์ ๋ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์์ํ์ต๋๋ค. ์ฐ๋ฆฌ ์๋น์ค์ ์ค๋ฅ(HTTP 5xx) ์๊ฐ ์ฆ์ ํฌ๊ฒ ๊ฐ์ํ์ต๋๋ค.
HTTP 5xx ์ค๋ฅ
ํ๋์ ์ค์ํ ์๋น์ค์ ๋ํ HTTP 5xx ์ค๋ฅ
์๋ต์๊ฐ p95
์ค์ํ ์๋น์ค ์์ฒญ ๋๊ธฐ ์๊ฐ, 95๋ฒ์งธ ๋ฐฑ๋ถ์์
์ด์ ๋น์ฉ
์ฌ์ฉํ ์ธ์คํด์ค ์๊ฐ ์
์บ์น๋ ๋ฌด์์ ๋๊น?
๊ธฐ์ฌ ์์ ๋ถ๋ถ์ ์ธ๊ธ๋ ๋ฐ์ ๊ฐ์ด:
๊ณต๋ ์ํํธ๋ก ๋น์ ๋ฅผ ๊ทธ๋ฆด ์ ์์ต๋๋ค. Kubernetes๋ ๋ถ๋์ฐ ์ค๊ฐ์ธ ์ญํ ์ ํฉ๋๋ค. ํ์ง๋ง ์ธ์ ์๊ฐ ์๋ก ์ถฉ๋ํ์ง ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์๋ฅผ ๋ค์ด ๊ทธ๋ค ์ค ํ ๋ช ์ด ํ์ฅ์ค์ ๋ฐ๋์ ๋์ ๋น๋ฆฌ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ถ์ฃผ์ํ ์ปจํ
์ด๋ ํ๋๊ฐ ์์คํ
์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ CPU ๋ฆฌ์์ค๋ฅผ ์๋ชจํ ์ ์์ต๋๋ค. ์ค๋งํธ ์ ํ๋ฆฌ์ผ์ด์
์คํ์ด ์๋ ๊ฒฝ์ฐ(์: JVM, Go, Node VM์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์์) ์ด๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด์์ ์ค๋ซ๋์ ์์
ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด ์ ๋๋ก ์ต์ ํ๋์ง ์๊ฑฐ๋ ์ ํ ์ต์ ํ๋์ง ์์ ๊ฒฝ์ฐ(FROM java:latest
), ์ํฉ์ด ํต์ ๋ถ๋ฅ ์ํ๊ฐ ๋ ์ ์์ต๋๋ค. Omio์๋ ์ฃผ์ ์ธ์ด ์คํ์ ๋ํ ์ ์ ํ ๊ธฐ๋ณธ ์ค์ ์ ๊ฐ์ถ ์๋ํ๋ ๊ธฐ๋ณธ Dockerfile์ด ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๋ ์กด์ฌํ์ง ์์ต๋๋ค.
์ธก์ ํญ๋ชฉ์ ๋ชจ๋ํฐ๋งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฐธ์กฐ
์ด๊ฒ์ด ์ฐ๋ฆฌ์ ์ด์ผ๊ธฐ์ ๋๋ค. ๋ค์ ์๋ฃ๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๋ ๋ฐ ํฐ ๋์์ด ๋์์ต๋๋ค.
-
kernel.org โ CFS ์ค์ผ์ค๋ฌ ; -
kernel.org โ CFS ๋์ญํญ ์ ์ด ; -
Linux ์ปจํ ์ด๋ ์ค์ผ์ค๋ง ์ดํด ; -
Linux ์ปจํ ์ด๋์ ๋ํด ์์์ผ ํ ๋ชจ๋ ๊ฒ, XNUMX๋ถ: Linux ์ ์ด ๊ทธ๋ฃน ๋ฐ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ ; -
Kubernetes ์คํจ ์ฌ๋ก - "CPU ์กฐ์ "์ ์ฐพ์ผ์ญ์์ค.
Kubernetes ๋ฒ๊ทธ ๋ณด๊ณ ์:
-
#51135: ๋ณด์ฅ๋ ํฌ๋์ ๋ํ CPU ์ ํ ์ค์ ์ ํผํ์ธ์. ; -
#67577: CFS ํ ๋น๋์ผ๋ก ์ธํด ๋ถํ์ํ ์ ํ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ; -
์ง๋์น๊ฒ ๊ณต๊ฒฉ์ ์ธ CFS .
์ค๋ฌด์์ ๋น์ทํ ๋ฌธ์ ๋ฅผ ๊ฒช์ ์ ์ด ์๊ฑฐ๋ ์ปจํ ์ด๋ํ๋ ํ๋ก๋์ ํ๊ฒฝ์์ ์กฐ์ ๊ณผ ๊ด๋ จ๋ ๊ฒฝํ์ด ์์ต๋๊น? ๋๊ธ๋ก ์ฌ๋ฌ๋ถ์ ์ด์ผ๊ธฐ๋ฅผ ๊ณต์ ํด์ฃผ์ธ์!
๋ฒ์ญ๊ฐ์ ์ถ์
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Kubernetes์ ์๋ ํฌ๊ธฐ ์กฐ์ ๋ฐ ๋ฆฌ์์ค ๊ด๋ฆฌ(๊ฐ์ ๋ฐ ๋์์ ๋ณด๊ณ ์) "; - ยซ
Kubernetes์์ CPU ๊ด๋ฆฌ์๊ฐ ์๋ํ๋ ๋ฐฉ์ "; - ยซ
kubectl run์ ์คํํ๋ฉด Kubernetes์์๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์? 2 ๋ถ ".
์ถ์ฒ : habr.com