下载
中文
注册

镜像制作

MindIE MS服务端可以采用镜像方式部署在Kubernetes的Deployment管理的容器中,以下操作步骤指导用户如何完成MindIE MS服务端镜像的制作。

不建议用户直接在物理机上部署MindIE MS服务端,通过Kubernetes集群集成部署的方式可实现进程故障恢复,增强可靠性。

操作步骤

以下操作对路径没有要求,用户自行选择路径进行操作,这里以/home/{用户名称}/package路径为例。

  1. 单击链接获取MindIE软件包(Ascend-mindie_{version}_linux-aarch64.run)并上传至/home/{用户名称}/package目录。
    1. 使用以下命令进入/home/{用户名称}/package目录。
      cd /home/{用户名称}/package
    2. 使用以下命令增加对MindIE软件包的可执行权限。
      chmod +x Ascend-mindie_{version}_linux-aarch64.run
    3. 使用以下命令解压MindIE软件包到当前路径下的mindie目录,获取mindie-service的run安装包。
      ./Ascend-mindie_{version}_linux-aarch64.run --extract=mindie
    4. 使用以下命令安装Ascend-mindie-service_{version}_linux-aarch64.run到当前目录。
      ./mindie/Ascend-mindie-service_{version}_linux-aarch64.run --install-path=$PWD
  2. 配置ms_server.json文件,更多参数解释请参见配置说明

    使用以下命令打开ms_server.json文件。

    vi mindie-service/latest/conf/ms_server.json

    配置以下参数:

    k8s_apiserver_ip:配置为Kubernetes管理节点的物理机IP地址。

  3. 使用以下命令拉取ubuntu基础镜像。
    docker pull ubuntu:22.04
  4. 执行以下命令检查ubuntu镜像,查询结果如图1所示。
    docker images | grep ubuntu
    图1 镜像查询结果

  5. 使用MindIE证书管理工具导入准备TLS证书中所有的证书和私钥,并生成KMC加密口令文件。MindIE证书导入工具的详细用法请参见CertTools
    cd mindie-service/latest
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib
    mkdir -p -m 700 security/msserver
    mkdir -p -m 700 security/mindieclient
    mkdir -p -m 700 ./security/kubeclient
    cp -r ./bin ./security/kubeclient
    mkdir -p -m 700 ./security/kubeclient/security/ca
    mkdir -p -m 700 ./security/kubeclient/security/certs
    mkdir -p -m 700 ./security/kubeclient/security/keys
    mkdir -p -m 700 ./security/kubeclient/security/pass
    cp -r ./security/kubeclient/*  ./security/msserver
    cp -r ./security/kubeclient/*  ./security/mindieclient
    
    # 可选,为保证通信安全,建议选择。导入MS Deployer服务端与MindIE Server通信的证书
    python3 ./scripts/config_mindie_server_tls_cert.py ./security/mindieclient import_ca  {CA文件路径}
    python3 ./scripts/config_mindie_server_tls_cert.py ./security/mindieclient import_cert  {证书文件路径}  {加密私钥文件路径} 
    
    #必须,导入MS Deployer服务端证书
    export KUBE_CA_CERT_PATH=/etc/kubernetes/pki/ca.crt       #Kubernetes根CA证书文件路径
    cp $KUBE_CA_CERT_PATH ./security/msserver/security/ca/ca.pem
    chmod 400 ./security/msserver/security/ca/ca.pem
    mkdir -p msserver_chain
    cat /home/{用户名称}/cas/msserver/cert.pem /home/{用户名称}/cas/mindiems/cert.pem > ./msserver_chain/cert.pem     #/home/{用户名称}/cas/msserver/cert.pem:MindIE MS服务端证书文件路径;/home/{用户名称}/cas/mindiems/cert.pem:中间CA证书文件路径
    chmod 400 ./msserver_chain/cert.pem
    python3 ./scripts/config_mindie_server_tls_cert.py ./security/msserver import_cert  ./msserver_chain/cert.pem /home/{用户名称}/cas/msserver/cert.key.pem   #/home/{用户名称}/cas/msserver/cert.key.pem:MindIE MS服务端私钥文件路径
    rm -rf msserver_chain
    
    # 可选,为保证通信安全,建议选择。导入MS Deployer服务端与kube API-Server通信的证书
    cp $KUBE_CA_CERT_PATH ./security/kubeclient/security/ca/ca.pem
    chmod 400 ./security/kubeclient/security/ca/ca.pem
    mkdir -p kubeclient_chian
    cat /home/{用户名称}/cas/kubeclient/cert.pem /home/{用户名称}/cas/mindiems/cert.pem > ./kubeclient_chian/cert.pem   #/home/{用户名称}/cas/kubeclient/cert.pem:MindIE MS服务端与kube API-Server通信的客户端证书文件路径;/home/{用户名称}/cas/mindiems/cert.pem:中间CA证书文件路径
    chmod 400 ./kubeclient_chian/cert.pem
    python3 ./scripts/config_mindie_server_tls_cert.py ./security/kubeclient import_cert  ./kubeclient_chian/cert.pem /home/{用户名称}/cas/kubeclient/cert.key.pem   #/home/cas/kubeclient/cert.key.pem:MindIE MS服务端与kube API-Server通信的客户端私钥文件路径 
    rm -rf kubeclient_chian
    cd ../..
  6. 在当前路径下编写Dockerfile文件,用于MindIE MS服务端镜像的制作,样例如下所示(格式必须和样例保持一致)。

    以下为制作非root用户权限的MindIE MS服务端镜像,出于安全考虑,不建议用户制作root用户权限的MindIE MS服务端镜像。

    FROM ubuntu:22.04
    ARG USER_GROUP={用户群组}
    ARG USER={用户名}
    ARG UID={用户ID}
    ARG USER_HOME_DIR=/home/${USER}
    
    RUN useradd -d ${USER_HOME_DIR} -u ${UID} -m -s /usr/sbin/nologin ${USER} &&\
        usermod root -s /usr/sbin/nologin
    
    COPY ./mindie-service  /home/${USER}/mindie-service
    RUN rm -rf /home/${USER}/mindie-service/latest/security
    ARG MIES_INSTALL_PATH=/home/${USER}/mindie-service/latest
    
    ENV LD_LIBRARY_PATH=${MIES_INSTALL_PATH}/lib:$LD_LIBRARY_PATH
    ENV HSECEASY_PATH=${MIES_INSTALL_PATH}/lib
    
    RUN chown -R ${USER}:${USER_GROUP} ${MIES_INSTALL_PATH}
    USER ${USER}

    参数解释:

    • USER_GROUP:自定义MindIE MS的专用用户组名称,和USER保持一致;可使用cat /etc/passwd命令查看,回显中第四列即为该参数的值。
    • USER:自定义MindIE MS的专用用户名称。
    • UID:自定义用户UID,不要和已有用户ID冲突,且不能是rootID或者0;可使用cat /etc/passwd命令查看,回显中第三列即为该参数的值。
    • USER_HOME_DIR:用户的home目录。
    • chmod权限:500用于可执行文件,400用于so动态库,440用于json配置文件,750用于文件夹权限。
  7. 修改证书相关文件属主为容器内用户群组,其中UID为上述Dockerfile中配置的UID
    chown -R ${UID}:${UID} ./mindie-service/latest/security
  8. 执行以下命令开始镜像制作,执行完成后回显如图2所示即制作成功。
    docker build --no-cache -t {镜像名称}:{镜像版本} ./
    • 请确保宿主机上的{USER_GROUP}:{UID}用户是有权限使用kubernetes和MindIE MS的管理员用户,上述证书修改权限后将对该用户开放读取权限。
    • {镜像名称}:{镜像版本}需要用户自定义。
    图2 镜像制作成功