Kubernetes命名空间资源
外观
Kubernetes命名空间资源[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Kubernetes命名空间(Namespace)是Kubernetes中用于逻辑隔离集群资源的机制。命名空间允许用户将集群划分为多个虚拟集群,每个命名空间内的资源名称必须唯一,但不同命名空间中的资源可以重名。命名空间常用于多租户环境、开发/测试/生产环境隔离或团队资源分配。
命名空间的主要特点包括:
- 资源隔离:不同命名空间的资源(如Pod、Service)默认相互不可见。
- 资源配额:可为命名空间设置CPU、内存等资源的限制(通过ResourceQuota)。
- 权限控制:结合RBAC(基于角色的访问控制),实现不同团队或用户的权限隔离。
核心概念[编辑 | 编辑源代码]
默认命名空间[编辑 | 编辑源代码]
Kubernetes安装后会预置以下命名空间:
default
:未指定命名空间时的默认位置kube-system
:Kubernetes系统组件(如kube-proxy、CoreDNS)kube-public
:所有用户可读的公共资源kube-node-lease
:节点心跳检测相关
命名空间作用域[编辑 | 编辑源代码]
命名空间作用域的资源(如Pod、Service)属于特定命名空间,而集群作用域的资源(如Node、PersistentVolume)不属于任何命名空间。
基本操作[编辑 | 编辑源代码]
查看命名空间[编辑 | 编辑源代码]
# 列出所有命名空间
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
创建命名空间[编辑 | 编辑源代码]
# namespace-example.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev-team
应用配置:
kubectl apply -f namespace-example.yaml
或使用命令直接创建:
kubectl create namespace dev-team
在命名空间中创建资源[编辑 | 编辑源代码]
# pod-in-namespace.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
namespace: dev-team # 指定命名空间
spec:
containers:
- name: nginx
image: nginx:1.14.2
切换当前命名空间[编辑 | 编辑源代码]
# 设置默认命名空间
kubectl config set-context --current --namespace=dev-team
# 验证当前命名空间
kubectl config view --minify | grep namespace
高级功能[编辑 | 编辑源代码]
资源配额(ResourceQuota)[编辑 | 编辑源代码]
限制命名空间的资源使用量:
# quota-example.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-team-quota
namespace: dev-team
spec:
hard:
requests.cpu: "2"
requests.memory: 4Gi
limits.cpu: "4"
limits.memory: 8Gi
pods: "10"
网络策略(NetworkPolicy)[编辑 | 编辑源代码]
控制命名空间内Pod的网络流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web
namespace: dev-team
spec:
podSelector:
matchLabels:
role: web
ingress:
- from:
- namespaceSelector:
matchLabels:
purpose: monitoring
实际应用案例[编辑 | 编辑源代码]
场景1:多团队开发环境[编辑 | 编辑源代码]
每个团队在独立命名空间中工作:
- 避免命名冲突(如都创建名为"api"的Service)
- 独立设置资源配额
- 通过RBAC控制访问权限
场景2:环境隔离[编辑 | 编辑源代码]
同一应用在不同环境使用相同资源名称但不同命名空间:
- production/staging/development命名空间
- 相同的部署配置(仅namespace不同)
- 避免测试影响生产环境
数学表示[编辑 | 编辑源代码]
命名空间可形式化表示为: 其中:
- 是命名空间唯一标识符
- 是该命名空间包含的资源集合
- 是资源配额配置
- 是网络/安全策略
最佳实践[编辑 | 编辑源代码]
1. 避免滥用:小型集群可能不需要多个命名空间 2. 命名规范:使用团队/项目/环境作为命名标准(如team-frontend, prod-eu) 3. 配额监控:为关键命名空间设置合理的ResourceQuota 4. 清理策略:对临时命名空间设置TTL(通过Kubernetes的CronJob或外部工具)
常见问题[编辑 | 编辑源代码]
Q1: 如何查看某个命名空间的所有资源?[编辑 | 编辑源代码]
kubectl get all -n dev-team
Q2: 能否跨命名空间访问Service?[编辑 | 编辑源代码]
可以,使用完全限定域名(FQDN)格式:
service-name.namespace-name.svc.cluster.local
Q3: 删除命名空间会怎样?[编辑 | 编辑源代码]
命名空间及其包含的所有资源将被删除(需确认无重要资源)
总结[编辑 | 编辑源代码]
Kubernetes命名空间是集群资源管理的基础单元,通过逻辑隔离实现:
- 多租户支持
- 环境隔离
- 资源配额管理
- 安全边界控制
合理使用命名空间能使集群管理更加清晰高效,特别是在多人协作或复杂环境场景中。