2. Kubernetes 核心概念速览:Pod、Service、Deployment、Namespace、ConfigMap、Secret 的核心作用
在深入构建支付订单系统之前,必须建立对 Kubernetes 核心原语的统一认知。这些原语是集群的“乐高积木”,理解它们的作用与关系,是后续实现弹性伸缩与流量治理的基础。本章将聚焦于六个最核心的概念:Pod、Service、Deployment、Namespace、ConfigMap 和 Secret。
2.1 核心概念关系总览
下图展示了这六大核心概念在 Kubernetes 集群中的层级关系与协作模式。Pod 是工作负载的最小单元,Deployment 负责管理 Pod 的声明式更新与扩缩容,Service 为 Pod 提供稳定的网络访问入口,Namespace 用于隔离资源,ConfigMap 和 Secret 则负责将配置与敏感数据从容器镜像中解耦。
2.2 核心概念详解
2.2.1 Pod:最小的部署单元
Pod 是 Kubernetes 中创建和管理的最小计算单元。一个 Pod 可以包含一个或多个容器(通常是一个主容器加若干 sidecar 辅助容器),这些容器共享同一个网络命名空间、存储卷和 IP 地址。在支付订单系统中,一个典型的 Pod 可能包含一个运行支付服务的 Java 容器和一个用于日志采集的 Filebeat sidecar 容器。
- 共享网络:Pod 内的容器通过 localhost 互相通信,端口不能冲突。
- 共享存储:可以挂载同一个 Volume,用于日志聚合或数据交换。
- 生命周期短暂:Pod 被设计为“可抛弃的”,其 IP 地址会随重建而变化。
2.2.2 Deployment:声明式应用管理
Deployment 是用于管理无状态工作负载的核心控制器。它通过 ReplicaSet 确保指定数量的 Pod 副本始终运行,并支持滚动更新、回滚、以及弹性伸缩。在支付系统中,Deployment 负责管理订单处理服务的多个副本,当流量高峰来临时,通过调整 replicas 字段即可实现水平扩缩。
apiVersion: apps/v1
kind: Deployment
metadata:
name: payment-service
spec:
replicas: 3 # 目标副本数
selector:
matchLabels:
app: payment
template:
metadata:
labels:
app: payment
spec:
containers:
- name: payment-container
image: registry.pay.com/payment:v2.1.0
ports:
- containerPort: 8080
2.2.3 Service:稳定的网络抽象层
由于 Pod 的 IP 地址是动态变化的,Service 提供了一种稳定的网络端点来访问一组 Pod。Service 通过标签选择器(Label Selector)动态关联后端 Pod,并实现负载均衡。对于支付系统,Service 确保前端应用可以通过一个固定的 Cluster IP 或 DNS 名称(如 payment-svc)访问后端的支付 Pod,而不必关心 Pod 的重建或扩缩。
type: ClusterIP 作为内部通信的默认类型。对外暴露的 API 网关则使用 type: LoadBalancer 或 Ingress。
2.2.4 Namespace:多租户隔离边界
Namespace 将物理集群划分为多个虚拟集群,用于实现资源隔离和访问控制。在支付订单系统中,常见的做法是按环境划分 Namespace:dev、staging、prod,或者按业务域划分:order-system、payment-system、user-system。
| Namespace | 用途 | 典型资源配额 |
|---|---|---|
| default | 默认命名空间,用于测试或临时资源 | 无特殊限制 |
| kube-system | Kubernetes 系统组件(如 CoreDNS、kube-proxy) | 系统预留 |
| prod-payment | 生产环境支付核心服务 | CPU: 32核, 内存: 64Gi |
| prod-order | 生产环境订单服务 | CPU: 16核, 内存: 32Gi |
2.2.5 ConfigMap 与 Secret:配置与敏感数据管理
这两个资源的核心目标是将配置信息从容器镜像中剥离,实现“镜像不可变,配置可变”。
- ConfigMap:用于存储非敏感的配置数据,如数据库地址、日志级别、功能开关等。数据以键值对形式存储,可以通过环境变量或 Volume 挂载的方式注入到 Pod 中。
- Secret:用于存储敏感数据,如数据库密码、API 密钥、TLS 证书。Secret 的数据以 Base64 编码存储,并支持更细粒度的访问控制(RBAC)和加密(如 KMS 加密)。
2.3 概念对比速查表
下表总结了六个核心概念在支付订单系统中的典型角色与关键区别,便于快速查阅。
| 概念 | 核心作用 | 支付系统典型用途 | 是否持久化 |
|---|---|---|---|
| Pod | 最小部署单元,运行容器 | 运行支付服务容器 + 日志 sidecar | 否(可被重建) |
| Deployment | 声明式管理 Pod 副本与更新 | 管理支付服务 3 副本,滚动更新版本 | 否(控制器模式) |
| Service | 提供稳定的网络访问入口 | 暴露支付服务 Cluster IP,供订单服务调用 | 否(逻辑抽象) |
| Namespace | 资源隔离与多租户 | 隔离 dev/staging/prod 环境 | 是(逻辑边界) |
| ConfigMap | 存储非敏感配置 | 存储支付网关地址、超时时间、费率配置 | 是(etcd 存储) |
| Secret | 存储敏感数据 | 存储数据库密码、支付平台 API Key、JWT 密钥 | 是(etcd 加密存储) |