什么定义了Pods中的容器'看'在他们的限制和要求方面?

时间:2017-10-24 21:51:40

标签: docker kubernetes containers

当在具有限制和请求集的Kubernetes集群中创建Pod中的容器时,该容器如何知道这些限制和请求?如果限制和请求特别低,那么在容器内运行的应用程序是否能够获得这些限制和请求,以减少它使用的资源量?

  • Kubernetes版本:1.8
  • 容器运行时:Docker
  • Docker版本:1.12.6

3 个答案:

答案 0 :(得分:1)

Check mem_limit within a docker container与tl;博士

cat /sys/fs/cgroup/memory/memory.limit_in_bytes

将显示限制,然后假设requests值是容器启动时分配的内存,但我需要验证该假设

我个人在尝试申请limits: cpu:时甚至不理解该单位所以我肯定不知道如何验证该值

答案 1 :(得分:1)

Downwards API可用于将请求和限制作为环境变量传递给容器进程

答案 2 :(得分:0)

  

创建Pod时,Kubernetes调度程序会选择要运行Pod的节点。每个节点都有每种资源类型的最大容量:它可以为Pod提供的CPU和内存量。调度程序确保对于每种资源类型,计划容器的资源请求总和小于节点的容量。请注意,虽然节点上的实际内存或CPU资源使用率非常低,但如果容量检查失败,调度程序仍拒绝在节点上放置Pod。这可以防止资源使用后期增加时节点上的资源短缺,例如,在请求率的每日峰值期间。

https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#how-pods-with-resource-requests-are-scheduled

  

如果Container超出其内存限制,则可能会终止。如果它可以重新启动,那么kubelet将重新启动它,就像任何其他类型的运行时故障一样。

     

如果Container超出其内存请求,则每当节点内存不足时,其Pod可能会被驱逐。

     

容器可能会或可能不会被允许在较长时间内超过其CPU限制。但是,它不会因CPU使用率过高而被杀死

https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#how-pods-with-resource-limits-are-run

要获取有关资源使用情况的信息,您需要一个为您的群集配置的监控系统(heapster,prometheus等)。可以手动或自动根据此数据调整请求和限制。

自动化此过程的一种可能方法是创建一个专用的微服务,它将监视资源使用情况(通过收集和分析来自监视器的数据),生成具有新限制的清单,并发送请求kube api以重新创建pod。