有边车升级为无边车指引文档
视频会议:
一、路由信息迁移规范
边车路由提取
-
服务访问
在服务里面找到 redis-stack,访问8001对应的NodePort,打开redisInsight,查询 *statestore||app_keykubectl -n {namespace} get svc redis-stack # 确认NodePort端口(默认8001)
-
数据查询
通过RedisInsight执行查询指令:
SCAN 0 MATCH *statestore||app_key* # 获取全量路由键
-
格式转换
使用平台提供的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
此外还需要继续为所有service新增一个label:iidp: iidp,因为只有包含这个label的service才会被网关和引擎识别发现。
四、网关部署验证
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
-
前置操作
kubectl scale deployment {service} --replicas=0
-
配置清理
删除旧版dapr注解:
annotations: - dapr.io/enabled: "false" # 禁用遗留sidecar
继续编辑就绪探针和存活探针时延时长等,并指向pod自身。然后启动,观察输出日志,当看到大的 IIDP logo时,说明启动成功。
预祝升级顺利!