1.1 Namespace 基础概念

Kubernetes Namespace 是集群内部的虚拟隔离边界,用于将物理集群划分为多个逻辑单元。它是多租户环境、资源配额管理和环境隔离的核心基础。

1.1.1 Namespace 的核心作用

作用维度 具体说明 典型场景
资源隔离 同一集群内,不同 Namespace 中的 Pod、Service、ConfigMap 等资源相互不可见(默认策略) 开发环境与生产环境部署在同一集群
命名空间 资源名称在同一个 Namespace 内唯一,不同 Namespace 可重名 多个团队各自创建同名 Service
配额管理 通过 ResourceQuota 限制每个 Namespace 的 CPU、内存、存储总量 防止单个团队耗尽集群资源
权限控制 RBAC 规则可绑定到特定 Namespace,实现细粒度授权 只允许开发人员操作 dev Namespace
成本分摊 按 Namespace 聚合资源消耗,便于成本核算与预算控制 按部门/项目拆分云账单
成本视角提示: Namespace 是云原生成本优化的最小计量单元。在后续章节中,我们将基于 Namespace 级别设置资源预算(ResourceBudget),并通过校验发布包来确保成本不超支。

1.1.2 默认 Namespace 体系

Kubernetes 集群安装完成后,自动创建四个初始 Namespace:

  • default —— 未指定 Namespace 时资源默认归属的命名空间,适合快速验证,生产环境不建议直接使用。
  • kube-system —— 存放集群控制面组件(kube-apiserver、kube-scheduler、etcd、coredns 等),普通用户不应在此部署业务。
  • kube-public —— 所有用户(包括未认证用户)均可读取的公共命名空间,通常用于集群引导配置。
  • kube-node-lease —— 存储节点心跳租约(Lease 对象),用于节点健康检测,无需人工干预。
常见误区: 不要将业务应用直接部署在 kube-system 或 default 中。前者会污染控制面组件,后者会导致资源归属混乱,无法进行有效的成本分摊和配额管理。

1.1.3 Namespace 生命周期管理

以下为 Namespace 的创建与删除操作,包含命令式与声明式两种方式:

创建 Namespace

方式一:命令式(kubectl)

# 创建名为 team-alpha 的命名空间
kubectl create namespace team-alpha

# 验证创建结果
kubectl get namespace team-alpha

方式二:声明式(YAML 清单)

# namespace-team-alpha.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: team-alpha
  labels:
    environment: production
    team: alpha
    cost-center: fin-ops-01
# 应用 YAML 清单
kubectl apply -f namespace-team-alpha.yaml
成本标签最佳实践: 在 Namespace 的 metadata.labels 中注入 cost-center、environment、team 等标签,后续成本分析工具(如 Kubecost、OpenCost)将基于这些标签进行费用拆分。

删除 Namespace

# 删除 team-alpha 命名空间及其内部所有资源
kubectl delete namespace team-alpha

# 强制删除(当 Namespace 处于 Terminating 状态时使用)
kubectl delete namespace team-alpha --force --grace-period=0
删除风险提示: 删除 Namespace 会级联删除其内部所有资源(Pod、Service、Deployment、ConfigMap 等),且不可恢复。生产环境操作前务必确认 Namespace 内无关键业务。

1.1.4 Namespace 资源隔离与成本关系

下图展示了 Namespace 在集群中的逻辑隔离结构,以及如何通过 Namespace 实现资源预算与成本追踪:

Namespace 资源隔离与成本追踪架构 Kubernetes 集群 Namespace: team-alpha 环境: production | 成本中心: fin-ops-01 Pod: web-app Pod: api-svc Service: web Service: api ResourceQuota: CPU 8核 / 内存 16Gi 当前使用: CPU 4.2核 / 内存 8.5Gi Namespace: team-beta 环境: staging | 成本中心: fin-ops-02 Pod: frontend Pod: backend Service: front Service: back ResourceQuota: CPU 4核 / 内存 8Gi 当前使用: CPU 1.8核 / 内存 3.2Gi 成本追踪 → 按 Namespace 聚合账单

1.1.5 常用 Namespace 操作命令速查

操作 命令 说明
查看所有 Namespace kubectl get namespaces 显示集群中所有命名空间及其状态
查看指定 Namespace 详情 kubectl describe namespace <name> 包含标签、注解、资源配额等信息
切换当前上下文 Namespace kubectl config set-context --current --namespace=<name> 避免每次命令都加 -n 参数
查看 Namespace 内资源 kubectl get all -n <name> 列出该命名空间下所有资源对象
导出 Namespace YAML kubectl get namespace <name> -o yaml 用于备份或迁移配置
成本调优前置动作: 在开始资源预算配置前,建议先梳理当前集群中所有 Namespace 的归属关系,为每个 Namespace 打上 cost-center、environment、owner 标签。这是后续发布包校验和成本优化分析的数据基础。