NameSpace和Pod资源总结
一、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 来抗住资源争抢。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)