Kubernetes Namespace 使用指南
什麼是 Namespace?
Kubernetes Namespace 是一個 API 物件,用於在 Kubernetes 叢集中創建虛擬的資源隔離環境。Namespace 提供了一種將叢集資源劃分為多個獨立區域的方式,讓不同的團隊、專案或環境可以在同一個叢集中安全地共存。
Namespace 的主要功能:
- 資源隔離:將不同的應用程式或環境分隔在不同的命名空間中
- 存取控制:透過 RBAC 實現細粒度的權限管理
- 資源配額管理:限制每個命名空間可使用的叢集資源量
- 名稱空間管理:避免資源名稱衝突,支援相同名稱的資源存在於不同命名空間
為什麼使用 Namespace?
相較於將所有資源都放在預設命名空間中,Namespace 提供了更好的資源管理方式:
- 多租戶支援:讓多個團隊或專案安全地共享同一個 Kubernetes 叢集
- 環境分離:清楚區分開發、測試、生產等不同環境的資源
- 資源管理:透過資源配額控制每個環境的資源使用量
- 權限控制:實現精細的存取權限管理,提升安全性
預設 Namespace
Kubernetes 叢集預設會創建四個系統命名空間:
- kube-system: 存放 Kubernetes 系統元件,如 kube-dns、kube-proxy、etcd 等核心服務
- kube-public: 公開可讀的命名空間,通常用於存放叢集資訊,所有使用者(包括未認證使用者)都可以讀取
- kube-node-lease: 用於 Node 租約物件,幫助確定 Node 的可用性和健康狀態
- default: 預設命名空間,當沒有指定命名空間時,資源會被創建在這裡
建立自定義 Namespace
方法一:使用 YAML 檔案建立
建立 dockertest-namespace.yaml 檔案:
1 2 3 4 5 6 7
| apiVersion: v1 kind: Namespace metadata: name: dockertest-namespace labels: name: dockertest-namespace environment: dev
|
套用設定檔:
1
| kubectl create -f dockertest-namespace.yaml
|
方法二:使用指令直接建立
1
| kubectl create namespace dockertest-namespace
|
檢視所有 Namespace
1 2 3
| kubectl get namespaces
kubectl get ns
|
在指定 Namespace 中操作資源
在特定 Namespace 建立資源
1 2 3 4 5
| kubectl run nginx --image=nginx -n dockertest-namespace
kubectl apply -f dockertest-deployment.yaml -n dockertest-namespace
|
設定預設 Namespace
1 2 3 4 5
| kubectl config set-context --current --namespace=dockertest-namespace
kubectl config view --minify | grep namespace
|
檢視 Namespace 中的資源
1 2 3 4 5 6 7 8
| kubectl get pods -n dockertest-namespace
kubectl get pods --all-namespaces
kubectl describe namespace dockertest-namespace
|
刪除 Namespace
注意:刪除 Namespace 會同時刪除該命名空間內的所有資源!
1
| kubectl delete namespace dockertest-namespace
|
資源配額管理
為 Namespace 設定資源限制,避免某個環境消耗過多叢集資源:
1 2 3 4 5 6 7 8 9 10 11 12 13
| apiVersion: v1 kind: ResourceQuota metadata: name: compute-quota namespace: dockertest-namespace spec: hard: requests.cpu: "4" requests.memory: 8Gi limits.cpu: "8" limits.memory: 16Gi persistentvolumeclaims: "10" pods: "10"
|
最佳實踐建議
- 環境分離:為不同環境(開發、測試、生產)建立獨立的命名空間
- 團隊隔離:為不同團隊或專案建立專用的命名空間
- 命名規範:採用一致的命名規範,如
team-environment 格式
- 資源配額:為每個命名空間設定合適的資源配額
- 權限控制:結合 RBAC 實現細粒度的權限管理
- 監控標籤:為命名空間加上有意義的標籤,便於監控和管理
範例命名建議:
frontend-dev、frontend-prod
backend-staging、backend-prod
team-alpha-dev、team-beta-prod