• kubernetes部署的Pod长时处于ContainerCreating状态


    版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明。

    本文地址:https://www.cnblogs.com/wannengachao/p/13821469.html

    1、执行 kubectl get pod --all-namespaces|grep -Ev '1/1|2/2|3/3|Com

    查看到Pod长时处于ContainerCreating状态,见下图:

    2、kubectl describe pod $Pod名

    输出结果见下:

    Events:

      Type     Reason       Age                 From     Message

      ----     ------       ----                ----     -------

      Warning  FailedMount  15m (x33 over 66m)  kubelet  MountVolume.SetUp failed for volume "volumn-eds-certs" : mount failed: fork/exec /usr/bin/systemd-run: cannot allocate memory

    Mounting command: systemd-run

    Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/fee6bf33-0a03-11eb-95b5-00163e0115c9/volumes/kubernetes.io~secret/volumn-eds-certs --scope -- mount -t tmpfs tmpfs /var/lib/kubelet/pods/fee6bf33-0a03-11eb-95b5-00163e0115c9/volumes/kubernetes.io~secret/volumn-eds-certs

    Output:

      Warning  FailedMount  11m (x35 over 66m)  kubelet  MountVolume.SetUp failed for volume "default-token-bdxkl" : mount failed: fork/exec /usr/bin/systemd-run: cannot allocate memory

    Mounting command: systemd-run

    Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/fee6bf33-0a03-11eb-95b5-00163e0115c9/volumes/kubernetes.io~secret/default-token-bdxkl --scope -- mount -t tmpfs tmpfs /var/lib/kubelet/pods/fee6bf33-0a03-11eb-95b5-00163e0115c9/volumes/kubernetes.io~secret/default-token-bdxkl

    Output:

      Warning  FailedMount  5m41s (x27 over 64m)  kubelet  Unable to mount volumes for pod "test-trade-3-pre-b9471abd-4318-4210-9334-d01c5b2d01a3-7c7569pls8_default(fee6bf33-0a03-11eb-95b5-00163e0115c9)": timeout expired waiting for volumes to attach or mount for pod "default"/"test-trade-3-pre-b9471abd-4318-4210-9334-d01c5b2d01a3-7c7569pls8". list of unmounted volumes=[volumn-eds-certs default-token-bdxkl]. list of unattached volumes=[volumn-eds-certs default-token-bdxkl]

    3、查看每个node的CPU与内存资源情况,结果查看到node的资源规格是32C、64g并且使用率才50%左右,于是想是否Pod的requests设置的超过了node资源,通过kubectl get rs $异常Pod的rs名 -oyaml 发现设置的limits与requests值是4c、8g没有超过node的自身资源,因为每个Pod的limits与requests不是我本人设置的,怀疑是否有其它的Pod设置的requests过大,导致node被Pod请求资源时没有富余的内存给此Pod。排查发现所有Pod的limits与requests都是4c、8g,最后导致如我猜测的一样node被Pod请求资源时没有富余的内存给此Pod。

    4、解决方案:将Pod的limits与requests调小即可。为Pod设置limits与requests谨记设成实际够用的资源即可,如果确实Pod会使用到过大的资源,那就将node扩容下,避免出现Pod向node请求资源时出现资源不足的情况。

    5、下面内容是在网上看到的讲解reques、limits比较不错的,在此贴出来分享下:

    requests

    requests用于schedule阶段,在调度pod保证所有pod的requests总和小于node能提供的计算能力

    requests.cpu被转成docker的--cpu-shares参数,与cgroup cpu.shares功能相同

    设置容器的cpu的相对权重

    该参数在CPU资源不足时生效,根据容器requests.cpu的比例来分配cpu资源

    CPU资源充足时,requests.cpu不会限制container占用的最大值,container可以独占CPU

    requests.memory没有对应的docker参数,作为k8s调度依据

    使用requests来设置各容器需要的最小资源

    limits

    limits限制运行时容器占用的资源

    limits.cpu会被转换成docker的–cpu-quota参数。与cgroup cpu.cfs_quota_us功能相同

    限制容器的最大CPU使用率。

    cpu.cfs_quota_us参数与cpu.cfs_period_us结合使用,后者设置时间周期

    k8s将docker的–cpu-period参数设置100毫秒。对应着cgroup的cpu.cfs_period_us

    limits.cpu的单位使用m,千分之一核

    limits.memory会被转换成docker的–memory参数。用来限制容器使用的最大内存

    当容器申请内存超过limits时会被终止

     
  • 相关阅读:
    Linux IO模型漫谈(3) 阻塞式IO实现
    Linux IO模型漫谈(4) 非阻塞IO
    Linux IO模型漫谈(6) 信号驱动IO模型
    Go语言_反射篇
    Linux IO模型漫谈(5) IO复用模型之select
    Go语言_函数学习篇
    Go语言_接口篇
    nginx源码学习Unix Unix域协议
    Java GC
    Heritrix 3.1.0 源码解析(三十四)
  • 原文地址:https://www.cnblogs.com/wannengachao/p/13821469.html
Copyright © 2020-2023  润新知