命名空間(Namespace) 是 Kubernetes 中的一個邏輯分隔符,用於在同一 Kubernetes Cluster 中劃分和管理資源。它的主要目的是為了隔離和組織不同的資源,使得 Cluster 中的多個團隊或應用可以共用一個 Cluster 而不會互相干擾。
default
:如果不指定命名空間,資源會被創建在此命名空間中。kube-system
:這裡存放的是 Kubernetes 系統運行所需的資源。kube-public
:這是預設的公共命名空間,通常用於存放 Cluster 內所有用戶都可存取的資源。kube-node-lease
:用於存放節點租約,這些租約由 Kubernetes 節點持有,用來改善節點故障檢測的性能。創建命名空間:
kubectl create namespace <namespace-name>
命令來創建新的命名空間。例如:kubectl create namespace dev
這將創建一個名為 dev
的命名空間,用於開發環境的資源隔離。
在命名空間中操作資源:
dev
命名空間:apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: dev
spec:
containers:
- name: nginx
image: nginx
使用 kubectl apply -f <yaml-file>
將資源應用到指定的命名空間中。
切換命名空間:
kubectl config set-context
命令設置預設命名空間:kubectl config set-context --current --namespace=dev
這樣,所有後續的 kubectl 命令都將預設作用於 dev
命名空間。
查看命名空間中的資源:
kubectl get all -n <namespace-name>
命令可以查看特定命名空間中的所有資源。例如:kubectl get all -n dev
資源配額(Resource Quotas):
限額範圍(Limit Ranges):
基於角色的存取控制(RBAC):
可以為命名空間設置資源配額和限制,確保其資源消耗不會超出分配範圍。以下是一個示例,為 dev
命名空間設置 CPU 和RAM的配額:
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: dev
spec:
hard:
requests.cpu: "2"
requests.memory: "4Gi"
limits.cpu: "4"
limits.memory: "8Gi"
使用 kubectl apply -f <yaml-file>
來設置資源配額。
多租戶環境:
開發、測試和正式環境的隔離:
資源管理和配額控制:
命名空間如何影響 DNS 名稱解析:
my-service
。然而,當你跨命名空間存取其他服務時,則需要使用全名,例如 my-service.my-namespace.svc.cluster.local
。跨命名空間的服務解析:
my-service.my-namespace.svc.cluster.local
。這確保了即使在不同的命名空間中有相同名稱的服務,也能準確解析和路由到正確的服務。命名空間是 Kubernetes 中一個強大且靈活的工具,能夠有效地組織和管理 Cluster 中的資源。通過使用命名空間,可以在一個 Cluster 中運行多個應用程式或服務,並確保它們之間的資源和權限隔離。資源配額和存取控制的結合使用,還能夠進一步增強 Cluster 的可管理性和安全性。
在接下來的課程中,我們將探討 Kubernetes 中的 Helm 套件管理工具,這些工具將幫助你更加高效地部署和管理 Kubernetes 應用程式。