分配 CPU 资源
一、认识
在 Kubernetes
中,你可以通过为 Pod
分配 CPU
资源来控制容器使用的计算能力。Kubernetes
使用资源请求 (requests
) 和资源限制 (limits
) 来管理和调度 CPU
资源。你可以为每个容器定义它需要的最小 CPU
资源以及允许使用的最大 CPU
资源。Kubernetes
会根据这些设置在节点上调度容器,确保资源分配符合预期。
Kubernetes
为 Pod
分配 CPU
资源: 在 Pod
的 spec.containers.resources
字段中,你可以设置 requests
和 limits
:
-
requests
:表示容器需要的最小资源量,确保容器能够正常运行。调度时基于此值来分配节点。 -
limits
:表示容器使用的最大资源量,防止容器使用过多资源。如果容器试图使用超过此限制的资源,Kubernetes
将会对其进行限制(如通过cgroup
限制CPU
使用)。
Kubernetes
调度器处理逻:
-
调度:
Kubernetes
调度器会根据requests
来决定在哪个节点上运行Pod
。节点必须有足够的CPU
来满足Pod
的requests
,否则该Pod
不会被调度到该节点。 -
资源限制:容器可以使用的
CPU
最多为limits
设置的值。如果没有设置limits
,则容器可以使用节点上所有可用的CPU
资源。
二、操作
apiVersion: v1
kind: Pod
metadata:
name: cpu-requests-limits
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "while true; do echo Hello, Kubernetes!; sleep 1; done"]
resources:
requests:
cpu: "500m" # 请求 0.5 核 CPU
limits:
cpu: "1" # 限制最大使用 1 核 CPU
-
requests.cpu
: 设置为500m
,表示这个容器需要至少0.5
个CPU
核才能正常工作。调度器会根据这个值确定是否可以在节点上运行该容器。 -
limits.cpu
: 设置为1
,表示该容器最多可以使用1
个CPU
核。如果容器使用的CPU
超过这个值,Kubernetes
会限制它的使用(比如通过cgroup
限制CPU
时间片的使用)。
三、查看
查看资源分配情况: 可以通过以下命令查看 Pod
的 CPU
资源使用情况:
kubectl describe pod <pod-name>
输出中会显示每个容器的 requests
和 limits
,以及调度器为它分配的节点。
扩展
CPU
的单位是 core
(核),可以用小数或整数来表示。
-
CPU
表示一个完整的CPU
核心。 -
0.5
表示半个CPU
核心。 -
100m
表示0.1
个CPU
核(1m = 1/1000 核)。
Kubernetes
支持通过 m
表示毫核 (millicores
),通常会用于请求小量的 CPU
资源。