Kubernetes Pod ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•

Kubernetes Pod ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•Tohad์˜ ๋ณด์ƒ

Kubernetes๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค ์„ค์ •์„ ์žŠ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ๋Š” Docker ์ด๋ฏธ์ง€๊ฐ€ ์ž‘๋™ํ•˜๊ณ  Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜์ค‘์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ํ”„๋กœ๋•์…˜ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ปจํ…Œ์ด๋„ˆ์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•œ์ง€, ์‹คํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒ€ Mail.ru์˜ Kubernetes aaS ์ปจํ…Œ์ด๋„ˆ ๋ฆฌ์†Œ์Šค(CPU ๋ฐ MEM), ์š”์ฒญ ๋ฐ ๋ฆฌ์†Œ์Šค ์ œํ•œ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๋ฅผ ๋ฒˆ์—ญํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์˜ ์ด์ ๊ณผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค

๋‹ค์Œ ๋‹จ์œ„๋ฅผ ํฌํ•จํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ค‘์•™ ์ฒ˜๋ฆฌ ์žฅ์น˜(CPU) - ์ฝ”์–ด
  • ๋ฉ”๋ชจ๋ฆฌ(MEM) - ๋ฐ”์ดํŠธ.

๊ฐ ์ปจํ…Œ์ด๋„ˆ๋งˆ๋‹ค ๋ฆฌ์†Œ์Šค๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ Pod YAML ํŒŒ์ผ์—๋Š” ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค์™€ ์ œํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌํ•จ๋œ ๋ฆฌ์†Œ์Šค ์„น์…˜์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ๋œ ํฌ๋“œ ๋ฆฌ์†Œ์Šค = ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ํ•ฉ๊ณ„.
  • ํฌ๋“œ ๋ฆฌ์†Œ์Šค ์ œํ•œ = ๋ชจ๋“  ํฌ๋“œ ๋ฆฌ์†Œ์Šค ์ œํ•œ์˜ ํ•ฉ๊ณ„์ž…๋‹ˆ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: backend-pod-name
  labels:
    application: backend
spec:
  containers:
    โ€” name: main-container
      image: my-backend
      tag: v1
      ports:
      โ€” containerPort: 8080
      resources:
        requests:
          cpu: 0.2 # REQUESTED CPU: 200m cores
          memory: "1Gi" # REQUESTED MEM: 1Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi
    โ€” name: other-container
      image: other-app
      tag: v1
      ports:
      โ€” containerPort: 8000
      resources:
        requests:
          cpu: "200m" # REQUESTED CPU: 200m cores
          memory: "0.5Gi" # REQUESTED MEM: 0.5Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi

์š”์ฒญ๋œ ์ž์›๊ณผ ์ œํ•œ๋œ ์ž์›์˜ ์˜ˆ

๋ถ„์•ผ resources.requested ์‚ฌ์–‘์—์„œ Pod๋Š” ์›ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ Pod ๋ฐฐํฌ๋ฅผ ๊ณ„ํšํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ํ•ฉํ•œ ๋…ธ๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ๋‚˜์š”?

Kubernetes๋Š” ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ๋˜๋Š” ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ(Kubernetes Control Plane)๋ฅผ ํฌํ•จํ•œ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—๋Š” kube-apiserver, kube-controller-manager ๋ฐ kube-scheduler ๋“ฑ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

kube-scheduler ํ”„๋กœ์„ธ์Šค๋Š” ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํฌ๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ  ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ์ˆ˜๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ํฌ๋“œ ์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ€๋Šฅํ•œ ์ž‘์—…์ž ๋…ธ๋“œ๋ฅผ ์ฐพ๋Š” ์ผ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. kube-scheduler๊ฐ€ ์ฐพ์€ ๋…ธ๋“œ ๋ชฉ๋ก์˜ ์ˆœ์œ„๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. Pod๋Š” ์ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋…ธ๋“œ์— ์˜ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

Kubernetes Pod ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋ผ์ƒ‰ ํฌ๋“œ๋Š” ์–ด๋””์— ๋ฐฐ์น˜๋˜๋‚˜์š”?

