Kubernetes 命名空间 CPU 资源约束配置指南
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
概述
在 Kubernetes 集群管理中,合理分配和限制资源使用是保证集群稳定性的关键。本文将详细介绍如何为 Kubernetes 命名空间配置 CPU 资源的最小和最大约束,确保该命名空间中的所有 Pod 都遵循这些资源限制规则。
核心概念
LimitRange 对象
LimitRange 是 Kubernetes 中用于限制命名空间内资源分配的策略对象。通过定义 LimitRange,管理员可以:
- 为容器和 Pod 设置 CPU 和内存资源的最小和最大值
- 为没有显式指定资源请求的容器设置默认值
- 确保命名空间内的资源使用符合预期
CPU 资源单位
Kubernetes 中 CPU 资源的计量单位:
- 1 CPU 相当于 1 个虚拟 CPU 核心(vCPU)
- 也可以使用毫核(millicpu)表示,如 500m 表示 0.5 个 CPU
配置步骤
1. 准备工作
确保你的 Kubernetes 集群满足以下条件:
- 拥有创建命名空间的权限
- 每个节点至少有 1.0 CPU 可供 Pod 使用
2. 创建测试命名空间
kubectl create namespace constraints-cpu-example
3. 创建 LimitRange 对象
以下是一个 LimitRange 的示例配置:
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-min-max-demo-lr
spec:
limits:
- max:
cpu: "800m"
min:
cpu: "200m"
type: Container
这个配置定义了:
- 每个容器的 CPU 请求最小值:200m (0.2 CPU)
- 每个容器的 CPU 限制最大值:800m (0.8 CPU)
应用该配置:
kubectl apply -f cpu-constraints.yaml --namespace=constraints-cpu-example
4. 验证 LimitRange
查看 LimitRange 的详细信息:
kubectl get limitrange cpu-min-max-demo-lr --output=yaml --namespace=constraints-cpu-example
输出将显示自动生成的默认值(即使我们没有在配置中指定):
limits:
- default:
cpu: 800m
defaultRequest:
cpu: 800m
max:
cpu: 800m
min:
cpu: 200m
type: Container
5. 创建合规的 Pod
创建一个符合约束条件的 Pod:
apiVersion: v1
kind: Pod
metadata:
name: constraints-cpu-demo
spec:
containers:
- name: constraints-cpu-demo-ctr
image: nginx
resources:
limits:
cpu: "800m"
requests:
cpu: "500m"
这个 Pod 满足:
- CPU 请求(500m) ≥ 最小值(200m)
- CPU 限制(800m) ≤ 最大值(800m)
6. 测试约束效果
尝试创建超出最大限制的 Pod
apiVersion: v1
kind: Pod
metadata:
name: constraints-cpu-demo-2
spec:
containers:
- name: constraints-cpu-demo-2-ctr
image: nginx
resources:
limits:
cpu: "1.5"
requests:
cpu: "500m"
创建时会收到错误,因为 1.5 CPU 超过了 800m 的限制。
尝试创建低于最小请求的 Pod
apiVersion: v1
kind: Pod
metadata:
name: constraints-cpu-demo-3
spec:
containers:
- name: constraints-cpu-demo-3-ctr
image: nginx
resources:
limits:
cpu: "800m"
requests:
cpu: "100m"
创建时会收到错误,因为 100m CPU 请求低于 200m 的最小值。
7. 默认值应用测试
创建一个不指定任何 CPU 请求和限制的 Pod:
apiVersion: v1
kind: Pod
metadata:
name: constraints-cpu-demo-4
spec:
containers:
- name: constraints-cpu-demo-4-ctr
image: nginx
Kubernetes 会自动应用 LimitRange 中定义的默认值(800m)。
最佳实践
-
生产环境隔离:为不同部门或环境(如生产、开发)创建单独的命名空间,并设置不同的资源约束
-
合理设置限制:根据节点实际资源情况设置约束,避免设置过高导致资源碎片化
-
监控和调整:定期监控资源使用情况,根据实际需求调整约束值
-
与 ResourceQuota 配合使用:LimitRange 控制单个容器的资源使用,ResourceQuota 控制整个命名空间的资源总量
注意事项
-
LimitRange 约束仅在 Pod 创建或更新时生效,不会影响已存在的 Pod
-
默认值设置时,default 和 defaultRequest 应该相同,特别是对于不可压缩资源(如内存)
-
确保节点有足够资源满足约束条件,否则 Pod 可能无法调度
清理资源
完成测试后,删除命名空间:
kubectl delete namespace constraints-cpu-example
通过合理配置 CPU 资源约束,可以有效防止资源滥用,确保 Kubernetes 集群的稳定运行。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考