跳到主要内容

分配 CPU 资源

2024年09月13日
柏拉文
越努力,越幸运

一、认识


Kubernetes 中,你可以通过为 Pod 分配 CPU 资源来控制容器使用的计算能力。Kubernetes 使用资源请求 (requests) 和资源限制 (limits) 来管理和调度 CPU 资源。你可以为每个容器定义它需要的最小 CPU 资源以及允许使用的最大 CPU 资源。Kubernetes 会根据这些设置在节点上调度容器,确保资源分配符合预期。

KubernetesPod 分配 CPU 资源: 在 Podspec.containers.resources 字段中,你可以设置 requestslimits

  1. requests:表示容器需要的最小资源量,确保容器能够正常运行。调度时基于此值来分配节点。

  2. limits:表示容器使用的最大资源量,防止容器使用过多资源。如果容器试图使用超过此限制的资源,Kubernetes 将会对其进行限制(如通过 cgroup 限制 CPU 使用)。

Kubernetes 调度器处理逻:

  1. 调度Kubernetes 调度器会根据 requests 来决定在哪个节点上运行 Pod。节点必须有足够的 CPU 来满足 Podrequests,否则该 Pod 不会被调度到该节点。

  2. 资源限制:容器可以使用的 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.5CPU
limits:
cpu: "1" # 限制最大使用 1CPU
  • requests.cpu: 设置为 500m,表示这个容器需要至少 0.5CPU 核才能正常工作。调度器会根据这个值确定是否可以在节点上运行该容器。

  • limits.cpu: 设置为 1,表示该容器最多可以使用 1CPU 核。如果容器使用的 CPU 超过这个值,Kubernetes 会限制它的使用(比如通过 cgroup 限制 CPU 时间片的使用)。

三、查看


查看资源分配情况: 可以通过以下命令查看 PodCPU 资源使用情况:

kubectl describe pod <pod-name>

输出中会显示每个容器的 requestslimits,以及调度器为它分配的节点。

扩展


CPU 的单位是 core(核),可以用小数或整数来表示。

  1. CPU 表示一个完整的 CPU 核心。

  2. 0.5 表示半个 CPU 核心。

  3. 100m 表示 0.1CPU 核(1m = 1/1000 核)。

Kubernetes 支持通过 m 表示毫核 (millicores),通常会用于请求小量的 CPU 资源。