昇腾社区首页
中文
注册

制作MindIE MS服务端镜像

MindIE MS服务端可以采用镜像方式部署在Kubernetes的Deployment管理的容器中,使用MindIE Service将服务端口开放给外部,通过MindIE Service对外端口部署在物理机上的MindIE MS客户端与MindIE MS服务端进行交互。以下操作步骤指导您如何完成MindIE MS服务端镜像的制作。

容器部署MindIE MS方式与(不推荐)物理机部署MindIE MS服务端两种部署方式,二者选其一。

前提条件

请参见MindIE安装指南中的容器化部署和镜像制作 > 制作MindIE Server镜像章节完成待部署任务节点MindIE Server镜像的制作。

操作步骤

  1. 拉起容器并获取源文件。
    1. 通过以下命令拉起容器。
      docker run -it --name {用户定义容器名称} -d {镜像名称}:{镜像版本} /bin/bash

      “{镜像名称}:{镜像版本}”MindIE安装指南中的容器化部署和镜像制作 > 制作MindIE Server镜像章节步骤4自定义名称。

    2. 使用以下命令查看容器状态,状态为up则表示容器拉起成功,如图1所示。
      docker ps -a | grep {用户定义容器名称}
      图1 容器拉起成功
    3. 使用以下命令从拉起的容器中复制出源文件。
      docker cp {用户定义容器名称}:{源文件} /$home/package2

      {源文件}如下所示:

      • /home/{user}/Ascend/mindie/latest/mindie-service/conf/msctl.json
      • /home/{user}/Ascend/mindie/latest/mindie-service/conf/infer_server.json
      • /home/{user}/Ascend/mindie/latest/mindie-service/conf/ms_server.json
      • /home/{user}/Ascend/mindie/latest/mindie-service/bin/ms_server
      • /home/{user}/Ascend/mindie/latest/mindie-service/bin/msctl
      • /home/{user}/Ascend/mindie/latest/mindie-service/lib/libssl.so
      • /home/{user}/Ascend/mindie/latest/mindie-service/lib/libcrypto.so
      • /home/{user}/Ascend/mindie/latest/mindie-service/conf/config.json

      其中{user}是用户名, ms_server组件是MindIE MS的服务端,msctl组件是MindIE MS的客户端。

  2. 使用以下命令将物理机中的/usr/local/Ascend/driver/lib64/common/libsecurec.so文件复制到/$home/package2。
    cp /usr/local/Ascend/driver/lib64/common/libsecurec.so /$home/package2
  3. 修改ms_server.json配置文件,文件格式样例如下所示(格式必须和样例保持一致),样例参数解释如表1所示。
    {
        "ip": "mindie-ms服务端IP",
        "port": 9789,
        "k8s_apiserver_ip": "k8s物理机ip",
        "k8s_apiserver_port": 6443,
        "log_info": {
            "log_level": "ERROR",
            "log_path": "/var/log/mindie-ms/log.txt"
        },
        "ms_status_file": "/path/to/status.json",
        "server_tls_enable": true,
        "server_tls_items": {
            "ca_cert" : "*.crt",
            "tls_cert": "*.crt",
            "tls_key": "*.key",
            "tls_passwd": "*",
            "tls_crl": ""
        },
        "client_k8s_tls_enable": true,
        "client_k8s_tls_items": {
            "ca_cert" : "*.crt",
            "tls_cert": "*.crt",
            "tls_key": "*.key",
            "tls_passwd": "*", 
            "tls_crl": ""
        },
        "client_mindie_server_tls_enable": true,
        "client_mindie_tls_items": {
            "ca_cert" : "*.crt",
            "tls_cert": "*.crt",
            "tls_key": "*.key",
            "tls_passwd": "*",
            "tls_crl": ""
        }
     }
    表1 ms_server.json参数解释

    参数

    类型

    说明

    ip

    String

    必填。

    MindIE MS服务端IP;如配置了环境变量MINDIE_MS_SERVER_IP,则优先从环境变量读取。

    • 如使用Kubernetes部署MindIE MS服务端,考虑到MindIE MS运行业务的安装问题,建议不对外提供服务,配置成127.0.0.1;使用其他IP对外暴露接口将有安全风险,请用户需要慎重使用。
    • 如使用物理机部署MindIE MS服务端需填写物理机IP。

    port

    Int

    必填。

    MindIE MS服务端对外端口,取值范围:[1024,65535]。

    该参数与创建映射到Pod端口的Service配置文件的targetPort参数值保持一致。

    k8s_apiserver_ip

    String

    必填。

    Kubernetes管理节点的物理机IP地址。

    k8s_apiserver_port

    Int

    必填。

    Kubernetes对外访问端口,取值范围:[1024,65535],默认值:6443。

    log_info

    Object

    MindIE MS服务端日志配置信息,包括log_level和log_path,详情请参见表2

    ms_status_file

    String

    必填。

    用于服务状态保存的文件路径。

    该文件的目录必须存在,该文件必须不存在。

    server_tls_enable

    Bool

    必填。

    MindIE MS服务端是否需要开启tls安全通信,为保证通信安全,建议用户开启。需要与$HOME/.mindie_ms/msctl.json的tls_enable值保持一致。

    server_tls_items

    Object

    MindIE MS服务端tls配置,详情请参见表3

    client_k8s_tls_enable

    Bool

    必填。

    MindIE MS与Kubernetes对接的客户端是否需要开启tls安全通信,建议用户打开,确保与kubernetes通信安全。

    • client_k8s_tls_enable为true,访问Kubernetes的https接口。
    • client_k8s_tls_enable为false,访问Kubernetes的http接口。

    client_k8s_tls_items

    Object

    Kubernetes客户端tls配置,当client_k8s_tls_enable为true时,该参数中的key值为必填项,详情请参见表4

    client_mindie_server_tls_enable

    Bool

    必填。

    MindIE MS对接MindIE Server接口是否开启tls安全通信。建议用户打开,确保管理节点MS与计算节点MindIE Server间通信安全。

    client_mindie_tls_items

    Object

    MindIE Server客户端tls配置,当client_mindie_server_tls_enable为true时,该参数中的key值为必填项,详情请参见表5

    表2 log_info子参数解释

    参数

    类型

    说明

    log_level

    String

    必填。

    如配置了环境变量MINDIEMS_LOG_LEVEL,则优先从环境变量读取。

    MindIE MS服务端日志等级,支持等级如下:

    • DEBUG
    • INFO
    • WARNING
    • ERROR
    • CRITICAL

    log_path

    String

    MindIE MS服务端运行日志保存文件路径。

    可访问文件,必填。

    • Kubernetes容器化部署MindIE MS服务端时,必须为/var/log/mindie-ms/run/log.txt。
    • 物理机部署MindIE MS时,取值为用户可读文件路径即可。
    表3 server_tls_items子参数解释

    参数

    类型

    说明

    ca_cert

    String

    必填。

    MindIE MS服务端ca根证书文件路径,该路径真实存在且可读。

    tls_cert

    String

    必填。

    MindIE MS服务端tls证书文件路径,该路径真实存在且可读。

    tls_key

    String

    必填。

    MindIE MS服务端tls私钥文件路径,该路径真实存在且可读。

    tls_passwd

    String

    必填。

    MindIE MS服务端的KMC加密的私钥口令的文件路径。

    tls_crl

    String

    必填。

    MindIE MS服务端校验客户端的证书吊销列表crl文件路径,该路径存在且可读。如为空,则不进行吊销校验。

    表4 client_k8s_tls_items子参数解释

    参数

    类型

    说明

    ca_cert

    String

    必填。

    MindIE MS和Kubernetes对接的客户端ca证书路径,该路径真实存在且可读。

    tls_cert

    String

    必填。

    MindIE MS和Kubernetes对接的客户端tls证书路径,该路径真实存在且可读。

    tls_key

    String

    必填。

    MindIE MS和Kubernetes对接的客户端tls私钥路径,该路径真实存在且可读。

    tls_passwd

    String

    必填。

    MindIE MS和Kubernetes对接的客户端证书私钥加密密钥文件路径。

    tls_crl

    String

    必填。

    MindIE MS服务端校验Kubernetes API Server的证书吊销列表crl文件路径,如为空,则不进行吊销校验,文件存在路径存在并可读的。

    表5 client_mindie_tls_items子参数解释

    参数

    类型

    说明

    ca_cert

    String

    必填。

    MindIE MSMindIE Server对接的客户端的ca根证书文件路径,该路径真实存在且可读。

    tls_cert

    String

    必填。

    MindIE MSMindIE Server对接的客户端的tls证书文件路径,该路径真实存在且可读。

    tls_key

    String

    必填。

    MindIE MSMindIE Server对接的客户端的tls私钥文件路径,该路径真实存在且可读。

    tls_passwd

    String

    必填。

    kmc加密的私钥口令的文件路径。

    tls_crl

    String

    必填。

    MindIE MS服务端校验MindIE Server的证书吊销列表crl文件路径,如为空,则不进行吊销校验,文件存在路径存在并可读的。

  4. 使用以下命令拉取镜像。
    docker pull ubuntu:18.04
  5. 执行以下命令检查Ubuntu镜像,查询结果如图2所示。
    docker images | grep ubuntu
    图2 镜像查询结果
  6. 在/$home/package2路径下自行编写Dockerfile文件,用于MindIE MS服务端镜像的制作,样例如下所示(格式必须和样例保持一致)。
    • Dockerfile文件需要和ms_server、libcrypto.so、libssl.so、libsecurec.so、ms_server.json这几个文件在同一路径(/$home/package2)。
    • 制作镜像前将ms_server.json文件参考表1进行配置;或者制作镜像后用户可在容器外修改完成后,通过挂载方式挂载进容器,具体挂载方式请参见表1的volumes参数。
    • 以下为制作非root用户权限的MindIE MS服务端镜像,不建议用户制作root用户权限的MindIE MS服务端镜像。
    FROM ubuntu:18.04
    RUN useradd -d /home/{容器内用户名} -u {UID} -m -s /usr/sbin/nologin {容器内用户名} &&\
        usermod root -s /usr/sbin/nologin
    COPY ms_server /home/{容器内用户名}/
    COPY libcrypto.so /home/{容器内用户名}/
    COPY libssl.so /home/{容器内用户名}/
    COPY libsecurec.so /home/{容器内用户名}/
    COPY ms_server.json /home/{容器内用户名}/
    ENV LD_LIBRARY_PATH=/home/{容器内用户名}:$LD_LIBRARY_PATH
    RUN chmod 500 /home/{容器内用户名}/ms_server &&\
        chmod 400 /home/{容器内用户名}/libcrypto.so &&\
        chmod 400 /home/{容器内用户名}/libssl.so &&\
        chmod 400 /home/{容器内用户名}/libsecurec.so &&\
        chmod 440 /home/{容器内用户名}/ms_server.json &&\
        chown -R {容器内用户组名}:{容器内用户名} /home/{容器内用户名}/* &&\
        chmod 750 /home/{容器内用户名}
    USER {自定义用户名称}

    参数解释:

    • {UID}:自定义用户UID,不要和已有用户ID冲突,且不能是rootID或者0。
    • {容器内用户组名}:自定义MindIE MS的专用用户组名称,可以和专用用户名称一致。
    • {容器内用户名}:自定义MindIE MS的专用用户名称。
    • chmod权限:500用于可执行文件,400用于so动态库,440用于json配置文件,750用于文件夹权限。
  7. 执行以下命令开始镜像制作,执行完成后回显如图3所示即制作成功。
    docker build --no-cache -t {镜像名称}:{镜像版本} ./

    {镜像名称}:{镜像版本}需要用户自定义。

    图3 镜像制作成功