配置名稱空間的 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 的總數,但你也可以限制其他型別物件的總數。例如,你可以決定限制單個名稱空間中可以存在的 CronJob 的數量。

清理

刪除你的名稱空間

kubectl delete namespace quota-pod-example

下一步

致叢集管理員

致應用開發者

最後修改於 2024 年 10 月 30 日下午 5:17 PST:KEP 2837:Pod 級別資源 Alpha (0374213f57)