资源请求与限制
为 Pod 定义 CPU 和内存的资源请求与限制,以确保高效分配资源并避免资源耗尽。
资源请求与限制 是 CoddyKit 上的免费 Kubernetes Basics 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kubernetes Basics 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kubernetes Basics 课程共包含 4 节课。
Kubernetes 中的资源需求
和任何应用程序一样,Pod 也需要资源才能运行。Kubernetes 使用资源请求和资源限制来高效管理这些资源。
这些设置会告诉 Kubernetes Pod 需要多少 CPU 和内存,以及允许使用多少资源,从而确保资源得到公平分配。
CPU 请求:保证 CPU 资源
CPU 请求告诉 Kubernetes Pod 舒适运行所需的最小 CPU 资源。这是一项保证!
- Kubernetes 会根据请求,将 Pod 调度到具有足够可用资源的节点上。
- 如果节点没有足够的 CPU 满足请求,Pod 就不会被调度到该节点。
- 这有助于防止关键应用程序的资源耗尽。
CPU 单位与请求示例
CPU 以“核心”或“毫核”(m)为单位进行度量。1000m 等于 1 个 CPU 核心。因此,500m 就是半个核心。
以下是在 Pod 定义中请求 0.5 个 CPU 核心的示例:
apiVersion: v1
kind: Pod
metadata:
name: cpu-request-pod
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
cpu: "500m"CPU 限制:防止过度使用
CPU 限制设置 Pod 可以使用的最大 CPU 资源。这相当于一个上限。
- 如果 Pod 尝试使用超过限制的 CPU,Kubernetes 会对其进行限流。
- 这意味着 Pod 的 CPU 使用量会受到限制,从而防止它占用同一节点上其他 Pod 的资源。
CPU 限制的实际应用
以下是设置 CPU 限制的示例。如果此 Pod 尝试使用超过 1 个 CPU 核心的资源,就会受到限流,也就是说它的性能会受到限制。
apiVersion: v1
kind: Pod
metadata:
name: cpu-limit-pod
spec:
containers:
- name: my-container
image: nginx
resources:
limits:
cpu: "1"内存请求:保证 RAM
与 CPU 类似,内存请求指定 Pod 运行所需的最小 RAM。
- Kubernetes 会利用此信息查找具有足够可用内存的节点。
- 如果节点内存耗尽,没有设置请求的 Pod 通常会最先被终止(驱逐),以释放空间。
内存单位与请求示例
内存以字节为单位进行测量。常用单位包括 Mi(兆字节)和 Gi(吉字节)。
100Mi 表示 100 兆字节。以下是请求 256 MiB 内存的写法:
apiVersion: v1
kind: Pod
metadata:
name: mem-request-pod
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
memory: "256Mi"内存限制:避免 OOM
内存限制定义了一个容器组最多可以使用的内存量。
- 如果容器组超过其内存限制,操作系统会立即终止它,并报告“内存不足”(OOM)错误。这通常会显示为“OOMKilled”。
- 这样可以防止某个失控的容器组耗尽节点的全部内存,导致整个节点崩溃。
内存限制实战
这个容器组的内存限制为 512 MiB。如果它尝试使用更多内存,就会被终止(OOMKilled),从而保护其他工作负载和节点。
apiVersion: v1
kind: Pod
metadata:
name: mem-limit-pod
spec:
containers:
- name: my-container
image: nginx
resources:
limits:
memory: "512Mi"最佳实践:请求与限制
最佳实践是为所有容器组同时定义请求和限制。这样可以为集群提供稳定性和可预测性。
- 请求确保容器组在调度时获得最低资源量。
- 限制防止其他容器组以及节点本身出现资源耗尽。
以下是一个完整示例:
apiVersion: v1
kind: Pod
metadata:
name: full-resource-pod
spec:
containers:
- name: my-app
image: my-registry/my-app:1.0
resources:
requests:
cpu: "200m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"资源检查
您定义了一个容器组,其 CPU 请求为 200m,CPU 限制为 1(即 1000m)。
如果这个容器组尝试使用 1.5 个 CPU 核心,会发生什么?
回顾:资源管理
在本课中,我们学习了 Kubernetes 中的资源请求和资源限制。
- 请求(CPU 和内存)为容器组调度提供最低资源保障。
- 限制(CPU 和内存)限制最大使用量,以防止资源争用。
- 超过 CPU 限制会导致限流;超过内存限制会导致终止(OOMKilled)。
- 请始终同时定义请求和限制,以确保应用性能稳定且可预测!
常见问题解答
「资源请求与限制」课时是免费的吗?
是的 — 「资源请求与限制」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kubernetes Basics 课程的其余内容,请升级到 CoddyKit PRO。 Kubernetes Basics 课程共包含 4 节课。
「资源请求与限制」这节课中我会学到什么?
为 Pod 定义 CPU 和内存的资源请求与限制,以确保高效分配资源并避免资源耗尽。 你通过在浏览器中直接运行的动手代码来练习 Kubernetes Basics,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kubernetes Basics 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kubernetes Basics 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「资源请求与限制」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kubernetes Basics 课中编写并运行代码吗?
能。每节 Kubernetes Basics 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 资源请求与限制
- 节点选择器与亲和性
- 污点与容忍度
- Pod 优先级与抢占