Kubernetes 命名空间
逻辑集群分区用于多租户、环境分离和资源配额。
容器进阶
为什么
命名空间分区集群做隔离 — dev/staging/prod 或团队边界。ResourceQuota 限每命名空间资源,NetworkPolicy 隔离流量。
Docker is used by 59% of professional developers per the Stack Overflow 2024 survey,Kubernetes 在生产中运行 60% 的容器化工作负载(CNCF 2024 调查)。容器编排通过声明式滚动发布将部署相关事故减少 35%。
何时使用
多环境、多团队集群用命名空间。每微服务避免(过细)。
如何做
1. 创建 — kubectl create namespace dev
2. 部署 — kubectl apply -f app.yaml -n dev
3. 默认 — 设上下文命名空间
4. 配额 — ResourceQuota 限 CPU/内存
5. 网络 — NetworkPolicy 隔离
6. 限制 — LimitRange 默认 pod 限制
7. 删除 — kubectl delete namespace dev(小心!)
示例
# 创建命名空间配配额
apiVersion: v1
kind: Namespace
metadata: { name: dev }
---
apiVersion: v1
kind: ResourceQuota
metadata: { name: quota, namespace: dev }
spec:
hard:
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "8"
pods: "20"
# NetworkPolicy — 隔离 dev 与 prod
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: { name: isolate, namespace: dev }
spec:
podSelector: {}
policyTypes: [Ingress]
ingress: [] # 拒绝所有入站
# 使用命名空间
kubectl apply -f app.yaml -n dev
kubectl get pods -n dev
常见问题
- ⚠资源在错命名空间 — 默认是 default,指定 -n 或设上下文
- ⚠无隔离 — 命名空间不隔离网络,加 NetworkPolicy
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓每命名空间用 ResourceQuota — 防一团队占满集群
- ✓隔离用 NetworkPolicy — 命名空间不阻止跨 ns 流量
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求