Skip to content
返回部署

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 以在退出前排空进行中的请求

常见问题解答