概述
在kubernetes上,可由容器或POD请求或消费的”计算资源”是指CPU和内存(RAM),这是目前仅支持的两种类型。
1 可压缩类型
CPU 属于可压缩性资源,及资源额度可按需收缩。
2 不可压缩类型
内存是不可压缩资源,对其执行收缩操作可能会导致某种程度的问题
资源隔离尚且属于容器级别,CPU和内存资源的配置需要在POD中的容器上进行,每种资源均可由”requests”属性定义其请求的确保可用值,即使容器运行可能用不到这些额度的资源,但用到时必须要确保有如此多的资源可用,limits属性则用于限制资源可用的最大值,及硬限制,
资源配置称为POD资源的请求和限制的总和,只不过他是指POD内所有容器上某种类型资源的请求和限制的总和
资源类型单位
CPU资源
在kubernetes系统上,1个单位的CPU相当于虚拟机上的1颗虚拟CPU(vCPU)或物理机上的一个超线程(hyperthread,或称为一个逻辑CPU),它支持分数计算方式,一个核心(1core)相当于1000个微核心(millicores),因此500m相当于0.5个核心,即二分之一的核心,
内存资源
内存的计量方式与日常使用方式相同,默认单位是字节,也可以使用E、P、T、G、M和K作为单元后缀,或Ei、Pi、Ti、Gi、Mi和Ki 形式的单位后缀。例如 1M=1000kb,1Mi=1024kb
资源申请
内存是非可压缩型资源,一旦超过,有可能会被OMM杀死
对于压缩性资源CPU,未定义其请求用量以确保其最小的资源可用时,它可能会被其他POD资源压缩至极低水平,甚至会达到POD不能被调度运行的境地,而对于非压缩性资源来说,内存资源在任何原因导致的紧缺情形下都可能导致相关进程被杀死,因此,在kubernetes系统上运行关键型业务相关的Pod时必须使用requests属性为容器定义资源的确保可用性。
spec.containers[].resources.requests.cpu
spec.containers[].resources.requests.memory
实例:
apiVersion: v1
kind: Pod
metadata:
name: test3
spec:
containers:
- name: test3
image: nginx:1.14
resources:
requests:
memory: "256Mi"
cpu: "512m"
资源限制
limits 用于限制资源的最大可用量,资源分配时,可压缩型资源CPU的控制阀可自由调节,容器无法获得超出其CPU配额的可用时间,不过,如果进行申请分配超出其limits属性定义的硬限制的内存资源时,它将被OOM killer杀死。
spec.containers[].resources.limits.cpu
spec.containers[].resources.limits.memory
实例 :
apiVersion: v1
kind: Pod
metadata:
name: test4
spec:
containers:
- name: test4
image: nginx:1.14
resources:
requests:
memory: "256Mi"
cpu: "256m"
limits:
memory: "256Mi"
cpu: "256m"