为命名空间配置 Pod 资源配额

限制您可以在命名空间内创建的 Pod 数量。

本页面介绍如何为可在 命名空间 中运行的 Pod 总数设置配额。您可以在 ResourceQuota 对象中指定配额。

准备开始

您需要有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议您在至少有两个节点且这些节点不充当控制平面主机的集群上运行本教程。如果您还没有集群,则可以使用 minikube 创建一个集群,或者可以使用以下 Kubernetes 游乐场之一

您必须具有在集群中创建命名空间的权限。

创建命名空间

创建一个命名空间,以便您在本练习中创建的资源与集群的其余部分隔离。

kubectl create namespace quota-pod-example

创建 ResourceQuota

以下是 ResourceQuota 的清单示例

apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-demo
spec:
  hard:
    pods: "2"

创建 ResourceQuota

kubectl apply -f https://k8s.io/examples/admin/resource/quota-pod.yaml --namespace=quota-pod-example

查看有关 ResourceQuota 的详细信息

kubectl get resourcequota pod-demo --namespace=quota-pod-example --output=yaml

输出显示该命名空间的配额为两个 Pod,并且当前没有 Pod;也就是说,没有使用任何配额。

spec:
  hard:
    pods: "2"
status:
  hard:
    pods: "2"
  used:
    pods: "0"

以下是 Deployment 的清单示例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-quota-demo
spec:
  selector:
    matchLabels:
      purpose: quota-demo
  replicas: 3
  template:
    metadata:
      labels:
        purpose: quota-demo
    spec:
      containers:
      - name: pod-quota-demo
        image: nginx

在该清单中,replicas: 3 告诉 Kubernetes 尝试创建三个新的 Pod,所有 Pod 都运行相同的应用程序。

创建 Deployment

kubectl apply -f https://k8s.io/examples/admin/resource/quota-pod-deployment.yaml --namespace=quota-pod-example

查看有关 Deployment 的详细信息

kubectl get deployment pod-quota-demo --namespace=quota-pod-example --output=yaml

输出显示,即使 Deployment 指定了三个副本,但由于您之前定义的配额,只创建了两个 Pod

spec:
  ...
  replicas: 3
...
status:
  availableReplicas: 2
...
lastUpdateTime: 2021-04-02T20:57:05Z
    message: 'unable to create pods: pods "pod-quota-demo-1650323038-" is forbidden:
      exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2'

资源选择

在此任务中,您定义了一个 ResourceQuota,它限制了 Pod 的总数,但您也可以限制其他类型对象的总数。例如,您可能会决定限制单个命名空间中可以存在的 CronJobs 的数量。

清理

删除您的命名空间

kubectl delete namespace quota-pod-example

后续步骤

面向集群管理员

面向应用程序开发者

上次修改时间:2023 年 8 月 24 日下午 6:38 PST:使用 code_sample 短代码而不是 code 短代码 (e8b136c3b3)