一、升级前准备
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.jar → app-market-umd.zip → workflow-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: 恢复旧版本数据
回滚验证要点:
- 检查符号链接:
ls -l /usr/share/nginx | grep 'html -> dist'
- 确认API版本:
curl http://localhost:8080/api/version | jq .build
五、升级后验证清单
-
核心服务状态
curl -s http://<domain>/app-market/health | jq .status # 预期返回"UP"
-
前端组件加载
// 浏览器控制台执行 window.IIDP.getModule('AppMarketV2').version === "2.9.0.207"
-
性能基准测试
# 对比升级前后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)
本方案通过以下改进确保可执行性:
- 操作原子化:所有命令可直接复制执行(如K8s操作、Nginx重载)
-
路径显式声明:避免
xxx
占位符,使用标准路径规范 - 依赖闭环检查:增加数据兼容性检测脚本示例
- 风险场景预置:提供符号链接断裂、组件冲突的快速诊断方法
- 工业AI特性融合:强调设备数据湖与AI模型服务的升级联动