Container/Kubernetes

[Kubernetes] ํŒŒ๋“œ์˜ ๋ฆฌ์†Œ์Šค ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œ์‹œ์ผœ๋ณด์ž

YounghunJo 2024. 10. 24. 22:53
๋ฐ˜์‘ํ˜•

๐Ÿ”Š ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ์‹œ์ž‘ํ•˜์„ธ์š”! ๋„์ปค/์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ์ ์„ ์ฝ๊ณ  ๊ฐœ์ธ์ ์ธ ๋ชฉ์  ํ•˜์— ์ž‘์„ฑ๋˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ํฌ์ŠคํŒ…์— ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์ž๋ฃŒ๋Š” ์ œ๊ฐ€ ์ง์ ‘ ์žฌ๊ตฌ์„ฑํ•˜์˜€์Œ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
 

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 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 ํด๋ž˜์Šค์— ์•Œ์•„๋ณด๊ธฐ์— ์•ž์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ์„ ์–ธ์ œ, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ๊ฐ์ง€ํ•˜๊ณ  ์ด ๋•Œ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œ์‹œํ‚ค๋Š”์ง€ ์ˆœ์„œ๋Œ€๋กœ ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ, ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋จผ์ € ๋ณด๊ณ  ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ์„ค๋ช…์„ ์ด์–ด๋‚˜๊ฐ€ ๋ณด๋„๋ก ํ•˜์ž.
 

k8s์—์„œ ํŒŒ๋“œ๋ฅผ Eviction ํ•˜๋Š” ๊ตฌ์กฐ

 
์šฐ์„  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ์—๋Š” ํ˜„์žฌ ์ž์› ์‚ฌ์šฉ๋Ÿ‰์€ ์–ด๋– ํ•œ์ง€์™€ ๊ฐ™์€ ๋…ธ๋“œ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹ค์–‘ํ•œ ๊ฐ’๋“ค์ด ์กด์žฌํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”๋ชจ๋ฆฌ(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๋„ ์ด๋ ‡๊ฒŒ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์–ด๋“œ๋ฏธ์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ํŒŒ๋“œ์— ํ”„๋ก์‹œ ์‚ฌ์ด๋“œ์นด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
 
 

๋ฐ˜์‘ํ˜•