๊ทธ๋ฆผ์—์„œ kube-scheduler๊ฐ€ ์ƒˆ๋กœ์šด ๋ณด๋ผ์ƒ‰ ํฌ๋“œ๋ฅผ ์˜ˆ์•ฝํ•ด์•ผ ํ•จ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” A์™€ B๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ kube-scheduler๋Š” ๋…ธ๋“œ A์—์„œ Pod๋ฅผ ์˜ˆ์•ฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ(์š”์ฒญ๋˜์ง€ ์•Š์€) ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณด๋ผ์ƒ‰ Pod์˜ ์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณด๋ผ์ƒ‰ Pod์—์„œ ์š”์ฒญํ•œ 1GB ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋…ธ๋“œ A์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 0,5GB์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋…ธ๋“œ B์—๋Š” ์ถฉ๋ถ„ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ kube-scheduler๋Š” ๋ณด๋ผ์ƒ‰ Pod์˜ ๋Œ€์ƒ์ด ๋…ธ๋“œ B๋ผ๊ณ  ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋…ธ๋“œ ์„ ํƒ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•œ๊ณ„ ์ž์›์˜ ์˜ํ–ฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฆฌ์†Œ์Šค ์ œํ•œ์€ CPU/MEM์ด ๋„˜์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CPU ๋ฆฌ์†Œ์Šค๋Š” ์œ ์—ฐํ•˜๋ฏ€๋กœ CPU ํ•œ๋„์— ๋„๋‹ฌํ•œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ธํ•ด ํฌ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  CPU ์กฐ์ ˆ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. MEM ์‚ฌ์šฉ ์ œํ•œ์— ๋„๋‹ฌํ•˜๋ฉด OOM-Killer๋กœ ์ธํ•ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘์ง€๋˜๊ณ  RestartPolicy ์„ค์ •์—์„œ ํ—ˆ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค ๋ฐ ์ตœ๋Œ€ ๋ฆฌ์†Œ์Šค ์„ธ๋ถ€์ •๋ณด

Kubernetes Pod ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•Docker์™€ Kubernetes ๊ฐ„์˜ ๋ฆฌ์†Œ์Šค ํ†ต์‹ 

๋ฆฌ์†Œ์Šค ์š”์ฒญ๊ณผ ๋ฆฌ์†Œ์Šค ์ œํ•œ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ Kubernetes์™€ Docker ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„ ์ด๋ฏธ์ง€์—์„œ Kubernetes ํ•„๋“œ์™€ Docker ์‹œ์ž‘ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์–ต: ์š”์ฒญ๊ณผ ์ œํ•œ

containers:
...
 resources:
   requests:
     memory: "0.5Gi"
   limits:
     memory: "1Gi"

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ธก์ •๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ฐ˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฌธ์„œ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ˆซ์ž๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Š” ์ •์ˆ˜(์˜ˆ: 2678, ์ฆ‰ 2678๋ฐ”์ดํŠธ)์ž…๋‹ˆ๋‹ค. ์ ‘๋ฏธ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. G ะธ Gi, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ทธ๊ฒƒ๋“ค์ด ๋™์ผํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” 8์ง„์ˆ˜์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” XNUMX์ง„์ˆ˜์ž…๋‹ˆ๋‹ค. kXNUMXs ๋ฌธ์„œ์— ์–ธ๊ธ‰๋œ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 128974848, 129e6, 129M, 123Mi - ์‹ค์งˆ์ ์œผ๋กœ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์˜ต์…˜ limits.memory ๊ตญ๊ธฐ์™€ ์ผ์น˜ํ•œ๋‹ค --memory ๋„์ปค์—์„œ. ๋‹ค์Œ์˜ ๊ฒฝ์šฐ request.memory Docker๋Š” ์ด ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Docker์— ๋Œ€ํ•œ ํ™”์‚ดํ‘œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ผญ ํ•„์š”ํ•œ๊ฐ€?๋ผ๊ณ  ๋ฌผ์œผ์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค, ํ•„์š”ํ•ด์š”. ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด, Kubernetes์—์„œ๋Š” ํ˜„์žฅ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. kube-scheduler๋Š” ์ด ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํฌ๋“œ๋ฅผ ์˜ˆ์•ฝํ•  ๋…ธ๋“œ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ์— ๋Œ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ถ€์กฑํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๋„์— ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ ๋…ธ๋“œ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ๋•Œ ์ค‘์ง€๋˜๋Š” ํฌ๋“œ ๊ทธ๋ฃน์— ํฌ๋“œ๊ฐ€ ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด OOM-Killed๋กœ ์ธํ•ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ RestartPolicy์— ๋”ฐ๋ผ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. Always.

