Information in this document may be out of date

This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Assign Memory Resources to Containers and Pods

์ปจํ…Œ์ด๋„ˆ ๋ฐ ํŒŒ๋“œ ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ํ• ๋‹น

์ด ํŽ˜์ด์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰ ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ ์„ ์ปจํ…Œ์ด๋„ˆ์— ์–ด๋–ป๊ฒŒ ์ง€์ •ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์š”์ฒญ๋Ÿ‰ ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ ํ™•๋ณด๊ฐ€ ๋ณด์žฅ๋˜๋‚˜ ์ƒํ•œ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๊ณ , kubectl ์ปค๋งจ๋“œ-๋ผ์ธ ํˆด์ด ํด๋Ÿฌ์Šคํ„ฐ์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์€ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ํ˜ธ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ๊ฐ€ ์ ์–ด๋„ 2๊ฐœ ํฌํ•จ๋œ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ๋งŒ์•ฝ, ์•„์ง ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด, minikube๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฒ„์ „ ํ™•์ธ์„ ์œ„ํ•ด์„œ, ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ kubectl version.

ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ ๋…ธ๋“œ์— ์ตœ์†Œ 300 MiB ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ด ํŽ˜์ด์ง€์˜ ๋ช‡ ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด metrics-server ์„œ๋น„์Šค ์‹คํ–‰์ด ํ•„์š”ํ•˜๋‹ค. ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ metrics-server๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋‹ค.

Minikube๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋ฉด, ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด metric-server๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

minikube addons enable metrics-server

metric-server๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ œ๊ณต์ž์˜ ๋ฆฌ์†Œ์Šค ๋ฉ”ํŠธ๋ฆญ API (metrics.k8s.io)๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

kubectl get apiservices

๋ฆฌ์†Œ์Šค ๋ฉ”ํŠธ๋ฆญ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ถœ๋ ฅ์— metrics.k8s.io์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

NAME      
v1beta1.metrics.k8s.io

๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ

์ด ์˜ˆ์ œ์—์„œ ์ƒ์„ฑํ•  ์ž์›๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋‚˜๋จธ์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

kubectl create namespace mem-example

๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰ ๋ฐ ์ƒํ•œ์„ ์ง€์ •

์ปจํ…Œ์ด๋„ˆ์— ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฆฌ์†Œ์Šค ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— resources:requests ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค. ๋ฆฌ์†Œ์Šค ์ƒํ•œ์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” resources:limits ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ€์ง„ ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ๋Š” 100 MiB ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰๊ณผ 200 MiB ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์„ ๊ฐ–๋Š”๋‹ค. ์ด ๊ฒƒ์ด ํŒŒ๋“œ ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "100Mi"
      limits:
        memory: "200Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

๊ตฌ์„ฑ ํŒŒ์ผ ๋‚ด args ์„น์…˜์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์•„๊ทœ๋จผํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. "--vm-bytes", "150M" ์•„๊ทœ๋จผํŠธ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 150 MiB ํ• ๋‹น์„ ์‹œ๋„ ํ•˜๋„๋ก ํ•œ๋‹ค.

ํŒŒ๋“œ ์ƒ์„ฑ:

kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit.yaml --namespace=mem-example

ํŒŒ๋“œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ:

kubectl get pod memory-demo --namespace=mem-example

ํŒŒ๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด ๋ณด๊ธฐ:

kubectl get pod memory-demo --output=yaml --namespace=mem-example

์ถœ๋ ฅ์€ ํŒŒ๋“œ ๋‚ด ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์— 100MiB ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰๊ณผ 200 MiB ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค.

...
resources:
  requests:
    memory: 100Mi
  limits:
    memory: 200Mi
...

kubectl top์„ ์‹คํ–‰ํ•˜์—ฌ ํŒŒ๋“œ ๋ฉ”ํŠธ๋ฆญ ๊ฐ€์ ธ์˜ค๊ธฐ:

kubectl top pod memory-demo --namespace=mem-example

์ถœ๋ ฅ์€ ํŒŒ๋“œ๊ฐ€ ์•ฝ 150 MiB ํ•ด๋‹นํ•˜๋Š” ์•ฝ 162,900,000 ๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค. ์ด๋Š” ํŒŒ๋“œ์˜ 100 MiB ์š”์ฒญ ๋ณด๋‹ค ๋งŽ์œผ๋‚˜ ํŒŒ๋“œ์˜ 200 MiB ์ƒํ•œ๋ณด๋‹ค๋Š” ์ ๋‹ค.

NAME                        CPU(cores)   MEMORY(bytes)
memory-demo                 <something>  162856960

ํŒŒ๋“œ ์‚ญ์ œ:

kubectl delete pod memory-demo --namespace=mem-example

์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์„ ์ดˆ๊ณผ

