更新时间:2024-12-23 GMT+08:00
分享

在容器中部署数据建模引擎运行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

  1. 使用SSH方式登录机器。
  2. 执行如下命令,检查是否安装docker。

    docker -v
    • 如果已安装docker,请执行下一步。
    • 如果未安装docker,请安装。详细操作请参见Docker-CE

  3. 基于准备事项中已获取的基础容器镜像,并根据实际部署环境和业务场景,编写一个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语句:指定启动容器时执行的命令。

  4. 执行如下命令,构建镜像。

    docker build -t <镜像名称>:<版本名称> .

  5. 执行如下命令,将准备事项中创建的配置文件(application.properties)映射到容器。

    docker run --env-file=application.properties

  6. 根据实际情况,选择如下方式,验证是否启动成功。

    • 方式一:查看容器日志

      执行如下命令,查看容器日志。

      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的信息填写不正确。

处理步骤

  1. 在容器环境中,调用如下接口,获取容器的ESN。
    http://{容器的IP地址}:{SDK服务的端口号}/rdm_{应用的唯一标识}_app/services/rdm/basic/api/v1/runtime/sdk/esn

    记录显示结果中的“data”信息。

    {
        "result": "SUCCESS",
        "data": [
            "ESN"
        ],
        "errors": []
    }
  2. 1记录的“data”信息提供给运维工程师,获取License文件。
  3. 在配置文件(例如“application.properties”)中添加License配置信息。

相关文档