2. Kubernetes 核心概念回顾:Pod、Deployment、Service、Ingress、ConfigMap、Secret、Namespace 的作用与关系

在深入报表导出服务的环境回放实战之前,必须牢固掌握 Kubernetes 的七个核心原语。它们构成了集群中应用部署、网络暴露、配置管理和环境隔离的完整骨架。下面从作用、关系与典型使用场景三个维度进行梳理。

2.1 核心概念速览表

概念 API 组 / 版本 核心作用 是否命名空间级别
Pod v1 最小调度单元,封装一个或多个容器、存储卷与网络 IP 是
Deployment apps/v1 声明式管理无状态应用的副本数、滚动更新与回滚 是
Service v1 提供稳定的虚拟 IP 与 DNS 名称,实现 Pod 负载均衡与服务发现 是
Ingress networking.k8s.io/v1 七层 HTTP/HTTPS 路由规则,将外部流量分发到集群内部 Service 是
ConfigMap v1 将非机密配置数据(环境变量、配置文件)与容器镜像解耦 是
Secret v1 存储敏感数据(密码、Token、证书),以 Base64 编码或加密方式保存 是
Namespace v1 虚拟集群分区,用于资源隔离、权限控制和多租户管理 —(自身为集群级别)
实战提示: 在报表导出服务中,ConfigMap 存放数据库连接字符串与导出格式模板路径,Secret 存放数据库密码与第三方 API Token。两者都通过环境变量或卷挂载注入 Pod,避免敏感信息硬编码在镜像中。

2.2 概念关系全景图

下图展示了从外部流量入口到内部工作负载的完整链路,以及配置与隔离层如何作用于 Pod。

Kubernetes 核心概念关系图 Namespace 边界 Ingress Service Deployment Pod(报表导出实例) ConfigMap Secret 流量路径:Ingress → Service → Deployment → Pod(多副本) 配置注入:ConfigMap / Secret 通过环境变量或卷挂载注入 Pod

2.3 各概念详细解读

2.3.1 Pod — 最小部署单元

  • 特征: 每个 Pod 拥有唯一的集群 IP,容器间通过 localhost 通信;Pod 是临时性的,重建后 IP 会变化。
  • 在报表服务中的角色: 每个 Pod 运行一个报表导出容器(如 Python + Celery Worker),负责从数据库拉取数据并生成 Excel/PDF。
  • 关键字段: containers、volumes、restartPolicy。

2.3.2 Deployment — 声明式副本管理

  • 特征: 通过 ReplicaSet 控制 Pod 副本数;支持滚动更新(strategy.rollingUpdate)与一键回滚(kubectl rollout undo)。
  • 在报表服务中的角色: 保证报表导出 Worker 始终有 3 个副本在运行;更新镜像版本时零停机切换。
  • 关键字段: replicas、selector.matchLabels、template。

2.3.3 Service — 稳定网络端点

  • 类型: ClusterIP(默认,仅集群内访问)、NodePort(节点端口映射)、LoadBalancer(云厂商 LB)。
  • 在报表服务中的角色: 为报表 API 前端提供一个固定的 ClusterIP,Ingress 将外部请求转发到这个 Service。
  • 关键字段: ports、selector(关联 Pod 标签)。

2.3.4 Ingress — 七层流量路由

  • 特征: 基于 Host 和 Path 将 HTTP/HTTPS 请求路由到不同 Service;支持 TLS 终止。
  • 在报表服务中的角色: 将 report.example.com/api 路由到报表 API Service,将 report.example.com/static 路由到静态文件 Service。
  • 关键字段: rules.host、rules.http.paths、tls。

2.3.5 ConfigMap 与 Secret — 配置与敏感数据分离

对比维度 ConfigMap Secret
数据存储 明文(键值对或文件) Base64 编码(可启用加密)
典型内容 数据库主机、端口、日志级别 数据库密码、API Key、JWT 签名密钥
注入方式 环境变量 / 卷挂载 环境变量 / 卷挂载
大小限制 1 MiB(etcd 限制) 1 MiB
最佳实践: 在报表导出服务中,将数据库连接字符串拆分为 DB_HOST(ConfigMap)和 DB_PASSWORD(Secret),避免敏感信息泄露。使用 subPath 挂载单个文件而非整个卷,防止覆盖容器内的其他配置。

2.3.6 Namespace — 多环境隔离

  • 作用: 将集群划分为多个虚拟集群,每个 Namespace 内的资源名称独立。
  • 在报表服务中的角色: 使用 report-dev、report-staging、report-prod 三个 Namespace 隔离不同环境,避免资源冲突。
  • 资源配额: 通过 ResourceQuota 限制每个 Namespace 的 CPU/内存总量,防止某个环境耗尽集群资源。

2.4 概念关系总结

下图以分层视角展示七个概念之间的依赖与协作关系,帮助理解它们在集群中的位置。

Kubernetes 概念分层架构图 流量接入层 服务发现层 工作负载层 配置与敏感数据层 隔离边界层 Ingress Service Deployment Pod ConfigMap Secret Namespace
常见误区:
  • Ingress 不能直接路由到 Pod,必须经过 Service。
  • ConfigMap 和 Secret 更新后,已运行的 Pod 不会自动获取新值,需要手动重启 Pod 或使用 rollout restart。
  • Namespace 删除会级联删除其下所有资源(包括 Pod、Service、ConfigMap 等),操作前务必确认。

2.5 实战关联:报表导出服务中的概念映射

报表服务组件 对应 Kubernetes 资源 说明
报表 API 前端 Deployment + Service (ClusterIP) 3 副本,提供 RESTful 接口
报表导出 Worker Deployment + Service (Headless) 5 副本,Headless Service 用于 Worker 发现
外部域名访问 Ingress 路由到报表 API Service
数据库连接配置 ConfigMap + Secret 主机名在 ConfigMap,密码在 Secret
开发/生产环境隔离 Namespace report-dev 与 report-prod