一、Namespace 资源对象

1. 定义与核心作用

Namespace 是 Kubernetes 中用于实现资源隔离多租户管理的核心机制,通过将集群资源划分为逻辑上的不同分组,实现不同团队、项目或环境之间的资源隔离与管理。

2. 默认 Namespace

Kubernetes 集群初始化时会自动创建 4 个默认 Namespace:

Namespace 用途
default 未指定 Namespace 时的默认选择,通常用于临时测试或单机学习
kube-system 存放 Kubernetes 系统组件(kube-proxy、CoreDNS 等),不建议部署用户应用
kube-public 所有用户均可访问,通常用于存放集群级的公共信息
kube-node-lease 存放节点租约对象,用于节点心跳检测,提高集群可用性

3. Namespace 的核心特性

(1)资源名称隔离
不同 Namespace 中可以有同名的资源,它们被视为完全独立的资源,互不冲突。

(2)逻辑分区而非物理隔离
Namespace 是逻辑上的虚拟分区,用于组织和管理资源,但对象在不同 Namespace 之间并不具备天然的网络隔离——所有 Pod 无论位于哪个节点或命名空间,都可以通过 IP 地址相互通信。

(3)集群级别资源不属于任何 Namespace
Node、PV(PersistentVolume)、ClusterRole、ClusterRoleBinding 等资源属于集群级别,不属于任何 Namespace。

4. Namespace 的核心配套机制

(1)ResourceQuota(资源配额)

为每个 Namespace 设置资源使用上限,限制 CPU、内存、存储以及各类对象(Pod、Service、Secret 等)的数量。

  • 配置示例中,可为 Namespace 设置 Pod 数量上限(如 pods: "10")、CPU 请求总量(如 requests.cpu: "4")、内存请求总量(如 requests.memory: "8Gi")等。

  • 关键要点:ResourceQuota 仅限制 Namespace 级别的总量消耗,不设置单 Pod 的默认约束;必须与 LimitRange 配合使用,才能确保 Pod 有合理的资源默认值。

(2)LimitRange(限制范围)

在 Namespace 级别为单个 Pod 或容器设置资源约束,包括:

  • default:未指定时的默认请求和限制值

  • max/min:设置资源请求和限制的最小/最大值

  • 常见配置为默认 Pod 请求 CPU 100m、内存 200Mi,不超过 CPU 500m 和内存 1Gi

(3)RBAC 权限边界

Namespace 与 RBAC(Role-Based Access Control)结合,可以精细控制不同用户或团队对资源的访问权限范围。

5. 多租户场景价值

Namespace 是 Kubernetes 多租户管理的基础,结合 ResourceQuota、LimitRange 和 RBAC 可构建完整的多租户解决方案。典型场景包括:

  • 按环境划分:dev、test、prod

  • 按业务团队划分:payment、recommendation、monitoring

  • 按客户租户划分:tenant-a、tenant-b


二、Pod 资源对象

1. 定义

Pod 是 Kubernetes 中可调度和部署的最小单位,一个 Pod 封装一个或多个容器(Container)、存储资源(Volume)、一个独立的网络 IP 以及管理控制容器运行方式的策略选项。

2. 两种使用模式

模式 说明 场景
单容器模式 Pod 中运行一个容器,最常见用法 微服务、API 服务等常规应用
多容器模式 一个 Pod 中运行多个需要耦合协作的容器 主容器 + 辅助容器(Sidecar),如 Web 服务器 + 日志转发器

3. Pod 生命周期与状态

Pod 的生命周期包含以下关键状态:

状态 含义
Pending Pod 已被 API Server 接受并创建,但未被调度到节点或正在拉取镜像
Running Pod 已调度到某节点,且所有容器已创建,至少有一个容器处于运行/启动/重启状态
Succeeded Pod 中所有容器都已成功执行完成并退出
Failed Pod 中所有容器已终止,但至少有一个容器是非正常终止的
Unknown Pod 状态无法获取(通常因节点通信故障导致)

4. 重启策略

由节点上的 kubelet 根据重启策略进行控制,支持三种策略,默认值为 Always:

策略 行为
Always 容器失效时,kubelet 自动重启容器
OnFailure 仅当容器状态为 Failed 时,kubelet 自动重启容器
Never 无论容器状态如何,kubelet 均不重启容器

5. 健康检查探针(Probes)

Kubernetes 通过三种探针保障 Pod 中容器的可用性:

