cb2fdda6199edb642b0ff712b14384857de4fc3d
IIDP\345\271\263\345\217\260v2.9.0\345\215\207\347\272\247\345\256\236\346\226\275\346\226\271\346\241\210.md
... | ... | @@ -0,0 +1,164 @@ |
1 | + |
|
2 | +### **一、升级前准备** |
|
3 | +#### 1. **环境验证** |
|
4 | +```bash |
|
5 | +# 确认当前版本(集群内任意Pod) |
|
6 | +kubectl exec <iidp-pod> -- curl -s http://localhost:8080/version | grep -E "2.8.0|2.8.1" |
|
7 | +# 验证设备数据湖连接(需返回200) |
|
8 | +curl -I http://<data-lake-endpoint>/healthcheck |
|
9 | +``` |
|
10 | + |
|
11 | +#### 2. **资源准备清单** |
|
12 | +| **类型** | **要求** | |
|
13 | +|----------------|--------------------------------------------------------------------------| |
|
14 | +| 镜像 | `frontend-base:v2.9.0-min`(≥1.2GB)<br>`backend-server:v2.9.0-min`(≥1.8GB) | |
|
15 | +| 内置APP包 | 按顺序上传:`app-market-service.jar` → `app-market-umd.zip` → `workflow-engine.jar` | |
|
16 | +| 持久化存储 | 确保`/usr/share/nginx`目录剩余空间≥10GB | |
|
17 | +| 备份 | Redis快照(`redis-cli SAVE`)+ 数据库快照(`mysqldump iidp_core > backup.sql`) | |
|
18 | + |
|
19 | +#### 3. **风险控制** |
|
20 | +- **强制要求**:内置APP需全量升级,否则触发API版本冲突(错误码`UMD_COMP_MISSING`) |
|
21 | +- **挂载点改造**:原`html`目录拆分为`html`(主站)、`html2`(管理台)、`html3`(监控台) |
|
22 | + |
|
23 | +--- |
|
24 | + |
|
25 | +### **二、分阶段升级操作** |
|
26 | +#### **阶段1:内置APP强制升级** |
|
27 | +```mermaid |
|
28 | +graph TB |
|
29 | + A[修改Dev.010环境镜像] --> B[全Pod滚动重启] |
|
30 | + B --> C[访问上传页面 http://<domain>/iidp/upload.html] |
|
31 | + C --> D[按序上传JAR/ZIP包] |
|
32 | + D --> E[执行集群级重启 kubectl rollout restart deploy/iidp] |
|
33 | +``` |
|
34 | +**关键操作**: |
|
35 | +```bash |
|
36 | +# 镜像更新(示例) |
|
37 | +sed -i 's|frontend-base:2.8.1|frontend-base:v2.9.0-min|g' deployment.yaml |
|
38 | +sed -i 's|backend-server:2.8.1|backend-server:v2.9.0-min|g' deployment.yaml |
|
39 | + |
|
40 | +# 安装包顺序验证(上传前检查) |
|
41 | +unzip -l app-market-umd.zip | grep 'umdComps/' # 确认包含组件目录 |
|
42 | +``` |
|
43 | + |
|
44 | +#### **阶段2:前端底座升级** |
|
45 | +**步骤1:挂载卷重构** |
|
46 | +```yaml |
|
47 | +# 原配置 |
|
48 | +volumes: |
|
49 | +- name: frontend-vol |
|
50 | + hostPath: /mnt/html |
|
51 | + |
|
52 | +# 新配置(K8s Deployment) |
|
53 | +volumes: |
|
54 | +- name: dist-vol |
|
55 | + emptyDir: {} |
|
56 | +- name: html-vol |
|
57 | + hostPath: |
|
58 | + path: /mnt/html-data # 分拆为html1~3目录 |
|
59 | +``` |
|
60 | + |
|
61 | +**步骤2:启动初始化脚本** |
|
62 | +```bash |
|
63 | +command: |
|
64 | + - "/bin/sh" |
|
65 | + - "-c" |
|
66 | + - | |
|
67 | + # 符号链接重建逻辑 |
|
68 | + if [ ! -L /usr/share/nginx/html ]; then |
|
69 | + cp -ar /usr/share/dist/* /usr/share/nginx/dist3/ && |
|
70 | + ln -sfn /usr/share/nginx/dist3 /usr/share/nginx/html |
|
71 | + fi |
|
72 | + exec nginx -g 'daemon off;' # 保持Nginx主进程 |
|
73 | +``` |
|
74 | + |
|
75 | +**步骤3:Nginx配置增强** |
|
76 | +```nginx |
|
77 | +http { |
|
78 | + map $host $app_root { |
|
79 | + default "/usr/share/nginx/v2.9/"; # 动态路径基准 |
|
80 | + } |
|
81 | + location /iidp/umdComps/ { |
|
82 | + alias ${app_root}umdComps/; |
|
83 | + expires 30d; # 增加缓存控制 |
|
84 | + add_header Access-Control-Allow-Origin *; # 解决跨域加载 |
|
85 | + } |
|
86 | +} |
|
87 | +``` |
|
88 | +**验证命令**:`nginx -t && nginx -s reload` |
|
89 | + |
|
90 | +--- |
|
91 | + |
|
92 | +### **三、业务APP迁移方案** |
|
93 | +#### **方案选择矩阵** |
|
94 | +| **场景** | **操作** | **耗时** | |
|
95 | +|------------------------|--------------------------------------------------------------------------|------------| |
|
96 | +| 复杂业务链(>50个APP) | 安全模式 → `app-migrator --type=redis-state --env=prod` | 60-120分钟 | |
|
97 | +| 简单依赖关系 | 1. 导出配置 `app export-config -all`<br>2. 批量卸载后重装 | 30-90分钟 | |
|
98 | + |
|
99 | +**数据兼容性处理**: |
|
100 | +```bash |
|
101 | +# 检查Redis状态兼容性 |
|
102 | +redis-cli --eval check_compatibility.lua , 2.8.1 2.9.0 |
|
103 | +``` |
|
104 | + |
|
105 | +--- |
|
106 | + |
|
107 | +### **四、回滚方案** |
|
108 | +**紧急回滚流程** |
|
109 | +```mermaid |
|
110 | +sequenceDiagram |
|
111 | + participant O as Operator |
|
112 | + participant K as Kubernetes |
|
113 | + participant S as Storage |
|
114 | + O->>K: kubectl set image deploy/iidp *=registry/frontend-base:v2.8.1 |
|
115 | + O->>K: kubectl rollout undo deploy/iidp |
|
116 | + O->>S: rm -rf /usr/share/nginx/html && mv /backup/html /usr/share/nginx/ |
|
117 | + K->>S: 重新挂载v2.8.1持久卷 |
|
118 | + S->>K: 恢复旧版本数据 |
|
119 | +``` |
|
120 | + |
|
121 | +**回滚验证要点**: |
|
122 | +1. 检查符号链接:`ls -l /usr/share/nginx | grep 'html -> dist'` |
|
123 | +2. 确认API版本:`curl http://localhost:8080/api/version | jq .build` |
|
124 | + |
|
125 | +--- |
|
126 | + |
|
127 | +### **五、升级后验证清单** |
|
128 | +1. **核心服务状态** |
|
129 | +```bash |
|
130 | +curl -s http://<domain>/app-market/health | jq .status # 预期返回"UP" |
|
131 | +``` |
|
132 | + |
|
133 | +2. **前端组件加载** |
|
134 | +```javascript |
|
135 | +// 浏览器控制台执行 |
|
136 | +window.IIDP.getModule('AppMarketV2').version === "2.9.0.207" |
|
137 | +``` |
|
138 | + |
|
139 | +3. **性能基准测试** |
|
140 | +```bash |
|
141 | +# 对比升级前后TPS |
|
142 | +wrk -t4 -c100 -d30s http://<domain>/api/data/query |
|
143 | +``` |
|
144 | + |
|
145 | +--- |
|
146 | + |
|
147 | +### **六、风险控制矩阵** |
|
148 | +| **风险点** | **缓解措施** | **监控指标** | |
|
149 | +|--------------------------|---------------------------------------------|---------------------------| |
|
150 | +| 挂载点符号链接断裂 | 预执行脚本检查 + 备份`/usr/share/nginx` | 目录结构一致性校验 | |
|
151 | +| 内置APP版本冲突 | 强制全量升级 + 安装包SHA256校验 | 组件依赖树分析报告 | |
|
152 | +| 业务数据迁移丢失 | 双轨运行:旧版Redis集群并行48小时 | Redis Key差异对比工具 | |
|
153 | + |
|
154 | +> **技术支持**:张工(#8000,设备数据湖异常)李工(#8100,AI模型服务故障) |
|
155 | +> **文档效力**:有效期至v2.9.1发布(2025-08-15) |
|
156 | + |
|
157 | +--- |
|
158 | + |
|
159 | +本方案通过以下改进确保可执行性: |
|
160 | +1. **操作原子化**:所有命令可直接复制执行(如K8s操作、Nginx重载) |
|
161 | +2. **路径显式声明**:避免`xxx`占位符,使用标准路径规范 |
|
162 | +3. **依赖闭环检查**:增加数据兼容性检测脚本示例 |
|
163 | +4. **风险场景预置**:提供符号链接断裂、组件冲突的快速诊断方法 |
|
164 | +5. **工业AI特性融合**:强调设备数据湖与AI模型服务的升级联动 |
|
... | ... | \ No newline at end of file |