昇腾社区首页
中文
注册

平台适配

芯片网络故障与芯片故障类似,通过Device-Info ConfigMap获取芯片网络故障信息。Device-Info ConfigMapAscend Device Plugin创建,每个计算节点均有一个Device-Info ConfigMap,记录该节点的芯片健康状态信息。
  • 使用集群调度组件提供的Volcano或者开源Volcano(需要集成Ascend-volcano-plugin插件),可跳过该步骤。
  • 不使用上述Volcano,且想要获取芯片健康状态信息做其它业务逻辑处理,可以通过K8s客户端获取Device-Info ConfigMap内容,代码示例如下。
    import "k8s.io/client-go/kubernetes"
    
    // NodeDeviceInfo is device info configmap struct
    type NodeDeviceInfo struct {
       DeviceList map[string]string
       UpdateTime int64
    }
     
    func getNodeDeviceInfoFromCM(kubeClient kubernetes.Interface, node *api.NodeInfo) (*NodeDeviceInfo, error) {
       cmData, getErr := util.GetConfigMapWithRetry(kubeClient, util.DevInfoNameSpace, util.DevInfoPreName+node.Name)
       if getErr != nil {
              klog.V(util.LogErrorLev).Infof("GetConfigMapWithRetry :%#v.", getErr)
              return nil, getErr
       }
     
       devInf := &NodeDeviceInfoWithDevPlugin{}
       data, ok := cmData.Data[util.DevInfoCMKey]
       if !ok {
              return nil, fmt.Errorf("%s device-info no %s", node.Name, util.DevInfoCMKey)
       }
       if unmarshalErr := json.Unmarshal([]byte(data), &devInf); unmarshalErr != nil {
              klog.V(util.LogInfoLev).Infof("convertToReSchedulerJobsMapFromCM Unmarshal: %#v.", unmarshalErr)
              return nil, unmarshalErr
       }
     
       if checkErr := checkNodeDeviceInfo(devInf); checkErr != nil {
              klog.V(util.LogInfoLev).Infof("checkNodeDeviceInfo failed :%#v.", checkErr)
              return nil, checkErr
       }
       return &devInf.DeviceInfo, nil
    }