头节点配置#

本节介绍在 BCM 头节点上执行的配置步骤。

  1. 登录到分配给 externalnet 的 BCM 头节点。

    ssh <externalnet>
    
  2. 运行 request-license 命令安装集群许可证。提供产品密钥。

     1# request-license
     2Product Key (XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX): 123456-123456-123456-123456
     3Country Name (2 letter code): US
     4State or Province Name (full name): California
     5Locality Name (e.g. city): Santa Clara
     6Organization Name (e.g. company): NVIDIA
     7Organizational Unit Name (e.g. department): TME
     8Cluster Name: BasePOD
     9Private key data saved to /cm/local/apps/cmd/etc/cluster.key.new
    10
    11Warning: Permanently added 'basepod-head1' (ECDSA) to the list of known hosts.
    12MAC Address of primary head node (basepod-head1) for ens1f1np1 [04:3F:72:E7:67:1F]:
    13Will this cluster use a high-availability setup with 2 head nodes? [y/N] n
    14Certificate request data saved to /cm/local/apps/cmd/etc/cluster.csr.new
    15Submit certificate request to http://licensing.brightcomputing.com/licensing/index.cgi ? [Y/n] Y
    16Contacting http://licensing.brightcomputing.com/licensing/index.cgi...
    17
    18License granted.
    19License data was saved to /cm/local/apps/cmd/etc/cluster.pem.new
    20Install license? [Y/n] Y
    21========= Certificate Information ========
    22Version:                    7.0
    23Edition:                    Advanced
    24Common name:                BasePod
    25Organization:               NVIDIA
    26Organizational unit:        Org
    27Locality:                   Santa Clara
    28State:                      CA
    29Country:                    US
    30Serial:                     2102313
    31Starting date:              21/Nov/2022
    32Expiration date:            17/Jan/2029
    33MAC address / Cloud ID:     04:3F:72:E7:67:1F
    34Licensed tokens:            1000
    35Accounting & Reporting:     Yes
    36Allow edge sites:           Yes
    37License type:               Commercial
    38==========================================
    39Is the license information correct ? [Y/n] Y
    
  3. 备份默认软件镜像。

    备份镜像可用于创建其他软件镜像。

    1# cmsh
    2% softwareimage
    3% clone default-image default-image-orig
    4% commit
    
  4. 等待 ramdisk 重新生成并显示以下文本。

    Mon Feb 26 11:04:14 2024 [notice] bcm10-headnode: Initial ramdisk for image default-image-orig was generated successfully
    
  5. 通过克隆默认软件镜像创建 DGX 节点类别。

    此软件镜像将进一步配置并配置到 dgx 节点上。

    1% softwareimage
    2% clone default-image dgx-RHEL-image
    3% commit
    
  6. 将所需的内核模块添加到 dgx-RHEL-image 软件镜像。

    1% /
    2% softwareimage
    3% use dgx-RHEL-image
    4% kernelmodules
    5% add bonding
    6% softwareimage commit
    
  7. 修改 dgx-RHEL-image 的 disksetup。

     1% category
     2% add dgx-a100
     3% set softwareimage dgx-rhel-image
     4% set disksetup
     5Modify the /var directory size to match the following:
     6    <partition id="a2">
     7            <size>58G</size>
     8            <type>linux</type>
     9            <filesystem>xfs</filesystem>
    10            <mountPoint>/var</mountPoint><mountOptions>defaults,noatime,nodiratime</mountOptions>
    11    </partition>
    12% commit
    
  8. 通过克隆默认软件镜像创建 K8s 软件镜像。

    此软件镜像将进一步配置并配置到 K8s 主节点上。

    1% softwareimage
    2% clone default-image k8s-master-image
    3% commit
    
  9. 将所需的内核模块添加到 k8s-master-image 软件镜像。

    1% /
    2% softwareimage
    3% use k8s-master-image
    4% kernelmodules
    5% add mlx5_core
    6% add bonding
    7% softwareimage commit
    
  10. 创建 k8s-master 节点类别,并将 k8s-master-image 软件镜像分配给它。

    分配给 k8s-master 类别的所有节点都将配置 k8s-master-image 软件镜像。

    1% category
    2% clone default k8s-master
    3% set softwareimage k8s-master-image
    4% commit
    
  11. 创建 DGX 节点。

    node01 是在头节点安装期间创建的。克隆 node01 以创建 DGX 节点,初始名称为 node02、node03、node04 和 node05。

    1% device
    2% foreach --clone node01 -n node02..node05 ()
    3% commit
    
  12. 重命名 DGX 节点,以便稍后更容易识别。

    1% use node02
    2% set hostname dgx01
    3% use node03
    4% set hostname dgx02
    5% use node04
    6% set hostname dgx03
    7% use node05
    8% set hostname dgx04
    9% device commit
    
  13. 克隆 node01 以创建 K8s 控制平面节点,初始名称为 node05、node06 和 node07。

    1% device
    2% foreach --clone node01 -n node06..node08 ()
    3% commit
    
  14. 重命名 K8s 主节点,以便更容易识别。

    1% device
    2% use node06
    3% set hostname knode01
    4% use node07
    5% set hostname knode02
    6% use node08
    7% set hostname knode03
    8% device commit
    
  15. 重命名 node01。

    此步骤的目的是指定 node01 仅为模板。

    1% device
    2% use node01
    3% set hostname template01
    4% commit
    
  16. 将 DGX 节点分配给 dgx-a100 类别。

    % foreach -n dgx01..dgx04 (set category dgx-a100)
    
  17. 将 K8S 节点分配给 k8s-master 节点类别。

    1% foreach -n knode01..knode03 (set category k8s-master)
    2% commit
    
  18. 检查节点及其类别。

    设备列表使用额外的选项,以使格式更易于阅读。

     1[bcm10-headnode->device]% device list -f hostname:20,category:10,ip:20,status:15
     2hostname (key)       category   ip                   status
     3-------------------- ---------- -------------------- ---------------
     4bcm10-headnode                  10.184.71.4          [   UP   ], he+
     5dgx01                dgx-a100   10.184.71.4          [  DOWN  ], un+
     6dgx02                dgx-a100   10.184.71.5          [  DOWN  ], un+
     7dgx03                dgx-a100   10.184.71.6          [  DOWN  ], un+
     8dgx04                dgx-a100   10.184.71.7          [  DOWN  ], un+
     9knode01              k8s-master 10.184.71.7          [  DOWN  ], un+
    10knode02              k8s-master 10.184.71.7          [  DOWN  ], un+
    11knode03              k8s-master 10.184.71.7          [  DOWN  ], un+
    12template01           default    10.184.71.4          [  DOWN  ], un+
    
  19. 为 InfiniBand (ibnet) 添加网络

    1% network
    2% add ibnet
    3% set domainname ibnet.cluster.local
    4% set baseaddress 10.126.0.0
    5% set netmaskbits 16
    6% set mtu 2048
    7% commit
    
  20. 验证结果

    1[bcm10-headnode->network[ibnet]]% list -f name:20,type:10,netmaskbits:10,baseaddress:15,domainname:20
    2name (key)           type       netmaskbit baseaddress     domainname
    3-------------------- ---------- ---------- --------------- --------------------
    4externalnet          External   26         10.184.70.192   nvidia.com
    5globalnet            Global     0          0.0.0.0         cm.cluster
    6ibnet                Internal   16         0.0.0.0         ibnet.cluster.local
    7internalnet          Internal   26         10.184.71.0     eth.cluster
    8ipminet              Internal   26         10.184.70.64    ipmi.cluster
    
  21. 配置 BCM 以允许 MAC 地址进行 PXE 启动

    在文件 /cm/local/apps/cmd/etc/cmd.conf 中,取消注释 AdvancedConfig 参数并修改为 DeviceResolveAnyMAC=1

    1AdvancedConfig = { "DeviceResolveAnyMAC=1" }
    
  22. 重启 CMDaemon 以启用从绑定接口的可靠 PXE 启动。

    # systemctl restart cmd
    
  23. 在 DGX 节点上配置配置接口。

    使用 cmsh for 循环快速添加新的物理接口和 bond0 接口。这将更新所有四个 DGX A100 系统。

    1# cmsh
    2% device
    3% foreach -n dgx01..dgx04 (interfaces; add physical enp225s0f1; add physical enp97s0f1; add physical enp225s0f1np1; add physical enp97s0f1np1; commit)
    4% foreach -n dgx01..dgx04 (interfaces; add bond bond0; set interfaces enp225s0f1 enp97s0f1 enp225s0f1np1 enp97s0f1np1; set network internalnet; set mode 4; set options miimon=100; commit)
    
  24. 根据需要设置物理接口 MAC 地址,并设置 ipmi0 和 bond0 接口(如果需要更改)。

    这需要在每个 DGX 系统上重复执行(此处显示的是单个系统)。

     1# cmsh
     2% device
     3% use dgx01
     4% interfaces
     5% set enp225s0f1 mac B8:CE:F6:2F:08:69
     6% set enp97s0f1 mac B8:CE:F6:2D:0E:A7
     7% set enp225s0f1np1 mac B8:CE:F6:2F:08:69
     8% set enp97s0f1np1 mac B8:CE:F6:2D:0E:A7
     9% set ipmi0 ip 10.227.20.69
    10% set bond0 ip 10.227.48.13
    11% commit
    12% list
    13Type         Network device name    IP               Network          Start if
    14------------ ---------------------- ---------------- ---------------- --------
    15bmc          ipmi0                  10.184.70.75     ipminet          always
    16bond         bond0                  10.184.71.11     internalnet      always
    17physical     BOOTIF [prov]          10.184.71.4      internalnet      always
    18physical     enp225s0f1 (bond0)     0.0.0.0                           always
    19physical     enp225s0f1np1 (bond0)  0.0.0.0                           always
    20physical     enp97s0f1 (bond0)      0.0.0.0                           always
    21physical     enp97s0f1np1 (bond0)   0.0.0.0                           always
    
  25. 将 bond0 接口设置为配置接口,并删除 bootif。此处应再次使用 for 循环。

    1% /                     # go to top level of cmsh
    2% device
    3% foreach -n dgx01..dgx04 (set provisioninginterface bond0; commit; interfaces; remove bootif; commit)
    
  26. 验证配置。

     1% device
     2% use dgx01
     3% get provisioninginterface
     4bond0
     5% interfaces
     6% list
     7Type         Network device name    IP               Network          Start if
     8------------ ---------------------- ---------------- ---------------- --------
     9bmc          ipmi0                  10.184.70.75     ipminet          always
    10bond         bond0 [prov]           10.184.71.11     internalnet      always
    11physical     enp225s0f1 (bond0)     0.0.0.0                           always
    12physical     enp225s0f1np1 (bond0)  0.0.0.0                           always
    13physical     enp97s0f1 (bond0)      0.0.0.0                           always
    14physical     enp97s0f1np1 (bond0)   0.0.0.0                           always
    
  27. 在 K8s 节点上配置配置接口。

    本节中的所有后续步骤都必须为三个 K8s 节点中的每一个运行。使用 cmsh for 循环快速添加新的物理接口和 bond0 接口。这将更新所有 3 个 knode。

    1% /                     # got to top level of CMSH
    2% device
    3% foreach -n knode01..knode03 (interfaces; add physical ens1f1; add physical ens2f1; add physical ens1f1np1; add physical ens2f1np1; commit)
    4% foreach -n knode01..knode03 (interfaces; add bond bond0; set interfaces ens1f1np1 ens2f1np1 ens1f1 ens2f1; set network internalnet; set mode 4; set options miimon=100; commit)
    
  28. 根据需要设置物理接口 MAC 地址,并设置 ipmi0 和 bond0 接口(如果需要更改)——这需要在每个 knode 系统上重复执行(此处显示的是单个系统)。

     1% /
     2% device
     3% use knode01
     4% interfaces
     5% set ens1f1 mac 04:3F:72:E7:64:97
     6% set ens1f1np1 mac 04:3F:72:E7:64:97
     7% set ens2f1 mac 0C:42:A1:79:9B:15
     8% set ens2f1np1 mac 0C:42:A1:79:9B:15
     9% set ipmi0 ip 10.184.70.72
    10% set bond0 ip 10.227.48.30
    11% commit
    12% list
    13Type         Network device name  IP               Network          Start if
    14------------ -------------------- ---------------- ---------------- --------
    15bmc          ipmi0                10.184.70.72     ipminet          always
    16bond         bond0                10.184.71.8      internalnet      always
    17physical     BOOTIF [prov]        10.184.71.7      internalnet      always
    18physical     ens1f1 (bond0)       0.0.0.0                           always
    19physical     ens1f1np1 (bond0)    0.0.0.0                           always
    20physical     ens2f1 (bond0)       0.0.0.0                           always
    21physical     ens2f1np1 (bond0)    0.0.0.0                           always
    
  29. 将 bond0 接口设置为配置接口,并删除 bootif。此处应再次使用 for 循环。

    1% /                     # go to top level of cmsh
    2% device
    3% foreach -n knode01..knode03 (set provisioninginterface bond0; commit; interfaces; remove bootif; commit)
    
  30. 在 DGX 节点上配置 InfiniBand 接口。

    以下过程添加四个物理 InfiniBand 接口,并且必须为每个 DGX 节点运行。使用 cmsh for 循环快速添加新的物理 InfiniBand 接口。这将更新所有四个 DGX 节点。

    1% /                     # got to top level of CMSH
    2% device
    3% foreach -n dgx01..dgx04 (interfaces; add physical ibp12s0; set network ibnet; add physical ibp141s0; set network ibnet; add physical ibp186s0; set network ibnet; add physical ibp75s0; set network ibnet; commit)
    
  31. 为每个物理 InfiniBand 接口设置 IP 地址——这需要在每个 DGX 系统上重复执行(此处显示的是单个系统)。确保将 IP 的第 4 个八位字节递增 1(因此 DGX02 的 ibp12s0 将为 10.126.0.14)

     1% /                     # go to top level of CMSH
     2% device
     3% use dgx01
     4% interfaces
     5% set ibp12s0 ip 10.126.0.13
     6% set ibp141s0 ip 10.126.2.13
     7% set ibp186s0 ip 10.126.3.13
     8% set ibp75s0 ip 10.126.1.13
     9% commit
    10% list Type         Network device name    IP               Network          Start if
    11------------ ---------------------- ---------------- ---------------- --------
    12bmc          ipmi0                  10.184.70.75     ipminet          always
    13bond         bond0 [prov]           10.184.71.11     internalnet      always
    14physical     enp225s0f1 (bond0)     0.0.0.0                           always
    15physical     enp225s0f1np1 (bond0)  0.0.0.0                           always
    16physical     enp97s0f1 (bond0)      0.0.0.0                           always
    17physical     enp97s0f1np1 (bond0)   0.0.0.0                           always
    18physical     ibp12s0                10.126.0.13      ibnet            always
    19physical     ibp141s0               10.126.2.13      ibnet            always
    20physical     ibp186s0               10.126.3.13      ibnet            always
    21physical     ibp75s0                10.126.1.13      ibnet            always
    
  32. 通过将每个节点的配置接口的 MAC 地址设置为站点调查中列出的 MAC 地址来识别节点。

     1% /
     2% device
     3% set dgx01 mac b8:ce:f6:2f:08:69
     4% set dgx02 mac 0c:42:a1:54:32:a7
     5% set dgx03 mac 0c:42:a1:0a:7a:51
     6% set dgx04 mac 1c:34:da:29:17:6e
     7% set knode01 mac 04:3F:72:E7:64:97
     8% set knode02 mac 04:3F:72:D3:FC:EB
     9% set knode03 mac 04:3F:72:D3:FC:DB
    10% foreach -c dgx-a100,k8s-master (get mac)
    11B8:CE:F6:2F:08:69
    120C:42:A1:54:32:A7
    130C:42:A1:0A:7A:51
    141C:34:DA:29:17:6E
    1504:3F:72:E7:64:97
    1604:3F:72:D3:FC:EB
    1704:3F:72:D3:FC:DB
    18% commit
    
  33. 在 BCM 头节点上更新 K8s 主节点软件镜像。

    1# cm-chroot-sw-img /cm/images/k8s-master-image/
    2# subscription-manager register
    3# dnf update && dnf -y upgrade --nobest
    4# exit
    
  34. 将 knode OS 内核版本设置为最新的可用版本。

    如果您遇到网络问题,则可能是由 DNSSEC 信任锚文件引起的。要解决此问题,请按照此处已知问题部分下的说明进行操作。

    1# cmsh
    2% softwareimage
    3% use k8s-master-image
    4% set kernelversion 5.14.0-284.11.1.el9_2.x86_64
    5% commit
    
  35. 将 NVIDIA 软件安装到 DGX RHEL 镜像上。

    NVIDIA 驱动程序将在 Kubernetes 设置期间自动更新。确保您在此处指定的版本与 NVIDIA 驱动程序将升级到的版本匹配。如果驱动程序更新到与您指定的版本不同的版本,则可能会导致 NVIDIA 软件出现问题。

     1# cm-chroot-sw-img /cm/images/dgx-rhel-image/
     2# subscription-manager register
     3# sudo subscription-manager release --set 9.3
     4# sudo dnf install -y https://repo.download.nvidia.com/baseos/el/el-files/9/nvidia-repo-setup-22.12-1.el9.x86_64.rpm
     5# sudo dnf update -y --nobest
     6# sudo dnf group install -y 'DGX A100 Configurations' --allowerasing
     7# sudo /usr/bin/configure_raid_array.py -c -f
     8# sudo dnf module install –y --nobest nvidia-driver:550-open/{fm,src} --allowerasing
     9# sudo dnf install -y nv-persistence-mode nvidia-fm-enable
    10# sudo dnf group install -y --allowerasing 'NVIDIA Container Runtime'
    11# exit
    
  36. 将 DGX OS 内核版本设置为最新的可用版本。

    1# cmsh
    2% softwareimage
    3% use dgx-rhel-image
    4% set kernelversion 5.14.0-284.11.1.el9_2.x86_64
    5% commit
    
  37. 开启电源并配置集群节点。

    现在,所需的安装后配置已完成,是时候开启电源并配置集群节点了。初始配置完成后,电源控制将可从 BCM 内部使用——使用 cmsh 或 Base View。但是对于此初始配置,必须在 BCM 外部为其供电(即,使用电源按钮或 KVM)。节点完成 BIOS 过程需要几分钟时间。之后,节点状态将随着节点的配置而进展。查看 /var/log/messages 和 /var/log/node-installer 日志文件以验证一切进展顺利。