์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

Kubernetes๋Š” ์ œํ•œ ๊ฐ’์„ ๊ฐ€์ ธ์™€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

์ปจํ…Œ์ด๋„ˆ์—๋Š” ์ œํ•œ์ด ์—†์œผ๋ฉฐ ์›ํ•˜๋Š” ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด OOM์ด ๊ทธ๋ฅผ ์ฃฝ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ RestartPolicy์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

์ด๋Š” ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ˆ˜๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋ฉฐ ์ด๋กœ ์ธํ•ด ๋…ธ๋“œ์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ œํ•œ(LimitRange๋กœ ์„ค์ •)์„ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ œํ•œ์€ ์—†์Šต๋‹ˆ๋‹ค. Pod์—๋Š” ์ œํ•œ์ด ์—†์œผ๋ฉฐ ์›ํ•˜๋Š” ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋…ธ๋“œ๊ฐ€ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋งŽ์œผ๋ฉด ํฌ๋“œ๊ฐ€ ์˜ˆ์•ฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค Requests.memory - ์ตœ์†Œ๊ฐ’์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€์†์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์–‘์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•œ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. request.memory ะธ limit.memory. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Kubernetes๊ฐ€ ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ ์‹คํ–‰ํ•˜๊ธฐ์—๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ์—์„œ ํฌ๋“œ๋ฅผ ์˜ˆ์•ฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช…์‹ฌํ•˜์„ธ์š”: Kubernetes Pod ๊ณ„ํš์€ ์˜ค์ง ๊ณ ๋ ค ์‚ฌํ•ญ๋งŒ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค requests.memory๊ณผ limits.memory ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CPU: ์š”์ฒญ ๋ฐ ์ œํ•œ

containers:
...
 resources:
   requests:
     cpu: 1
   limits:
     cpu: "1200m"

CPU๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. Kubernetes์™€ Docker์˜ ๊ด€๊ณ„ ๊ทธ๋ฆผ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉด ๋‹ค์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. request.cpu ์ผ์น˜ --cpu-shares๋ฐ˜๋ฉด์— limit.cpu ๊ตญ๊ธฐ์™€ ์ผ์น˜ํ•œ๋‹ค cpus ๋„์ปค์—์„œ.

Kubernetes๊ฐ€ ์š”์ฒญํ•˜๋Š” CPU์—๋Š” CPU ์ฃผ๊ธฐ์˜ ๋น„์œจ์ธ 1024๋ฅผ ๊ณฑํ•ฉ๋‹ˆ๋‹ค. 1๊ฐœ์˜ ์ „์ฒด ์ฝ”์–ด๋ฅผ ์š”์ฒญํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. cpu: 1์œ„์— ํ‘œ์‹œ๋œ ๋Œ€๋กœ.

์ „์ฒด ์ปค๋„(๋น„์œจ = 1024)์„ ์š”์ฒญํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๊ณ  ๋‘˜ ์ด์ƒ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ CPU๋ฅผ ์„œ๋กœ ๊ณต์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋‚˜์š”? ์‚ฌ์ง„์„ ๋ณด์ž.

