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。
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 概念关系总结
下图以分层视角展示七个概念之间的依赖与协作关系,帮助理解它们在集群中的位置。
常见误区:
- 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 |