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 则负责将配置与敏感数据从容器镜像中解耦。

Kubernetes 六大核心概念关系图 Kubernetes 六大核心概念关系图 Namespace(命名空间) Deployment(部署) Service(服务) Pod 副本集 (ReplicaSet) Pod A Pod B Pod C ConfigMap Secret 说明 ConfigMap/Secret 通过 Volume 挂载 或环境变量注入到 Pod 中

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 的重建或扩缩。

实践建议:在支付系统中,建议为每个微服务创建独立的 Service,并使用 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 加密)。
安全警告:不要将 Secret 的明文数据提交到 Git 仓库。建议使用外部密钥管理服务(如 HashiCorp Vault、AWS Secrets Manager)与 Kubernetes External Secrets Operator 集成,实现动态密钥轮换。
ConfigMap 与 Secret 注入 Pod 的两种方式 ConfigMap / Secret 注入 Pod 的两种方式 方式一:环境变量注入 ConfigMap Secret Pod 容器 envFrom / valueFrom 引用 适用场景:配置项较少,非动态更新 方式二:Volume 挂载 ConfigMap Secret Pod 容器 volumes[].configMap / secret 适用场景:配置项多,支持热更新(文件变化)

2.3 概念对比速查表

下表总结了六个核心概念在支付订单系统中的典型角色与关键区别,便于快速查阅。

概念 核心作用 支付系统典型用途 是否持久化
Pod 最小部署单元,运行容器 运行支付服务容器 + 日志 sidecar 否(可被重建)
Deployment 声明式管理 Pod 副本与更新 管理支付服务 3 副本,滚动更新版本 否(控制器模式)
Service 提供稳定的网络访问入口 暴露支付服务 Cluster IP,供订单服务调用 否(逻辑抽象)
Namespace 资源隔离与多租户 隔离 dev/staging/prod 环境 是(逻辑边界)
ConfigMap 存储非敏感配置 存储支付网关地址、超时时间、费率配置 是(etcd 存储)
Secret 存储敏感数据 存储数据库密码、支付平台 API Key、JWT 密钥 是(etcd 加密存储)

2.4 本章小结