Appearance
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)目录
简介
本文件面向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
章节来源
- lemes-web.yaml:1-80
- lemes-web-maas.yaml:1-105
- lemes-eureka.yaml:1-96
- lemes-nacos.yaml:1-151
- lemes-nacos-pgsql.yaml:1-168
- pod.yaml:1-201
- lemes-font.yaml:1-18
核心组件
- Deployment控制器:定义副本数、选择器、Pod模板、终止宽限期、滚动更新策略等
- Service/Ingress:暴露服务,提供集群内外访问入口
- StatefulSet:用于有状态服务(如Nacos/Eureka)
- ConfigMap/环境变量:通过configMapKeyRef注入运行参数
- 健康检查:StartupProbe/LivenessProbe/ReadinessProbe
- 调度与亲和:Tolerations、Affinity(含反亲和)、拓扑分布约束
- 资源管理:requests/limits、HPA(需额外声明)
章节来源
- lemes-web.yaml:19-80
- lemes-web-maas.yaml:19-105
- lemes-nacos.yaml:31-151
- lemes-nacos-pgsql.yaml:31-168
- lemes-eureka.yaml:19-96
- pod.yaml:3-201
架构总览
下图展示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将字体复制到共享卷供应用使用
图表来源
- lemes-web.yaml:19-80
- lemes-web-maas.yaml:64-105
- lemes-eureka.yaml:19-96
- lemes-nacos.yaml:31-151
- lemes-font.yaml:1-18
章节来源
- lemes-web.yaml:19-80
- lemes-web-maas.yaml:64-105
- lemes-eureka.yaml:19-96
- lemes-nacos.yaml:31-151
- lemes-font.yaml:1-18
性能考量
- 资源规划:建议为每个服务明确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配置示例(路径)
- Web服务(单实例):lemes-web.yaml:1-80
- Web服务(带前缀/网关):lemes-web-maas.yaml:1-105
- 通用Pod模板(含资源/探针/反亲和):pod.yaml:1-201
- 注册中心(Eureka,StatefulSet):lemes-eureka.yaml:1-96
- 配置中心(Nacos,StatefulSet):lemes-nacos.yaml:1-151
- 配置中心(Nacos PGSQL变体):lemes-nacos-pgsql.yaml:1-168
- 字体资源模板(InitContainer):lemes-font.yaml:1-18