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
  • 相关阅读:
    BPM
    rust
    sql
    relational model
    C语言丨还没搞懂逻辑运算符?一篇文章教你区分“真假”!
    掉发不是病,秃起来真要命!作为程序猿的你,脱发了吗?
    什么是正确的编程观?从正确认识C语言开始!
    春运火车票如何安心购票?用C语言实现火车售票系统(源码分享)
    趣味编程丨如何用C语言输出杨辉三角?只需三步!
    2020年编程语言排行榜年终大盘点:C语言连续八个月蝉联第一,C++稳居第四
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/10174432.html
Copyright © 2011-2022 走看看