Pod的请求的资源和限制,指的是CPU和内存,目前在k8s上仅有的受支持的两种类型。
CPU属于可压缩(compressible)型资源,即资源额度可按需收缩。
内存则是不可压缩型资源,对其执行收缩操作可能会导致某种程度的问题。
资源隔离尚且属于容器级别,CPU和内存资源的配置需要在Pod中的容器上运行;
requests 定义其请求的确保可用值,即容器运行可能用不到这些额度的资源,但用到时必须要确保有如此多的资源可用;
limits 用于限制资源可用的最大值,即硬限制。
资源请求和限制的单位
在Kubernets系统上,1个单位的CPU相当于虚拟机上的一颗虚拟CPU(vCPU)或物理机上的一个超线程(Hyperthread,或称为一个逻辑CPU),它支持分数计量方式,一个核心(1 core)相当于1000个微核心(millicores),因此500m相当于是0.5个核心,即二分之一个核心。
内存的计量方式与日常使用方式相同,默认单位是字节,也可以使用十进制E、P、T、G、M和K作为单位后缀,或二进制Ei、Pi、Ti、Gi、Mi和Ki形式的单位后缀。
十进制和二进制的对比:
1 KB(KiloByte) = 1000Bytes = 8000 Bits
1 KiB(KibiByte)= 2的10次方Bytes = 1024 Bytes = 8192 Bits。
举个栗子:
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: db
image: mysql
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: wp
image: wordpress
resources:
requests:
memeory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"