Kubernetes Pod ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•
CPU ์š”์ฒญ - ๋‹จ์ผ ์ฝ”์–ด ์‹œ์Šคํ…œ

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์ผ ์ฝ”์–ด ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—„๋งˆ(Kubernetes)๊ฐ€ ํŒŒ์ด(CPU)๋ฅผ ๊ตฌ์›Œ ์•„์ด๋“ค(์ปจํ…Œ์ด๋„ˆ)์—๊ฒŒ ๋‚˜๋ˆ ์ฃผ๊ณ  ์‹ถ์–ด ํ•ฉ๋‹ˆ๋‹ค. ์„ธ ๋ช…์˜ ์–ด๋ฆฐ์ด๋Š” ํŒŒ์ด ์ „์ฒด๋ฅผ ์›ํ•˜๊ณ (๋น„์œจ = 1024), ๋‹ค๋ฅธ ์–ด๋ฆฐ์ด๋Š” ํŒŒ์ด ์ ˆ๋ฐ˜์„ ์›ํ•ฉ๋‹ˆ๋‹ค(512). ์—„๋งˆ๋Š” ๊ณต์ •ํ•˜๊ธธ ์›ํ•˜์…”์„œ ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ์„ ํ•˜์‹ญ๋‹ˆ๋‹ค.

# ะกะบะพะปัŒะบะพ ะฟะธั€ะพะณะพะฒ ั…ะพั‚ัั‚ ะดะตั‚ะธ?
# 3 ั€ะตะฑะตะฝะบะฐ ั…ะพั‚ัั‚ ะฟะพ ั†ะตะปะพะผัƒ ะฟะธั€ะพะณัƒ ะธ ะตั‰ะต ะพะดะธะฝ ั…ะพั‡ะตั‚ ะฟะพะปะพะฒะธะฝัƒ ะฟะธั€ะพะณะฐ
cakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5
# ะ’ั‹ั€ะฐะถะตะฝะธะต ะฟะพะปัƒั‡ะฐะตั‚ัั ั‚ะฐะบ:
3 (ั€ะตะฑะตะฝะบะฐ/ะบะพะฝั‚ะตะนะฝะตั€ะฐ) * 1 (ั†ะตะปั‹ะน ะฟะธั€ะพะณ/ะฟะพะปะฝะพะต ัะดั€ะพ) + 1 (ั€ะตะฑะตะฝะพะบ/ะบะพะฝั‚ะตะนะฝะตั€) * 0.5 (ะฟะพะปะพะฒะธะฝะฐ ะฟะธั€ะพะณะฐ/ะฟะพะปะพะฒะธะฝะฐ ัะดั€ะฐ)
# ะกะบะพะปัŒะบะพ ะฟะธั€ะพะณะพะฒ ะธัะฟะตั‡ะตะฝะพ?
availableCakesNumber = 1
# ะกะบะพะปัŒะบะพ ะฟะธั€ะพะณะฐ (ะผะฐะบัะธะผะฐะปัŒะฝะพ) ะดะตั‚ะธ ั€ะตะฐะปัŒะฝะพ ะผะพะณัƒั‚ ะฟะพะปัƒั‡ะธั‚ัŒ?
newMaxRequest = 1 / 3.5 =~ 28%

๊ณ„์‚ฐ์— ๋”ฐ๋ฅด๋ฉด ์„ธ ๋ช…์˜ ์–ด๋ฆฐ์ด๋Š” ์ฝ”์–ด ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ฝ”์–ด์˜ 28%๋ฅผ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋„ค ๋ฒˆ์งธ ์ž์‹์€ ์ „์ฒด ์ปค๋„์˜ ์ ˆ๋ฐ˜์ด ์•„๋‹Œ 14%๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ์ฝ”์–ด ์‹œ์Šคํ…œ์ด ์žˆ๋‹ค๋ฉด ์ƒํ™ฉ์€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

Kubernetes Pod ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•
CPU ์š”์ฒญ - ๋ฉ€ํ‹ฐ ์ฝ”์–ด(4) ์‹œ์Šคํ…œ

