容器设置资源限制:
resources:
limits:
cpu: "1"
memory: 1G
requests:
cpu: "1"
memory: 1G
cgroup内存限制:
cat /sys/fs/cgroup/memory/kubepods.slice/kubepods-podaace5b66_c7d0_11e9_ba2a_dcf401d01e81.slice/memory.limit_in_bytes
999997440
1GB = 1 * 1024 * 1024 * 1024 = 1,073,741,824B
k8s版本:1.14.4
docker版本:docker-ce-18.09.6 作业系统:ubuntu 18.04
答案 0 :(得分:1)
因为您使用G
标度声明了 GibiByte :如果期望使用 GigaByte ,则应使用Gi
# k get deployments.apps memory -o yaml|grep -i limits -C 1
resources:
limits:
memory: 1Gi
$ cat /sys/fs/cgroup/memory/kubepods/burstable/pod15dff9ec-7815-48c0-bfce-453be77413ad/memory.limit_in_bytes
1073741824
答案 1 :(得分:1)
我已经做了一些测试。
对于999997440 B(976560 KB)和1000000000 B(如您的示例)之间的值,您在memory.limit_in_bytes = 999997440 B中将具有相同的结果。 直到达到下一个(整数)字节数(可被页面大小整除)(默认值为4096)。在我的示例中为1000001536 B(976564K)。
我不是Linux专家,但根据documentation:
成功写入此文件并不能保证成功设置 此限制为写入文件的值。这可能是由于 因素数量,例如四舍五入到页面边界或总数 系统上的内存可用性。要求用户重新阅读 写该文件以保证内核提交的值之后。
我建议使用prometherion中提到的Gi表示法来更好地控制资源限制。
希望获得帮助。