ํ•ด๋‹น ๋ฌธ์„œ์˜ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „: v1.30

Kubernetes v1.30 ๋ฌธ์„œ๋Š” ๋” ์ด์ƒ ์ ๊ทน์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์Œ. ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ๋ฌธ์„œ๋Š” ์ •์  ์Šค๋ƒ…์ƒท์ž„. ์ตœ์‹  ๋ฌธ์„œ๋ฅผ ์œ„ํ•ด์„œ๋Š”, ๋‹ค์Œ์„ ์ฐธ๊ณ . ์ตœ์‹  ๋ฒ„์ „.

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

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

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

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๊ณ , 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)