Kubernetes有一种与资源配额管理有关的对象:ResourceQuota,此种类型的对象由集群管理员创建,创建好后作用于某个名称空间,限制名称空间内可以创建的各类对像的总数、CPU、内存等。用户、用户组则工作在名称空间之下,以此实现多用户、多用户共享同一集群,公平合理的分配资源。本文描述在一个名称空间之下创建容器时,对容器所使用的计算资源进行管理。
计算资源类型
计算资源包含cpu与memory,就是通常计算机上的硬件资源,不包含存储。计算资源可以被计量、申请、分配、消费。在Kurnetes中cpu的计量单位是core,就是几个核。memory的计算单位是byte,就是字节数。
定义pod、container时与计算资源相关的字段
- spec.containers[].resources.limits.cpu
- spec.containers[].resources.limits.memory
- spec.containers[].resources.requests.cpu
- spec.containers[].resources.requests.memory
在定义pod时,以上与计算资源相关的字段只能指定给其中所定义的容器。当谈讨pod的limit与request时,指的是pod所有容器limit或者是request的总和。
CPU含义
在Kubernetes层面中,一个CPU表示一个核心处理器的core,但其具体含义取决于低层基础设施供应商,有可能是物理core、虚拟core、一个线程等,以下是一个CPU核在常见的基础设施供应商的含义:
- 1 AWS vCPU
- 1 GCP Core
- 1 Azure vCore
- 1 IBM vCPU
- 1 Hyperthread on a bare-metal Intel processor with Hyperthreading
CPU的核数,最终应该是被转换成表示线程占用CPU的时长。首先换算的单位是100m(100毫秒),100m对应0.1个核。比如,0.4表示400毫秒的CPU内核运行时间,1表示1000毫秒的CPU内核运行时间,1.5表示1500毫秒的CPU内核运行时间,可以直接指定如400m、1500m,这种方法更直观更通用。如果一个节点有4个核则在1秒内有4000毫秒的时间片可供分配。所以无论宿主机节点有多少个核,CPU术数表示的意义不变,它是一个绝对值。另外它只能精确到小数点后1位或者是100m
MEMORY含义
其含义是字节数,表示多少个字节。在书写时可以用整数、指数、表示计算机容器的K、M等。
配置示例
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: wordpr