3. Deployment 概念:Kubernetes Deployment 的定义、作用与生命周期

在日志平台中,采集器(如 Filebeat、Fluent Bit)通常以 Deployment 或 DaemonSet 形式运行。理解 Deployment 的核心机制,是后续实现版本一致性校验的基础。本节从定义、作用与生命周期三个维度展开。

3.1 定义:什么是 Deployment

Deployment 是 Kubernetes 中用于声明式管理 Pod 和 ReplicaSet 的 API 对象。它描述了一个期望状态(Desired State),控制器(Controller)会持续将实际状态向期望状态靠拢。

关键特性: Deployment 不直接管理 Pod,而是通过控制 ReplicaSet 来间接管理 Pod。每次更新都会创建一个新的 ReplicaSet,实现平滑滚动升级。
属性 说明 日志平台关联
apiVersion apps/v1(稳定版) 校验时需确认 API 版本兼容性
kind Deployment 明确资源类型,区分 DaemonSet/StatefulSet
spec.replicas 期望 Pod 副本数 日志采集器副本数影响吞吐与容灾
spec.template Pod 模板(含容器镜像、环境变量等) 镜像版本是版本一致性校验的核心字段
spec.selector 标签选择器,关联 Pod 校验时需确保选择器与模板标签匹配
spec.strategy 更新策略(RollingUpdate / Recreate) 滚动更新策略影响版本切换的连续性

3.2 作用:为什么需要 Deployment

Deployment 解决了日志平台中采集器管理的四个核心问题:

  1. 声明式更新:只需修改 YAML 并 apply,控制器自动完成 Pod 替换,无需手动操作。
  2. 滚动升级:逐步替换旧版本 Pod,保证采集器在升级过程中不中断日志上报。
  3. 回滚能力:当新版本采集器出现兼容性问题时,可快速回滚到上一个稳定版本。
  4. 自愈与扩缩:Pod 异常退出时自动重建;高峰期可临时增加副本数提升采集能力。
日志平台场景: 当采集器镜像从 filebeat:7.17.0 升级到 7.17.3 时,Deployment 会逐步替换 Pod。版本一致性校验需要确保集群中所有运行中的 Pod 镜像版本与期望版本一致,避免出现“灰度未完成”导致的版本混杂。

3.3 生命周期:从创建到回滚

Deployment 的生命周期包含以下关键阶段,每个阶段都与版本一致性校验的触发时机相关:

Deployment 生命周期与版本校验触发点 1. 创建 kubectl create / apply 2. 滚动升级 逐步替换 Pod 3. 完成 所有 Pod 更新 4. 回滚 kubectl rollout undo 5. 扩缩容 调整 replicas 版本一致性校验触发点 滚动升级中 / 回滚后 / 扩缩容后 / 定时巡检 说明: • 创建阶段:首次部署时校验镜像版本是否与仓库一致 • 滚动升级/回滚阶段:实时校验新旧 Pod 版本比例是否符合预期

3.4 关键字段详解

以下字段在版本一致性校验中需要重点关注:

字段路径 校验内容 常见问题
spec.template.spec.containers[].image 镜像名称与标签(如 filebeat:7.17.3) 标签为 latest 导致版本漂移
spec.template.spec.containers[].imagePullPolicy 拉取策略(Always / IfNotPresent / Never) 策略不一致导致节点间镜像版本不同
spec.replicas 期望副本数与实际运行数是否匹配 滚动升级过程中新旧 Pod 总数不等于期望值
spec.strategy.rollingUpdate.maxSurge 升级时可超出期望副本数的最大 Pod 数 设置过大可能导致资源超限
spec.strategy.rollingUpdate.maxUnavailable 升级时可不可用的最大 Pod 数 设置过小导致升级缓慢
status.readyReplicas 实际就绪的 Pod 数量 就绪数小于期望数说明升级未完成

3.5 滚动升级策略与版本一致性的关系

滚动升级策略直接影响版本一致性校验的判定逻辑:

核心原则: 版本一致性校验不是简单的“期望版本 vs 实际版本”二元判断,而是需要结合滚动升级状态进行动态评估。
  • RollingUpdate(默认):升级过程中集群内会同时存在新旧两个版本的 Pod。校验逻辑应允许“过渡期”内的版本混杂,但需设定最大容忍时间。
  • Recreate:先删除所有旧 Pod,再创建新 Pod。升级期间服务会短暂中断,校验逻辑应检测到旧 Pod 完全消失、新 Pod 全部就绪。
  • 暂停状态(paused):Deployment 被暂停后,控制器不会执行任何更新。校验逻辑应识别暂停状态,避免误报版本不一致。

3.6 版本一致性校验的典型触发场景

注意: 以下场景是日志平台中版本一致性校验的高频触发点,建议在课程实验中重点模拟。
  1. CI/CD 流水线触发:新镜像构建完成后,自动更新 Deployment 并触发校验。
  2. 定时巡检:每 5 分钟扫描集群中所有 Deployment,比对期望版本与实际运行版本。
  3. 滚动升级完成事件:监听 Deployment 的 Progressing 状态变为 True 时触发校验。
  4. 回滚操作:执行 kubectl rollout undo 后立即校验版本是否回退成功。
  5. 节点故障恢复:Pod 被重新调度到其他节点后,校验新 Pod 的镜像版本是否与期望一致。

3.7 小结