在容器中部署数据建模引擎运行SDK
容器是操作系统内核自带能力,是基于Linux内核实现的轻量级高性能资源隔离机制,可以帮助应用程序快速、可靠、一致地部署,不受部署环境的影响。
本文指导您将工业数字模型驱动引擎(Industrial Digital Model Engine,简称iDME)的数据建模引擎运行SDK部署到容器中。您不需要改动任何代码和架构,仅需将整体数据建模引擎运行SDK构建为镜像,即可部署到容器中。
准备事项
- 创建一个配置文件,添加对应资源的配置信息。例如“application.properties”。
如下内容以数据建模引擎运行SDK通用配置和部分数据建模引擎运行SDK自定义配置为例。
# 数据库配置 RDS_IP=127.0.0.1 RDS_PORT=5432 RDS_PASSWORD=admin RDS_TYPE=postgresql RDS_NAME=root RDS_DATABASE=test spring.datasource.url=jdbc:postgresql://${RDS_IP}:${RDS_PORT}/${RDS_DATABASE}?sslmode=require&stringtype=unspecified rdm.hibernate.dialect=com.huawei.it.rdm.configuration.XdmPostgresqlDialect spring.datasource.driverClassName=org.postgresql.Driver rdm.dbType=postgresql # Redis配置 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=admin REDIS_PORT=6379 REDIS_TYPE=SINGLE # 公共信息配置 TENANT_DOMAIN_ID=domainid TENANT_ID=application_id APP_NAME=TestApp APP_IDENTIFIER=application_id PAAS_APP_NAME=testapp PROJECT_ID=projectid RES_AK=testak RES_SK=testsk server.ssl.enabled=false olc.config.path=/root/deploytest/olc xdm.delegate.bean.inject=false server.servlet.context-path=/rdm_testapp_app/services/ java.compile.lib.path=/root/deploytest/lib # MongoDB配置 mongodb.init=true MONGODB_URI=mongodb://rwuser:admin@127.0.0.1:8635/sitautotest?authSource=admin MONGODB_DATABASE=test # Kafka配置 kafka.init=true KAFKA_BOOTSTAP_SERVERS=127.0.0.1:9094, 127.0.0.2:9094 # OBS配置 OBS_END_POINT=https://obs.cn-north-4.myhuaweicloud.com BUCKET_NAME=test # IAM配置 ssf.sysmgr.sessionfilter.loginUrl=https://auth.huaweicloud.com/authui/login.action?service=http://127.0.0.1:8003/rdm_testapp_app/services/v1/cas/login ssf.login.loginSuccessRedirectUrl=http://127.0.0.1:8003/rdm_testapp_app/services/index.html ssf.login.cas.serviceUrl=http://127.0.0.1:8003/rdm_sitautotest_app/services/v1/cas/login ssf.login.logoutUri=https://auth.huaweicloud.com/authui/logout ssf.login.cas.validateUrl=https://auth.huaweicloud.com/authui/serviceValidate IAM_END_POINT=https://iam.cn-north-4.myhuaweicloud.com IAM_LOGIN_ENDPOINT=https://auth.huaweicloud.com # Elasticsearch配置 ES_USERNAME=admin ES_URL=127.0.01:9200 ES_PASSWORD=admin ES_PORT=9200 ES_SCHEMA=http ES_SYNC_ENABLE=true # DEW(KMS)配置 KMS_END_POINT=https://kms.cn-north-4.myhuaweicloud.com KMS_KEY_ID=keyid # AOM配置 AOM_END_POINT=https://aom.cn-north-4.myhuaweicloud.com AOM_CLUSTER_ID=clusterid # License配置 xdm.license.licenseFile=/root/deploytest/test.dat xdm.license.keyFile=/root/deploytest/testKeyFile.txt
- 创建一个脚本文件,用于启动应用运行态SDK。例如“startxdm.bash”。
# 指定启动类 START_CLASS=com.huawei.microservice.rdm.RdmApplication # 指定启动类所在路径,为lib目录下 LOAD_CLASSPATH=./lib/*:./ BIND_ADDRESS=`hostname -I` # 从部署包中解压出olc配置文件 jar xvf ./lib/microserviceTemplate.app-1.0.0-SNAPSHOT-small.jar olc # 执行java命令,以配置文件application.properties启动服务,并把日志输入到当前目录下的xdm.log中 sh -c "java -Xms8g -Xmx8g -Dconfig.file=/root/deploytest/application.properties -classpath $LOAD_CLASSPATH $START_CLASS --server.address=${BIND_ADDRESS} -Diit.test=true >xdm.log 2>&1 &"
- 获取数据建模引擎运行SDK包,具体操作请参见获取数据建模引擎SDK。
- 已获取基础容器镜像,且该镜像已安装JDK 1.8。
部署数据建模引擎运行SDK
- 使用SSH方式登录机器。
- 执行如下命令,检查是否安装docker。
docker -v
- 如果已安装docker,请执行下一步。
- 如果未安装docker,请安装。详细操作请参见Docker-CE。
- 基于准备事项中已获取的基础容器镜像,并根据实际部署环境和业务场景,编写一个Dockerfile文件。
Dockerfile文件的填写示例如下:
FROM 基础容器镜像 USER root COPY /构建机器目录/SDK包/容器路径/xxx-sdk-xdm.tar COPY /构建机器目录/startxdm.bash/容器路径/startxdm.bash COPY /构建机器目录/许可证文件/容器路径/许可证文件 USER service:servicegroup CMD ["/容器路径/startxdm.bash"]
其中:
- 加粗的字段需要根据实际值填写。
- FROM语句:声明基础容器镜像的来源。
- USER语句:指定运行容器时的用户名。
- COPY语句:将本地机器目录下的文件复制到容器目录下。
- CMD语句:指定启动容器时执行的命令。
- 执行如下命令,构建镜像。
docker build -t <镜像名称>:<版本名称> .
- 执行如下命令,将准备事项中创建的配置文件(application.properties)映射到容器。
docker run --env-file=application.properties
- 根据实际情况,选择如下方式,验证是否启动成功。
- 方式一:查看容器日志
执行如下命令,查看容器日志。
docker logs
显示结果为类似如下信息,则说明启动成功。
Started RdmApplication in xxx.xxx seconds (JVM running for xxx.xxx)
- 方式二:调用指定接口
约等待2分钟,调用如下健康检查接口,查询服务是否正常启动。
http://{容器的IP地址}:{SDK服务的端口号}/rdm_{应用的唯一标识}_app/services/v1/health
例如:
http://127.0.0.1:8003/rdm_123456_app/services/v1/health
显示结果为如下信息,则说明启动成功。
{"result":"SUCCESS","data":["success"],"errors":[]}
- 方式一:查看容器日志
异常处理
问题描述
服务正常启动,但调用任何接口都返回如下错误信息:
{ "result": "FAIL", "timestamp": "2024-12-04 10:33:04", "error_code": "LIC.60007023", "error_msg": "No access rights. Please check license config or file.", "trance_id": null }
可能原因
此错误信息表示当前SDK未正常运行,无法提供服务。可能存在如下原因:
- 当前SDK服务的免费使用时间已到期。
- 当前SDK服务未配置License。
- 当前SDK服务配置的License已过期。
- 当前SDK服务配置License的信息填写不正确。
处理步骤