Skip to content

Pod部署策略

**本文引用的文件** - [lemes-web.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-web.yaml) - [lemes-web-maas.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-web-maas.yaml) - [pod.yaml](file://lemes-cloud/src/devops/console/k8s/template/pod.yaml) - [lemes-nacos.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-nacos.yaml) - [lemes-nacos-pgsql.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-nacos-pgsql.yaml) - [lemes-eureka.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-eureka.yaml) - [lemes-font.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-font.yaml)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向DeviceMate相关后端服务的Kubernetes Pod部署策略,系统化梳理Deployment控制器配置(副本数、滚动更新、回滚)、资源限制与HPA、Pod亲和性与反亲和性、健康检查(Liveness/Readiness/Startup)、调度策略(Tolerations、PodDisruptionBudget),并结合仓库中的模板文件给出可落地的配置要点与最佳实践。

项目结构

围绕DeviceMate相关服务,Kubernetes部署模板主要位于以下路径:

  • lemes-cloud/src/devops/console/k8s/template/ 下包含多个服务的Deployment/Service/Ingress/StatefulSet等模板
  • 关键模板包括:lemes-web.yaml、lemes-web-maas.yaml、lemes-nacos.yaml、lemes-nacos-pgsql.yaml、lemes-eureka.yaml、pod.yaml、lemes-font.yaml

章节来源

核心组件

  • Deployment控制器:定义副本数、选择器、Pod模板、终止宽限期、滚动更新策略等
  • Service/Ingress:暴露服务,提供集群内外访问入口
  • StatefulSet:用于有状态服务(如Nacos/Eureka)
  • ConfigMap/环境变量:通过configMapKeyRef注入运行参数
  • 健康检查:StartupProbe/LivenessProbe/ReadinessProbe
  • 调度与亲和:Tolerations、Affinity(含反亲和)、拓扑分布约束
  • 资源管理:requests/limits、HPA(需额外声明)

章节来源

架构总览

下图展示DeviceMate相关服务在Kubernetes中的部署关系与流量走向(以Web与网关为例):

图表来源

章节来源

详细组件分析

Web服务(lemes-web/lemes-web-maas)

  • 副本数:单实例(replicas: 1)
  • 选择器与标签:selector.matchLabels与template.metadata.labels保持一致
  • 终止宽限期:terminationGracePeriodSeconds设置为5秒或30秒(不同模板差异)
  • 环境变量:通过fieldRef注入POD_NAME/POD_NAMESPACE,通过configMapKeyRef注入TZ、前缀等
  • Ingress:提供根路径或带前缀路径的路由,并可指向网关服务

图表来源

章节来源

通用Pod模板(pod.yaml)

  • 副本数:默认2个副本
  • 滚动更新策略:注释中展示了RollingUpdate的maxUnavailable与maxSurge配置方式
  • 终止宽限期:60秒
  • 调度容忍:对node.kubernetes.io/unreachable与node.kubernetes.io/not-ready设置NoExecute容忍,容忍时间为10秒
  • Pod反亲和:跨节点反亲和(preferredDuringSchedulingIgnoredDuringExecution),权重100
  • 存储卷:hostPath挂载日志目录与emptyDir作为Sidecar卷
  • 资源限制:requests/limits(CPU/内存)示例配置
  • 健康检查:startupProbe/readinessProbe/livenessProbe均通过HTTP GET对接Spring Boot Actuator健康端点
  • 生命周期钩子:preStop阶段执行注销与优雅关闭流程
  • 初始化容器:复制探针/监控侧车到共享卷

图表来源

章节来源

注册中心(Eureka,StatefulSet)

  • 副本数:3个(集群模式)
  • 调度容忍:允许调度到master节点(NoSchedule)
  • 健康检查:livenessProbe针对健康检查端点
  • Service类型:NodePort暴露客户端RPC与Raft端口

章节来源

配置中心(Nacos,StatefulSet)

  • 副本数:3个(集群模式)
  • 调度容忍:允许调度到master节点(NoSchedule)
  • 资源请求:requests(CPU/内存)
  • 环境变量:通过configMapKeyRef注入数据库连接参数
  • Service类型:NodePort暴露多端口
  • Ingress:提供/nacos路径访问

图表来源

章节来源

依赖关系分析

  • Web服务依赖:通过Service与Ingress对外暴露;与网关服务配合实现路径重写与代理
  • 注册中心/配置中心:为下游服务提供服务发现与配置管理能力
  • 字体资源:通过initContainer将字体复制到共享卷供应用使用

图表来源

章节来源

性能考量

  • 资源规划:建议为每个服务明确requests/limits,避免过度承诺导致节点压力与驱逐
  • 启动时延:对于启动较慢的应用,合理设置startupProbe的initialDelaySeconds与failureThreshold,避免误判重启
  • 探针频率:readinessProbe与livenessProbe的periodSeconds应结合业务特性权衡,避免过于频繁造成额外开销
  • 滚动更新:在高可用场景下,优先采用滚动更新并设置合理的maxUnavailable/maxSurge,确保服务连续性
  • HPA:当前模板未包含HPA对象,若需自动扩缩容,应在独立YAML中声明HorizontalPodAutoscaler并绑定目标资源

[本节为通用性能建议,不直接分析具体文件]

故障排查指南

  • 启动失败/反复重启
    • 检查startupProbe配置是否与应用实际启动耗时匹配
    • 查看preStop钩子是否正确执行注销与优雅关闭
  • 就绪状态异常
    • 确认readinessProbe路径与端口正确,且应用在接收请求前处于可接受流量状态
  • 存活探测失败
    • 检查livenessProbe配置与应用健康端点可用性
  • 调度问题
    • 若存在节点污点,确认tolerations配置是否覆盖相应key/operator/effect
    • 对于跨节点分散需求,检查podAntiAffinity与拓扑键(如kubernetes.io/hostname)

章节来源

结论

DeviceMate相关服务的Kubernetes部署以模板化方式提供,涵盖Web服务、注册中心、配置中心与通用Pod模板。通过明确的副本数、滚动更新策略、资源限制与健康检查配置,可在保证可用性的前提下提升稳定性与可观测性。建议结合业务负载与SLA要求,进一步完善HPA、PDB与更细粒度的亲和性约束。

[本节为总结性内容,不直接分析具体文件]

附录

副本数与滚动更新策略

  • Web服务:单副本(lemes-web/lemes-web-maas)
  • 通用Pod模板:双副本(pod.yaml),并提供滚动更新注释示例
  • StatefulSet:Eureka/Nacos均为3副本集群

章节来源

资源限制与HPA

  • 资源限制:通用Pod模板提供requests/limits示例
  • HPA:当前仓库未包含HPA对象,如需自动扩缩容,请单独创建HorizontalPodAutoscaler资源并绑定至对应Deployment/StatefulSet

章节来源

Pod亲和性与反亲和性

  • 反亲和:跨节点反亲和(preferred),权重100
  • 反亲和注释示例:展示了requiredDuringSchedulingIgnoredDuringExecution的配置方式

章节来源

调度策略(Taints与Tolerations、PodDisruptionBudget)

  • Tolerations:对unreachable/not-ready节点设置NoExecute容忍,容忍时间为10秒
  • PodDisruptionBudget:当前仓库未包含PDB对象,如需强一致性保护,建议单独创建PDB并设置minAvailable或maxUnavailable

章节来源

健康检查机制

  • StartupProbe:HTTP GET对接健康端点,初始延迟与失败阈值适配启动时延
  • ReadinessProbe:HTTP GET对接健康端点,用于标记就绪
  • LivenessProbe:HTTP GET对接健康端点,用于存活探测
  • 生命周期钩子:preStop执行注销与优雅关闭

章节来源

实际YAML配置示例(路径)