14.2.1 设置容器可使用资源量的硬限制

  • cpu 是可压缩资源
  • 内存是不可压缩资源

创建一个带有资源 limits 的 pod

image.png

如果没有设置 requests, 那么与 limits 相同.

可超卖的 limits

所有 limits 的总和允许超过节点资源总量的100%

就是说 Kubernets 只要保证 pod 有最小资源 (requests) 可用就行了.

如果节点资源使用量超过100%, 一些容器将被杀掉 (LRU?)

image.png

14.2.2 超过 limits

对于 cpu 资源来讲, 不分配超过 limits 就行, 但对内存来讲, 申请过多比 limits 更多的内存将被杀掉.

CrashLoopBackOff 状态:

image.png

定位 pod crash 的原因:

image.png

14.2.3 容器中的应用如何看待 limits

创建14.7中的 pod:

  • 1cpu
  • 20mb
  1. $ kubectl create -f limited-pod.yaml

在容器内运行 top 命令:

  • 超过了 limits

image.png

在容器内看到的始终是节点的内存, 而不是容器本身的内存

对于需要这些信息的程序来说非常不利.

容器内同样可以看到节点所有的 CPU 核

与内存类似.

通过 cgroup 系统直接获取配置的 cpu 限制:

  • /sys/fs/cgroup/cpu/cpu.cfs_quota_us
  • /sys/fs/cgroup/cpu/cpu.cfs_period_us