๋…ธ๋“œ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š” ์ง€์ •ํ•œ ์š”์ฒญ๋Ÿ‰๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ง€์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ง€์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ฉด ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋Š” ์ข…๋ฃŒ ๋Œ€์ƒ ํ›„๋ณด๊ฐ€ ๋œ๋‹ค. ๋งŒ์•ฝ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ง€์ •๋œ ์ƒํ•œ๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋Š” ์ข…๋ฃŒ๋œ๋‹ค. ๋งŒ์•ฝ ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žฌ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋‹ค๋ฅธ ๋Ÿฐํƒ€์ž„ ์‹คํŒจ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ kubelet์— ์˜ํ•ด ์žฌ์‹คํ–‰๋œ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ๋Š” ์ƒํ•œ๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ ค๋Š” ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๊ฒƒ์€ 50 MiB ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰๊ณผ 100 MiB ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์„ ๊ฐ–๋Š” ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ–๋Š” ํŒŒ๋“œ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-2
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-2-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "50Mi"
      limits:
        memory: "100Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"]

๊ตฌ์„ฑ ํŒŒ์ผ์˜ args ์„น์…˜์—์„œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 100 MiB ์ƒํ•œ์„ ํ›จ์”ฌ ์ดˆ๊ณผํ•˜๋Š” 250 MiB์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํŒŒ๋“œ ์ƒ์„ฑ:

kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-2.yaml --namespace=mem-example

ํŒŒ๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด ๋ณด๊ธฐ:

kubectl get pod memory-demo-2 --namespace=mem-example

์ด ์‹œ์ ์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ด์ „์˜ ๋ช…๋ น์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

NAME            READY     STATUS      RESTARTS   AGE
memory-demo-2   0/1       OOMKilled   1          24s

์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ์˜ ์ƒ์„ธ ์ƒํƒœ ๋ณด๊ธฐ:

kubectl get pod memory-demo-2 --output=yaml --namespace=mem-example

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ (OOM) ์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ์Œ์ด ์ถœ๋ ฅ๋œ๋‹ค.

lastState:
   terminated:
     containerID: 65183c1877aaec2e8427bc95609cc52677a454b56fcb24340dbd22917c23b10f
     exitCode: 137
     finishedAt: 2017-06-20T20:52:19Z
     reason: OOMKilled
     startedAt: null

์ด ์˜ˆ์ œ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” ์žฌ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์—ฌ kubelet์— ์˜ํ•ด ์žฌ์‹คํ–‰๋œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๋‹ค ์žฌ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ช…๋ น์„ ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ•œ๋‹ค.

kubectl get pod memory-demo-2 --namespace=mem-example

์ถœ๋ ฅ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ์ข…๋ฃŒ, ์žฌ์‹คํ–‰, ์žฌ์ข…๋ฃŒ, ์žฌ์‹คํ–‰ ๋“ฑ์„ ๋ณด์—ฌ์ค€๋‹ค.

kubectl get pod memory-demo-2 --namespace=mem-example
NAME            READY     STATUS      RESTARTS   AGE
memory-demo-2   0/1       OOMKilled   1          37s

kubectl get pod memory-demo-2 --namespace=mem-example
NAME            READY     STATUS    RESTARTS   AGE
memory-demo-2   1/1       Running   2          40s

ํŒŒ๋“œ ๋‚ด์—ญ์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด ๋ณด๊ธฐ:

kubectl describe pod memory-demo-2 --namespace=mem-example

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํŒจ ํ•˜๋Š” ์ถœ๋ ฅ์„ ๋ณด์—ฌ์ค€๋‹ค.

... Normal  Created   Created container with id 66a3a20aa7980e61be4922780bf9d24d1a1d8b7395c09861225b0eba1b1f8511
... Warning BackOff   Back-off restarting failed container

ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด ๋ณด๊ธฐ:

kubectl describe nodes

์ถœ๋ ฅ์—๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ข…๋ฃŒ๋œ ๊ธฐ๋ก์ด ํฌํ•จ๋œ๋‹ค.

Warning OOMKilling Memory cgroup out of memory: Kill process 4481 (stress) score 1994 or sacrifice child

ํŒŒ๋“œ ์‚ญ์ œ:

kubectl delete pod memory-demo-2 --namespace=mem-example

๋…ธ๋“œ์— ๋น„ํ•ด ๋„ˆ๋ฌด ํฐ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰์˜ ์ง€์ •

๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰๊ณผ ์ƒํ•œ์€ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ด€๋ จ์žˆ์ง€๋งŒ, ํŒŒ๋“œ๊ฐ€ ๊ฐ€์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰๊ณผ ์ƒํ•œ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์œ ์šฉํ•˜๋‹ค. ํŒŒ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰์€ ํŒŒ๋“œ ๋‚ด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰์˜ ํ•ฉ์ด๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์€ ํŒŒ๋“œ ๋‚ด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์˜ ํ•ฉ์ด๋‹ค.