์œ„ ์ด๋ฏธ์ง€์—์„œ ์„ธ ๋ช…์˜ ์–ด๋ฆฐ์ด๋Š” ํŒŒ์ด ์ „์ฒด๋ฅผ ์›ํ•˜๊ณ  ํ•œ ๋ช…์€ ์ ˆ๋ฐ˜์„ ์›ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—„๋งˆ๊ฐ€ ํŒŒ์ด ๋„ค ๊ฐœ๋ฅผ ๊ตฌ์› ์œผ๋‹ˆ, ์—„๋งˆ์˜ ์•„์ด๋“ค์€ ๊ฐ์ž ์›ํ•˜๋Š” ๋งŒํผ ํŒŒ์ด๋ฅผ ๋จน์„ ๊ฒƒ์ด๋‹ค. ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ์—์„œ๋Š” ํ”„๋กœ์„ธ์„œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ ์ฝ”์–ด์— ๋ถ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ „์ฒด CPU ์ฝ”์–ด 100๊ฐœ ๋ฏธ๋งŒ์œผ๋กœ ์ œํ•œ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ์—ฌ์ „ํžˆ XNUMX%๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๊ณ„์‚ฐ์€ CPU๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ์ˆœํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด ์™ธ์—๋„ CPU ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์ปจํ…Œ์ด๋„ˆ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์œ ํœด ์ƒํƒœ์ด๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CPU: "200m" ์ผ์น˜ CPU: 0,2, ์ด๋Š” ์ฝ”์–ด 20๊ฐœ์˜ ์•ฝ XNUMX%๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ด์•ผ๊ธฐํ•˜์ž limit.cpu. Kubernetes๊ฐ€ ์ œํ•œํ•˜๋Š” CPU์— 100์„ ๊ณฑํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 100ฮผs๋งˆ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค(cpu-period).

limit.cpu Docker ํ”Œ๋ž˜๊ทธ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. --cpus. ์ด๊ฒƒ์€ ์˜ค๋ž˜๋œ ๊ฒƒ์˜ ์ƒˆ๋กœ์šด ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค. --cpu-period ะธ --cpu-quota. ์ด๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ œํ•œ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ตœ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ CPU ๋ฆฌ์†Œ์Šค ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • CPU๋ฅผ - ์กฐํ•ฉ cpu-period ะธ cpu-quota. cpus = 1.5 ์„ค์ •๊ณผ ๋™์ผ cpu-period = 100000 ะธ cpu-quota = 150000;
  • CPU ๊ธฐ๊ฐ„ - ๊ธฐ๊ฐ„ CPU CFS ์Šค์ผ€์ค„๋Ÿฌ, ๊ธฐ๋ณธ๊ฐ’์€ 100๋งˆ์ดํฌ๋กœ์ดˆ์ž…๋‹ˆ๋‹ค.
  • CPU ํ• ๋‹น๋Ÿ‰ - ๋‚ด๋ถ€์˜ ๋งˆ์ดํฌ๋กœ์ดˆ ์ˆ˜ cpu-period, ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

์š”์ฒญํ•œ CPU๊ฐ€ ๋ถ€์กฑํ•˜๊ฒŒ ์„ค์น˜๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

์ปจํ…Œ์ด๋„ˆ์— ์„ค์น˜๋œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฒƒ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ CPU๋ฅผ ํ›”์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

CPU ์ œํ•œ์„ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

CPU ๋ฆฌ์†Œ์Šค๋Š” ์กฐ์ • ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์กฐ์ ˆ ๊ธฐ๋Šฅ์ด ์ผœ์ง‘๋‹ˆ๋‹ค.

CPU ์š”์ฒญ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

๋ฉ”๋ชจ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์š”์ฒญ ๊ฐ’์€ ์ œํ•œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CPU ์ œํ•œ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

์ปจํ…Œ์ด๋„ˆ๋Š” ํ•„์š”ํ•œ ๋งŒํผ์˜ CPU๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ CPU ์ •์ฑ…(LimitRange)์ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ •์˜๋œ ๊ฒฝ์šฐ ์ด ์ œํ•œ์€ ์ปจํ…Œ์ด๋„ˆ์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์š”์ฒญ์ด๋‚˜ CPU ์ œํ•œ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

