zoukankan      html  css  js  c++  java
  • 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
    

    这个输出显示了容器被杀掉,被启动,又被杀掉,又被启动的过程:

    stevepe@sperry-1:~/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
    stevepe@sperry-1:~/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
  • 相关阅读:
    轨迹预测-运动递归函数
    Mandelbrot集合及其渲染
    如何检测一个圆在多个圆内?
    【转】三十分钟掌握STL
    【转】如何理解c和c++的复杂类型声明
    有1,2,3一直到n的无序数组,排序
    归并排序
    希尔排序
    快速排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/10174432.html
Copyright © 2011-2022 走看看