1. 程式人生 > >k8s oomkilled超出容器的記憶體限制

k8s oomkilled超出容器的記憶體限制

超出容器的記憶體限制

只要節點有足夠的記憶體資源,那容器就可以使用超過其申請的記憶體,但是不允許容器使用超過其限制的 資源。如果容器分配了超過限制的記憶體,這個容器將會被優先結束。如果容器持續使用超過限制的記憶體, 這個容器就會被終結。如果一個結束的容器允許重啟,kubelet就會重啟他,但是會出現其他型別的執行錯誤。

本實驗,我們建立一個Pod嘗試分配超過其限制的記憶體,下面的這個Pod的配置文件,它申請50M的記憶體, 記憶體限制設定為100M。

memory-request-limit-2.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-2
spec:
  containers:
  - name: memory-demo-2-ctr
    image: vish/stress
    resources:
      requests:
        memory: 50Mi
      limits:
        memory: "100Mi"
    args:
    - -mem-total
    - 250Mi
    - -mem-alloc-size
    - 10Mi
    - -mem-alloc-sleep
    - 1s

在配置檔案裡的args段裡,可以看到容器嘗試分配250M的記憶體,超過了限制的100M。

建立Pod:

kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/memory-request-limit-2.yaml --namespace=mem-example

檢視Pod的詳細資訊:

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

這個輸出顯示了容器被殺掉因為超出了記憶體限制。

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

本實驗裡的容器可以自動重啟,因此kubelet會再去啟動它。輸入多幾次這個命令看看它是怎麼 被殺掉又被啟動的:

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

這個輸出顯示了容器被殺掉,被啟動,又被殺掉,又被啟動的過程:

[email protected]:~/steveperry-53.github.io$ kubectl get pod memory-demo-2 --namespace=mem-example
NAME            READY     STATUS      RESTARTS   AGE
memory-demo-2   0/1       OOMKilled   1          37s
[email protected]:~/steveperry-53.github.io$ kubectl get pod memory-demo-2 --namespace=mem-example
NAME            READY     STATUS    RESTARTS   AGE
memory-demo-2   1/1       Running   2          40s

檢視Pod的歷史詳細資訊:

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

這個輸出顯示了Pod一直重複著被殺掉又被啟動的過程:

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