鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

使用Kunpeng TAP

Kunpeng TAP允许在部署Pod时指定CPU资源需求,系统将自动按NUMA亲和性分配资源。通过编写YAML文件并指定节点选择器,可以将Pod部署到特定节点上。成功部署插件后,只需在部署其他Pod时指定CPU资源的request和limit值,系统将自动按照NUMA亲和性原则进行资源分配。

以下为部署一个单容器Pod的YAML文件示例,供用户参考。该Pod请求的CPU资源最小值为4核,最大值为8核,内存固定为4Gi,容器使用busybox作为镜像。

  1. 创建YAML文件,例如example.yaml,并在YAML文件中写入以下配置。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    apiVersion: v1
    kind: Pod
    metadata:
      name: tap-test
      annotations:
    spec:
      containers:
      - name: tap-example
        image: busybox:latest
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo `date`; sleep 5; done"]
        resources:
          requests:
            cpu: "4"
            memory: "4Gi"
          limits:
            cpu: "8"
            memory: "4Gi"
    
  2. 以指定Pod在compute01节点上运行为例,需要在YAML文件中的spec部分加入以下内容。

    在多个工作节点的K8s集群中,Pod可能会被调度到不同节点的NUMA内。如果希望Pod在指定的节点上运行,只需在YAML文件的spec部分加入nodeSelector字段,并指定kubernetes.io/hostname为目标节点的名称。

    1
    2
      nodeSelector:
        kubernetes.io/hostname: compute01
    
  3. 在管理节点应用YAML文件,完成Pod部署。
    kubectl apply -f example.yaml
  4. 判断Kunpeng TAP是否生效。
    1. 以Docker运行时为例,进入步骤二中nodeSelector所指定的集群节点compute01后,通过docker命令查询容器的CpusetCpus参数,判断容器是否与NUMA成功亲和。
    2. 通过docker ps查询集群节点运行的容器任务,在NAMES列中找到步骤一中“spec.containers.name”指定的nri-1容器。
      # docker ps | grep nri-1
      CONTAINER ID   IMAGE                  COMMAND                  CREATED       STATUS       PORTS     NAMES
    3. 依据CONTAINER ID查询目标容器的部署参数CpusetCpus,该参数表示容器的可调度CPU范围。
      # docker inspect bf32de0d09fe | grep "CpusetCpus"
                  "CpusetCpus": "0-23",

      如果启用了内存绑定功能,可以通过如下命令查看,注意其取值表示节点的编号:

      # docker inspect bf32de0d09fe | grep "CpusetMems"
                  "CpusetMems": "0",

      在不同的机器上查看时, 绑定的NUMA节点不固定,CpusetCpus数字可能不一致。

      Containerd运行时可以运行如下命令查看容器的可调度CPU范围。
      # crictl inspect bf32de0d09fe | grep "cpuset_cpus"
                  "cpuset_cpus": "0-23",

      如果NUMA节点亲和失败,则可能无法查找到cpuset_cpus输出。

    4. 查询系统的NUMA信息,与上述的容器可调度CPU范围进行对比,一致则表示亲和于对应NUMA节点。
      # lscpu
      ...
      NUMA node0 CPU(s):               0-23
      NUMA node1 CPU(s):               24-47
      NUMA node2 CPU(s):               48-71
      NUMA node3 CPU(s):               72-95
      ...

      “node0”表示编号为“0”的NUMA节点,“0-23”表示NUMA节点内的CPU编号。

  5. 此外,对于系统中GPU的NUMA分布,可以运行如下命令查看,其中“0200”为网卡设备号。
    lspci -vvv -d :0200 | grep NUMA

    回显如下所示:

    NUMA node: 0
    NUMA node: 0
    NUMA node: 0
    NUMA node: 0
    NUMA node: 0
    NUMA node: 2
    NUMA node: 2
    NUMA node: 2
    NUMA node: 2
    NUMA node: 2