K8S资源配额
K8S提供ResourceQuota和LimitRange两种资源配额管理机制,用以限制命名空间(Namespace)中Pod的资源使用量。
ResourceQuota:限定整个命名空间资源消耗的天花板
LimitRange:为命名空间内的Pod或容器设置资源请求与限制的默认值、最小值及最大值,确保单个应用负载的资源使用在合理范围内,并自动为未设置资源的Pod提供默认值,以满足ResourceQuota的强制要求
kubectl create namespace dev # 创建命名空间
apiVersion: v1 # 指定此资源对象使用的Kubernetes API版本。ResourceQuota资源定义在核心API组中,其稳定版本为v1
kind: ResourceQuota # 定义要创建的Kubernetes资源类型。ResourceQuota用于在命名空间级别限制资源消耗总量
metadata:
name: dev-quota # 为此ResourceQuota对象指定一个名称,在命名空间内必须唯一
namespace: dev # 指定此配额规则将应用于名为`dev`的命名空间。这意味着所有在`dev`命名空间内创建的资源都将受到此配额的限制
spec:
hard: # `hard`字段定义了资源配额的“硬性限制”,是必须遵守的资源使用上限
# 计算资源配额
requests.cpu: "2" # 限制该命名空间中所有Pod的CPU请求总量不能超过2个CPU核心CPU单位:1 core = 1000 milli core (毫核)。
requests.memory: 4Gi # 限制该命名空间中所有Pod的内存请求总量不能超过4 GiB (Gibibytes)内存单位:Mi (Mebibyte) 和 Gi (Gibibyte) 是1024进制单位。
limits.cpu: "4" # 限制该命名空间中所有Pod的CPU使用上限总量不能超过4个CPU核心
limits.memory: 8Gi # 限制该命名空间中所有Pod的内存使用上限总量不能超过8 GiB
# 存储资源配额
requests.storage: 10Gi # 限制该命名空间中所有持久卷声明(PVC)的存储请求总量不能超过10 GiB。
persistentvolumeclaims: "4" # 限制该命名空间中最多可以创建4个持久卷声明(PVC)。
# 对象数量配额
pods: "20" # 限制该命名空间中最多可以存在20个Pod(通常指非终止状态的Pod)。
services: "10" # 限制该命名空间中最多可以创建10个Service对象。
configmaps: "10" # 限制该命名空间中最多可以创建10个ConfigMap对象。
secrets: "10" # 限制该命名空间中最多可以创建10个Secret对象。
services.loadbalancers: "2" # 限制该命名空间中最多可以创建2个类型为LoadBalancer的Service。这是一种更细粒度的对象数量配额控制。
apiVersion: v1 # 指定使用的Kubernetes API版本,LimitRange资源定义在核心API组中,其稳定版本为v1
kind: LimitRange # 定义要创建的Kubernetes资源类型。LimitRange用于在命名空间内对Pod、容器或PVC的资源使用进行细粒度控制
metadata:
name: default-limits # 为此LimitRange对象指定一个名称,在命名空间内必须唯一
namespace: dev # 指定此LimitRange规则将应用于名为`dev`的命名空间。这意味着所有在`dev`命名空间内创建的容器都将受到此规则的限制
spec:
limits: # `spec.limits` 字段定义了具体的限制规则列表
- type: Container # 指定此条限制规则的作用对象类型为`Container`,即对Pod中的每个容器生效。其他可选类型包括`Pod`和`PersistentVolumeClaim`
min: # 定义容器资源请求(`requests`)的最小值。创建容器时,其`resources.requests`值不能低于此处设置的最小值,否则Pod创建会失败
cpu: "100m"
memory: "100Mi"
max: # 定义容器资源限制(`limits`)的最大值。创建容器时,其`resources.limits`值不能超过此处设置的最大值,否则Pod创建会失败
cpu: "2" #
memory: "2Gi"
default: # 定义容器的默认资源限制(`limits`)。当Pod中的容器未显式指定`resources.limits`时,系统会注入此处定义的默认值
cpu: "500m"
memory: "512Mi"
defaultRequest: # 定义容器的默认资源请求(`requests`)。当Pod中的容器未显式指定`resources.requests`时,系统会注入此处定义的默认值
cpu: "200m"
memory: "256Mi"
kubectl describe resourcequota dev-quota -n dev
# 或
kubectl get resourcequota dev-quota -n dev -o yaml
kubectl describe limitranges -A

浙公网安备 33010602011771号