【kubernetes】pod资源配额
目录
- 1. 说明
- 2. ResourceQuota 的作用
- 3. 创建 ResourceQuota
- 4. 限制 CPU 和内存
- 5. 限制对象数量
- 6. 应用 ResourceQuota
- 7. 查看 ResourceQuota
- 7. 示例:LimitRange 配置
- 8. Pod 资源请求和限制
- 9. 资源配额的注意事项
1. 说明
- 1.在 Kubernetes 中,Pod 资源配额用于限制命名空间中可以消耗的计算资源(如 CPU 和内存)总量,以防止某个命名空间过度占用集群资源,确保资源在多个团队或项目之间公平分配。
- 2.资源配额主要通过 ResourceQuota 对象实现,同时可以结合 LimitRange 提供更细粒度的资源限制。
- 3.LimitRange 可以为命名空间中的 Pod 和容器设置默认的资源请求和限制,并定义资源的最小值和最大值。与 ResourceQuota 结合使用,可以确保 Pod 的资源使用既符合默认配置,又不会超出命名空间的资源配额。
2. ResourceQuota 的作用
-
1.限制资源总量:可以限制命名空间中所有 Pod 的 CPU、内存、存储等资源的总量。
-
2.限制资源请求和限制:可以限制 Pod 的资源请求(requests)和限制(limits)的总和。
-
3.限制对象数量:可以限制命名空间中可以创建的 Pod、Service、ConfigMap 等对象的数量。
3. 创建 ResourceQuota
- 1.ResourceQuota 是一个命名空间级别的资源对象,可以通过 YAML 文件定义并应用到命名空间中。
4. 限制 CPU 和内存
- 1.限制命名空间中 CPU 和内存资源的 ResourceQuota 示例:
apiVersion: v1
kind: ResourceQuota
metadata:name: compute-resourcesnamespace: my-namespace
spec:hard:requests.cpu: "4" # 限制所有 Pod 的 CPU 请求总量为 4 核requests.memory: 8Gi # 限制所有 Pod 的内存请求总量为 8 GiBlimits.cpu: "8" # 限制所有 Pod 的 CPU 限制总量为 8 核limits.memory: 16Gi # 限制所有 Pod 的内存限制总量为 16 GiB
5. 限制对象数量
- 1.一个限制命名空间中对象数量的 ResourceQuota 示例:
apiVersion: v1
kind: ResourceQuota
metadata:name: object-countsnamespace: my-namespace
spec:hard:pods: "10" # 限制最多创建 10 个 Podservices: "5" # 限制最多创建 5 个 Serviceconfigmaps: "10" # 限制最多创建 10 个 ConfigMappersistentvolumeclaims: "3" # 限制最多创建 3 个 PVC
6. 应用 ResourceQuota
- 1.将定义的 ResourceQuota 应用到命名空间中:kubectl apply -f resourcequota.yaml
7. 查看 ResourceQuota
- 1.查看命名空间中的 ResourceQuota 及其使用情况:kubectl describe resourcequota compute-resources -n my-namespace
- 3.输出示例:
Name: compute-resources
Namespace: my-namespace
Resource Used Hard
-------- ---- ----
requests.cpu 2 4
requests.memory 4Gi 8Gi
limits.cpu 4 8
limits.memory 8Gi 16Gi
7. 示例:LimitRange 配置
- 1.以下是一个 LimitRange 示例,限制容器的 CPU 和内存请求和限制:
apiVersion: v1
kind: LimitRange
metadata:name: mem-limit-rangenamespace: my-namespace
spec:limits:- default:memory: 512Micpu: 500mdefaultRequest:memory: 256Micpu: 250mtype: Container
8. Pod 资源请求和限制
- 1.在创建 Pod 时,可以指定容器的资源请求和限制。如果命名空间中启用了 ResourceQuota 和 LimitRange,则 Pod 的资源请求和限制必须符合这些配置。
- 2.示例:Pod 配置
apiVersion: v1
kind: Pod
metadata:name: example-podnamespace: my-namespace
spec:containers:- name: appimage: nginxresources:requests:memory: "256Mi"cpu: "250m"limits:memory: "512Mi"cpu: "500m"
9. 资源配额的注意事项
- 1.命名空间隔离:ResourceQuota 是命名空间级别的,不同命名空间之间的资源配额互不影响。
- 2.动态调整:ResourceQuota 可以动态调整,但调整后不会影响已存在的资源对象。
- 3.超额分配:如果命名空间中的资源使用量接近配额限制,可能会导致新的 Pod 无法调度。
- 4.监控和告警:建议结合监控工具(如 Prometheus、Grafana)实时监控资源使用情况,并在接近配额限制时发出告警。