Kubernetes命名空间
外观
Kubernetes命名空间[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Kubernetes命名空间(Namespace)是Kubernetes中用于组织和隔离集群资源的逻辑分区机制。命名空间允许用户将集群划分为多个虚拟集群,每个命名空间内的资源名称必须唯一,但不同命名空间中的资源可以同名。命名空间常用于以下场景:
- 多团队/多项目环境下的资源隔离
- 开发/测试/生产环境分离
- 权限和资源配额管理
核心特性[编辑 | 编辑源代码]
资源隔离[编辑 | 编辑源代码]
命名空间提供了一种轻量级的隔离机制,不同命名空间中的资源(如Pod、Service等)默认互相不可见,但可以通过特定配置实现跨命名空间通信。
名称唯一性[编辑 | 编辑源代码]
资源名称在命名空间内必须唯一,但在不同命名空间中可以重复。例如:
dev/nginx
和prod/nginx
是两个完全独立的服务
资源配额[编辑 | 编辑源代码]
可以通过ResourceQuota
为命名空间设置计算资源(CPU、内存)和对象数量(Pod、Service等)的限制。
默认命名空间[编辑 | 编辑源代码]
Kubernetes安装后会创建以下默认命名空间:
default
:用户资源的默认命名空间kube-system
:Kubernetes系统组件kube-public
:对所有用户可读的资源kube-node-lease
:节点心跳信息
基本操作[编辑 | 编辑源代码]
查看命名空间[编辑 | 编辑源代码]
# 列出所有命名空间
kubectl get namespaces
# 或简写为
kubectl get ns
输出示例:
NAME STATUS AGE default Active 15d kube-system Active 15d kube-public Active 15d kube-node-lease Active 15d
创建命名空间[编辑 | 编辑源代码]
# 通过命令行创建
kubectl create namespace dev
# 通过YAML文件创建
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Namespace
metadata:
name: dev
EOF
在特定命名空间中创建资源[编辑 | 编辑源代码]
# 方法1:使用--namespace参数
kubectl run nginx --image=nginx --namespace=dev
# 方法2:在YAML中指定命名空间
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- name: nginx
image: nginx
EOF
高级用法[编辑 | 编辑源代码]
跨命名空间服务访问[编辑 | 编辑源代码]
服务可以通过服务名.命名空间.svc.cluster.local
的格式跨命名空间访问:
apiVersion: v1
kind: Pod
metadata:
name: consumer
namespace: prod
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "wget -O- http://nginx.dev.svc.cluster.local"]
资源配额示例[编辑 | 编辑源代码]
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-quota
namespace: dev
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
实际应用案例[编辑 | 编辑源代码]
多环境隔离[编辑 | 编辑源代码]
企业通常使用命名空间来隔离不同环境:
dev
:开发环境staging
:预发布环境prod
:生产环境
多租户场景[编辑 | 编辑源代码]
SaaS提供商可以为每个客户创建独立的命名空间:
tenant-a
tenant-b
tenant-c
命名空间关系图[编辑 | 编辑源代码]
限制与注意事项[编辑 | 编辑源代码]
- 命名空间不提供网络隔离(需配合NetworkPolicy使用)
- 部分资源是集群范围的(如PersistentVolume、Node等),不受命名空间限制
- 删除命名空间会删除其中的所有资源
数学表示[编辑 | 编辑源代码]
命名空间可以形式化表示为: 其中:
- 是命名空间标识符
- 是该命名空间下的资源集合
- 是资源配额配置
最佳实践[编辑 | 编辑源代码]
- 为不同环境使用不同命名空间
- 使用有意义的命名空间名称
- 为关键命名空间设置资源配额
- 避免在default命名空间中部署应用
- 定期清理未使用的命名空间