有边车升级为无边车指引文档


视频会议:

一、路由信息迁移规范

边车路由提取

  1. 服务访问

    kubectl -n {namespace} get svc redis-stack  # 确认NodePort端口(默认8001)
    在服务里面找到 redis-stack,访问8001对应的NodePort,打开redisInsight,查询 *statestore||app_key

  2. 数据查询
    通过RedisInsight执行查询指令:
    SCAN 0 MATCH *statestore||app_key*  # 获取全量路由键
  3. 格式转换
    使用平台提供的route-converter.exe 下载 转换工具进行数据迁移:
    将复制的value使用平台提供的工具来转换出新架构需要的路由信息。

    转换结果是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 命名,不是这个配置名称的也统一需要修改或者重建。

2.2 网关配置新增(gw.yaml)

由于新的模式增加了网关,所以需要新增一个gw.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

编辑配置,添加下面的配置项

# 安装镜像版本
app.install.image=xxxx
engine.store.meta.mode=CLOUD
# DISTRIBUTED_V2 模式
engine.run.mode=DISTRIBUTED_V2


至此整个配置完毕。

三、service更新流程

前已经获取了sidecar的路由信息,现在需要将这些路由信息重新写入到新模式的分布式架构中,也就是service的yaml文件中

根据生成的yaml,我们依次修改对应 service 的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


四、网关部署验证

4.1 pod更新

先把nginx pod数量减0停掉nginx,开始编辑配置

挂载iidp-nginx下面的gw.yaml

挂载iidp-app下面的application-dev.properties

Ngxin和gw同时挂载/socket,用于uds通信

为了提高uds性能,继续编辑yaml,设置为基于内存的临时存储

启动nginx并观察容器状态

4.2 存储优化配置

volumes:
  - name: uds-socket
    emptyDir: 
      medium: Memory  # 启用内存存储提升性能
      sizeLimit: 1Gi

4.3 配置service account

网关以及业务容器都需要配置对应的service account 赋予权限来操作k8s 资源。
如下图需要将 serviceAccountName serviceAccount 的值由default改成 iidp-user

4.4 连通性验证

# 路由信息验证
curl -sS localhost:8060/route  # 获取app以及其所在service的信息

# 服务映射检查
curl -sS localhost:8060/svc2app # 获取service上已安装的app

# 端点健康状态
curl -sS localhost:8060/endpoints # 获取服务的ip信息

到此就可以确定nginx和gw安装完成,且能够获取app安装的路由信息。


五、业务POD迁移

注意:在迁移业务pod之前请务必确保 nginx 和 iidp-app 这两个服务能够正确访问且迁移正确,才继续迁移业务pod。 主要是为了防止迁移过程中出现错误,导致业务pod不好回退。

同样地先将pod数量减为0,停止服务,并编辑配置。 首先配置 engine.model2ddl.mode=NONE 删除sidecar 容器,修改iidp的镜像为对应新模式分布式的镜像,调整configmap为iidp-app,并添加环境变量 SVC_NAME 为对应的service name

  1. 前置操作

    kubectl scale deployment {service} --replicas=0

  2. 配置清理
    删除旧版dapr注解:

    annotations:
      - dapr.io/enabled: "false"  # 禁用遗留sidecar

继续编辑探针,指向pod自身。然后启动,观察输出日志,当看到大的 IIDP logo时,说明启动成功。

预祝升级顺利!