全部產品
Search
文件中心

Container Service for Kubernetes:管理命名空間與配額

更新時間:Mar 06, 2025

命名空間(Namespace)可以將同一叢集中的資源劃分為不同的工作區,以便您進行資源隔離、配額管理、許可權管理、業務分賬等操作,降低多租戶情境下管理和維護ACK叢集的成本。

命名空間介紹

在ACK叢集中,您可以使用命名空間(Namespace)作為一種機制,將同一叢集中的資源劃分為相互隔離的組。在叢集使用者數量較多時,多個命名空間可以有效劃分工作區,將叢集資源劃分為多個用途,並通過資源配額對命名空間的資源進行分配和管理。

例如,預設情況下,運行中的Pod可以無限制地使用節點上的CPU和記憶體資源,這意味著某個命名空間的Pod可能會耗盡叢集的資源。此時,您可以為命名空間配置資源配額額度,包括CPU、記憶體、Pod數量等。

建立命名空間

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇命名空間與配額

  3. 單擊建立,在彈出的對話方塊配置命名空間的名稱和標籤,然後單擊確定

kubectl

  1. 建立命名空間。

    kubectl create namespace  test
  2. 驗證命名空間是否建立成功。

    kubectl get namespaces

    預期輸出:

    NAME              STATUS   AGE
    default           Active   46h
    kube-node-lease   Active   46h
    kube-public       Active   46h
    kube-system       Active   46h
    test              Active   9s

    可以看到,建立的test命名空間出現在列表中。

命名空間建立完成後,您可以對命名空間進行編輯配置(修改標籤)、設定資源配額和限制、刪除等操作。

設定資源配額和限制

建立命名空間後,您可以為其配置對應的資源配額(Quota)和預設的資源限制(Limit Range),從而控制該命名空間下的Pod資源使用額度和開銷。

  1. 命名空間頁面,單擊目標命名空間操作列的資源配額與限制

  2. 資源配額與限制對話方塊,配置資源配額和預設的資源限制。

    關於如何完成相關配置,您可以參見Kubernetes官方文檔資源配額為命名空間配置預設的記憶體請求和限制

    說明

    對命名空間設定CPU、記憶體配額(ResourceQuota)後,建立Pod時必須指定CPU和記憶體資源限制,或為命名空間配置預設資源限制(LimitRange)。

調整命名空間資源配額的最佳實務建議

  • 建議在非高峰期調整,調整前,請檢查現有工作負載的資源使用方式。

  • 確保預留足夠的彈性空間以支援HPA自動擴縮容。

  • 調整後建議監控系統至少30分鐘,確保HPA功能正常。

刪除命名空間

說明
  • 系統內建的命名空間不支援刪除。

  • 如果開啟命名空間刪除保護,請先在操作列選擇image > 關閉刪除保護,然後進行刪除。

  • 刪除命名空間時,請確保已清理命名空間下資源。如果長期處於終止狀態,請參見下文刪除命名空間時,長期處於終止狀態要如何處理?進行強制移除。

控制台

  1. 命名空間頁面,找到待刪除的命名空間,在操作列選擇image > 刪除

  2. 確認刪除對話方塊中,確認關聯刪除的該命名空間下的資源,然後單擊確認刪除

kubectl

使用以下命令刪除命名空間。

kubectl delete namespace test

常見問題

刪除命名空間時,長期處於終止狀態要如何處理?

當您刪除一個存在資源的命名空間時,刪除操作會長時間停留在Terminating狀態。您可以通過移除命名空間的finalizers屬性來快速終止該過程,該操作可能導致該命名空間資源殘留在叢集中,建議操作前清理命名空間下的資源。

當finalizers數組為空白並且狀態為終止時,Kubernetes將自動刪除命名空間。您可以通過以下方式強制移除命名空間。

  1. 開啟Shell終端,為您的Kubernetes叢集建立一個反向 Proxy。

    kubectl proxy

    輸出樣本如下:

    Starting to serve on 127.0.0.1:8001
  2. 開啟一個新的Shell終端,通過定義環境變數來串連到Kubernetes叢集,使用curl測試連接性和授權。

    export TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t')
    curl http://localhost:8001/api/v1/namespaces --header "Authorization: Bearer $TOKEN" --insecure
  3. 擷取命名空間定義的內容,以命名空間istio-system為例。

    kubectl get namespace istio-system -o json > istio-system.json
  4. 將finalizers數組置為空白,並重新儲存檔案。

        "spec": {
            "finalizers": [
            ]
        },
  5. 去除finalizers,以命名空間istio-system為例。

    curl -X PUT --data-binary @istio-system.json http://localhost:8001/api/v1/namespaces/istio-system/finalize -H "Content-Type: application/json" --header "Authorization: Bearer $TOKEN" --insecure

相關文檔