Skip to content

Kubernetes集群

**本文引用的文件** - [install.sh](file://lemes-cloud/src/devops/k8s/install.sh) - [deploy-master.sh](file://lemes-cloud/src/devops/k8s/deploy-master.sh) - [baremetal-nginx-ingress.yaml](file://lemes-cloud/src/devops/k8s/baremetal-nginx-ingress.yaml) - [namespace.yaml](file://lemes-cloud/src/devops/k8s/service/base/namespace.yaml) - [secret.yaml](file://lemes-cloud/src/devops/k8s/service/base/secret.yaml) - [config.yaml](file://lemes-cloud/src/devops/k8s/service/base/config.yaml) - [lemes-service-dm-common.yaml](file://lemes-cloud/src/devops/k8s/service/expose-port/lemes-service-dm-common.yaml) - [lemes-service-dm-device.yaml](file://lemes-cloud/src/devops/k8s/service/expose-port/lemes-service-dm-device.yaml) - [lemes-service-dm-store.yaml](file://lemes-cloud/src/devops/k8s/service/expose-port/lemes-service-dm-store.yaml) - [lemes-service-dm-workflow.yaml](file://lemes-cloud/src/devops/k8s/service/expose-port/lemes-service-dm-workflow.yaml)

目录

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

引言

本文件面向DeviceMate项目的云原生生产部署,提供基于Kubernetes的集群架构设计与实施指南。内容覆盖集群初始化、节点规划、服务网格与入口网关、核心资源(Deployment、Service、Ingress)配置、Pod调度与副本管理、滚动更新策略、存储卷与持久化、网络与安全策略、服务发现、监控与日志、性能调优以及运维操作流程。所有说明均以仓库中现有的Kubernetes配置与脚本为依据,并结合通用最佳实践进行提炼。

项目结构

DeviceMate项目在lemes-cloud模块下提供了完整的Kubernetes部署资产与自动化脚本,主要分布在以下路径:

  • 集群初始化与安装:src/devops/k8s/install.sh、deploy-master.sh
  • 入口网关:src/devops/k8s/baremetal-nginx-ingress.yaml
  • 基础设施命名空间与密钥:src/devops/k8s/service/base/namespace.yaml、secret.yaml、config.yaml
  • 设备Mate相关服务暴露:src/devops/k8s/service/expose-port/lemes-service-dm-*.yaml

图表来源

章节来源

核心组件

  • 集群初始化与网络插件
    • 通过install.sh完成内核模块加载、防火墙关闭、SELinux禁用、swap关闭、Docker与kubelet安装、拉取所需镜像等基础准备。
    • deploy-master.sh负责master节点初始化、设置NodePort端口范围、安装flannel网络插件与Nginx Ingress控制器。
  • 命名空间与基础配置
    • namespace.yaml定义基础命名空间,用于隔离基础设施与业务资源。
    • secret.yaml提供TLS证书密文,供Ingress或服务间通信使用。
    • config.yaml集中存放服务运行所需的配置项(如数据库连接、时区、JVM参数等)。
  • 服务暴露与入口网关
    • DeviceMate相关服务通过NodePort类型的Service对外暴露。
    • Nginx Ingress控制器作为统一入口,负责路由与负载均衡。

章节来源

架构总览

DeviceMate在Kubernetes中的部署采用“命名空间隔离 + Ingress统一入口 + NodePort服务暴露”的模式。集群初始化后,先部署基础设施(命名空间、密钥、配置),再部署各业务服务并通过NodePort对外提供访问;Ingress控制器负责域名到后端Service的路由转发。

图表来源

详细组件分析

集群初始化与部署流程

  • 初始化步骤要点
    • 系统级优化:关闭防火墙、禁用SELinux、关闭swap、启用桥接流量转发、开启ipvs内核模块。
    • 容器与控制面:安装Docker并配置私有仓库与镜像根目录;安装kubelet、kubeadm、kubectl并启动kubelet。
    • 拉取镜像:使用阿里云镜像仓库拉取所需镜像,确保后续组件可用。
  • Master节点部署
    • 初始化集群,指定service与pod网段;生成管理员kubeconfig;设置NodePort端口范围至1-65535。
    • 自动安装flannel网络插件与Nginx Ingress控制器。
  • 节点加入
    • 在其他节点执行master输出的加入命令,完成工作节点加入。

图表来源

章节来源

命名空间与基础配置

  • 命名空间
    • 通过namespace.yaml创建隔离的命名空间,建议将基础设施与业务服务分别置于不同命名空间,便于权限与资源管理。
  • 密钥与证书
    • secret.yaml提供TLS密钥与证书,可用于Ingress或服务间加密通信。
  • 配置参数
    • config.yaml集中管理数据库连接、时区、JVM参数等,便于容器内应用读取。

图表来源

章节来源

服务暴露与入口网关

  • NodePort服务
    • DeviceMate的dm-common、dm-device、dm-store、dm-workflow通过NodePort类型Service对外暴露,端口分别为32055~32058。
  • Nginx Ingress
    • 通过baremetal-nginx-ingress.yaml部署Ingress控制器,使用NodePort 80/443对外提供HTTP/HTTPS接入。
    • 控制器具备健康检查探针、资源请求与限制、准入校验Webhook等能力。

图表来源

章节来源

Pod调度策略、副本管理与滚动更新

  • 调度策略
    • 可通过节点选择器、污点与容忍、亲和性/反亲和性等实现跨节点分布与隔离。
  • 副本管理
    • 使用Deployment定义replicas数量,结合就绪探针保障滚动更新期间的流量切换。
  • 滚动更新
    • 建议采用RollingUpdate策略,设置最大不可用与最大扩容数,确保更新过程平滑。

说明:上述策略为通用实践,具体参数需在Deployment清单中配置。

存储卷、持久化与备份

  • 存储卷
    • 对需要持久化的组件(如数据库、配置中心、文件存储)可挂载PersistentVolume(如NFS、本地盘)。
  • 持久化存储
    • 建议为状态类服务配置PVC与StorageClass,确保数据在节点故障后可恢复。
  • 备份方案
    • 数据库层建议使用逻辑备份或快照;对象存储可采用定期导出与异地复制。

说明:仓库未提供具体PVC/StorageClass配置,上述为通用建议。

网络策略、安全策略与服务发现

  • 网络策略
    • 通过NetworkPolicy限制入站/出站流量,仅放行必要的服务间通信端口。
  • 安全策略
    • 使用RBAC最小权限原则;Secret与ConfigMap分离敏感与非敏感配置;启用Pod安全上下文限制特权容器。
  • 服务发现
    • 通过ClusterIP Service与DNS名称实现服务间发现;Ingress负责外部入口。

说明:仓库未提供NetworkPolicy与RBAC示例,上述为通用建议。

监控、日志聚合与性能调优

  • 监控
    • 建议部署Prometheus/Grafana与APM(如SkyWalking),采集CPU/内存/网络/延迟指标。
  • 日志
    • 使用集中式日志(如ELK/EFK)收集容器标准输出与应用日志,设置保留周期与索引策略。
  • 性能调优
    • 调整JVM参数(已在ConfigMap中体现)、内核参数、Ingress并发与超时配置、Pod资源请求与限制。

说明:仓库未提供监控与日志配置,上述为通用建议。

依赖关系分析

DeviceMate服务与基础设施之间的依赖关系如下:

图表来源

章节来源

性能考虑

  • 网络与Ingress
    • 合理设置Ingress超时与缓冲区大小;启用连接复用与压缩。
  • 应用与JVM
    • 根据容器资源限制调整JVM堆比例与GC参数;避免过度分配导致OOM。
  • 节点与调度
    • 将有状态服务与无状态服务分节点池;使用亲和性避免热点。
  • 存储
    • 为高IO组件选择SSD或本地盘;合理设置PVC容量与回收策略。

故障排查指南

  • 集群初始化失败
    • 检查防火墙、SELinux、swap是否已关闭;确认Docker与kubelet已正确安装并启动。
  • Ingress无法访问
    • 检查Ingress控制器Pod状态与日志;确认Service端口与Ingress路由匹配;验证NodePort可达性。
  • 服务无法发现
    • 检查Service选择器标签与Pod标签一致;确认命名空间正确。
  • TLS证书问题
    • 检查Secret中的证书与密钥格式;确认域名与证书CN一致。

章节来源

结论

本指南基于仓库现有Kubernetes配置与脚本,给出了DeviceMate在Kubernetes上的部署蓝图与实施步骤。建议在生产环境中补充网络策略、安全策略、监控与日志体系,并结合业务流量特征对Ingress与应用参数进行精细化调优,以获得稳定、可观测、可扩展的云原生平台。

附录

  • 快速部署清单
    • 执行集群初始化脚本与master部署脚本,安装flannel与Nginx Ingress。
    • 应用命名空间、密钥与配置,再部署各DeviceMate服务的NodePort Service。
    • 通过Ingress统一接入并配置域名与证书。