☰
Current Page
Main Menu
Home
Home
Editing
有边车升级为无边车指引
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
# 有边车升级为无边车指引文档 --- 视频会议: <video width="100%" height="100%" src="http://192.168.175.198:10003/iidpminio/distributed-v2/有边车升级为无边车指引文档会议视频.mp4" controls="true" /> ## 一、路由信息迁移规范 ### 边车路由提取 1. **服务访问** ```bash kubectl -n {namespace} get svc redis-stack # 确认NodePort端口(默认8001) ``` 在服务里面找到 redis-stack,访问8001对应的NodePort,打开redisInsight,查询 *statestore||app_key [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/1.png]] 2. **数据查询** 通过RedisInsight执行查询指令: ```redis SCAN 0 MATCH *statestore||app_key* # 获取全量路由键 ``` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/2.png]] 3. **格式转换** 使用平台提供的`route-converter.exe` [[下载|http://iidp.chinasie.com:9999/iidpminio/distributed-v2/route-converter.exe]] 转换工具进行数据迁移: 将复制的value使用平台提供的工具来转换出新架构需要的路由信息。 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/3.png]] 转换结果是yaml格式,第一段是服务名称,服务名称下面的包含两个字段,分别是服务依赖的app和服务安装了的app。 --- ## 二、配置管理标准化 ### 2.1 命名规范重构 | 原配置项名称 | 新标准配置项 | 变更类型 | |---------------------------|------------------|----------------| | snest-nginx,或其他 | iidp-nginx | 重建 | | snest-app,或其他 | iidp-app | 配置迁移 | 如下图,重点关注app和nginx配置,比如snest-ngxin和sneset-app,其他项目可能是iidp-nginx和iidp-app。由于平台后面统一调整成了iidp,所以所有的配置一律都使用 iidp-nginx 和 iidp-app 命名,不是这个配置名称的也统一需要修改或者重建。 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/4.png]] [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/5.png]] [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/6.png]] [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/7.png]] ### 2.2 网关配置新增(gw.yaml) 由于新的模式增加了网关,所以需要新增一个gw.yaml配置,注意调整命名空间。 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/8.png]] ```yaml #gw 网关 配置文件 model: "release" # debug release test port: "8060" namespace: "mijiuye" # 命名空间,根据实际情况填写,不填写则默认是pod所在命名空间 labelSelector: "iidp=iidp" apiServerHost: "" kubeConfigFile: "" resyncPeriod: 0 # 重新同步的时间间隔,单位为秒 syncRateLimit: 0 # 速率限制 shutdownGracePeriod: 30 # 关闭服务时的宽限期,单位为秒 useUnixDomainSocket: true unixDomainSocketPath: "/socket/gw-iidp.socket" rateLimiter: enable: false # 是否启用速率限制 rate: 2000 # 速率限制,单位为 次/秒 per: 1s # 速率限制的时间窗口,默认是1s slack: 10 # 速率限制的松弛度 hystrixSettings: enable: false defaultTimeout: 10000 # DefaultTimeout is how long to wait for command to complete, in milliseconds defaultMaxConcurrent: 1000 # DefaultMaxConcurrent is how many commands of the same type can run at the same time defaultVolumeThreshold: 20 # DefaultVolumeThreshold is the minimum number of requests needed before a circuit can be tripped due to health defaultSleepWindow: 5000 # DefaultSleepWindow is how long, in milliseconds, to wait after a circuit opens before testing for recovery defaultErrorPercentThreshold: 50 # DefaultErrorPercentThreshold causes circuits to open once the rolling measure of errors exceeds this percent of requests buildInApps: handler: "mijiuye/iidp-app" # * 代表全部,或者指定handler来处理,比如 meta-test/iidp-app,namespace/service apps: [ base-cache.master, base-datasource.master, base.master, base_log.master, dict.master, file.master, iidp-user-prefer.master, interface.master, mail.master, sie-iidp-i18n.master, sie-snest-config.master, sie-snest-tenant.master, workflow-extend.master, workflow.master, ] ``` ### 2.3 应用配置迁移 继续新增iidp-app配置文件,可以直接复制原来的,但是注意metadata.name [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/9.png]] 编辑配置,添加下面的配置项 ``` properties # 安装镜像版本 app.install.image=xxxx engine.store.meta.mode=CLOUD # DISTRIBUTED_V2 模式 engine.run.mode=DISTRIBUTED_V2 ``` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/10.png]] --- 至此整个配置完毕。 ## 三、service更新流程 前已经获取了sidecar的路由信息,现在需要将这些路由信息重新写入到新模式的分布式架构中,也就是service的yaml文件中 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/3.png]] 根据生成的yaml,我们依次修改对应 service 的yaml,这里举例路由yaml如下: ```yaml iidp: iidp.com/dependencies: "" iidp.com/installedApps: newSdkApp.master,oppmApp.master,sf-auto-interface-app.master,logo.master,i18n-frontend.master,interface-frontend.master iiot: iidp.com/dependencies: iiot_apiAdapter.master,iiot_base.master,iiot_thing.master,iiot_task_scheduler.master,net.master,iiot_db_management.master,iiot_store_management.master,iiot_messagepush.master,iiot_messagepolicy.master,iiot_alarm.master,iiot_ruleengine.master iidp.com/installedApps: iiot_base.master,iiot_project.master,iiot_access.master,iiot_alarm.master,iiot_device_scheduler.master,iiot_keylog.master,iiot_messagepolicy.master,iiot_messagepolicy_alarm.master,iiot_messagepolicy_ruleengine.master,iiot_messagepolicy_store_management.master,iiot_messagepush.master,iiot_messagetransfer.master,iiot_program.master,iiot_store.master,iiot_store_management.master,iiot_task_scheduler.master,iiot_thing.master,iiot_apiAdapter.master,iiot_db_management.master mbm: iidp.com/dependencies: mbm-center-aps-ms.master,mbm-component.master,mbm-main.master,mbm-site-wms-strategy.master,mbm-site-wms-stock.master,mbm-common-base.master iidp.com/installedApps: mbm-center-aps-mrp.master,mbm-center-aps-ms.master,mbm-component.master,mbm-main.master,mbm-site-aps-as.master,mbm-site-wms.master,mbm-site-wms-io.master,mbm-site-wms-stock.master,mbm-site-wms-strategy.master,mbm-site-wms-wh.master,mbm-common-base.master,mbm-edo.master,sie-iidp-wizard.master,filepreview.master,sie-iidp-file.master smi: iidp.com/dependencies: smi-base-common.master,smi-base-datasource.master,smi-base-asset.master,smi-ida-base.master iidp.com/installedApps: smi-base-asset.master,smi-base-common.master,smi-base-data-permission.master,smi-base-datasource.master,smi-base-dispatch.master,smi-base-license.master,smi-base-monitor.master,smi-base-notice.master,smi-base-testpoint.master,smi-ida-alarm.master,smi-ida-base.master,smi-ida-broadcast.master,smi-ida-chart.master,smi-ida-comcanvas.master,smi-ida-common.master,smi-ida-design.master,smi-ida-newscene.master,smi-ida-problem.master,smi-ida-report.master ``` 将对应的配置信息写入到service 的yaml 文件中,注意对于master节点,也就是iidp-app,需要为它的service yaml添加一个占位的app防止被卸载,可以命名为 _reserved.tag [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/11.png]] 此外还需要继续为所有service新增一个label:iidp: iidp,因为只有包含这个label的service才会被网关和引擎识别发现。 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/iidp-label.png]] --- ## 四、网关部署验证 ### 4.1 pod更新 先把nginx pod数量减0停掉nginx,开始编辑配置 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/12.png]] 挂载iidp-nginx下面的gw.yaml [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/13.png]] 挂载iidp-app下面的application-dev.properties [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/14.png]] Ngxin和gw同时挂载/socket,用于uds通信 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/15.png]] 为了提高uds性能,继续编辑yaml,设置为基于内存的临时存储 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/16.png]] 启动nginx并观察容器状态 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/17.png]] ### 4.2 存储优化配置 ```yaml volumes: - name: uds-socket emptyDir: medium: Memory # 启用内存存储提升性能 sizeLimit: 1Gi ``` ### 4.3 配置service account 网关以及业务容器都需要配置对应的service account 赋予权限来操作k8s 资源。 如下图需要将 `serviceAccountName` `serviceAccount` 的值由`default`改成 `iidp-user` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/serviceaccount.png]] ### 4.4 连通性验证 ```bash # 路由信息验证 curl -sS localhost:8060/route # 获取app以及其所在service的信息 ``` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/18.png]] ```bash # 服务映射检查 curl -sS localhost:8060/svc2app # 获取service上已安装的app ``` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/19.png]] ```bash # 端点健康状态 curl -sS localhost:8060/endpoints # 获取服务的ip信息 ``` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/20.png]] 到此就可以确定nginx和gw安装完成,且能够获取app安装的路由信息。 --- ## 五、业务POD迁移 *<font color=red>注意</font>*:在迁移业务pod之前请务必确保 nginx 和 iidp-app 这两个服务能够正确访问且迁移正确,才继续迁移业务pod。 主要是为了防止迁移过程中出现错误,导致业务pod不好回退。 同样地先将pod数量减为0,停止服务,并编辑配置。 首先配置 engine.model2ddl.mode=NONE 删除sidecar 容器,修改iidp的镜像为对应新模式分布式的镜像,调整configmap为iidp-app,并添加环境变量 SVC_NAME 为对应的service name 1. **前置操作** ```bash kubectl scale deployment {service} --replicas=0 ``` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/21.png]] [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/env.png]] 2. **配置清理** 删除旧版dapr注解: ```yaml annotations: - dapr.io/enabled: "false" # 禁用遗留sidecar ``` [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/22.png]] 继续编辑就绪探针和存活探针时延时长等,并指向pod自身。然后启动,观察输出日志,当看到大的 IIDP logo时,说明启动成功。 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/logo.png]] 最后再检查业务服务service与该service上面安装的app是否跟原来一致。 [[http://iidp.chinasie.com:9999/iidpminio/distributed-v2/19.png]] 预祝升级顺利!
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel