升级容器服务ACK的共享GPU专业版集群后GPU共享调度失效

问题描述

升级集群服务ACK中的共享GPU专业版集群后,kube-scheduler组件中关于ack-cgpu应用的extender配置会丢失,导致集群的GPU共享调度无法正常工作。

问题原因

ACK中的共享GPU专业版集群升级时,现有配置将被默认配置覆盖,导致extender配置丢失。

解决方案

请参考下列步骤进行处理。

步骤一:检查extender配置

  1. 通过远程登录到所有master节点。
  2. 逐个检查master节点中的以下文件。
    /etc/kubernetes/manifests/kube-scheduler.yaml
  3. 检查该文件中是否存在类似下图中与scheduler-extender-config.json相关的配置。
    extender.jpg
  4. 如果不存在上图中相关的配置,请继续参考下文内容进行修复。如果存在,则说明extender配置未丢失,无需进行修复。

步骤二:运行修复程序

  1. 通过远程登录到任意一个master节点。
  2. 在master节点上执行以下命令,下载修复工具。
    wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/extender-config-update-linux -O /usr/local/bin/extender-config-update
  3. 执行以下命令,为修复工具添加可执行权限。
    chmod +x /usr/local/bin/extender-config-update
  4. 执行以下命令,运行修复工具。
    extender-config-update
  5.  执行以下命令,检查kube-scheduler的运行状态,确认其重启过,并且当前状态为运行(Running)状态。
    kubectl get po -n kube-system -l component=kube-scheduler
    系统显示类似如下,其中AGE为14s,表示刚重启过,说明修复工具已生效。
    NAME                                     READY   STATUS    RESTARTS   AGE
    kube-scheduler-cn-beijing.192.168.8.37   1/1     Running   0          14s
    kube-scheduler-cn-beijing.192.168.8.38   1/1     Running   0          14s
    kube-scheduler-cn-beijing.192.168.8.39   1/1     Running   0          14s
  6.  参考步骤一,确认kube-scheduler.yaml文件中extender相关配置已经复原,然后参考下一步骤,进行结果验证。

步骤三:结果验证

  1. 通过远程登录到任意一个master节点。
  2. 创建以下文件用于测试。
    /tmp/cgpu-test.yaml
  3. 将以下内容写入/tmp/cgpu-test.yaml文件。
    apiVersion: apps/v1
    kind: StatefulSet
    
    metadata:
      name: cgpu-test
      labels:
        app: cgpu-test
    
    spec:
      replicas: 3
      serviceName: "cgpu-test"
      podManagementPolicy: "Parallel"
      selector: # define how the deployment finds the pods it manages
        matchLabels:
          app: cgpu-test
    
      template: # define the pods specifications
        metadata:
          labels:
            app: cgpu-test
    
        spec:
          containers:
          - name: cgpu-test
            image: registry.cn-shanghai.aliyuncs.com/tensorflow-samples/tensorflow-gpu-mem:10.0-runtime-centos7
            command:
              - python3
              - /app/main.py
            resources:
              limits:
                # GiB
                aliyun.com/gpu-mem: 3
    说明:此文件用于创建3个测试pod,每个pod被分配3GiB的GPU显存。您可以根据现场实际情况调整gpu-mem的值。
  4.  执行以下命令,创建3个用于测试的pod。
    kubectl create -f /tmp/cgpu-test.yaml
  5.  执行以下命令,确认3个pod都处于运行状态。
    kubectl get po -l app=cgpu-test
    系统显示类似如下。
    NAME          READY   STATUS    RESTARTS   AGE
    cgpu-test-0   1/1     Running   0          4m32s
    cgpu-test-1   1/1     Running   0          4m32s
    cgpu-test-2   1/1     Running   0          4m32s
  6.  从3个pod中任选其一,执行以下命令,查看其日志,确认容器实际申请的显存与/tmp/cgpu-test.yaml文件中指定的显存一致。
    kubectl logs cgpu-test-0 | grep "totalMemory"
    说明:此处以cgpu-test-0为例,您可以自行调整。
    系统显示类似如下。
    totalMemory: 3.15GiB freeMemory: 2.85GiB
  7.  执行以下命令,检查上述pod实际被分配的显存,确认其与/tmp/cgpu-test.yaml文件中指定的显存一致。
    kubectl exec -ti cgpu-test-0 nvidia-smi
    说明:此处以cgpu-test-0为例,您可以自行调整。
    系统显示类似如下,该pod实际被分配了3226MiB,符合预期,说明GPU共享调度恢复正常。如果GPU共享调度未生效,容器被分配的显存等于宿主机的GPU显存容量。
    Mon Apr 13 11:52:25 2020
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla V100-SXM2...  On   | 00000000:00:07.0 Off |                    0 |
    | N/A   33C    P0    56W / 300W |    629MiB /  3226MiB |      1%      Default |
    +-------------------------------+----------------------+----------------------+
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

相关文档

适用于

  • 容器服务ACK专有版集群已安装共享GPU普通版

如果您的问题仍未解决,您可以在阿里云社区免费咨询提交工单联系阿里云技术支持。