0x00 概述
在 Kubernetes 中,ResourceQuota 和 LimitRange 是两种用于管理命名空间资源使用的重要机制。它们帮助确保集群资源的有效分配,防止资源过度消耗。下面将介绍如何配置这两种机制,并解释它们的相互作用。
ResourceQuota:
适用于整个命名空间,限制命名空间中所有 Pod 的总资源使用量。
如果命名空间中的资源总使用量超出配额,则无法创建新的资源(例如,Pod、服务等)。
LimitRange:
适用于命名空间中的单个 Pod 和容器,确保它们的资源请求和限制在指定的范围内。
如果容器的资源请求或限制超出 LimitRange 定义的范围,Kubernetes 将拒绝 Pod 的创建。
0x01 使用 ResourceQuota 限制命名空间的总资源
ResourceQuota 用于设置一个命名空间中所有资源的总量上限。这包括 CPU、内存、存储、Pod 数量等。它确保命名空间中的资源使用不会超出指定的配额。
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-quota
namespace: your-namespace
spec:
hard:
requests.cpu: "10"
requests.memory: "20Gi"
limits.cpu: "20"
limits.memory: "40Gi"
pods: "50"
services: "10"
requests.cpu: 命名空间中所有 Pod 请求的 CPU 总量上限(例如,10 个 CPU 核心)。
requests.memory: 命名空间中所有 Pod 请求的内存总量上限(例如,20 GiB)。
limits.cpu: 命名空间中所有 Pod 的 CPU 限制总量上限(例如,20 个 CPU 核心)。
limits.memory: 命名空间中所有 Pod 的内存限制总量上限(例如,40 GiB)。
pods: 命名空间中允许的最大 Pod 数量(例如,50 个 Pod)。
services: 命名空间中允许的最大服务数量(例如,10 个服务)。
0x02 使用 LimitRange 限制单个 Pod 和容器的资源请求和限制
LimitRange 用于为命名空间中的 Pod 和容器设置资源请求和限制的范围。它确保所有 Pod 和容器的资源使用符合定义的范围。
apiVersion: v1
kind: LimitRange
metadata:
name: example-limits
namespace: your-namespace
spec:
limits:
- type: Container
max:
cpu: "1"
memory: "2Gi"
min:
cpu: "100m"
memory: "256Mi"
default:
cpu: "500m"
memory: "1Gi"
defaultRequest:
cpu: "250m"
memory: "512Mi"
resourceTypes:
- cpu
- memory
max: 定义容器可以使用的最大资源量(例如,1 CPU 核心和 2 GiB 内存)。
min: 定义容器需要请求的最小资源量(例如,100m CPU 和 256 MiB 内存)。
default: 为未指定资源限制的容器设置默认的限制(例如,500m CPU 和 1 GiB 内存)。
defaultRequest: 为未指定资源请求的容器设置默认的请求(例如,250m CPU 和 512 MiB 内存)。
resourceTypes: 限制适用的资源类型,例如 CPU 和内存。
0x03 验证资源限制
查看 ResourceQuota:
kubectl get resourcequota -n your-namespace
查看 LimitRange:
kubectl get limitrange -n your-namespace
发表评论