• 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
  • 相关阅读:
    Unity 随机数与随机种子
    Unity 基于Cinemachine计算透视摄像机在地图中的移动范围
    Unity 利用Cinemachine快速创建灵活的相机系统
    Unity NavMesh 动态烘焙绘制与随机取点
    Unity LineRenderer 射线检测 激光攻击
    Unity ugui屏幕适配与世界坐标到ugui屏幕坐标的转换
    实验:用Unity抓取指定url网页中的所有图片并下载保存
    关于Unity中AI随机巡逻障碍物预判与快速运动时物理穿透的思考
    唬人的Java泛型并不难
    你知道Java中的CopyOnWriteArrayList吗?
  • 原文地址:https://www.cnblogs.com/weifeng1463/p/10174432.html
Copyright © 2020-2023  润新知