技术文档

Technical documentation
目录

在Rancher k3s上快速开始使用OrionX

k3s是经CNCF一致性认证的Kubernetes发行版,专为物联网及边缘计算设计。OrionX可以非常方便的在k3s上部署使用。

环境准备

我们推荐客户使用Docker+NVidia Docker runtime环境来部署使用OrionX+k3s。用户需要

  • 在所有节点上安装Docker。安装方法可以参考Docker官方文档

  • 在所有GPU节点上安装好GPU驱动(无需安装CUDA,OrionX不依赖原生CUDA)。

  • 在所有GPU节点上安装NVidia Docker runtime,并设置为default runtime。可以参考下面的示例

    • 安装nvidia-docker2:

      # https://github.com/NVIDIA/k8s-device-plugin#preparing-your-gpu-nodes
      
      distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
      curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
      curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
      sudo apt-get update && sudo apt-get install -y nvidia-docker2
      sudo systemctl enable docker
      
    • 安装完nvidia-docker2后,我们要确保设置default runtime设置到nvidia:

      # /etc/docker/daemon.json
      {
          "default-runtime": "nvidia",
          "runtimes": {
              "nvidia": {
                  "path": "/usr/bin/nvidia-container-runtime",
                  "runtimeArgs": []
            }
        }
      }
      
      sudo systemctl restart docker
      
    • 如果使用公有云,可以在申请GPU实例时使用配置好GPU驱动+CUDA+Docker+NVidia Docker runtime的镜像。

具体可以参考k3s中文社区文档:如何在k3s环境中安装GPU相关程序

快速安装Rancher k3s

准备好节点环境,即可方便快速的部署k3s。

# 在控制面(server)节点执行如下指令:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--docker" sh -s -
# 国内用户,可以使用以下方法加速安装:
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker" sh -s -

# 在worker(agent)节点执行如下命令,其中:
# K3S_URL是可以访问的控制面板节点地址
# K3S_TOKEN保存在控制面(server)节点的/var/lib/rancher/k3s/server/node-token路径下。
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--docker" K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
# 国内用户,可以使用以下方法加速安装:
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--docker" K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

具体可以参考k3s官方文档

如果需要使用kubectl访问控制k3s集群,需要进行一些简单的配置:

  • 方法一:设置KUBECONFIG环境变量:
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get pods --all-namespaces
  • 方法二:指定--kubeconfig参数:
kubectl --kubeconfig /etc/rancher/k3s/k3s.yaml get pods --all-namespaces
  • 方法三:将/etc/rancher/k3s/k3s.yaml拷贝到~/.kube/config

具体可以参考k3s官方文档

k3s上使用OrionX

有多种方式可以让用户在k3s上方便快速地部署使用OrionX。下面一一介绍。

Rancher+k3s+OrionX

k3s作为Rancher旗下一个轻量级的Kubernetes发行版本,与Rancher具有极佳的兼容性,可以方便地使用Rancher进行管理。

  • 首先需要在Rancher上导入k3s集群,下图以Rancher企业版为例,Rancher社区版操作类似:

    import

  • 随后既可以参考文档**OrionX-Rancher集成指南**方便地使用Rancher部署使用OrionX了。

k3s在某些情况下会导致hostNetwork: true的pod无法访问到ClusterIP服务。如果遇到该情况,请参考helm+OrionX一节。

helm+OrionX

OrionX支持使用helm工具在k3s上进行快速部署。请参考文档**使用Helm部署OrionX**。

k3s在某些情况下会导致hostNetwork: true的pod无法访问到ClusterIP服务。如果遇到该情况,请使用特殊的chart分支:

git clone https://github.com/wpfnihao/pandaria-catalog.git -b dev/k3s

并在values.yaml文件中正确设置k3s相关内容。例子:

k3s: 
  enabled: true
  # Interesting Config:
  # Please make sure this value is set to any accessible k3s node ip
  hostIP: "127.0.0.1"

k3s helm CRD+OrionX

k3s默认支持通过helm CRD来部署helm chart(参考:https://rancher.com/docs/k3s/latest/en/helm/)。

用户需要准备k3s helm CRD支持的yaml文件,如下所示。可以看到,所有设置项均与**使用Helm部署OrionX**相同。用户通过下方示例创建yaml文件(例如orion.yaml)并对设置项进行相应修改后,可以将该文件拷贝至k3s server节点/var/lib/rancher/k3s/server/manifests目录下。k3s helm CRD控制器会自动根据设置内容拉起所有Orion组件。

apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  name: virtaitech-orion-vgpu
  namespace: kube-system
spec:
  chart: virtaitech-orion-vgpu
  repo: https://wpfnihao.github.io/pandaria-catalog
  targetNamespace: virtaitech-orion-vgpu
  valuesContent: |-
    image:
      pullPolicy: IfNotPresent
    imagePullSecrets:

    resources:
      # Interesting Config:
      # resource name exposed by Orion
      name: "virtaitech.com/gpu"

    monitor:
      collectorPath: /run/prometheus
      image:
        exporter:
          # nvidia/dcgm-exporter
          repository: virtaitech/dcgm-export
          version: "2.2"
        prometheus:
          # quay.io/prometheus/node-exporter
          repository: virtaitech/node-exporter
          version: "2.2"
      # this port is also used by controller to scrap info.
      # should not change this value
      port: 9100

    controller:
      version: "2.2"
      name: "orion-controller"
      port: "15500"
      portName0: "controller"
      portName1: "port1"
      portName2: "webportal"
      nodeport: 30007
      service: orion-controller
      image:
        prom: virtaitech/prometheus
        repository: virtaitech/orion-controller
        version: "2.2"
      # Interesting Config:
      password: ""
      # Interesting Config:
      # or true
      enableQuota: false
      # Interesting Config:
      token: ""
      # changing this value not tested
      replicas: 1

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

    server:
      port: "9960"
      # Interesting Config:
      # TODO: requires additional images
      cudaVersion: "10.1"
      image:
        version: "2.2"
      path:
        comm: /var/tmp/orion/comm
      # Interesting Config:
      net: ens5
      # Interesting Config:
      vgpus: 4
      # Interesting Config:
      ibName: ""

    plugin:
      path: /var/lib/kubelet/device-plugins
      image:
        repository: virtaitech/orion-plugin
        version: "2.2"

    scheduler:
      replicas: 1
      apiVersion: "2.2"
      dataVersion: "2.2"
      image:
        scheduler:
          # gcr.io/google_containers/hyperkube:v1.16.3
          repository: virtaitech/hyperkube
          version: "2.2"
        extender:
          repository: virtaitech/k8s-scheduler-extender
          version: "2.2"
      port: 8888
      verbose: 4

    license:
      # Interesting Config:
      key: ""

    volumes:
      shm: /dev/shm

几点说明:

  • 特别适合通过本方式将Orion作为k3s的常驻组件进行部署。
  • 修改/var/lib/rancher/k3s/server/manifests/orion.yaml文件会更新CRD控制器,但执行逻辑与helm upgrade不同。
  • 删除orion.yaml文件不会卸载已部署的Orion组件(与helm uninstall逻辑不同)。
  • k3s在某些情况下会导致hostNetwork: true的pod无法访问到ClusterIP服务。如果遇到该情况,请参考helm+OrionX一节。