00000228
Namespace 是 Kubernetes 的逻辑隔离机制,用于将集群资源划分到不同的虚拟分区。
defaultNamespace,另外还有 kube-system、kube-public等内置 Namespace。Namespace 的核心作用
| 作用 | 说明 | 场景 |
|---|---|---|
资源隔离 |
按环境、业务线、团队划分资源,避免命名冲突 |
dev/test/prod 环境隔离 |
权限控制 |
结合 RBAC,限制用户/ServiceAccount 只能访问特定 Namespace |
开发人员仅能操作 dev 命名空间 |
资源配额 |
通过 ResourceQuota 限制 Namespace 的总资源用量(CPU/内存/PVC) |
防止某团队耗尽集群资源 |
网络隔离 |
配合 NetworkPolicy 实现 Namespace 级网络策略 |
限制 frontend 命名空间不能直连 database 命名空间 |
生命周期管理 |
可按项目/活动创建临时 Namespace,结束后整体删除 |
大数据计算任务、CI/CD 流水线临时环境 |
Kubernetes 内置 Namespace
| 名称 | 用途 | 是否可删除 |
|---|---|---|
|
未指定 Namespace 的资源默认归属 |
❌ 不可删除 |
|
Kubernetes 系统组件(如 kube-apiserver、kube-proxy、CoreDNS) |
❌ 不可删除 |
|
集群公共可读资源(如 cluster-info) |
❌ 不可删除 |
|
节点心跳 lease 对象(高可用选举) |
❌ 不可删除 |
生产环境建议不要在这些内置 Namespace 中部署业务 Pod。
# 方法1:命令式
kubectl create namespace dev
# 方法2:声明式 YAML
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Namespace
metadata:
name: test
labels:
env: test
EOF
kubectl get namespaces
# 临时指定(单次命令生效) kubectl get pods -n dev # 永久修改 Context(kubectl 默认 namespace) kubectl config set-context --current --namespace=dev # 验证 kubectl config view --minify | grep namespace:
# 创建 Deployment 到 dev 命名空间 kubectl create deployment nginx-dev --image=nginx:1.21 -n dev # 暴露 Service 到 dev 命名空间 kubectl expose deployment nginx-dev --port=80 --target-port=80 -n dev # 验证 kubectl get all -n dev
同一集群中可以在不同 Namespace 创建同名资源,例如
dev和test各有一个nginx-devDeployment,互不冲突。
# 删除整个 Namespace(会级联删除其中的所有资源) kubectl delete namespace test
⚠️ 谨慎操作:一旦删除 Namespace,其中的 Deployment、Service、PVC、PV(若 reclaimPolicy=Delete)都会被清除。