技术文档

Technical documentation
目录

使用Helm部署OrionX

本文介绍使用Helm命令行工具将OrionX所有组件部署到Kubernetes环境。

Orion已经与企业级Kubernetes管理平台Rancher深度整合,你可以通过Rancher中国应用商店直接部署Orion。具体请参考Rancher应用商店以及OrionX-Rancher集成指南

获取官方Orion Helm Chart

使用如下指令获取官方Orion Helm Chart:

git clone https://github.com/cnrancher/pandaria-catalog.git -b dev/v2.3

安装部署

  1. 在可以通过kubectl访问Kubernetes的节点上安装Helm工具。

    # 1.1 测试kubectl可以正常工作
    kubectl get nodes
    # 示例输出
    #NAME               STATUS   ROLES               AGE   VERSION
    #ip-172-31-28-1     Ready    worker              24d   v1.17.5
    #ip-172-31-43-188   Ready    worker              24d   v1.17.5
    #ip-172-31-43-87    Ready    controlplane,etcd   24d   v1.17.5
    
    # 1.2 安装helm
    # Ubuntu上可以直接通过snap安装
    # 其它包管理器下安装helm请参考
    # https://helm.sh/docs/intro/install/
    # 或者
    # https://github.com/helm/helm/releases
    sudo snap install helm --classic
    
    # 测试helm可以正常与Kubernetes通信
    helm list
    # 示例输出
    #NAME    NAMESPACE       REVISION        UPDATED STATUS  CHART   APP VERSION
    
  2. 修改安装配置

    • 所有配置信息都通过修改pandaria-catalog/charts/virtaitech-orion-vgpu/v1.0.0/values.yaml实现(其它chart配置方式请参考Helm官方文档

    • 大部分配置均不需要修改,少数需要修改的配置均通过注释# Interesting Config: 标出。关键配置的说明如下:

      设置 说明 默认值 类型
      resources.name 暴露给Kubernetes的orion资源名称,客户端在申请orion资源时,需要使用这里设置的资源名称。通常不需要修改。特别和Rancher整合时,修改这个名称将导致Rancher无法正确启动Orion的客户端(Rancher固定使用virtaitech.com/gpu作为Orion资源名) virtaitech.com/gpu string
      controller.password 登录controller webui的密码(用户为admin)。controller的登录地址在使用helm install部署时将通过stdout输出,请注意查看。 string
      controller.enableQuota controller是否启用quota。 false bool
      controller.token controller的token。调用controller高级api时需要给出这里设置的token才能调用成功。 string
      server.cudaVersion server镜像内使用的cuda版本,可选值为"9.0","9.1","9.2","10.0","10.1"。 10.1 string
      server.net 关键设置)Orion bind net的网卡名称。该设置会指定OrionX使用的网卡,特别当计算节点拥有多张网卡时,需要小心设置(例如,RDMA网卡和TCP网卡并存,最好指定RDMA网卡)。由于在Kubernetes环境下难以为每个节点独立配置orion server并指定bind address,需要为所有节点通过统一的网卡名称来配置Orion网络环境。这会引入一个前提:如果有节点配置使用的网卡名称必须相同,否则必须请IT、运维人员做相应修改。 eth0 string
      server.vgpus 每个PGPU虚拟出几个VGPU 4 int
      server.ibName Infiniband网卡名称。非必填项。 string
      license.key 新版license。直接作为字符串粘贴到这里即可。注意旧版的license无法使用。请联系趋动科技获取有效的license。获取license请参考:https://www.virtaitech.com/development/index#-12 string
      scheduler.apiVersion controller使用的api版本。scheduler与controller通信时会使用。通常与controller的版本相同。 2.2 string
      scheduler.dataVersion 同上。 2.2 string
  3. 相关说明

    • 自定义镜像

      通常每个组件使用的image可以通过组件下的image.repositoryimage.version来设置。例如:

      helper:
         image:
           repository: virtaitech/orion-helper
           version: "2.2"
      

      则最终orion helper使用的image为:virtaitech/orion-helper:2.2

      但是orion server的情况比较特殊,请参考下文说明。

    • orion helper说明

      Orion部署完成后请通过kubectl describe node <nodeName>查看每个node的label,确保ORION_BIND_ADDR=<ip_address>已经通过orion helper正确设置。如果没有的话,需要手动添加label:kubectl label nodes <nodeName> ORION_BIND_ADDR=<ip_address>。这里<ip_address>需要和server.net处设置的网卡的ip地址相同。如果orion server在对应节点上启动失败,则orion helper也无法正确打label。

    • orion server镜像说明

      orion server具体使用的镜像通过server.image.versionserver.cudaVersion的组合指定。如果使用其它镜像,请将image tag成表格中的格式,并设置这两个值。请注意现在DockerHub上只有2.2+10.1的镜像(virtaitech/orion-server-2.2:cuda10.1),如果需要使用其它版本,请使用趋动工程师提供的镜像包,并通过docker load导入镜像到每一个节点的docker daemon并打好相应tag,例如virtaitech/orion-server-2.2:cuda9.1。或者把镜像push到私有registry上。如果私有registry有访问控制,需要设置values.yamlimagePullSecrets的值。

  4. 安装部署

    配置好values.yaml文件后,就可以通过helm安装所有Orion组件

    # helm可以一键部署orion
    helm install pandaria-catalog/charts/virtaitech-orion-vgpu/v1.0.0/ --generate-name
    
    # 如果想要看到helm生成的所有yaml文件,可以使用debug参数
    helm install pandaria-catalog/charts/virtaitech-orion-vgpu/v1.0.0/ --generate-name --debug
    

    部署完成后可以使用helm list查看部署状态。示例输出为:

    NAME                    NAMESPACE       REVISION        UPDATED                                 STATUS   CHART                           APP VERSION
    orion-gpu-1591596688    default         1               2020-06-08 06:11:28.953306413 +0000 UTC deployed virtaitech-orion-vgpu-1.0.0     2.2
    

    部署完成后可以通过kubectl get all 查看部署的Orion组件状态,示例输出为:

    NAME                                    READY   STATUS             RESTARTS   AGE
    pod/orion-controller-5bd9578d87-4dm5n   2/2     Running            0          5m49s
    pod/orion-monitor-qxftd                 2/2     Running            0          5m49s
    pod/orion-monitor-s2rjl                 2/2     Running            0          5m49s
    pod/orion-plugin-lwbfk                  1/1     Running            0          5m49s
    pod/orion-plugin-n2jvc                  1/1     Running            0          5m49s
    pod/orion-server-4c6tx                  1/1     Running            0          5m49s
    pod/orion-server-dtltp                  0/1     CrashLoopBackOff   5          5m49s
    pod/orion-helper-49xzz                  1/1     Running            0          12m
    pod/orion-helper-vk2z9                  1/1     Running            0          12m
    pod/orion-scheduler-5c7f495cf-92bpp     2/2     Running            0          12m
    
    NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
    service/kubernetes                  ClusterIP   10.43.0.1       <none>        443/TCP                         26d
    service/orion-controller            ClusterIP   10.43.173.242   <none>        15500/TCP,15501/TCP,15502/TCP   5m49s
    service/orion-controller-nodeport   NodePort    10.43.44.103    <none>        15502:30009/TCP                 5m49s
    
    NAME                           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    daemonset.apps/orion-monitor   2         2         2       2            2           <none>          5m49s
    daemonset.apps/orion-plugin    2         2         2       2            2           <none>          5m49s
    daemonset.apps/orion-server    2         2         1       2            1           <none>          5m49s
    
    NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/orion-controller   1/1     1            1           5m49s
    
    NAME                                          DESIRED   CURRENT   READY   AGE
    replicaset.apps/orion-controller-5bd9578d87   1         1         1       5m49s
    
    • 注意这里有一个orion-server没有能正常启动。通过kubectl logs pod/orion-server-dtltp查看日志,示例输出为:

      Device "ens5" does not exist.
      Network interface ens5 dose not have a valid IPv4 address.
      

      这里ens5server.net的配置。这条log说明Kubernetes集群中有一个节点没有ens5网卡,导致bind net失败。因此我们要求客户环境内节点使用统一的网卡命名,以便Orion使用。

  5. 使用

    Orion客户端的使用方式可以参考OrionX-Rancher集成指南测试一节。

  6. 如果想要清理所有Orion的组件,可以使用helm list输出的NAME进行卸载:

    helm uninstall orion-gpu-1591596688