命名空間(Namespace)可以將同一叢集中的資源劃分為不同的工作區,以便您進行資源隔離、配額管理、許可權管理、業務分賬等操作,降低多租戶情境下管理和維護ACK叢集的成本。
命名空間介紹
在ACK叢集中,您可以使用命名空間(Namespace)作為一種機制,將同一叢集中的資源劃分為相互隔離的組。在叢集使用者數量較多時,多個命名空間可以有效劃分工作區,將叢集資源劃分為多個用途,並通過資源配額對命名空間的資源進行分配和管理。
例如,預設情況下,運行中的Pod可以無限制地使用節點上的CPU和記憶體資源,這意味著某個命名空間的Pod可能會耗盡叢集的資源。此時,您可以為命名空間配置資源配額額度,包括CPU、記憶體、Pod數量等。
建立命名空間
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇命名空間與配額。
單擊建立,在彈出的對話方塊配置命名空間的名稱和標籤,然後單擊確定。
kubectl
建立命名空間。
kubectl create namespace test驗證命名空間是否建立成功。
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資源使用額度和開銷。
在命名空間頁面,單擊目標命名空間操作列的資源配額與限制。
在資源配額與限制對話方塊,配置資源配額和預設的資源限制。
關於如何完成相關配置,您可以參見Kubernetes官方文檔資源配額、為命名空間配置預設的記憶體請求和限制。
說明對命名空間設定CPU、記憶體配額(ResourceQuota)後,建立Pod時必須指定CPU和記憶體資源限制,或為命名空間配置預設資源限制(LimitRange)。
調整命名空間資源配額的最佳實務建議
建議在非高峰期調整,調整前,請檢查現有工作負載的資源使用方式。
確保預留足夠的彈性空間以支援HPA自動擴縮容。
調整後建議監控系統至少30分鐘,確保HPA功能正常。
刪除命名空間
系統內建的命名空間不支援刪除。
如果開啟命名空間刪除保護,請先在操作列選擇
> 關閉刪除保護,然後進行刪除。刪除命名空間時,請確保已清理命名空間下資源。如果長期處於終止狀態,請參見下文刪除命名空間時,長期處於終止狀態要如何處理?進行強制移除。
控制台
在命名空間頁面,找到待刪除的命名空間,在操作列選擇
> 刪除。在確認刪除對話方塊中,確認關聯刪除的該命名空間下的資源,然後單擊確認刪除。
kubectl
使用以下命令刪除命名空間。
kubectl delete namespace test常見問題
刪除命名空間時,長期處於終止狀態要如何處理?
當您刪除一個存在資源的命名空間時,刪除操作會長時間停留在Terminating狀態。您可以通過移除命名空間的finalizers屬性來快速終止該過程,該操作可能導致該命名空間資源殘留在叢集中,建議操作前清理命名空間下的資源。
當finalizers數組為空白並且狀態為終止時,Kubernetes將自動刪除命名空間。您可以通過以下方式強制移除命名空間。
開啟Shell終端,為您的Kubernetes叢集建立一個反向 Proxy。
kubectl proxy輸出樣本如下:
Starting to serve on 127.0.0.1:8001開啟一個新的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擷取命名空間定義的內容,以命名空間istio-system為例。
kubectl get namespace istio-system -o json > istio-system.json將finalizers數組置為空白,並重新儲存檔案。
"spec": { "finalizers": [ ] },去除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
相關文檔
關於叢集的配額與限制,例如產品與叢集的配置限制、單叢集容量限制、叢集配額和依賴底層雲產品配額等,請參見配額與限制。
關於如何為命名空間設定配額的樣本,請參見配置 API 對象配額 | Kubernetes。
您可以將RAM使用者或RAM角色與RBAC許可權結合使用,實現叢集或命名空間的精微調權限管理,請參見使用RAM授予叢集及雲資源存取權限、使用RBAC授予叢集內資源操作許可權。