๋ฉ”๋ชจ๋ฆฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋Š” ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ˆ˜๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋ฉฐ ์ด๋กœ ์ธํ•ด ๋…ธ๋“œ์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ œํ•œ(LimitRange)์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์–ตํ•˜์„ธ์š”: ๋…ธ๋“œ๊ฐ€ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ CPU๋ฅผ ์š”์ฒญํ•˜๋ฉด ํฌ๋“œ๊ฐ€ ์˜ˆ์•ฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Requests.cpu - ์ตœ์†Œ๊ฐ’์€ ์•„๋‹ˆ์ง€๋งŒ Pod๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์˜ค๋ฅ˜ ์—†์ด ์ž‘๋™ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. request.cpu <= 1 ํ•„์š”ํ•œ ๋งŒํผ ๋ณต์ œ๋ณธ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค์˜ ์ด์ƒ์ ์ธ ์–‘ ๋˜๋Š” ๋ฆฌ์†Œ์Šค ์ œํ•œ

์šฐ๋ฆฌ๋Š” ์ปดํ“จํŒ… ์ž์›์˜ ํ•œ๊ณ„์— ๋Œ€ํ•ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค์Œ ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. โ€œ๋‚ด ํฌ๋“œ๊ฐ€ ๋ฌธ์ œ ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์ด์ƒ์ ์ธ ๊ธˆ์•ก์€ ์–ผ๋งˆ์ž…๋‹ˆ๊นŒ?

๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๋‹ต์€ ์—†์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, ์–ผ๋งˆ๋‚˜ ๋งŽ์€ CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ์ง€ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ์ œ๊ณตํ•œ ๋‹ค์Œ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์™ธ์—๋„ ์ผ์ฃผ์ผ ๋™์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋™์ž‘์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”์ฒญํ•œ ๊ฒƒ๋ณด๋‹ค ์ ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด ์š”์ฒญ๋œ CPU ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ด๊ฒƒ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค Grafana ๋Œ€์‹œ๋ณด๋“œ. ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค ๋˜๋Š” ๋ฆฌ์†Œ์Šค ์ œํ•œ๊ณผ ํ˜„์žฌ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ œํ•œํ•˜๋ฉด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ •์ƒ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ œํ•œ ๊ตฌ์„ฑ์€ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•ญ์ƒ ์‹คํ–‰ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด, ๋ช…์‹ฌํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋Š” ์‹œ์ž‘ ์‹œ(Kubernetes๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•  ๊ณ„ํš์ธ ๊ฒฝ์šฐ) ๊ณ ๋ ค๋˜๋Š” ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ๋Œ€์กฐ์ ์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ด๋ฏธ ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋Ÿฐํƒ€์ž„์—๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฉ”๋ชจ๋ฆฌ์— ๋น„ํ•ด CPU๋Š” ๊ทœ์ œ๋œ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค. CPU๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉด ํฌ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  ์กฐ์ ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ผœ์ง‘๋‹ˆ๋‹ค.
  3. ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์™€ ๋ฆฌ์†Œ์Šค ์ œํ•œ์€ ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์ด ์•„๋‹™๋‹ˆ๋‹ค! ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฌธ์ œ ์—†์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์„ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ๊ณผ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  5. ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ค์น˜๋ฅผ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. CPU <=1, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ.
  6. ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๋ฉด ํฌ๋“œ๊ฐ€ ํ•ด๋‹น ๋…ธ๋“œ์— ์˜ˆ์•ฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  7. ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค์˜ ์ •ํ™•ํ•œ ์–‘/๋ฆฌ์†Œ์Šค ์ œํ•œ์„ ํ™•์ธํ•˜๋ ค๋ฉด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ด ๊ธ€์ด ์ž์› ์ œํ•œ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ์ด ์ง€์‹์„ ๋‹น์‹ ์˜ ์—…๋ฌด์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

๊ทธ ๋ฐ–์— ์ฝ์„ ๋‚ด์šฉ:

  1. SRE ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ: ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฐ ๋ฉ”ํŠธ๋ฆญ ๊ตฌ์กฐ.
  2. Kubernetes๋ฅผ ์œ„ํ•œ 90๊ฐœ ์ด์ƒ์˜ ์œ ์šฉํ•œ ๋„๊ตฌ: ๋ฐฐํฌ, ๊ด€๋ฆฌ, ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ณด์•ˆ ๋“ฑ.
  3. Telegram์˜ Kubernetes ์ฃผ๋ณ€ ์ฑ„๋„.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€