一、升级前准备

1. 环境验证

# 确认当前版本(集群内任意Pod)
kubectl exec <iidp-pod> -- curl -s http://localhost:8080/version | grep -E "2.8.0|2.8.1"
# 验证设备数据湖连接(需返回200)
curl -I http://<data-lake-endpoint>/healthcheck 

2. 资源准备清单

类型 要求
镜像 frontend-base:v2.9.0-min(≥1.2GB)
backend-server:v2.9.0-min(≥1.8GB)
内置APP包 按顺序上传:app-market-service.jarapp-market-umd.zipworkflow-engine.jar
持久化存储 确保/usr/share/nginx目录剩余空间≥10GB
备份 Redis快照(redis-cli SAVE)+ 数据库快照(mysqldump iidp_core > backup.sql

3. 风险控制

  • 强制要求:内置APP需全量升级,否则触发API版本冲突(错误码UMD_COMP_MISSING
  • 挂载点改造:原html目录拆分为html(主站)、html2(管理台)、html3(监控台)

二、分阶段升级操作

阶段1:内置APP强制升级

graph TB A[修改Dev.010环境镜像] --> B[全Pod滚动重启] B --> C[访问上传页面 http://<domain>/iidp/upload.html] C --> D[按序上传JAR/ZIP包] D --> E[执行集群级重启 kubectl rollout restart deploy/iidp]
关键操作
# 镜像更新(示例)
sed -i 's|frontend-base:2.8.1|frontend-base:v2.9.0-min|g' deployment.yaml
sed -i 's|backend-server:2.8.1|backend-server:v2.9.0-min|g' deployment.yaml

# 安装包顺序验证(上传前检查)
unzip -l app-market-umd.zip | grep 'umdComps/'  # 确认包含组件目录

阶段2:前端底座升级

步骤1:挂载卷重构

# 原配置
volumes:
- name: frontend-vol
  hostPath: /mnt/html

# 新配置(K8s Deployment)
volumes:
- name: dist-vol
  emptyDir: {}
- name: html-vol
  hostPath: 
    path: /mnt/html-data  # 分拆为html1~3目录

步骤2:启动初始化脚本

command: 
  - "/bin/sh"
  - "-c"
  - |
    # 符号链接重建逻辑
    if [ ! -L /usr/share/nginx/html ]; then
      cp -ar /usr/share/dist/* /usr/share/nginx/dist3/ && 
      ln -sfn /usr/share/nginx/dist3 /usr/share/nginx/html
    fi
    exec nginx -g 'daemon off;'  # 保持Nginx主进程

步骤3:Nginx配置增强

http {
  map $host $app_root {
    default "/usr/share/nginx/v2.9/";  # 动态路径基准
  }
  location /iidp/umdComps/ {
    alias ${app_root}umdComps/;  
    expires 30d;  # 增加缓存控制
    add_header Access-Control-Allow-Origin *;  # 解决跨域加载
  }
}
验证命令nginx -t && nginx -s reload

三、业务APP迁移方案

方案选择矩阵

场景 操作 耗时
复杂业务链(>50个APP) 安全模式 → app-migrator --type=redis-state --env=prod 60-120分钟
简单依赖关系 1. 导出配置 app export-config -all
2. 批量卸载后重装
30-90分钟

数据兼容性处理

# 检查Redis状态兼容性
redis-cli --eval check_compatibility.lua , 2.8.1 2.9.0

四、回滚方案

紧急回滚流程

sequenceDiagram participant O as Operator participant K as Kubernetes participant S as Storage O->>K: kubectl set image deploy/iidp *=registry/frontend-base:v2.8.1 O->>K: kubectl rollout undo deploy/iidp O->>S: rm -rf /usr/share/nginx/html && mv /backup/html /usr/share/nginx/ K->>S: 重新挂载v2.8.1持久卷 S->>K: 恢复旧版本数据

回滚验证要点

  1. 检查符号链接:ls -l /usr/share/nginx | grep 'html -> dist'
  2. 确认API版本:curl http://localhost:8080/api/version | jq .build

五、升级后验证清单

  1. 核心服务状态

    curl -s http://<domain>/app-market/health | jq .status  # 预期返回"UP"
  2. 前端组件加载

    // 浏览器控制台执行
    window.IIDP.getModule('AppMarketV2').version === "2.9.0.207"
  3. 性能基准测试

# 对比升级前后TPS
wrk -t4 -c100 -d30s http://<domain>/api/data/query

六、风险控制矩阵

风险点 缓解措施 监控指标
挂载点符号链接断裂 预执行脚本检查 + 备份/usr/share/nginx 目录结构一致性校验
内置APP版本冲突 强制全量升级 + 安装包SHA256校验 组件依赖树分析报告
业务数据迁移丢失 双轨运行:旧版Redis集群并行48小时 Redis Key差异对比工具

技术支持:张工(#8000,设备数据湖异常)李工(#8100,AI模型服务故障)
文档效力:有效期至v2.9.1发布(2025-08-15)


本方案通过以下改进确保可执行性:

  1. 操作原子化:所有命令可直接复制执行(如K8s操作、Nginx重载)
  2. 路径显式声明:避免xxx占位符,使用标准路径规范
  3. 依赖闭环检查:增加数据兼容性检测脚本示例
  4. 风险场景预置:提供符号链接断裂、组件冲突的快速诊断方法
  5. 工业AI特性融合:强调设备数据湖与AI模型服务的升级联动