资源模型
在 kubernetes 中,任何可以被申请、分配,最终被使用的对象,都是 kubernetes 中的资源,k8s 默认 只支持 CPU 和内存的定义, 后续可以通过 device plugin 来扩展其他资源的使用,比如 GPU。
可压缩资源和不可压缩资源
所有的资源类型,可以被划分为两大类:可压缩和不可压缩的。
-
可压缩: 如果系统限制或者缩小容器对可压缩资源的使用的话,只会影响服务对外的服务性能,比如 CPU 就是一种非常典型的可压缩资源。 如果容器的 CPU 使用草果了申请的上限, linux 会通过公平调度算法和 cgroups 对这个容器进行限速。 限速行为并不会影响容器的运行, 只是申请不到更多的 CPU 会让服务性能跟不上去。
-
对于不可压缩资源来说,资源的紧缺是有可能导致服务对外不可用的,比如内存就是一种非常典型的不可压缩资源。 如果内存的使用超过了限制, 就会触发 OOMKilled。 因为它是不可压缩的资源,申请不到新的内存就会直接跪掉。
所以当资源超过了设置的值, 会触发什么样的行为, 都要看它属于什么资源类型以及 cgroups 如何对其进行处理。
资源申请
kubernetes 中 pod 对资源的申请是以容器为最小单位进行的,针对每个容器,它都可以通过如下两个信息指定它所希望的资源量:
resources:
requests:
cpu: 2