探针类型 作用
LivenessProbe(存活探针) 判断容器是否存活;检测失败时 kubelet 会杀掉容器并根据重启策略进行处理
ReadinessProbe(就绪探针) 判断容器是否就绪并可接收请求;检测失败时,Pod 会从 Service 的端点列表中移除,不接收流量
StartupProbe(启动探针) 应对启动缓慢的应用;在启动探针成功之前,存活探针和就绪探针不会生效

每个探针可通过三种方式实现:httpGet(HTTP GET 请求)、tcpSocket(TCP 端口连接)、exec(执行命令)。

6. 多容器设计模式

(1)Sidecar 模式
辅助容器扩展主容器的功能,而不干扰主容器的核心职责。两者共享同一个网络命名空间(locahost 通信)和同一个存储卷。常见场景:日志收集、服务网格代理(如 Istio Envoy)、监控数据采集。

(2)Init Container 模式
在主应用容器启动之前执行的初始化任务容器,运行至完成后即退出,确保主应用的前提条件得到满足。常见场景:初始化数据库表结构、等待依赖服务就绪、文件权限设置等。

7. 资源管理(Requests & Limits)

在容器级别设置资源请求与限制,Kubernetes 将 Pod 的请求和限制计算为其所有容器的请求和限制的总和。

参数 含义 作用
requests 容器启动所需的最小资源量 供调度器选择节点的依据
limits 容器允许使用的最大资源量 超出时会被限制或终止

8. 服务质量等级(QoS)

Kubernetes 根据 Pod 中所有容器的 requests 和 limits 组合,自动分配 QoS 等级,用于在资源压力下决定 Pod 的驱逐优先级:

QoS 等级 条件 驱逐优先级 适用场景
Guaranteed 所有容器的 CPU 和 Memory 的 requests == limits 最低 关键业务、数据库
Burstable 至少一个容器设置了 requests 但小于 limits 中等 常规微服务
BestEffort 没有任何容器设置 requests 或 limits 最高(最先被驱逐) 临时任务、测试环境

9. 网络访问方式

Pod 拥有独立 IP 地址,Pod 中的多个容器共享该 IP 和网络命名空间。同类访问方式:

  • 同一 Namespace 内访问:使用 <service-name>

  • 跨 Namespace 访问:使用完整 DNS 名称 <service-name>.<namespace-name>.svc.cluster.local

10. Volume 存储

Pod 可通过 Volume 机制为容器提供临时共享存储或持久化存储:

Volume 类型 生命周期 适用场景
emptyDir Pod 生命周期内 同一 Pod 内容器间的临时数据共享
hostPath 节点生命周期 需要对主机文件系统直接读写的场景
PersistentVolumeClaim(PVC) Pod 生命周期之外 需持久化的数据,Pod 重启/重建后数据不丢失

11. 生产实践:使用 Controller 管理 Pod

在生产环境中,几乎从不直接创建裸 Pod,而是通过 Workload Controller 来管理 Pod:

Controller 适用场景
Deployment 无状态应用(Web 服务、API),支持滚动更新和回滚
StatefulSet 有状态应用(数据库),Pod 有固定标识和持久化存储
DaemonSet 每节点一个 Pod(节点监控、日志采集、CNI 插件)
Job / CronJob 一次性任务或定时批处理任务

三、Namespace vs. Pod 核心概念速查表

对比维度 Namespace Pod
定义 资源的逻辑隔离分区 一组容器的运行单元,最小调度对象
层级关系 集群的"文件夹"(逻辑分区) 承载在物理节点上,归属于一个 Namespace
资源唯一性 同一 Namespace 内资源名称必须唯一 同一 Namespace 内 Pod 名称必须唯一
创建方式 kubectl create namespace 或 YAML YAML + kubectl create -f
生命周期 长期存在 可能被替换或重建(受 Controller 管理)
所有权 不属于 Namespace 的集群级资源:Node、PV 等 始终归属一个 Namespace
核心配套机制 ResourceQuota、LimitRange、NetworkPolicy、RoleBinding Health Probes、RestartPolicy、QoS、Volume

四、一句话总结

Namespace:逻辑上"切"出多份独立空间,做到姓名不冲突、资源不抢完、权限不乱给。

Pod:一个 K8s 里最小也最刚需的"联合体",容器们共享网络插座(127.0.0.1 即 localhost)和存储卷,要么跑单个,要么跑帮手(Init/Sidecar);通过健康检查(Probes)保证服务不掉线,通过 requests/limits 设计 QoS 来抗住资源争抢。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