概述

在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属性为容器定义资源的确保可用性。

  1. spec.containers[].resources.requests.cpu
  2. spec.containers[].resources.requests.memory

实例:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: test3
  5. spec:
  6. containers:
  7. - name: test3
  8. image: nginx:1.14
  9. resources:
  10. requests:
  11. memory: "256Mi"
  12. cpu: "512m"

资源限制

limits 用于限制资源的最大可用量,资源分配时,可压缩型资源CPU的控制阀可自由调节,容器无法获得超出其CPU配额的可用时间,不过,如果进行申请分配超出其limits属性定义的硬限制的内存资源时,它将被OOM killer杀死。

  1. spec.containers[].resources.limits.cpu
  2. spec.containers[].resources.limits.memory

实例 :

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: test4
  5. spec:
  6. containers:
  7. - name: test4
  8. image: nginx:1.14
  9. resources:
  10. requests:
  11. memory: "256Mi"
  12. cpu: "256m"
  13. limits:
  14. memory: "256Mi"
  15. cpu: "256m"