[Kubernetes] ํ๋์ ๋ฆฌ์์ค ์์ ์ฌ์ฉ๋์ ์ ํ์์ผ๋ณด์
๐ ํด๋น ํฌ์คํ
์ ์์ํ์ธ์! ๋์ปค/์ฟ ๋ฒ๋คํฐ์ค ์์ ์ ์ฝ๊ณ ๊ฐ์ธ์ ์ธ ๋ชฉ์ ํ์ ์์ฑ๋๋ ๊ธ์
๋๋ค. ํฌ์คํ
์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์ง์ ์ฌ๊ตฌ์ฑํ์์์ ์๋ฆฝ๋๋ค.
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๋ฉํฐ ๋
ธ๋ ํ๊ฒฝ์ผ๋ก ๊ตฌ์ถํ๋ ๋ฐ ์์ด์ ์ป์ ์ ์๋ ๋ ๋ค๋ฅธ ๊ฐ์ ์ ์ฌ๋ฌ ๋์ ๋
ธ๋(์๋ฒ)๋ฅผ ๋ฌถ์ด์ ๋ฆฌ์์ค(CPU, ๋ฉ๋ชจ๋ฆฌ) ํ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด๋ค. ์ด๋ฌํ ์ ์ ํ์ฉํ๋ค๋ฉด ํน์ ํ๋์์ ๋ ๋ง์ CPU ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์๋ก ํ๋ค๋ฉด ๋ฆฌ์์ค ํ์ ์ฌ์ฉํด ๋์ผํ ๋ฆฌ์์ค ์คํ์ ๊ฐ๋ ํ๋๋ฅผ ๋ ํ๋ ์ถ๊ฐ์์ผ ์ํ ํ์ฅ(Scale-Out)์ ์ํํ ์๋ ์๋ค.
ํ์ง๋ง ์ด๋ฌํ Scale-Out ๊ธฐ๋ฅ ๋งํผ ๋ ๋ค๋ฅธ ์ค์ํ๊ฒ ์ ๊ฒฝ์จ์ผ ํ ์ ์ด ์๋๋ฐ, ๊ทธ๊ฒ์ ๋ฐ๋ก ์ปดํจํ
์์ ํ์ฉ๋ฅ (Utilization)์ด๋ค. ์ด '์ปดํจํ
์์ ํ์ฉ๋ฅ '์ด๋ผ ํจ์ ์คํ ์ค์ธ ํ๋ ๋๋ ์ปจํ
์ด๋์ CPU, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ด ์ผ๋ง๋ ์ ํ์ฉ๋๊ณ ์๋์ง๋ฅผ ์๋ฏธํ๋ค. ๋ฅ๋ฌ๋ ๋ถ์ผ์์ ์ฌ์ด ์์๋ก, ์ด๋ฏธ์ง๋ ์์ฐ์ด ์ฒ๋ฆฌ ๋ชจ๋ธ์ GPU๋ก ํ์ต์ํค๋๋ฐ, GPU ์ฌ์ฉ๋ฅ ์ด ๋์ง ์์ ๊ฒ์ ๋ณด๊ณ GPU Utilization์ด ๋์ง ์๋ค๊ณ ํ๊ธฐ๋ ํ๋๋ฐ, ์ด๊ฒ๋ ์ปดํจํ
์์ ํ์ฉ๋ฅ ์ด ๋ฎ์ ํ๋์ ์์์ด๋ค.
์ด๋ฒ ํฌ์คํ
์์๋ ํ๋ ๋๋ ์ปจํ
์ด๋์ ์ปดํจํ
์์ ํ์ฉ๋ฅ ์ ๋์ผ ์ ์๋ ์ฟ ๋ฒ๋คํฐ์ค์ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ํด ์ดํด๋ณธ๋ค. ์ฐ๋ฆฌ๋ ์ง๊ธ๊น์ง ์ฟ ๋ฒ๋คํฐ์ค์ ํ๋์ ๋ํ ๋งค๋ํ์คํธ(YAML) ํ์ผ์ ๋ด์ฉ์ ์์ฑํด๋ณด๋ฉด์ ํน์ ํ๋ ๋๋ ์ปจํ
์ด๋๊ฐ ์ ์ ํ๊ณ ์ฌ์ฉํด์ผ ํ ํน์ ์คํ์ CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์ ์ํ ์ ์ ์์๋ค. ์ด๋ ๊ฒ ๋ฐ๋ก ๋ช
์ํ์ง ์์ผ๋ฉด ํ๋ ๋๋ ์ปจํ
์ด๋๋ ์์ ์ด ํ ๋น๋ ๋
ธ๋์ ๋ฌผ๋ฆฌ ์์์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๊ทน๋จ์ ์ผ๋ก๋ ํน์ ํ๋ ๋๋ฌธ์ ํด๋น ํ๋๊ฐ ํ ๋น๋ ๋
ธ๋์ ๋ฌผ๋ฆฌ์ ์ธ ์์์ด ๊ณ ๊ฐ๋์ด ๊ทธ ๋
ธ๋์ ํ ๋น๋์ด ์ด์๋๊ณ ์๋ ๋ค๋ฅธ ํ๋๋ค์ ์ํฅ์ ๋ฏธ์น ์๊ฐ ์๋ค.
1. ์ปจํ ์ด๋์ ํ๋์ ์์์ ์ฌ์ฉ๋์ ์ ํ์ํค์!
1-1. ์์์ ์ต๋ ์ฌ์ฉ๋์ ์ ํ์ํจ๋ค : limits
์ฟ ๋ฒ๋คํฐ์ค๋ ๋์ปค์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ด๋ถ์ ์ผ๋ก ํ๋์ ์ต๋ ์์ ์ฌ์ฉ๋์ ์ ํ์ํค๊ธฐ ์ํด์ cgroup ์ด๋ผ๋ ๋ฆฌ๋
์ค ๊ธฐ์ ์ ์ด์ฉํ๋ค. ๋์ปค์์๋ ๋ช
๋ น์ด์ --memory, --cpu, --cpu_shares, --cpu-quota, --cpu-runtime ๊ณผ ๊ฐ์ ์ต์
์ ์ฃผ์ด ์คํํ ์ปจํ
์ด๋๊ฐ ์ฌ์ฉํ ์์ ์ฌ์ฉ๋์ ์ต๋๊ฐ์ ์ ํ์์ผฐ๋ค.
์ฟ ๋ฒ๋คํฐ์ค์์๋ limits ๋ผ๋ ํค์๋๋ฅผ ํตํด์ ์์์ ์ฌ์ฉ๋ ์ต๋๊ฐ์ ์ ํ์ํจ๋ค. limits๋ฅผ ์ฌ์ฉํ ์์ ๋งค๋ํ์คํธ ํ์ผ๋ถํฐ ์ดํด๋ณด์.
apiVersion: v1
kind: Pod
metadata:
name: resource-limit-pod
labels:
name: resource-limit-pod
spec:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
cpu: "1000m"
memory: "250Mi"
์ YAML ํ์ผ์ spec.containers.resources ํญ๋ชฉ์ ๋ณด๋ฉด limits ํญ๋ชฉ์ cpu ์ memory ๋ผ๋ ํค์๋๋ก ํ ๋นํ ๋ฆฌ์์ค์ ํ์ ํญ๋ชฉ์ ์ ์ํ ๊ฒ์ ๋ณผ ์ ์๋ค. cpu ์ memory ์ ๋ช
์๋ ๋จ์์ ๋ํด ์ ์ ์์๋ณด์๋ฉด, cpu์์ 1000m(๋ฐ๋ฆฌ์ฝ์ด) ๋น ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ cpu core 1๊ฐ๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ memory๊ฐ 250Mi ๋ก ์ ํ์๋๋ฐ, ์ด๋ ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ ๋จ์์ธ MB์ ๊ฑฐ์ ์ ์ฌํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์๋ฐํ ๋งํด์ Mi Mebibyte๋ก $2^{20}$ ๋ฐ์ดํธ์ด์ง๋ง, MB๋ Megabyte๋ก $10^6$ ๋ฐ์ดํธ์ด๋ค. ๊ทธ๋์ 250Mi๋ฅผ MB๋ก ๋ณํํ๋ฉด ๋๋ต 262.14MB๋ก 250MB ๋ณด๋ค ์ฝ๊ฐ ๋ ํฐ ์์น์ด๋ค. ๊ฐ๋จํ ๋งํด์ 250Mi = 250MB + ์ํ ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ฒ ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์์์์๋ ํ๋์ ๋ฆฌ์์ค๋ฅผ ๋ช
์ํ์ง๋ง, ์ฌ์ด๋ ์ปจํ
์ด๋ ํจํด๊ณผ ๊ฐ์ด ํ๋์ ํ๋์ ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๊ฐ ํ ๋น๋ ์ ์๋๋ฐ, ๋ง์ฝ ์ด๋ด ๊ฒฝ์ฐ ๊ฐ ์ปจํ
์ด๋ ๋ง๋ค์๋ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ ์ ์๋ค๋ ์ ๋ ์์๋์. ์์๋ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ์กฐํ์.
๋ค์์ limits ์ ๋น์ทํ์ง๋ง ๋ค๋ฅธ ์ญํ ์ ํ๋ requests ๋ผ๋ ๊ฒ์ ์ดํด๋ณด๋๋ก ํ์. ์ผ๋จ requests๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง๋ถํฐ ์ค๋ช
ํ์๋ฉด "์ ์ด๋ ์ด ๋งํผ์ ์์์ ์ปจํ
์ด๋์๊ฒ ๋ณด์ฅ๋์ด์ผ ํด"๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฐ๋ฐ requests ๋ผ๋ ๊ฒ์ด ์ด๋ค ๊ฒ์ ์ํด ๋ฑ์ฅํ๋์ง ์ดํดํ๊ธฐ ์ํด์๋ ์ฟ ๋ฒ๋คํฐ์ค์์์ ์์ ์ค๋ฒ์ปค๋ฐ(Overcommit)์ ๋ํด์ ๋จผ์ ์ดํด๋ฅผ ํด์ผ ํ๋ค.
1-2. ์์ ํ์ฉ๋ฅ (Utilization)์ ๋์ด๋๋ก ์ค๋ฒ์ปค๋ฐ(Overcommit) ์ํค์ : requests
์์์ ์ปจํ
์ด๋์ ์์ ํ์ฉ๋ฅ ์ ๋์ด๋ ๊ฒ์ ์ปจํ
์ด๋ ์์ฒด๋ฅผ Scale-out ํ๋ ๊ฒ ๋งํผ์ด๋ ์ค์ํ๋ค๊ณ ํ๋ค. ์ด๋ฐ ์์ ํ์ฉ๋ฅ ์ ๋์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ฟ ๋ฒ๋คํฐ์ค์์๋ ์ค๋ฒ์ปค๋ฐ์ด๋ผ๋ ๊ฒ์ ํ ์ ์๋ค. ์ค๋ฒ์ปค๋ฐ์ด๋, ํ์ ๋ ์ปดํจํ
์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ์ฌ์ฉํ ์ ์๋ ์์๋ณด๋ค ๋ ๋ง์ ์์ VM ๋๋ ์ปจํ
์ด๋์๊ฒ ํ ๋นํจ์ผ๋ก์จ ์ ์ฒด ์์์ ํ์ฉ๋ฅ ์ ๋์ด๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
์ฅ? ์๋ ์ด๋ป๊ฒ ์ ์ด์ ์กด์ฌํ๋ ์์๋ณด๋ค ๋ ๋ง์ ์์์ ํ ๋นํ๋ค๋ ๊ฒ์ธ๊ฐ? ์ด๋ ์์ ์ ๋ฐฐ์ด CS ์ง์ ์ค ๋ง์น ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ํ๋ ๋ฐฉ์์ด๋ ์ ์ฌํ๋ค. ์ค์ ๊ทธ๋งํผ ์์์ด ์๋ ๊ฒ์ ์๋์ง๋ง, ์ ํด ์์์ ์ด์ฉํด ๋ง์น ์ค์ ์์๋ณด๋ค ๋ ๋ง์ด ์ฌ์ฉํ๋ ๋ฏํ๋๋ก ํ๋ ๊ฒ์ด๋ค ์ฐ์ ์๋์ ๊ฐ์ด ์ด 1GB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ ๋
ธ๋(์๋ฒ)์ 2๊ฐ์ ์ปจํ
์ด๋๊ฐ ์ด์๋๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
B ์ปจํ
์ด๋๋ ํ ๋น๋ฐ์ 500MB ๋ฉ๋ชจ๋ฆฌ๋ฅผ 100% ๋งํผ ์์ฃผ ์์ฐจ๊ฒ ์ ์ฌ์ฉํ๊ณ ์๋ค. ํ์ง๋ง A ์ปจํ
์ด๋์ ๊ฒฝ์ฐ, ํ ๋น ๋ฐ์ 500MB์ ๋นํด ๊ณ ์ 1/10 ์์ค ์ ๋ ๋ฐ์ ์ฌ์ฉํ์ง ์๊ณ ์๋ค. ๊ฒฐ๊ตญ, A ์ปจํ
์ด๋์ ํ ๋น๋์์ง๋ง 450MB๊ฐ ์ ํด ์์์ผ๋ก ๋จ๊ณ ์๋ ๊ฒ์ด๋ค. ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ ์ ์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ๋ช
์ํ๋ ๋ฐฉ๋ฒ์ ์์ ๊ฐ์ด ์ ํด ์์์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ ํ ์์์ ์์ ํ์ฉ๋ฅ ์ด ๋์ B ์ปจํ
์ด๋์ ๋๊ฒจ์ค ์๊ฐ ์๋ค. ๋ฌผ๋ก ๊ฐ ์ปจํ
์ด๋์ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ฌ์ ์ ์ ๋ฐํ๊ฒ ๊ณ์ฐํด์ ์ ์ ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ํ ๋นํ ์๋ ์๊ฒ ์ง๋ง, ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฏธ ์๊ณ ์๋ค์ํผ ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๊ฐ์ ๊ฒฝ์ฐ, ํธ๋ํฝ์ด ๋ง์์ง๋ ์์ ์ด ๋งค๋ฒ ๋ฌ๋ผ์ง ์๋ ์์ผ๋ฉฐ, ์ด๋ฌํ ๊ฒ๋ค์ ๋ชจ๋ ๊ณ์ฐํด์ ์ต์ ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ ์ ๊ณ์ฐํ๊ธฐ๋ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ์ฟ ๋ฒ๋คํฐ์ค์์๋ ์ค๋ฒ์ปค๋ฐ์ด๋ผ๋ ๊ธฐ๋ฅ์ ํตํด ์์ ํ์ฉ๋ฅ ์ด ๋ฎ์ ์ปจํ
์ด๋์ ์ ํด ์์์ ์์ ํ์ฉ๋ฅ ์ด ๋์ ์ปจํ
์ด๋์๊ฒ ์์๋ก ๋์ฌ๋ฅผ ํด์ค ์๊ฐ ์๋ค.
์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด B ์ปจํ
์ด๋๋ A ์ปจํ
์ด๋์ ์ ํด ์์์ ์ด์ฉํด์ ์ด 750MB ๊น์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค. ์ด ๋, B ์ปจํ
์ด๋๊ฐ A ์ปจํ
์ด๋์ ์ ํด ์์๊น์ง ์ฌ์ฉํด์ ์ต๋๋ก ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ธ 750MB๊ฐ ๋ฐ๋ก ์์์ ์์๋ณธ limits๊ฐ ๋๋ค.
๋ฌผ๋ก ์ ๊ทธ๋ฆผ์์ ํ ๋น๋ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๊ฐ 1.5GB ๋ผ๊ณ ํ ์ง๋ผ๋ ๋
ธ๋์ ์ค์ ๋ฌผ๋ฆฌ์ ์ธ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ์ธ 1GB ์ด์์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋ค. ๋ง์ฝ B ์ปจํ
์ด๋๊ฐ 750MB๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ฐ ๊ฐ์๊ธฐ A ์ปจํ
์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ ์ด ๋์ด์ 500MB๋ก ์ฆ๊ฐํ๊ฒ ๋๋ ๊ทธ ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฒฝํฉ์ด ๋ฐ์ํ๊ฒ ๋๋ค. ์ฐธ๊ณ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๊ฒฝํฉ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ, ์ข ๋ ์ฐ์ ์์๊ฐ ๋ฎ์ ์ปจํ
์ด๋์ ํ๋ก์ธ์ค๋ฅผ ๋จผ์ ์ข
๋ฃ์ํค๋๋ฐ, ์ด๋ฐ ์ฐ์ ์์์ ๋ํ ๋ด์ฉ์ ์ถํ์ ์์๋ณผ QoS ํด๋์ค์ ๋ํด์ ์ค๋ช
ํ๋ค.
๊ทธ๋ฌ๋ฉด requests๋ ์ด๋ค ์ํฉ์์ ๋ฑ์ฅํ๊ฒ ๋์์๊น? ๋ง์ฝ์ A, B ์ปจํ
์ด๋ ๋ชจ๋ 500MB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๊ฐ ์ ์ ํ๊ณ ์๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ ์ค B ์ปจํ
์ด๋๊ฐ ๊ฐ์๊ธฐ ์ฌ์ฉ์ค์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฆ๊ฐํด 750MB๋ก ์ฆ๊ฐํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ด๋ ๊ฒ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ถฉ๋์ด ์ผ์ด๋ ์ปจํ
์ด๋๊ฐ ๋น์ ์์ ์ผ๋ก ์ข
๋ฃ๋ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฌํ ์ํฉ์ ์ฌ์ ์ ์๋ฐฉํ๊ธฐ ์ํด์ ๊ฐ ์ปจํ
์ด๋๊ฐ ๋ฐ๋์ ์ฌ์ฉ์ ๋ณด์ฅ๋ฐ์ ์ ์๋ ๋ฆฌ์์ค์ ๊ฒฝ๊ณ์ ์ ์ ํ ํ์๊ฐ ์์๊ณ , ์ด ๊ฒฝ๊ณ์ ์ ์๋ฏธํ๋ ๊ฒ์ด ๋ฐ๋ก requests๋ค.
A, B ์ปจํ
์ด๋์ limits, requests ์์น๋ฅผ ์ ์ฉํ ๊ทธ๋ฆผ์ ์ดํด๋ณด์.
A, B ์ปจํ
์ด๋ ๋ชจ๋ limits๋ 750MB, requests๋ 500MB ์ด๋ค. ๊ณ ๋ก, A, B ์ปจํ
์ด๋ ๋ชจ๋ ์ ์ด๋ 500MB์ ๋ฉ๋ชจ๋ฆฌ๋ ํญ์ ๋ณด์ฅ๋ฐ์์ผ ํ๋ ๋ค๋ฅธ ์ปจํ
์ด๋์ ์ ํด ์์์ด ์์ ๊ฒฝ์ฐ ์ต๋ 250MB๋ฅผ ์ถ๊ฐ๋ก ํ์ฌ ์ฆ, ์ต๋ 750MB ๊น์ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ, ํ์ฌ A ์ปจํ
์ด๋๊ฐ 50MB ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก B ์ปจํ
์ด๋๋ 750MB ๊น์ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง A ์ปจํ
์ด๋๊ฐ 500MB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ ์ค์ธ ์ํ์์ B ์ปจํ
์ด๋๊ฐ 750MB ๊น์ง ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ฆ๊ฐ์ํจ๋ค๋ฉด ๊ทธ ์ฆ์, B ์ปจํ
์ด๋์์ OOM ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ, A ์ปจํ
์ด๋์์ ์ฌ์ฉ๋์ง ์๋ ์ ํด ์์์ B ์ปจํ
์ด๋๊ฐ ๊ฐ์ ธ๋ค ์ฌ์ฉํ์ฌ ์์ ํ์ฉ๋ฅ ์ ๋์ผ ์ ์๊ฒ ํ๋ค. ๋์ ์ปจํ
์ด๋์์ OOM์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์์์ ๋๊ฐ๋ก ์น๋ฅด๋ ์
์ด๋ค.
์ด requests๋ ๋น์ฐํ๊ฒ๋ ๋
ธ๋์ ์ด ์์์ ํฌ๊ธฐ๋ณด๋ค ๋ ๋ง์ ์์ requests๋ฅผ ํ๋์ ํ ๋นํ ์๋ ์๋ค. ๋ฐ๋ผ์ ํ๋ ๋งค๋ํ์คํธ์ requests๋ฅผ ๋ช
์ํ๊ฒ ๋๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ์ค์ผ์ฅด๋ฌ๋ ํ๋ ๋งค๋ํ์คํธ์ ๋ช
์๋ requests ๋งํผ์ ์ฌ์ ๊ฐ ์๋ ๋
ธ๋๋ฅผ ์ ํํด์ ํด๋น ๋
ธ๋์ ํ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ๊ฒฐ๊ตญ, ์ฟ ๋ฒ๋คํฐ์ค ์ค์ผ์ฅด๋ฌ๊ฐ ํ๋๋ฅผ ์ด๋ค ๋
ธ๋์ ์์ฑํ ์ง ์ ํํ๋ ๊ธฐ์ค์ ์์ฑํ ํ๋ ๋งค๋ํ์คํธ์ ๋ช
์๋ requests ๋ผ๋ ํญ๋ชฉ์ด๋ผ๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์ด requests ๊ฐ์ ๊ทน๋จ์ ์ผ๋ก ๋ฎ๊ฒ ์ค์ ํด์ ํ๋๊ฐ ์ด๋ค ๋
ธ๋์๋ผ๋ ์์ฑ๋๋ ๊ฒ์ ์ค์ผ์ฅด๋ง ํ ์๋ ์๊ฒ ์ง๋ง, ๊ทธ ํ๋๊ฐ ์คํํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ ๋ฆฌ์์ค ์์์ด requests ๋ณด๋ค ๋๋ค๋ฉด ํ๋๊ฐ ์์ฑ๋๊ณ ์คํ๋๋ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ requests ๊ฐ์ ๊ทน๋จ์ ์ผ๋ก ๋ฎ๊ฒ ์ค์ ํ๋ ๊ฒ์ด ๋ฅ์ฌ๋ ์๋๋ผ๋ ์ ์ ์ผ๋ํด ๋์.
2. CPU ์์ ์ฌ์ฉ๋์ ์ ํ์ํค๋ ์๋ฆฌ
1๋ฒ ๋ชฉ์ฐจ์์ ์์ ํ์ฉ๋ฅ ์ ๋์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ค๋ฒ์ปค๋ฐ์ ์ํํ๊ธฐ ์ํด ์ฟ ๋ฒ๋คํฐ์ค์์๋ requests, limits ๋ผ๋ ๊ฒ์ ํ์ฉํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค. ์ด๋ฒ ๋ชฉ์ฐจ์์๋ ์ปดํจํ
๋ฆฌ์์ค ์ค CPU์ ์ด์ ์ ๋ง์ถ์ด, ์ด CPU๋ผ๋ ์์ ์ฌ์ฉ๋์ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ด๋ป๊ฒ ์ ํ์ํค๋์ง ์๋ฆฌ์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์์๋ณด๋๋ก ํ์. ํ๋์ ๋ฆฌ์์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ ๋งค๋ํ์คํธ ํ์ผ์ด ์๋ค๊ณ ํด๋ณด์.
apiVersion: v1
kind: Pod
metadata:
name: resource-limit-request-pod
labels:
name: resource-limit-request-pod
spce:
containers:
- name: nginx
image: nginx:latest
resources:
limits:
cpu: "1000m"
memory: "256Mi"
requests:
cpu: "500m"
memory: "128Mi"
์ ๋งค๋ํ์คํธ๋ฅผ ๊ฐ๋จํ๊ฒ ํด์ํ๋ฉด ์์ฑ๋ ํ๋์ nginx ์ปจํ
์ด๋๋ CPU๋ฅผ 1000m(CPU ์ฝ์ด 1๊ฐ)๋ฅผ ์ต๋๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ต์ 500m๋ฅผ ์ต์๋ก ๋ณด์ฅ๋ฐ์์ผ ํ๋ค. ์ ๋งค๋ํ์คํธ์ requests ํญ๋ชฉ์ ์ ์ํ CPU ์์์ด ์ค์ง์ ์ผ๋ก ์ปจํ
์ด๋ ๋ด๋ถ์์๋ ์ด๋ป๊ฒ ์ค์ ๋๋์ง ์์๋ณด์.
์ requests.cpu์ ๋ช
์๋ ๊ฐ์ ์ปจํ
์ด๋๊ฐ ๋์ํ๊ณ ์๋ ์๋ฒ์ CPU๊ฐ ๋ช ๊ฐ ์๋์ง ์๊ด์์ด requests.cpu์ ๋ช
์๋ ๊ฐ์ ํ ๋น ๋น์จ์ ๋ฐ๋ผ์ ์ปจํ
์ด๋๊ฐ ์ค์ง์ ์ผ๋ก ์ฌ์ฉํ๋ CPU ์์์ด ๊ฒฐ์ ๋๋ค. ์๋ฐํ ๋งํด์ requests.cpu์ ๋ช
์๋ ๊ฐ์ ํ์ฉํด์ '์ด๋ ํ ๊ณต์'์ ์ด์ฉํด ์ฐ์ถ๋ ๋น์จ๋งํผ์ CPU ์์์ด ๊ฒฐ์ ๋๋ ๊ฒ์ด๋ค. ์ด '์ด๋ ํ ๊ณต์'์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฐธ๊ณ ๋ก ๋์ปค ์ปจํ
์ด๋์์๋ ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฌ๋ฆฌ CPU Share ์ง์ ์ ์ผ๋ก ์ต์
(--cpu-shares)์ ๋ช
์ํ์ฌ ํ ๋นํด์ค ์ ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์๋ requests ๋ผ๋ ๊ฐ์ผ๋ก ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์๋์ ๊ทธ๋ฆผ ์์๋ ๋์ปค๋ฅผ ํ์ฉํ๋ค๊ณ ๊ฐ์ ํด์ cpu-shares ๊ฐ์ ๋ช
์ํ๋ค. ์ด๋ค ๋ฌผ๋ฆฌ์ ์ธ ์๋ฒ์ ์ด 3๊ฐ์ ์ปจํ
์ด๋๊ฐ ์คํ๋๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
A, B, C ์ด 3๊ฐ์ ์ปจํ
์ด๋๊ฐ ์กด์ฌํ๊ณ , ๊ฐ ์ปจํ
์ด๋์ CPU Shares ๊ฐ์ 1024, 1024, 512 ๋ผ๊ณ ํด๋ณด์. ์์์ ๋งํ๋ค์ํผ CPU Shares ๊ฐ์ ์ปจํ
์ด๋๋ค์ด ์ฌ๋ผ๊ฐ ์๋ ๋ฌผ๋ฆฌ ์๋ฒ์ CPU ๊ฐ์๊ฐ ๋ช ๊ฐ์ธ์ง์ ์๊ด์์ด ๋ฌผ๋ฆฌ ์๋ฒ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ด CPU๋ฅผ CPU Shares ๊ฐ ๋น์จ์ ๋ฐ๋ผ ํ ๋นํ๊ฒ ๋๋ค.
๋ํ CPU๋ ์ด๋ค ์ปจํ
์ด๋๊ฐ ์ฌ์ฉํ๋ CPU ์์์ด ์ ํด ์์์ด ์๊ฒ ๋๋ฉด ์ด๋ฅผ ํ์ฉํ๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๊ทธ๋ฆผ์์ C ์ปจํ
์ด๋์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋์๋ค๊ณ ํด๋ณด์.
๊ทธ๋ฌ๋ฉด ์์ฒ๋ผ ์ฌ์ ํ ์ด์ ์ค์ธ A, B ์ปจํ
์ด๋์ ๊ฐ๊ฐ ํ ๋น๋ CPU Shares ๊ฐ์ ๋ง๊ฒ CPU ์์๋ค์ด ์ฌ๋ถ๋ฐฐ๋๋ค. ์ ๊ทธ๋ฆผ ์์ผ๋ก๋ A, B ์ปจํ
์ด๋์ CPU Shares ๊ฐ์ด ๋์ผํ๋ฏ๋ก ์ด๋ฅผ ๋น์จ๋ก ํ์ฐํ๊ฒ ๋๋ฉด ๊ฐ๊ฐ 50%์ฉ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์ด๋ฒ์๋ CPU๋ requests ๋ฟ๋ง ์๋๋ผ limits ๋ ๊ณ ๋ คํ๋ ์ํฉ ์ฆ, ์ค๋ฒ์ปค๋ฐ ์ํฉ์ผ ๋๋ ๊ณ ๋ คํด๋ณด์. ๋ค์ A, B ์ปจํ
์ด๋๊ฐ ๋์์ ธ ์๊ณ , ๊ฐ ์ปจํ
์ด๋์ ๋ช
์๋ ๋ฆฌ์์ค ์ ํ์ ์๋์ ๊ฐ๋ค.
์์ ๊ฐ์ด A ์ปจํ
์ด๋๋ 50%๋ฅผ ์์ฐจ๊ฒ ์ ์ฌ์ฉํ๊ณ ์๋ค. ๊ทธ์ ๋ฐํด B ์ปจํ
์ด๋๋ ํ ๋น๋ฐ์ ์ ์๋ ์ต์ ์(requests.cpu)์ธ 50% ์ค 25% ๋ฐ์ ์ฌ์ฉํ์ง ์๊ณ ์๋ค. ๊ทธ๋์ A ์ปจํ
์ด๋๋ limits.cpu ๊ฐ์ด 700m์ผ๋ก ์ค์ ๋์ด ์์ด์, ์ค๋ฒ์ปค๋ฐ์ ์ํํ๊ธฐ ์ํด B ์ปจํ
์ด๋์ ์ ํ ์์์ ๊ฐ์ ธ์ CPU๋ฅผ ๋ ์ฌ์ฉํ๊ฒ ๋์๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ์์ค๋ B ์ปจํ
์ด๋์์ CPU๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์์
์ด ํ์ํ์ฌ B ์ปจํ
์ด๋๊ฐ ์์ ์๊ฒ ํ ๋น๋ฐ์ ์ต์ ์กฐ๊ฑด์ ์๋งํผ์ธ 500m๋ก CPU ์ฌ์ฉ๋์ ๋๋ฆฌ๋ ค๊ณ ์๋ํ๊ณ ์๋ค๊ณ ํด๋ณด์.
์ด๋ ๊ฒ ๋๋ฉด ์ด๋ค ์ํฉ์ด ๋ฐ์ํ ๊น? ๋ฐ๋ก A ์ปจํ
์ด๋์์ CPU ์ฐ๋กํ๋ง(throttling)์ด ๋ฐ์ํ๊ฒ ๋๋ค. ์ฌ๊ธฐ์ CPU ์ฐ๋กํ๋ง์ด๋ ๊ฐ๋
์ ๋ํด์ ์ ์ ์ดํด๋ณด๋๋ก ํ์. ์ฐ์ CPU๋ ์ฟ ๋ฒ๋คํฐ์ค์์ ์์ถ ๊ฐ๋ฅํ(Compressible) ๋ฆฌ์์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์์ถ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ผ๋ ๊ฒ์ requests.cpu ๋ณด๋ค ๋ ๋ง์ CPU๋ฅผ ์ฌ์ฉํด CPU ๊ฒฝํฉ ์ํฉ(๋ฐฉ๊ธ๊ณผ ๊ฐ์ ์ํฉ)์ด ๋ฐ์ํ๋๋ผ๋ ์ปจํ
์ด๋๊ฐ ์ข
๋ฃ๋์ง ์๊ณ , '์ฐํ ํ' ์ด๋ผ๋ ๊ฒ์ ํตํด ์ปจํ
์ด๋์ CPU ์ฌ์ฉ๋์ ์ต์ ํ ์ ์๋ ๊ฒ์ CPU ์ฐ๋กํ๋ง์ด๋ผ๊ณ ํ๋ค.
๋ค์ ๋์์์, ์์ ๊ฐ์ CPU ๊ฒฝํฉ ์ํฉ์ด ๋ฐ์ํ๋ฉด ์ปจํ
์ด๋ A์์ CPU ์ฐ๋กํ๋ง์ด ๋ฐ์ํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ CPU ์ฐ๋กํ๋ง์ด ๋ฐ์ํ๋ ์ฃผ์ฒด๊ฐ ์ ์ปจํ
์ด๋ A์ผ๊น? ์ปจํ
์ด๋ B์ด๋ฉด ์๋ ๊น? ์ ์ํฉ์์ A ์ปจํ
์ด๋๋ requests.cpu ๋ฅผ ๋ง์กฑํ๋ฉด์๋ ์ฌ์ง์ด ์ต๋ ์ฌ์ฉ๋์ธ limits.cpu ๊น์ง๋ ์ฌ์ฉํ๊ณ ์์๋ค. ํ์ง๋ง B ์ปจํ
์ด๋๋ requests.cpu ์ฆ, ์ต์๋ก ๋ณด์ฅ๋์ด์ผ ํ CPU๋ ์ฌ์ฉํ์ง ์๊ณ ์์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฟ ๋ฒ๋คํฐ์ค๋ B ์ปจํ
์ด๋์๊ฒ ์ต์๋ก ๋ณด์ฅ๋์ด์ผ ํ CPU์ ์์ ๋ฌด์กฐ๊ฑด ์ถฉ์กฑ์์ผ์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ B ์ปจํ
์ด๋๊ฐ ์๋ A ์ปจํ
์ด๋์๊ฒ "๋ CPU ๊ทธ๋ง ์จ" ๋ผ๊ณ ํ๋ฉด์ A ์ปจํ
์ด๋์์ CPU ์ฐ๋กํ๋ง์ด ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
์ด๋ฒ์๋ A, B ์ปจํ
์ด๋๊ฐ ์ ๋์์ค์์๋ ์ฌ์ ํ ์ ํด ์์์ด ๋จ์ ๋ ์ด๋ป๊ฒ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฐฐํ๋์ง ์ดํด๋ณด๋๋ก ํ์. ์๋ก์ด ์์๋ก A, B ์ปจํ
์ด๋์ requests, limits๊ฐ ์๋์ฒ๋ผ ์ฌ๋ช
์๋์ด ์ปจํ
์ด๋๊ฐ ์ด์๋๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด๋ฌํ ์ํฉ์์ ์ ํด ์์์ด ๋จ์์์ ๋, A, B ์ปจํ
์ด๋ ๋ชจ๋ limits์ ๋ช
์๋์ด ์๋ ๋ฆฌ์์ค ์๊น์ง ์ต๋ํ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ์ฟ ๋ฒ๋คํฐ์ค์์๋ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์ด๋ฐ ์ ํด ์์ ๋ง์ ๋ A, B ์ปจํ
์ด๋์ ๋ช
์๋ requests.cpu ์ ๋น์จ์ ๋ง๊ฒ ๋ถ๋ฐฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ๋งค๋ํ์คํธ์ ๋ช
์ํ๋ 1000m๋ฅผ ๋ง์น ๊ณ ์ ๋ CPU Core 1๊ฐ๋ผ๊ณ ์ดํด๋ฅผ ํ ์ ์์ง๋ง ์๋ฐํ ๋งํ๋ฉด ์ฌ์ค์ด ์๋๋ค. 1000m๊ฐ ํ ๋น๋ ์ปจํ
์ด๋๋ CPU 1๊ฐ์ ํด๋นํ๋ ์ฑ๋ฅ์ ํ์ฉํ ์ ์๋ ๊ฒ ๋ฟ์ด์ง 1๊ฐ์ CPU๋ฅผ ํด๋น ์ปจํ
์ด๋ ํผ์ ์ฆ, ๋ฐฐํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋ค. ์ฆ, ์ด๋ค ์ปจํ
์ด๋์ 1000m์ ํ ๋นํ๋ฉด ์ด 1000m๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ชผ๊ฐ์ง ๋ถ๋ถ CPU Core๋ค์ ๋ชจ์ ๋ง์น 1๊ฐ์ CPU Core 1๊ฐ์ ๋ฌํ๋ ์ฑ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์์ฒ๋ผ CPU Core ์ฌ๋ฌ ๊ฐ์ ๋ถ๋ถ ๋ถ๋ถ์ ๋ชจ์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ฝ CPU ์ฑ๋ฅ์ ์ต๋ํ ํ์ฉํด์ผ ํ๋ ์ํฉ ์๋ฅผ ๋ค์ด, ๋ฉํฐ ์ฐ๋ ๋ฉ์์ CPU ์ฐ์ฐ์ ์คํํ๊ธฐ ์ํด ์ฐ๋ ๋๊ฐ CPU ๋ด๋ถ์ ๋ ์ง์คํฐ ์ํ๋ฅผ ๋ฐฑ์
ํ๊ณ ๋ค์ ๊ฐ์ ธ์ค๋ ๋ฑ์ ์ปจํ
์คํธ ์ค์์นญ์ด๋ ์บ์ ๋ฏธ์ค๊ฐ์ ๊ฒ๋ค๋ก ์ธํด ์ฑ๋ฅ์ด ๋ฎ์์ง ์๋ ์๋ค. ์ฟ ๋ฒ๋คํฐ์ค์์๋ ์ด๋ฌํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๊ธฐ ์ํด์ ์ปจํ
์ด๋๊ฐ ํน์ CPU๋ฅผ ๋ฐฐํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก CPU Manger ๋ผ๋ ๊ธฐ๋ฅ๋ ์ง์ํ๋ค. CPU Manager๋ kubelet ์คํ ์ต์
์์ ๋ณ๊ฒฝํ ์ ์๋ค.
3. ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ์ฉ๋์ ์ ํ์ํค๋ ์๋ฆฌ : OOM Killer ์ QoS ํด๋์ค
์๊น ์์์ ์ฟ ๋ฒ๋คํฐ์ค์์๋ CPU๋ฅผ ์์ถ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ผ๊ณ ๋ถ๋ ๋ค๊ณ ํ๋ค. ํ์ง๋ง ๋ค๋ฅธ ์ข
๋ฅ์ ๋ฆฌ์์ค์ธ ๋ฉ๋ชจ๋ฆฌ์ ์คํ ๋ฆฌ์ง๋ CPU ์ ๋ฌ๋ฆฌ ์์ถ์ด ๋ถ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋์ ์ด๋ฐ ๋ฆฌ์์ค๋ค์ ๋ํด์ ๊ฒฝํฉ ์ํฉ์ด ๋ฐ์ํ๋ฉด OOM๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด์ ์ด๋ค ์ปจํ
์ด๋์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๊ณ ๋ง๋ค. ์ด๋ ๊ฒ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๊ธฐ ์ํด ์๋ง์ ํ๋ ๋๋ ์ปจํ
์ด๋ ํ๋ก์ธ์ค ์ค ํ๋๋ฅผ ์ ์ ํด์ ๊ฐ์ ๋ก ์ข
๋ฃํ๋ ๊ฒ์ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ํด๊ฑฐ(Eivction)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ ๊ฐ์ ๋ก ์ข
๋ฃํ ํ๋ ๋๋ ์ปจํ
์ด๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ์ ์ ํ๋ ๋ฐ ํ์ฉ๋๋ ๊ฒ์ด QoS ํด๋์ค๋ค.
์ฟ ๋ฒ๋คํฐ์ค์์๋ ๊ฐ์ ๋ก ์ข
๋ฃํ ํ๋ ๋๋ ์ปจํ
์ด๋์ ์ฐ์ ์์๋ฅผ ์ ํ ๋, ๋จผ์ ์ผ์ฐจ์ ์ผ๋ก ๋งค๋ํ์คํธ์ ๋ช
์๋ limits ์ requests ๊ฐ์ ๋ฐ๋ผ ๋ด๋ถ์ ์ผ๋ก QoS ๋ผ๋ ํด๋์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ์ ์์๋ฅผ ์ ํ๋ค. ๊ตฌ์ฒด์ ์ผ๋ก, QoS ํด๋์ค๋ ํฌ๊ฒ 3๊ฐ์ง ์ข
๋ฅ๊ฐ ์กด์ฌํ๋ค.
QoS ํด๋์ค์ ์์๋ณด๊ธฐ์ ์์ ์ฟ ๋ฒ๋คํฐ์ค์์๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ ์ธ์ , ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๊ฐ์งํ๊ณ ์ด ๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์์ ์ฌ์ฉ๋์ ์ ํ์ํค๋์ง ์์๋๋ก ์์๋ณผ ํ์๊ฐ ์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก, ์๋ ๊ทธ๋ฆผ์ ๋จผ์ ๋ณด๊ณ ํ๋ํ๋์ฉ ์ค๋ช
์ ์ด์ด๋๊ฐ ๋ณด๋๋ก ํ์.
์ฐ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋
ธ๋์๋ ํ์ฌ ์์ ์ฌ์ฉ๋์ ์ด๋ ํ์ง์ ๊ฐ์ ๋
ธ๋์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ค์ํ ๊ฐ๋ค์ด ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ๋ฆฌ(RAM) ์ฌ์ฉ๋์ด ์๊ณ์น์ ๋๋ฌํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ MemoryPressure์ด ์๊ณ ๋์คํฌ(HDD, SDD, ...) ์ฌ์ฉ๋์ด ์๊ณ์น์ ๋๋ฌํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ DiskPressure๋ ์๋ค.(์ฐธ๊ณ ๋ก ์ด ๊ฐ๋ค์ boolean ๊ฐ์ผ๋ก ๋์ด์๋ค) ์ด๋ฌํ ์ํ๊ฐ์ ๋
ธ๋ ๋ง๋ค ๋ถ์ด์๋ kubelet ์ด๋ผ๋ ์ผ์ข
์ Agent๊ฐ ๊ณ์ ํด๋น ๋
ธ๋์ ์ํ๊ฐ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒดํฌํ๊ณ ๊ฐฑ์ ํด์ค๋ค. ์ด์ฒ๋ผ kubelet์ด ๋
ธ๋์ ์ํ๊ฐ์ ๊ณ์์ ์ผ๋ก ์ฒดํฌํ๋ ์ํฉ ์ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ด์ฉํด์ ๋
ธ๋์ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๋ ค๊ณ ํ๋ค.
์ฒซ ๋ฒ์งธ๋ kubelet์ด ๋
ธ๋์ ์ํ๊ฐ์ ์ฒดํฌํ๋ฉด์ ๋
ธ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ถ์กฑํ๋ค๋ ์ํฉ์ ๊ฐ์ง ์ฆ, ์๋ฅผ ๋ค์ด MemoryPressure ๊ฐ์ด True๋ก ๋ฐ๋ ์ํฉ์ ๊ฐ์งํ๊ธฐ ์ด์ ์ OOM Killer ๋ผ๋ ๊ฒ์ด ๋จผ์ ๋
ธ๋์ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๊ธฐ ์ํด ์ ์ ์ ์ธ ์ก์
์ ์ํํ ์๋ ์๋ค.
OOM Killer๋ ์ฟ ๋ฒ๋คํฐ์ค์๋ง ์๋ ๊ฒ์ ์๋๊ณ , ์๋ ๋ฆฌ๋
์ค๋ผ๋ ์์คํ
์ ๋ด์ฅ๋์ด ์๋ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค. ๊ทธ๋ฐ๋ฐ ์ ์ด OOM Killer๊ฐ ์ฟ ๋ฒ๋คํฐ์ค์์ ๋์ํ๋๊ฑธ๊น? ๋ฐ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋
ธ๋๋ '๋ฆฌ๋
์ค ์์คํ
'์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋
ธ๋์ ๋ด์ฅ๋์ด ์๋ OOM Killer๋ผ๋ ๊ธฐ๋ฅ์ด '์ด๋ค ์ ์'๊ฐ ๋์ ์ปจํ
์ด๋์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข
๋ฃํด์ ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฉด '์ด๋ค ์ ์'๊ฐ ๊ตฌ์ฒด์ ์ผ๋ก ๋ฌด์จ ์ ์์ผ๊น? ์ด ์ ์์๋ ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์กด์ฌํ๋๋ฐ, ํ๋๋ ๋
ธ๋์์ ๋์๊ฐ๊ณ ์๋ ๋ชจ๋ ํ๋ก์ธ์ค๋ง๋ค ๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋น๋๋ OOM ์ ์๊ฐ ์กด์ฌํ๊ณ ์ด๋ฅผ oom_score_adj ๋ผ๊ณ ํ์ํ๋ค. ์ด oom_score_adj ๋ ์์คํ
์ด ๋์๊ฐ๋ ๋ฐ ํต์ฌ์ ์ธ ์ญํ ์ ํ ์๋ก ๋ฎ์ ์ ์๊ฐ ํ ๋น๋๋ค. ์ค์ ๋ก kubelet ๊ณผ ๊ฐ์ ํต์ฌ ํ๋ก์ธ์ค๋ -999๋ก ๋งค์ฐ ๋ฎ์ ์ ์๊ฐ ํ ๋น๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ ๋ค๋ฅธ ์ ์๋ก๋ oom_score๊ฐ ์๋๋ฐ, ์ด๋ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ฐ๋ผ ์ด์ ์ ์ธ๊ธํ oom_score_adj ์ ์์ ๋ฐ์ํ์ฌ ์ต์ข
OOM ์ ์๋ฅผ ๊ฐฑ์ ํ๊ฒ ๋๋ค. ๋น์ฐํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์์๋ก oom_score๋ ๋๊ฒ ์ฐ์ ๋๋ค. ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ ์ ํ๋ ํ๋ก์ธ์ค๋ก ์ธํด์ ์์คํ
์ ํต์ฌ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ์ํค๊ฒ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ ์์คํ
์ ์์ ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ ์ ํ๋ ํ๋ก์ธ์ค๋ถํฐ ๊ฐ์ ์ข
๋ฃํ๊ฒ ๋๋ค.
๋ ๋ฒ์งธ๋ kubelet์ด ๋
ธ๋์ ์ํ๊ฐ์ ์ฒดํฌํ๋ฉด์ ๋
ธ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ถ์กฑํ๋ค๋ ์ํฉ์ ๊ฐ์งํ ํ์ kubelet์ด ์ง์ ์ ์ธ ์ฃผ์ฒด๊ฐ ๋์ด์ ํ๋ ๋๋ ์ปจํ
์ด๋ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๊ณ ๋ค๋ฅธ ๋
ธ๋๋ก ํด๋น ํ๋๋ฅผ ์ฌํ ๋นํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ ๋ฐ๋ก QoS ํด๋์ค๊ฐ ๋ฑ์ฅํ๋ค. QoS ํด๋์ค ์ข
๋ฅ๋ ๋งค๋ํ์คํธ์ ๋ช
์๋๋ requests ์ limits ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ์ ์ด ๋๋ค.
3-1. ์๋ค๋ค ๋งํผ์ ๋ฌด์กฐ๊ฑด ์ด๋ ค์ผํด! : Guaranteed ํด๋์ค
๊ฐ์ฅ ๋จผ์ ์์๋ณผ QoS ํด๋์ค ์ข
๋ฅ๋ก๋ Guaranteed(์ดํ ๊ฐ๋ฐํฐ๋) ํด๋์ค๊ฐ ์๋ค. ์ด๋ requests ๊ณผ limits ๊ฐ์ด ์์ ์ด ๋์ผํ ๋ ๋ถ์ฌ๋๋ ํด๋์ค์ด๋ค. ์ฐธ๊ณ ๋ก limits ๊ฐ๋ง ๋ช
์ํ๋๋ผ๋ ๊ฐ๋ฐํฐ๋ ํด๋์ค๋ก ๋ถ๋ฅ๋๋๋ฐ, ์ด๋ limits ๊ฐ๋ง ๋ช
์ํ๋ฉด ๋ด๋ถ์ ์ผ๋ก requests ๊ฐ์ limits ๊ฐ๊ณผ ๋์ผํ๊ฒ ์ค์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ด ๊ฐ๋ฐํฐ๋ ํด๋์ค์ ์๋ฏธ๋ ๋ฌด์์ผ๊น? requests ์ limits ๊ฐ์ ์๋ฏธ๋ฅผ ์ ์๊ฐํด๋ณด๋ฉด ๋๋ค. requests๋ ์ต์ ๋ณด์ฅ๋ฐ์์ผ ํ ๋ฆฌ์์ค ์์ด๊ณ , limits ๊ฐ์ ์ต๋๋ก ๋ณด์ฅ๋ฐ์ ์ ์๋ ๋ฆฌ์์ค ์์ด๋ค. ์ด 2๊ฐ๊ฐ ์๋ก ๊ฐ์ด ๊ฐ๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ ํ ๋น๋ ์์์ ์ฌ์ฉ๋งํผ๋ง ์ฌ์ฉํ๊ณ ๋ ์ฌ์ฉํ์ง ์๋ ์ฆ, ์ค๋ฒ์ปค๋ฐ์ ์ํํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐํฐ๋ ํด๋์ค๋ก ๋ถ๋ฅ๋ ํ๋ ๋๋ ์ปจํ
์ด๋๋ค์ ํ ๋น๋ฐ์ ์์์ ๋งค์ฐ ์์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์์ ์๋ฏธํ๋ค. ๊ฒฐ๊ตญ, ์์ ์ฌ์ฉ์ ์์ ์ ์ผ๋ก ๋ณด์ฅ๋ฐ๋ ์ด ๊ฐ๋ฐํฐ๋ ํด๋์ค๋ฅผ ํ ๋น๋ฐ์ ํ๋์ ์ญํ ์ ๋์ปค ๋ฐ๋ชฌ์ด๋ kubelet ์ฒ๋ผ ์์คํ
์ ํต์ฌ์ ์ธ ์ญํ ์ ํ ๊ฒ์ด๋ผ๋ ๊ฑธ ์์ํ๊ธฐ๋ ํ๋ค.
์ค์ ๋ก ๊ฐ๋ฐํฐ๋ ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋ ๋๋ ์ปจํ
์ด๋ ๋ด๋ถ์์ ๋์ํ๋ ํ๋ก์ธ์ค๋ค์ OOM Score๋ฅผ ๋ณด๋ฉด ๋์ปค ๋ฐ๋ชฌ์ด๋ kubelet ๊ณผ ๊ฐ์ด ์ ์๊ฐ -997๋ก ๋งค์ฐ ๋ฎ์์ ์ ์ ์๋ค. ์ฐธ๊ณ ๋ก ํ๋ ๋ด์ ์ฌ๋ฌ ์ปจํ
์ด๋๊ฐ ๋์ํ๋๋ก ๋์ด ์๋ค๋ฉด ๋ชจ๋ ์ปจํ
์ด๋๋ค์ requests ์ limits ๊ฐ์ด ๋์ผํ๊ฒ ์ค์ ๋์ด์ผ๋ง ํด๋น ํ๋๊ฐ ๊ฐ๋ฐํฐ๋ ํด๋์ค๋ก ๋ถ๋ฅ๋จ์ ๊ธฐ์ตํ๋๋ก ํ์.
3-2. ์์ ์ฌ์ฉํ์ง ๋ชปํ๊ฑฐ๋, ์ต๋ํ ๋ง์ด ์ฌ์ฉํ๊ฑฐ๋! : BestEffort ํด๋์ค
๋ค์์ผ๋ก ์์๋ณผ QoS ํด๋์ค์ ์ข ๋ฅ๋ก๋ BestEffort ํด๋์ค์ด๋ค. ์ด BestEffort ํด๋์ค๋ requests ์ limits ๊ฐ์ด ๋งค๋ํ์คํธ์ ์์ ๋ช ์๋์ง ์์์ ๊ฒฝ์ฐ ๋ถ๋ฅ๋๋ค. ์ด BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋๋ limits ๊ฐ์ ์์ ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ ธ๋์ ์ ํด ์์์ด ์๋ค๋ฉด ์ ํ์์ด ๋ชจ๋ ์ฌ์ฉํ ์ ์๊ฒ๋๋ค. ํ์ง๋ง ๊ทธ ๋ฐ๋๋ก requests ๊ฐ ๋ํ ์์ ์ค์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ ธ๋์ ๋ชจ๋ ์์๋ค์ด ๋ค๋ฅธ ํ๋๋ค ์ด์์ ๋ชจ๋ ์ฐ์ด๊ณ ์๋ค๋ฉด BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋ ํ๋๋ ํด๋น ๋ ธ๋์ ์์ฑ๋์ง ์๋๋ค.
3-3. ๊ทธ ์ธ์ ๊ฒฝ์ฐ : Burstable ํด๋์ค
๋ง์ง๋ง์ผ๋ก ์์๋ณผ ์ข
๋ฅ๋ก๋ Burstable ํด๋์ค์ด๋ค. Burstable ํด๋์ค๋ ์์ ๋ฐฐ์ด Guaranteed ํด๋์ค, BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋์ง ์๋ ํ๋๋ค์ด ๋ถ๋ฅ๋๋ ํด๋์ค์ด๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ 2๋ฒ ๋ชฉ์ฐจ์์ ๋ฐฐ์ด๊ฒ์ฒ๋ผ requests ์ limits ๊ฐ์ด ์ค์ ๋์ด ์์ง๋ง, limits ๊ฐ์ด requests ๊ฐ๋ณด๋ค ๋ ํด ๊ฒฝ์ฐ์ ๋ถ๋ฅ๋๋ ํด๋์ค์ด๋ค. ๋ฐ๋ผ์ ์ด๋ ๋
ธ๋์ ์ ํด ์์์ด ์๋ค๋ฉด requests ๊ฐ๋ณด๋ค๋ ๋๋ ์ต๋ limits์ ๋ช
์๋ ๋งํผ๋ง ์์์ ํ๊ณ๋ฅผ ํ์ฅ ์ฆ, ์ค๋ฒ์ปค๋ฐ์ ์ํํ ์ ์๊ฒ ๋๋ค.
๋ฌผ๋ก ์ด Burstable ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋๋ ์ค๋ฒ์ปค๋ฐ์ ์ํํ๋ค๊ฐ ๋ค๋ฅธ ํ๋๋ ๋ฆฌ์์ค(CPU, RAM) ๊ฒฝํฉ์ด ๋ฐ์ํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ ๋จ์ ์ด ์๋ค. ์ด๋ด ๊ฒฝ์ฐ, kubelet์ requests ๋ณด๋ค ๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ํ๋์ด๊ฑฐ๋์ฐ์ ์์๊ฐ ๋ ๋ฎ๊ฒ ์ค์ ๋์ด์๋ ํ๋๋ฅผ ์ ์ ํ์ฌ ๊ฐ์ ์ข
๋ฃํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
3-4. QoS ํด๋์ค์ ์ฐ์ ์์ vs OOM Killer์ OOM Score
๋ฐฉ๊ธ Burstable ํด๋์ค์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ ์ค๋ฒ์ปค๋ฐ์ ์ํํ๋ค๊ฐ ๊ฒฝํฉ์ด ๋ฐ์ํ๊ณ , ๋
ธ๋์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ์ํฉ์ kubelet์ด ๊ฐ์งํ๋ฉด QoS ํด๋์ค์ ๋ฐ๋ผ ์ค์ ๋ ์ฐ์ ์์์ ๋ฐ๋ผ ํน์ ํ๋๋ฅผ ํด๋น ๋
ธ๋๋ก๋ถํฐ ํด๊ฑฐ(Eviction)์์ผ ๋ค๋ฅธ ๋
ธ๋์๋ค๊ฐ ํ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ์ด ๋, "์ฐ์ ์์๊ฐ ๋ฎ์์๋ก ํด๊ฑฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ํ๋"๋ฅผ ์๋ฏธํ๋ค.
ํ์ง๋ง 3๋ฒ ๋ชฉ์ฐจ์์ ๋ฐฐ์ด๊ฒ์ฒ๋ผ kubelet์ด ๋
ธ๋์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํฉ์ ๊ฐ์งํ๊ธฐ ์ด์ ์ ๋
ธ๋์ ์ฅ์ฐฉ๋์ด ์๋ (๋ฆฌ๋
์ค์) OOM Killer ๋ผ๋ ๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ธ์ฆํ๋ ๊ฒ์ ๋ณด๊ณ ํด๋น ๋
ธ๋์์ ์คํ๋๊ณ ์๋ ํ๋ก์ธ์ค๋ค ์ค์ "OOM Score ์ ์๊ฐ ๊ฐ์ฅ ๋์ ์ปจํ
์ด๋์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข
๋ฃ"ํ ์๋ ์๋ค.
(์ฐธ๊ณ ๋ก ์ฑ
p.484 ์ชฝ์์๋ "OOM Score๊ฐ ๊ฐ์ฅ ๋ฎ์ ์ปจํ
์ด๋์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ๋ก ์ข
๋ฃ" ํ๋ค๊ณ ํ์๋๋ฐ, OOM Score๊ฐ ๋ฎ์ ์ปจํ
์ด๋๋ ๊ณง ์์คํ
์ ํต์ฌ ์ปจํ
์ด๋๊ณ ์ด๋ ๊ฐ์ ๋ก ์ข
๋ฃํ ํ๋ก์ธ์ค ํ๋ณด์ ์ต๋ํ ๋ฐฐ์ ๋์ด์ผ ํ๋ค. ๊ด๋ จํด์ ์ ์ ๋ถ๊ป ์ด์๋ก ์ง๋ฌธ์ ํ์๊ณ , ํ์๊ฐ ์ดํดํ ๋ฐ๊ฐ ๋ง๋ค๊ณ ํ๋ค. ํด๋น ์ฑ
์ ์ฝ์ผ์๋ ๋ถ ์ค์ ํท๊ฐ๋ฆฌ์ค ๊ฒ ๊ฐ์ ์ฐธ๊ณ ๋ก ์ ์ด๋๋ค.)
QoS ํด๋์ค์ ์ฐ์ ์์์ OOM Killer๊ฐ ๋ฐ๋ผ๋ณด๋ OOM Score๊ฐ ์ด๋ค์ง์ ๋ฐ๋ผ ๊ฐ์ ์ข
๋ฃํ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ ๊ธฐ์ค์ด ๋ฌ๋ผ์ง๋๋ฐ, ํ์๋ ํท๊ฐ๋ ค์ ์ง์ ์ ๋ฆฌํด๋ณด๋๋ก ํ์. ์์ผ๋ก ์๋ ๊ท์น๋ง ์๊ฐํ๋ฉด ๋๋ค.
- QoS ํด๋์ค์ ๋ฐ๋ผ QoS ์ฐ์ ์์๊ฐ ๋ฎ๋ค = ๊ฐ์ ์ข ๋ฃ์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋์ ํ๋ ๋๋ ์ปจํ ์ด๋ ๋๋ ํ๋ก์ธ์ค
- OOM Score๊ฐ ๋๋ค = ๊ฐ์ ์ข ๋ฃ์ํฌ ๊ฐ๋ฅ์ฑ์ด ๋์ ํ๋ก์ธ์ค
์ฌ๊ธฐ์ QoS ํด๋์ค์ ๋ฐ๋ผ ํ๋๊ฐ ํด๊ฑฐ๋๋ ๊ฒ๊ณผ OOM Killer๊ฐ OOM Score์ ๊ธฐ๋ฐํด์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๋ ๊ฒ๋ง ๋ณด๋ฉด ๋์ผํ ๋์์ด๋ผ๊ณ ์ฐฉ๊ฐํ ์ ์๋ค. ํ์ง๋ง ์์ฐํ ๋ค๋ฅด๋ค. QoS ํด๋์ค์ ๋ฐ๋ผ ํ๋๊ฐ ํด๊ฑฐํ๋ ๊ฒ์ ๋ง ๊ทธ๋๋ก ํ๋๊ฐ ์์ฑ๋ '๋
ธ๋๊ฐ ๋ค๋ฅธ ๋
ธ๋๋ก ๋ณ๊ฒฝ' ๋๋ ๊ฒ์ด๋ค. ํ์ง๋ง OOM Killer๊ฐ ์ข
๋ฃํ๋ ๊ฒ์ 'ํ๋ก์ธ์ค'์ด๋ฏ๋ก ํ๋ ์์ฒด๋ฅผ ์ข
๋ฃํ๋ ๊ฒ์ ์๋๋ค. ๊ทธ๋์ ํ๋ ๋ด์ ๋ฌธ์ ๊ฐ ๋๋ 'ํน์ ํ๋ก์ธ์ค'๋ง์ ์ข
๋ฃ์ํค๊ฒ ๋๋ค. ๊ทธ๋์ OOM Killer์ ์ํด ์ํฅ๋ฐ๋ ํ๋๋ค์ ํ๋๊ฐ ๋
ธ๋๋ฅผ ์ฎ๊ธฐ์ง ์๊ณ ๋์ผํ ๋
ธ๋์์ ํ๋์ ์ฌ์์ ์ ์ฑ
(restartPolicy)์ ์ํด ์ฌ์์(Restart)ํ๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ QoS ํด๋์ค์์ ํด๋์ค ์ข
๋ฅ์ ๋ฐ๋ผ ์ฐ์ ์์๊ฐ ์ด๋ป๊ฒ ๋ถ์ฌ๋๋์ง ์ดํด๋ณด์. ์ฐ์ Guaranteed ํด๋์ค๊ฐ ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ผ๋ฉฐ, ๊ทธ ๋ค์์ Burtsable, ๋ง์ง๋ง์ผ๋ก๋ BestEffort ์ด๋ค. ์ฆ, ๋ค๋ก ๊ฐ์๋ก ๊ฐ์ ์ข
๋ฃ๋์ด ํด๊ฑฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ Burtsable๊ณผ BestEffort ํด๋์ค ๊ฐ์ ์ฐ์ ์์๋ ์ด๋ค ํด๋์ค๋ก ๋ถ๋ฅ๋ ํ๋๊ฐ ์ผ๋ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ ์ ํ๋์ง์ ๋ฐ๋ผ ์ฐ์ ์์๊ฐ ์ญ์ ๋ ์๋ ์๋ค๋ ์ ์ ์์๋๋๋ก ํ์.
4. ๋ค์์คํ์ด์ค ๋ณ๋ก ๊ฐ์ฉ ๋ฆฌ์์ค ์์์ ๊ฒฉ๋ฆฌ! : ResourceQuota ์ LimitRange
๊ฐ๋ฐ ์กฐ์ง์ด ์ปค์ง๊ณ , ์ด์ํ๋ ์๋น์ค์ ์์คํ
์ด ์ปค์ง๋ค ๋ณด๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ์ ์ ์ปค์ง๊ธฐ ๋ง๋ จ์ด๋ค. ๊ทธ๋ผ์ ๋ฐ๋ผ ์์ฐ์ค๋ ํ ๋๋ ์กฐ์ง ๋ณ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ์ง์ ๋ํ ๊ณ ๋ฏผ์ด ์๊ธฐ๊ธฐ ๋ง๋ จ์ด๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ ๋ณ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๋ณ๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ์์ด๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ํ ๋ณ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ด๋น์๊ฐ ์ง์ ๋์ด์ผ ํ๊ณ , ์์ฐ์ค๋ ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ๋์ด๋๊ฒ ๋๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ๋์ ํด๋ฌ์คํฐ์ ํ ๋ณ๋ก ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ ๋ค, ๊ฐ ํ์ ํด๋น ํ์ ์ํ๋ ๋ค์์คํ์ด์ค์์๋ง ์ฟ ๋ฒ๋คํฐ์ค API๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก RBAC(Role-Based Access Control)์ ์ค์ ํ ์๋ ์๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ๋ชจ๋ ๋ค์์คํ์ด์ค๊ฐ ํด๋ฌ์คํฐ์ ์์์ ๊ณต์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํน์ ๋ค์์คํ์ด์ค์ ์ํ๋ ํ๋๊ฐ ๋๋ถ๋ถ์ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ ์๋ ์๋ ๊ทน๋จ์ ์ธ ์ํฉ๋ ๋ฐ์ํ ์ ์๋ค.
์ด๋ฒ ๋ชฉ์ฐจ์์๋ ํ ๋ณ๋ก ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋, ๊ฐ ๋ค์์คํ์ด์ค๋ง๋ค ํ ๋น๋ฐ์ ์ ์๋ ์์์ ์ต๋ํ๋ ๋๋ ์ต๋ ๋ฒ์๋ฅผ ์ค์ ํ ์ ์๋ ResourceQuota, LimitRange์ ๋ํด ๋ฐฐ์๋ณด๋ ค๊ณ ํ๋ค. ์ด 2๊ฐ์ ์ค๋ธ์ ํธ๋ ๋ค์์คํ์ด์ค์ ์ข
์๋๋ ์ค๋ธ์ ํธ์ด๊ธฐ ๋๋ฌธ์ ๋ค์์คํ์ด์ค๋ณ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์์๋์ ๊ด๋ฆฌํ ์ ์๋ค.
4-1. ๋ค์์คํ์ด์ค์์ ํ๋๋ค์ ์ฌ์ฉ ์์ ์์ ์ดํฉ์ ์ ํํ์! : ResourceQuota
๋จผ์ ResourceQuota๋ ํน์ ๋ค์์คํ์ด์ค์์ ์ฌ์ฉํ ์ ์๋ ์์ ์ฌ์ฉ๋์ ์ดํฉ์ ์ ํํ ์ ์๋ ์ค๋ธ์ ํธ์ด๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ResourceQuota๋ ๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ๊ธฐ๋ฅ์ ํ๋ค.
์ฒซ๋ฒ์งธ๋ก ํน์ ๋ค์์คํ์ด์ค์ ํ ๋นํ ์ ์๋ CPU, ๋ฉ๋ชจ๋ฆฌ, PVC, ์ปจํ
์ด๋ ๋ด๋ถ์ ์์ ์คํ ๋ฆฌ์ง(ephemeral storage)์ ์ดํฉ์ ์ ํํ ์ ์๋ค. ์ด ๊ธฐ๋ฅ์ ๋ค์์คํ์ด์ค ๋ณ๋ก ์์ ์ฌ์ฉ๋์ ์ดํฉ์ ์ ํํ๋ ๊ฒ์ด ์ฃผ์ ๋ชฉ์ ์ด๋ค.
๋๋ฒ์งธ๋ก ํน์ ๋ค์์คํ์ด์ค์์ ์์ฑํ ์ ์๋ ๋ฆฌ์์ค(์๋น์ค, ๋ํ๋ก์ด๋จผํธ, ์ปจํผ๊ทธ๋งต, ์ํฌ๋ฆฟ ๋ฑ)์ ๊ฐ์๋ฅผ ์ ํํ ์ ์๋ค. ์ด๋ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ์์์ ๊ณ ๊ฐ์ํค๋ ๊ฒ์ ๋ง๊ธฐ ์ํจ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์ ์ค์๋ก ์ด๋ค ์น์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ํ๋๋ก ํ๋ ๋ํ๋ก์ด๋จผํธ๊ฐ ๋ฌดํ์ ์ผ๋ก ๊ณ์ ์์ฑ๋๊ณ ์๋ค๊ณ ํด๋ณด์. ๊ทธ๋ฌ๋ฉด ๊ฒฐ๊ตญ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ๋๋ ค์ ธ์ ์ฅ์ ๊ฐ ๋ฐ์ํ ์ ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ง๊ณ ์ ์๋น์ค๋ ๋ํ๋ก์ด๋จผํธ๊ณผ ๊ฐ์ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๋ค๋ ์์ฑ ๊ฐ์์ ์ ํ์ ๋ ์ ์๋ค.
์ด์ ResourceQuota์ ๊ธฐ๋ฅ 2๊ฐ์ง๋ฅผ ์ฐจ๋ก๋ก ํ๋์ฉ ์ดํด๋ณด์. ๋จผ์ ์ฒซ๋ฒ์งธ ๊ธฐ๋ฅ์ผ๋ก ํน์ ๋ค์์คํ์ด์ค์์ CPU, ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ ํํ๋ ResourceQuota ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ๋ ๋งค๋ํ์คํธ๋ฅผ ์ดํด๋ณด์. ์ด ๋ CPU, ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ ํํ ๋ ์์์ ๋ฐฐ์ด requests, limits ํค์๋๊ฐ ๋ ๋ฑ์ฅํ๋ค๋ ์ ๋ ์์๋์.
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-quota-test
namespace: zedd
spec:
hard:
requests.cpu: "1000m"
requests.memory: "500Mi"
limits.cpu: "1500m"
limits.memory: "1000Mi"
ํด๋น ResourceQuota๋ฅผ ์์ฑํ ๋ค์์คํ์ด์ค๋ 'zedd'๋ก ์ค์ ํ๋ค. ์ ๋งค๋ํ์คํธ์์๋ requests ์ limits๋ฅผ ํจ๊ป ๋ช
์ํ๊ธด ํ์ง๋ง, ๋ ์ค ํ๋๋ง ์ ์ํด๋ ์๊ด์๋ค. ์ ๋งค๋ํ์คํธ๋ฅผ ํด์ํ๋ฉด ์์ผ๋ก zedd ๋ผ๋ ๋ค์์คํ์ด์ค์์ ์์ฑ๋๋ ํ๋์ CPU๋ ์ต์ 1000 ๋ฐ๋ฆฌ์ฝ์ด์์ 1500 ๋ฐ๋ฆฌ์ฝ์ด๊น์ง, ๋ฉ๋ชจ๋ฆฌ๋ 500Mi ์์ 1000Mi ๋ฒ์ ์์ ์์ด์ผ ํจ์ ์๋ฏธํ๋ค. ๋ง์ฝ zedd ๋ผ๋ ๋ค์์คํ์ด์ค์์ ์ด์๋๊ณ ์๋ ํ๋๋ค์ ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ์ดํฉ์ด 900Mi ์ํ์ธ๋ฐ, ์ฌ๊ธฐ์๋ค๊ฐ requests๊ฐ 200Mi์ธ ํ๋๋ฅผ ์์ฑํ๋ ค๊ณ ์๋ ํ๋ค๋ฉด ํ๋๊ฐ ์์ฑ๋์ง ๋ชปํ๊ณ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ ResourceQuota ๋ฆฌ์์ค๋ฅผ ์์ฑํ ๋ค, ํ์ฌ zedd ๋ค์์คํ์ด์ค์์ ์ด๋์ ๋์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ๋ณด๋ ค๋ฉด ์์ฑ๋ ResourceQuota ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด๋ฉด ๋๋ค.
kubectl describe $NAME_OF_RESOURCE_QUOTA
ResourceQuota์ ๋๋ฒ์งธ ๊ธฐ๋ฅ์ผ๋ก ๋ฆฌ์์ค ๊ฐ์๋ฅผ ์ ํํ๋ ๊ฒ์ ๋ํด ์์๋ณด์. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ResourceQuota๋ ์๋์ ๊ฐ์ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค๊ฐ ์์ฑ๋๋ ๊ฐ์๋ฅผ ์ ํ์ํจ๋ค.
- ๋ํ๋ก์ด๋จผํธ, ํ๋, ์๋น์ค, ์ํฌ๋ฆฟ, ์ปจํผ๊ทธ๋งต, PVC ๋ฑ์ ๊ฐ์
- NodePort, LoadBalancer ํ์ ์ ์๋น์ค ๊ฐ์
- QoS ํด๋์ค ์ค BestEffort ์ข ๋ฅ๋ก ๋ถ๋ฅ๋๋ ํ๋์ ๊ฐ์
๋ฆฌ์์ค๊ฐ ์์ฑ๋๋ ๊ฐ์๋ฅผ ์ ํ์ํค๋ ค๋ฉด count/{RESOURCE}.{API GROUP NAME} ์ ๊ฐ์ ํฌ๋งท์ผ๋ก ๋งค๋ํ์คํธ์ ์ ์ํ ์ ์๋ค. ์์ ํ์ผ์ ๋ณด์.
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-quota-test
namespace: zedd
spec:
hard:
requests.cpu: "1000m"
requests.memory: "500Mi"
limits.cpu: "1500m"
limits.memory: "1000Mi"
count/pods: "3"
count/services: "3"
count/secrets: "3"
count/services.nodeports: "3"
count/services.loadbalancers: "4"
์ง์ ์ ๋ณด์๋ ๋งค๋ํ์คํธ ์์์์ ์ถ๊ฐ๋ ๋ถ๋ถ๋ง ๋ณด์. ํ๋๋ ์ํฌ๋ฆฟ ๊ฐ์ ๊ฒฝ์ฐ API ๊ทธ๋ฃน์ด ์ฝ์ด์ ์ํ๊ธฐ ๋๋ฌธ์ ํฌ๋งท ์ค {API GROUP NAME} ์ด ๋น ๋ฌธ์์ด๋ก ๋ค์ด๊ฐ ์
์ด๋ค. ๋ค๋ง NodePort ๋ LoadBalancer ์ ํ์ ์๋น์ค๋ฅผ ์ ์ํ ๋๋ ์์ฒ๋ผ API ๊ทธ๋ฃน๋ช
์ ๊ผญ ๊ฐ์ด ๋ช
์ํด์ฃผ์ด์ผ ํ๋ค.
๋ค์์ ResourceQuota๋ก QoS ํด๋์ค ์ค BestEffort ์ข
๋ฅ๋ก ๋ถ๋ฅ๋๋ ํ๋์ ๊ฐ์๋ฅผ ์ ํ์ํค๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์. ์์ ์ดํด๋ณธ ๊ฒ์ฒ๋ผ BestEffort ๋ผ๋ QoS ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋์ ๋งค๋ํ์คํธ์๋ requests ์ limits ๊ฐ์ด ๋ช
์๋์ง ์๋๋ค๋ ์ ์ ๋ฐฐ์ ๋ค. ๊ทธ๋์ ์ด๋ก ์ธํด ๊ทน๋จ์ ์ผ๋ก๋ ๋
ธ๋์ ์ ํด ์์์ ๋ชจ์กฐ๋ฆฌ ๋์ด๋ค ์ฌ์ฉํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ํ๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ง๊ธฐ ์ํด ResourceQuota๋ฅผ ์ด์ฉํด์ BestEffort ํด๋์ค์ ํ๋๊ฐ ์ฌ์ฉํ ๋ฆฌ์์ค ์์ ์์ฑ๋ ํ๋์ ๊ฐ์๋ก ์ ํ์ํฌ ์ ์๋ค. ์ฐ์ BestEffort ํด๋์ค์ ํ๋๊ฐ ์ฌ์ฉํ ๋ฆฌ์์ค ์์ ํ๋์ ๊ฐ์๋ก ์ ํ์ํค๋ ๊ฒ์ ๋ช
์ํ ResourceQuota์ ๋งค๋ํ์คํธ๋ถํฐ ์ดํด๋ณด์.
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-quota-test
namespace: zedd
spec:
hard:
count/pods: "1"
scopes:
- BestEffort
์ค์ฝํ๋ผ๋ ์์ญ์ด ์ถ๊ฐ๋์๋๋ฐ, ์ด๊ณณ์๋ ํ๋์ ์ํ๊ฐ์ ๋ช
์ํ ์ ์๋ค. ์ฌ๊ธฐ์๋ ํ๋์ ์ํ ๊ฐ ์ค BestEffort ๋ผ๋ ๊ฐ์ ๋ช
์ํด์ BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์
์ด๋ค. ์ฐธ๊ณ ๋ก ์ด์ฒ๋ผ BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋์ ๋ฆฌ์์ค ์ ํ์ ๊ฑธ ๊ฒฝ์ฐ, (ResourceQuota์ ์ฒซ๋ฒ์งธ ๊ธฐ๋ฅ์ ์ค๋ช
ํ ๋ ๋ฑ์ฅํ) ResourceQuota ๋งค๋ํ์คํธ์ ์ง์ ์ ์ผ๋ก requests, limits ๊ฐ์ ๋ช
์ํ์ง ์๋๋ค. ์๋ํ๋ฉด BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋ ์์ฒด๋ ์์ด์ requests, limits ๊ฐ์ ๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ด๋๊น! ๊ทธ๋์ ๋ณดํต BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋์ ๋ฆฌ์์ค ์ ํ์ ๊ฑธ๊ธฐ ์ํด ResourceQuota๋ฅผ ์ฌ์ฉํ ๋๋ ์ ๋งค๋ํ์คํธ์ฒ๋ผ "count/pods"๋ฅผ ๋ช
์ํด ์์ฑ๋ ํ๋ ๊ฐ์๋ฅผ ์ ํ์์ผ์ค๋ค.
(ํน์ฌ๋ BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋๊ฐ ์๋ ๋ค๋ฅธ ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋์ ๋ํ ์ ํ์ ๊ฑธ ๊ฒฝ์ฐ, scopes ์์ญ์ 'NotBestEffort' ๋ผ๊ณ ๋ช
์ํด์ฃผ๋ฉด ๋๋ค. ์ฐธ๊ณ ํด์ ์์๋์.)
ํ์ง๋ง ๋ง์ฝ์ ์์ฑํ ํ๋ ๊ฐ์๋ฅผ ๋ช
์์ ์ผ๋ก ์์ฑํ์ง ์๊ณ requests, limits ๊ฐ์ ์ ํํ๋๋ก ํ ResourceQuota๋ฅผ ์์ฑํ๋ค๋ฉด, ์ด ๊ฒฝ์ฐ์๋ BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ์ฆ, ๋งค๋ํ์คํธ์ requests, limits ๊ฐ์ ๋ช
์ํ์ง ์์ ํ๋๋ ์์ฑ๋์ง ์๋๋ค. ์ฆ, ์๋์ ๊ฐ์ ๋งค๋ํ์คํธ๋ก ResourceQuota๋ฅผ ์์ฑํ ๋ค์ BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-quota-test
namespace: zedd
spec:
hard:
requests.cpu: "1000m"
requests.memory: "500Mi"
limits.cpu: "1500m"
limits.memory: "1000Mi"
์๋ํ๋ฉด ResourceQuota์์ ๋ช
์์ ์ผ๋ก requests, limits๋ฅผ ์ ์ธํ๋ค๋ ๊ฒ์ ๊ณง ํด๋น ๋ค์์คํ์ด์ค(zedd ๋ผ๋ ๋ค์์คํ์ด์ค)์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์์์ ์ดํฉ์ ์ ํ์์ผ์ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด ๋ง์ ๋ค๋ฅธ ๋ง๋ก ํ๋ฉด ํด๋น ๋ค์์คํ์ด์ค์ ์์ฑ๋ ํ๋๋ค์ ๋ฐ๋์ ๋งค๋ํ์คํธ์ requests, limits ๊ฐ์ด ๋ช
์๋์ด์ผ ํจ์ ์๋ฏธํ๋ค. ํ์ง๋ง BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋๋ค์ด๋ผ๋ ๊ฒ์ ์ ์ด์ ๋งค๋ํ์คํธ์ requests, limits ๊ฐ์ด ๋ช
์๋์ง ์๊ณ , ์ด ๋ช
์๋์ง ์๋๋ค๋ ๊ฒ์ ๋
ธ๋์ด ๋ชจ๋ ์์์ ๋๊น์ง ๋์ด๋ค ์ธ์ ์๋ค๋ ๊ฒ์ธ๋ฐ, ์ ResourceQuota์๋ requests, limits ๊ฐ์ด ๋ช
์๋์ด ์๊ธฐ ๋๋ฌธ์ BestEffort ํด๋์ค์ ํ๋๋ค์ ์ ResourceQuota๊ฐ ์กด์ฌํ๋ ๋ค์์คํ์ด์ค์์๋ ์์ฑ๋์ง ๋ชปํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋๋ค์ด๋๋ผ๋ ํ๋์ ์์ ์ฌ์ฉ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํํ ์ ์๋๋ก ํด์ฃผ๋ LimitRange ๋ผ๋ ๋ฆฌ์์ค ์ค๋ธ์ ํธ๊ฐ ๋ฑ์ฅํ๋ค.
4-2. ๋ค์์คํ์ด์ค์์ ์์ฑ๋๋ ํ๋๋ค์ ๊ธฐ๋ณธ ์ฌ์ฉ๋์ ์ ํ์ํค์! : LimitRange
LimitRange๋ ๋ค์์คํ์ด์ค ๋ณ๋ก ์์์ ๋ฒ์ ๋๋ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ ์๊ฐ ์๋ ๋ฆฌ์์ค ์ค๋ธ์ ํธ์ด๋ค. LimitRange์ ์ฉ๋๋ก๋ ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. ๋จผ์ ํ๋์ ์ปจํ
์ด๋ ๋งค๋ํจ์คํธ์ CPU์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ช
์๋์ด ์์ง ์๋ ์ฆ, BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ๊ฒฝ์ฐ, ์๋์ผ๋ก ๊ธฐ๋ณธ requests ๋๋ limits ๊ฐ์ ์ค์ ํ๋ค. ๋ ๋ฒ์งธ๋ก๋ ํ๋ ๋๋ ์ปจํ
์ด๋์ CPU, ๋ฉ๋ชจ๋ฆฌ, PVC ๋ฑ๊ณผ ๊ฐ์ ๋ฆฌ์์ค ํฌ๊ธฐ์ ์ต๋๊ฐ, ์ต์๊ฐ์ ์ค์ ํ ์ ์๋ค. LimitRange์ ์์ฑํ๋ ์์ ๋งค๋ํ์คํธ ํ์ผ์ ์ดํด๋ณด์.
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range-test
spec:
limits:
- default:
memory: 256Mi
cpu: 200m
defaultRequest:
memory: 128Mi
cpu: 100m
max:
memory: 1Gi
cpu: 1000m
min:
memory: 16Mi
cpu: 50m
type: Container
ํญ๋ชฉ์ ํ๋์ฉ ์ดํด๋ณด์.
- default : ํ๋์ ์ปจํ ์ด๋์ limits ๊ฐ์ด ์ค์ ๋์ด ์์ง ์๋ค๋ฉด ํด๋น ๊ฐ์ผ๋ก ์๋ ์ค์ ๋จ
- defaultRequest : ํ๋์ ์ปจํ ์ด๋์ requests ๊ฐ์ด ์ค์ ๋์ด ์์ง ์๋ค๋ฉด ํด๋น ๊ฐ์ผ๋ก ์๋ ์ค์ ๋จ
- max : ํ๋์ ์ปจํ ์ด๋์ ์ค์ ๋ ์ ์๋ limits ๊ฐ์ ์ต๋์น๋ฅผ ์๋ฏธ. ํด๋น ๊ฐ๋ณด๋ค ๋ ๋ง์ ์์์ ํ ๋นํ๋ ค๊ณ ์๋ํ๋ฉด ํ๋ ์์ฑ ์คํจ
- min : ํ๋์ ์ปจํ ์ด๋์ ์ค์ ๋ ์ ์๋ limits ๊ฐ์ ์ต์์น๋ฅผ ์๋ฏธ. ํด๋น ๊ฐ๋ณด๋ค ๋ ์ ์ ์์์ ํ ๋นํ๋ ค๊ณ ์๋ํ๋ฉด ํ๋ ์์ฑ ์คํจ
- type: Container : ์์ ๊ฐ์ ์์ํ ๋น์ ์ด๋ค ๋จ์๋ก ํ ๊ฒ์ธ์ง๋ฅผ ์๋ฏธ. ์ฌ๊ธฐ์๋ ์ปจํ ์ด๋(Container) ๋จ์๋ก ํ ๊ฒ์์ ๋ช ์
๊ทธ๋ฆฌ๊ณ ์ ์์ ํ์ผ์์ ๋ํ๋์ง ์์์ง๋ง maxLimitRequestRatio ๋ผ๋ ๊ฐ๋ ๋ช ์ํ ์ ์๋๋ฐ, ์ด๋ limits ์ requests ๊ฐ ๋น์จ์ด ๋ช์ธ์ง๋ฅผ ๋ช ์ํ๋ ๊ฒ์ธ๋ฐ, ํด๋น ๊ฐ๋ณด๋ค ๋ฌด์กฐ๊ฑด ์์์ผ๋ง ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, maxLimitRequestRatio ๊ฐ์ด 1.5์ธ๋ฐ, limits ๊ฐ์ด 200Mi ์ด๊ณ , requests ๊ฐ์ด 100Mi ๋ฉด 200 / 100์ 2์ด๋ฏ๋ก 1.5๋ณด๋ค ์ปค์ง๋ฏ๋ก ํ ๋น์ด ๋ถ๊ฐ๋ฅํด์ง๋ค. ์ด๋ ๊ฒ maxLimitRequestRatio ๊ฐ์ ์ฌ์ฉํจ์ ๋ฐ๋ผ '์ค๋ฒ์ปค๋ฐ์ ์ด๋์ ๋ ํ ๋นํด์ผ ํ ์ง' ๊ทธ๋ฆฌ๊ณ maxLimitRequestRatio ๊ฐ์ 1๋ก ์ค์ ํ๋ฉด 'Guaranteed ํด๋์ค'๋ก ๋ถ๋ฅ๋๋ ํ๋๋ฅผ ์์ฑํ๊ฒ ๋ค๋ ๊ฒ์ ์์ํ๋ค.
4-3. ResourceQuota ์ LimitRange๋ Admission Controller์ ์ข ๋ฅ๋ค์ด๋ค
๋ง์ง๋ง ๋ชฉ์ฐจ์์๋ ๋ฐฉ๊ธ [4-1, 4-2] ๋ชฉ์ฐจ์์ ๋ฐฐ์ด ResourceQuota ์ LimitRange๊ฐ ์ํ๋ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ(Admission Controller)๋ผ๋ ๊ฐ๋
์ ๋ํด ๋ฐฐ์๋ณด๋๋ก ํ์. ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๊ฐ kubectl ์ด๋ผ๋ CLI๋ฅผ ์ํํ์ ๋, ์ฟ ๋ฒ๋คํฐ์ค์์ ํด๋น ๋ช
๋ น์ด๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ๋จ๊ณ๋ฅผ ์์๋ณผ ํ์๊ฐ ์๋ค. ๋จผ์ ์๋ ๊ทธ๋ฆผ์ ๋ณด์.
๋ง์น kubectl ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ ๊ฐ๋ฐ์๊ฐ ํด๋ผ์ด์ธํธ, ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ๋ฐฑ์๋ ์๋ฒ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ ๊ตฌ์กฐ์์ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ฆ, kubectl ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ ๊ฐ๋ฐ์์ API ์์ฒญ์ด ์ ์ ํ์ง ๊ฒ์ฆํ๊ณ , ํ์์ ๋ฐ๋ผ API ์์ฒญ์ ๋ณํํ๋ ๋จ๊ณ๋ฅผ ์ํํด์ฃผ๋ ์ฃผ์ฒด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฌ์ง์ด ์ด๋ค API ์์ฒญ์ด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ ๋ค์ด์์ ๋, ํด๋น API ์์ฒญ์ด ๋ถ์ ์ ํ๋ค๊ณ ์๊ฐ๋๋ฉด ๊ฑฐ์ ํ๊ฑฐ๋ API ์์ฒญ์ ๋ด๊ฒจ์๋ ํ๋ผ๋ฏธํฐ ๊ฐ๋ ์์ ํ ์๊ฐ ์๋ค.
์ ๊ทธ๋ฆผ์์๋ ์ ์ ์๋ฏ์ด ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ์๋ Mutating ๊ณผ Validating 2๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. ๋จผ์ API ์์ฒญ์ ์ ์ ํ๊ฒ ์์ ํ๋ ์ญํ ์ ํ๋ Mutating ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๊ฐ ์๊ณ , API ์์ฒญ์ ๊ฒ์ฌํ๋ ์ญํ ์ ํ๋ Validating ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๊ฐ ์กด์ฌํ๋ค. ๊ทธ๋ฌ๋ฉด ์์์ ๋ฐฐ์ด ResourceQuota ์ LimitRange๋ ์ด๋ค ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ์ ํด๋นํ๋ ๊ฑธ๊น? ๋ง์ฝ ์ฌ์ฉ์๊ฐ ํ๋๋ฅผ ์์ฑํ๋ ์ํฉ์ ๊ฐ์ ํด๋ณด์.
๊ฐ์ฅ ๋จผ์ ์ฌ์ฉ์๊ฐ kubectl ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ฒ ๋๋ฉด ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์ kube api server๋ก API ์์ฒญ์ ์ ์ก(HTTP ํธ๋ค๋ฌ)ํ๋ค. ๊ทธ๋ฌ๋ฉด ์ธ์ฆ์๋ ์๋น์ค ์ด์นด์ดํธ ๋ฑ์ ํตํด ์ธ์ฆ ๋จ๊ณ(Authentication)๋ฅผ ๊ฑฐ์น๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ๋กค, ํด๋ฌ์คํฐ ๋กค ๋ฑ์ ํตํด ์ธ๊ฐ ๋จ๊ณ(Authorization)๋ฅผ ๊ฑฐ์น๋ค.
์ด์ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ์ ์ญํ ์ฐจ๋ก๋ค. ๋จผ์ LimitRange๋ผ๋ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ์ฌ์ฉ์๊ฐ ์์ฑํ ํ๋์ ๋งค๋ํ์คํธ๋ฅผ ๋ณด๊ณ ์์ ํ ๋น ์์ฒญ์ ๋ณํ(Mutating)ํ๋ค. ์ฆ, ๋ง์ฝ ํ๋์ ๋งค๋ํ์คํธ์ ์ด๋ค ๋ฆฌ์์ค ํ ๋น๋๋ ๋ช
์๋์ด ์์ง ์๋ค๋ฉด(์ฆ, BestEffort ํด๋์ค๋ก ๋ถ๋ฅ๋๋ ํ๋) LimitRange๋ ํ๋์๋ค๊ฐ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ธฐ๋ณธ ๊ฐ์ ์ถ๊ฐํจ์ผ๋ก์จ ์๋ ์ฌ์ฉ์๊ฐ ์์ฒญํ API์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ(Mutate)ํ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค, ์ด์ ResourceQuota ๋ผ๋ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๊ฐ ์ญํ ์ ํ ์ฐจ๋ก๋ค. ๋ง์ฝ ์์ฑ๋ ํ๋์ ์์์ด ํ ๋นํ๋ ค๊ณ ํ๋๋ฐ ํด๋น ํ๋๊ฐ ์ํ ๋ค์์คํ์ด์ค์ ์์ ํ ๋น๋์ด ์ด๋ฏธ ์ด๊ณผ๋ ์ํ๋ผ๋ฉด API ์์ฒญ์ ๊ฑฐ์ ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ReourceQuota๊ฐ ์์ฑ๋ ํ๋์ ๋ฆฌ์์ค๋ฅผ ๊ฒ์ฆํ๋ ์ฆ, Validating ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ ์ญํ ์ ํ๋ ์
์ด๋ค.
์ด๋ฐ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค์ ์์ฒด์ ์ผ๋ก ์ ๊ณตํ๋ ๊ฒ๋ค๋ ์์ฒญ ๋ง๋ค. ํ์ง๋ง ์ฌ์ฉ์๊ฐ ์ธ์ ๋ ์ด๋ฐ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ฅผ ์ปค์คํ
ํ๊ฒ ๊ตฌํํด์ ์ฌ์ฉํ ์๋ ์๋ค. ์ ๋ช
ํ ์๋น์ค ๋งค์ฌ ์๋ฃจ์
์ธ Istio๋ ์ด๋ ๊ฒ ์ปค์คํ
ํ๊ฒ ์ด๋๋ฏธ์
์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ ํ๋์ ํ๋ก์ ์ฌ์ด๋์นด ์ปจํ
์ด๋๋ฅผ ์ฃผ์
ํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.