ํŒŒ๋“œ๋Š” ์š”์ฒญ๋Ÿ‰์„ ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์Šค์ผ€์ค„๋ง๋œ๋‹ค. ๋…ธ๋“œ์— ํŒŒ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰์„ ์ถฉ์กฑํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŒŒ๋“œ๊ฐ€ ๋…ธ๋“œ์—์„œ ์Šค์ผ€์ค„๋ง๋œ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰์ด ๋„ˆ๋ฌด ์ปค ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ชจ๋“  ๋…ธ๋“œ์˜ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋Š” ํŒŒ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋‹ค์Œ์€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ๋ชจ๋“  ๋…ธ๋“œ์˜ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ๋Š” 1000 GiB ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์„ ํฌํ•จํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ–๋Š” ํŒŒ๋“œ์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-3
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-3-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "1000Gi"
      limits:
        memory: "1000Gi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

ํŒŒ๋“œ ์ƒ์„ฑ:

kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-3.yaml --namespace=mem-example

ํŒŒ๋“œ ์ƒํƒœ ๋ณด๊ธฐ:

kubectl get pod memory-demo-3 --namespace=mem-example

ํŒŒ๋“œ ์ƒํƒœ๊ฐ€ PENDING ์ƒํƒœ์ž„์ด ์ถœ๋ ฅ๋œ๋‹ค. ์ฆ‰ ํŒŒ๋“œ๋Š” ์–ด๋–ค ๋…ธ๋“œ์—์„œ๋„ ์‹คํ–‰๋˜๋„๋ก ์Šค์ผ€์ค„ ๋˜์ง€ ์•Š๊ณ  PENDING๊ฐ€ ๊ณ„์† ์ง€์†๋œ๋‹ค.

kubectl get pod memory-demo-3 --namespace=mem-example
NAME            READY     STATUS    RESTARTS   AGE
memory-demo-3   0/1       Pending   0          25s

์ด๋ฒคํŠธ๋ฅผ ํฌํ•จํ•œ ํŒŒ๋“œ ์ƒ์„ธ ์ •๋ณด ๋ณด๊ธฐ:

kubectl describe pod memory-demo-3 --namespace=mem-example

์ถœ๋ ฅ์€ ๋…ธ๋“œ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ํŒŒ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋ง๋  ์ˆ˜ ์—†์Œ์„ ๋ณด์—ฌ์ค€๋‹ค.

Events:
  ...  Reason            Message
       ------            -------
  ...  FailedScheduling  No nodes are available that match all of the following predicates:: Insufficient memory (3).

๋ฉ”๋ชจ๋ฆฌ ๋‹จ์œ„

๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค๋Š” byte ๋‹จ์œ„๋กœ ์ธก์ •๋œ๋‹ค. ๋‹ค์Œ ์ ‘๋ฏธ์‚ฌ ์ค‘ ํ•˜๋‚˜๋กœ ์ •์ˆ˜ ๋˜๋Š” ๊ณ ์ • ์†Œ์ˆ˜์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. E, P, T, G, M, K, Ei, Pi, Ti, Gi, Mi, Ki. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์€ ๊ฑฐ์˜ ์œ ์‚ฌํ•œ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

128974848, 129e6, 129M, 123Mi

ํŒŒ๋“œ ์‚ญ์ œ:

kubectl delete pod memory-demo-3 --namespace=mem-example

๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด

์ปจํ…Œ์ด๋„ˆ์— ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ ์šฉ๋œ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์€ ์—†๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๋…ธ๋“œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OOM Killer๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์ข…๋ฃŒ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ•œ์ด ์—†๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

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

๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ๋Ÿ‰๊ณผ ์ƒํ•œ ๋™๊ธฐ๋ถ€์—ฌ

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

  • ๊ฐ€์šฉํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํŒŒ๋“œ๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„์ŠคํŠธ(burst) ํ™œ๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŒŒ๋“œ๊ฐ€ ๋ฒ„์ŠคํŠธ ์ค‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์–‘์ด ์ ์ ˆํžˆ ์ œํ•œ๋œ๋‹ค.

์ •๋ฆฌ

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์šด๋‹ค. ์ด ์ž‘์—…์„ ํ†ตํ•ด ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด ์ƒ์„ฑํ–ˆ๋˜ ๋ชจ๋“  ํŒŒ๋“œ๋“ค์€ ์‚ญ์ œ๋œ๋‹ค.

kubectl delete namespace mem-example

๋‹ค์Œ ๋‚ด์šฉ

์•ฑ ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ

ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๋“ค์„ ์œ„ํ•œ

์ตœ์ข… ์ˆ˜์ • June 07, 2023 at 5:58 PM PST: [ko] Update links in dev-1.26-ko.1 (00461e0912)