制作MindIE MS服务端镜像
MindIE MS服务端可以采用镜像方式部署在Kubernetes的Deployment管理的容器中,使用MindIE Service将服务端口开放给外部,通过MindIE Service对外端口部署在物理机上的MindIE MS客户端与MindIE MS服务端进行交互。以下操作步骤指导您如何完成MindIE MS服务端镜像的制作。
操作步骤
- 拉起容器并获取源文件。
- 通过以下命令拉起容器。
docker run -it --name {用户定义容器名称} -d {镜像名称}:{镜像版本} /bin/bash
- 使用以下命令查看容器状态,状态为up则表示容器拉起成功,如图1所示。
docker ps -a | grep {用户定义容器名称}
- 使用以下命令从拉起的容器中复制出源文件。
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的客户端。
- 通过以下命令拉起容器。
- 使用以下命令将物理机中的/usr/local/Ascend/driver/lib64/common/libsecurec.so文件复制到/$home/package2。
cp /usr/local/Ascend/driver/lib64/common/libsecurec.so /$home/package2
- 修改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 MS和MindIE Server对接的客户端的ca根证书文件路径,该路径真实存在且可读。
tls_cert
String
必填。
MindIE MS和MindIE Server对接的客户端的tls证书文件路径,该路径真实存在且可读。
tls_key
String
必填。
MindIE MS和MindIE Server对接的客户端的tls私钥文件路径,该路径真实存在且可读。
tls_passwd
String
必填。
kmc加密的私钥口令的文件路径。
tls_crl
String
必填。
MindIE MS服务端校验MindIE Server的证书吊销列表crl文件路径,如为空,则不进行吊销校验,文件存在路径存在并可读的。
- 使用以下命令拉取镜像。
docker pull ubuntu:18.04
- 执行以下命令检查Ubuntu镜像,查询结果如图2所示。
docker images | grep ubuntu
- 在/$home/package2路径下自行编写Dockerfile文件,用于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用于文件夹权限。
- 执行以下命令开始镜像制作,执行完成后回显如图3所示即制作成功。
docker build --no-cache -t {镜像名称}:{镜像版本} ./
{镜像名称}:{镜像版本}需要用户自定义。