Kubernetes 设计了 Compute Resource(计算资源)的概念。与 API Resource(比如 Pod, Service)不同,compute resource 表示一个容器在运行时的资源使用,分为 CPU 和内存两种。每种资源又分为 request 和 limit 两种,比如下面的 deployment:
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: db
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: wp
image: wordpress
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
其中:
--cpu-share
参数传给 docker虽然 limit / request 是配置在容器上的,但是 pod 也有这个概念,它的 limit / request 指其中所有容器的总和。
K8S 在选择 node 节点去部署 pod 时,会保证该 node 剩余的容量 大于 pod 所要求的 request,但不要求剩余容量大于 limit。Node capacity 一般由 kubelet 自动上报,但是也可以手动指定,比如你需要预留一部分资源给不被 K8S 管理的进程时。K8S 计算 node 剩余容量时,不会将非 kubelet 管理的资源计算进来,比如你手动 docker run 的容器,或者 node 节点上非容器的进程。