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 实现资源预算与成本追踪:
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 标签。这是后续发布包校验和成本优化分析的数据基础。