在Kubernets上使用RDMA

作者: 阿里云云栖号 | 来源:发表于2018-11-06 15:50 被阅读29次

    RDMA

    RDMA(全称RemoteDirect Memory Access) 它为了解决网络传输中服务器端数据处理的延迟而产生。

    它的原理是将待传输的数据从一台计算机的内存,直接传输到另一台计算机的内存,整个传输过程无需操作系统和协议栈的介入。由于旁路了操作系统协议栈,通讯过程极大的降低了CPU的使用率,减少了内核的内存复制,以及用户态与内核态的上下文切换。

    常见的RDMA实现有三种,基于以太网的Roce网络(RDMA over Converged Ethernet), InfiniBand, iWARP。

    阿里云支持RDMA

    阿里云支持超级计算集群SCC,同时支持RoCE网络和VPC网络,其中RoCE网络专用于RDMA通信。SCC 主要用于高性能计算和人工智能/机器学习、科学/工程计算、数据分析、音视频处理等应用场景。
    RoCE(RDMA over Convergent Ethernet)网络速度达到InfiniBand网络的性能,且能支持更广泛的基于Ethernet的应用。
    介绍: https://www.alibabacloud.com/help/zh/doc-detail/60576.htm
    可以在ECS控制台直接购买包年包月的SCC机型虚拟机。 https://www.alibabacloud.com/help/zh/doc-detail/61978.htm

    容器支持RDMA

    容器服务目前已支持RDMA,您可以将SCC机型的ECS添加到容器集群中,并通过RDMA的Device plugin 在调度层面支持 RDMA。
    通过声明 resourcesLimit rdma/hca: 1 ,可以指定将容器调度到RDMA的ecs上。

    创建容器集群

    进入容器服务控制台, 选择创建Kubernetes集群。由于SCC目前仅在上海地域支持,容器集群的地域请选择 华东2(上海) 。 配置完其他参数后,点击集群创建,等待集群创建成功。

    部署RDMA Device plugin

    在容器服务控制台中,选择使用模板部署。 部署支持RDMA的Device plugin, 选择对应的集群和命名空间,模板如下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: rdma-devices
      namespace: kube-system
    data:
      config.json: |
        {
            "mode" : "hca"
        }
    
    --- 
    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: rdma-device-plugin
      namespace: kube-system
    spec:
      template:
        metadata:
          annotations:
            scheduler.alpha.kubernetes.io/critical-pod: ""
          labels:
            name: rdma-sriov-dp-ds
        spec:
          hostNetwork: true
          tolerations:
          - key: CriticalAddonsOnly
            operator: Exists
          containers:
          - image: registry.cn-shanghai.aliyuncs.com/acs/rdma-device-plugin
            name: k8s-rdma-device-plugin
            imagePullPolicy: IfNotPresent
            securityContext:
              privileged: true
            volumeMounts:
              - name: device-plugin
                mountPath: /var/lib/kubelet/device-plugins
              - name: config
                mountPath: /k8s-rdma-sriov-dev-plugin
          volumes:
            - name: device-plugin
              hostPath:
                path: /var/lib/kubelet/device-plugins
            - name: config
              configMap:
                name: rdma-devices
                items:
                - key: config.json
                  path: config.json
    
    通过手动添加的方式将SCC的ECS加入集群中
    • 创建SCC的ECS, 并且和容器集群在同一个VPC下。并且加入相同安全组
    • 在容器服务控制台上操作 集群-> 更多 -> 添加已有ECS。 使用手动添加, 并选择创建的RDMA机器。获取添加脚本。
    • 登录上ECS, 执行脚本。 最终添加成功有如下显示:
    • 在节点 -> 标签管理中,给rdma节点增加标签 aliyun.accelerator/rdma: true
    • 增加标签后能够看到节点上的RDMA的device plugin pod被成功分配到SCC的节点上
    部署两个测试镜像
    apiVersion: v1
    kind: Pod
    metadata:
      name: rdma-test-pod
    spec:
      restartPolicy: OnFailure
      containers:
      - image: mellanox/centos_7_4_mofed_4_2_1_2_0_0_60
        name: mofed-test-ctr
        securityContext:
          capabilities:
            add: [ "IPC_LOCK" ]
        resources:
          limits:
            rdma/hca: 1
        command:
        - sh
        - -c
        - |
          ls -l /dev/infiniband /sys/class/net
          sleep 1000000
    ---
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: rdma-test-pod-1
    spec:
      restartPolicy: OnFailure
      containers:
      - image: mellanox/centos_7_4_mofed_4_2_1_2_0_0_60
        name: mofed-test-ctr
        securityContext:
          capabilities:
            add: [ "IPC_LOCK" ]
        resources:
          limits:
            rdma/hca: 1
        command:
        - sh
        - -c
        - |
          ls -l /dev/infiniband /sys/class/net
          sleep 1000000
    

    在一个容器中执行 ib\_read\_bw -q 30

    另一个容器中执行 ib\_read\_bw -q 30 <上一个容器的 ip>

    出现测试结果,说明两个容器之间可以通过RDM完成数据传输。 带宽为5500Mb/S, 约44Gbit/s。

    tips: RDMA通讯建连过程普遍分为 TCP 和 RDMA_CM 两种实现,如果应用程序使用RDMA_CM 的建连的方式,vpc网络插件中分配的pod ip 无法作为RDMA_CM 地址, 容器需要设置HostNetwork。并将bond0 ip 设置为CM的通讯地址。

    云服务器99元拼团购!拉新还可赢现金红包!300万等你瓜分!
    马上一键开团赢红包: http://click.aliyun.com/m/1000019899/



    本文作者:萧元

    阅读原文

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:在Kubernets上使用RDMA

        本文链接:https://www.haomeiwen.com/subject/oxtuxqtx.html