集群配置#
本文档是 NVIDIA DGX BasePOD:部署指南,以 NVIDIA DGX A100 系统为例 的一部分。
注意
在完成本文档中的步骤之前,请先完成 部署。
警告
#
提示符表示您在头节点上以 root 用户身份执行的命令。%
提示符表示您在 cmsh 中执行的命令。
集群配置步骤#
登录到分配给 externalnet 的 Base Command Manager (BCM) 头节点。
1ssh <externalnet>
通过运行 request-license 命令安装集群许可证。由于使用了 HA,请指定辅助头节点的第一个 NIC 的 MAC 地址,以便在发生故障转移时它也可以提供 BCM 许可证。
此示例适用于具有互联网访问权限的头节点。对于气隙集群,请参阅 NVIDIA Base Command Manager 安装手册 第 4.3.3 节中的“集群外 WWW 访问”。
1# request-license 2Product Key (XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX): 123456-123456-123456-123456 3...
备份默认软件镜像。备份镜像可用于创建其他软件镜像。
1# cmsh 2% softwareimage 3% clone default-image default-image-orig 4% commit等待 ramdisk 重新生成并显示以下文本。
1Wed Jul 26 09:00:53 2023 [notice] bcm10-headnode: Initial ramdisk for image default-image-orig was generated successfully
备份 DGX 软件镜像。备份镜像可用于创建其他软件镜像。
1% softwareimage 2% clone dgx-os-6.0-a100-image dgx-os-6.0-a100-image-orig 3% commit
等待 ramdisk 重新生成并显示以下文本。
1Wed Jul 26 09:01:11 2023 [notice] bcm10-headnode: Initial ramdisk for image dgx-a100-image-orig was generated successfully
通过克隆默认软件镜像来创建 K8s 软件镜像。此软件镜像将被进一步配置并配置到 K8s 控制平面节点上。等待 ramdisk 重新生成。
1% softwareimage 2% clone default-image k8s-master-image 3% commit
将所需的内核模块添加到 k8s-master-image 软件镜像。
1% / 2% softwareimage 3% use k8s-master-image 4% kernelmodules 5% add mlx5_core 6% add bonding 7% softwareimage commit
创建 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
创建 DGX 节点。node01 是在头节点安装期间创建的。克隆 node01 以创建 DGX 节点,初始名称为 node02、node03、node04 和 node05。
1% device 2% foreach --clone node01 -n node02..node05 () 3% commit
重命名 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
克隆 node01 以创建 K8s 控制平面节点,初始名称为 node05、node06 和 node07。
1% device 2% foreach --clone node01 -n node06..node08 () 3% commit
重命名 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
重命名 node01。此步骤的目的是指定 node01 仅为模板。
1% device 2% use node01 3% set hostname template01 4% commit
将 DGX 节点分配到正确的节点类别;dgx-a100。
1% foreach -n dgx01..dgx04 (set category dgx-a100)
将 K8S 节点分配到 k8s-master 节点类别。
1% foreach -n knode01..knode03 (set category k8s-master) 2% commit
检查节点及其类别。额外的选项用于设备列表,以使格式更具可读性。
1% device list -f hostname:20,category:10,ip:20,status:15 2hostname (key) category ip status 3-------------------- ---------- -------------------- --------------- 4bcm10-headnode 10.227.48.8 [ UP ] 5dgx01 dgx-a100 10.227.48.5 [ DOWN ] 6dgx02 dgx-a100 10.227.48.6 [ DOWN ] 7dgx03 dgx-a100 10.227.48.7 [ DOWN ] 8dgx04 dgx-a100 10.227.48.4 [ DOWN ] 9knode01 k8s-master 10.227.48.4 [ DOWN ] 10knode02 k8s-master 10.227.48.4 [ DOWN ] 11knode03 k8s-master 10.227.48.4 [ DOWN ] 12template01 default 10.227.48.4 [ DOWN ]
网络配置#
为 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 8% add ibnet
验证结果。
1% list -f name:20,type:10,netmaskbits:10,baseaddress:15,domainname:20 2name (key) type netmaskbit baseaddress domainname 3-------------------- ---------- ---------- --------------- -------------------- 4externalnet External 26 10.227.52.0 nvidia.com 5globalnet Global 0 0.0.0.0 cm.cluster 6ibnet Internal 16 10.126.0.0 ibnet.cluster.local 7internalnet Internal 26 10.227.48.0 eth.cluster 8ipminet Internal 26 10.227.20.64 ipmi.cluster
确保头节点接口配置正确。
1% device 2% use bcm10-headnode 3% interfaces 4% list 5Type Network device name IP Network Start if 6------------ -------------------- ---------------- ---------------- -------- 7bmc ipmi0 10.227.20.91 ipminet always 8physical ens10f0 10.227.52.8 externalnet always 9physical ens10f1 10.227.20.126 ipminet always 10physical ens1f1np1 [prov] 10.227.48.8 internalnet always
如果缺少或未配置任何接口,请添加任何缺少的设备并配置其网络(如适用)。
如果网络接口已更改,请重启头节点。
1% / 2% device 3% use bcm10-headnode 4% reboot 5Reboot in progress for: bcm10-headnode
为节点类别配置磁盘布局#
使用 BCM 管理 DGX BasePOD 中的节点的一部分是定义磁盘分区。每个 DGX BasePOD 节点类别都包括 K8s 控制平面和 DGX 节点类别。DGX 类别已预先配置了正确的磁盘分区,开箱即用。
这些步骤详细说明了如何为 k8s-master 类别配置磁盘布局。
扩充 k8s-master 类别的 disksetup。
对于 K8s 控制平面节点,将在磁盘的开头创建一个 100 MB 的 EFI 系统分区,磁盘的其余部分作为单个大分区专用于操作系统。请注意,此磁盘设置没有交换分区。
配置文件引用 /dev/nvme0n1 作为使用的块设备。这可能需要更改以匹配用作 K8s 控制平面节点的系统上使用的特定设备名称。
将以下文本保存到 /cm/local/apps/cmd/etc/htdocs/disk-setup/k8s-disksetup.xml,并在考虑到目标系统的任何必要更改(如上所述)。
1<?xml version="1.0" encoding="ISO-8859-1"?> 2<diskSetup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 3<device> 4 5 <blockdev>/dev/nvme0n1</blockdev> 6 7 <partition id="a0" partitiontype="esp"> 8 <size>100M</size> 9 <type>linux</type> 10 <filesystem>fat</filesystem> 11 <mountPoint>/boot/efi</mountPoint> 12 <mountOptions>defaults,noatime,nodiratime</mountOptions> 13 </partition> 14 <partition id="a1"> 15 <size>max</size> 16 <type>linux</type> 17 <filesystem>xfs</filesystem> 18 <mountPoint>/</mountPoint> 19 <mountOptions>defaults,noatime,nodiratime</mountOptions> 20 </partition> 21</device> 22</diskSetup>
将此磁盘布局分配给 k8s-master 节点类别。
1$ cmsh 2% category 3% use k8s-master 4% set disksetup /cm/local/apps/cmd/etc/htdocs/disk-setup/k8s-disksetup.xml 5% commit
配置节点网络接口#
配置 BCM 以允许 MAC 地址进行 PXE 启动#
使用 root(而非 cmsh)shell。
在 /cm/local/apps/cmd/etc/cmd.conf 中,取消注释 AdvancedConfig 参数。
1AdvancedConfig = { "DeviceResolveAnyMAC=1" } # modified value
重启 CMDaemon 以启用从绑定接口可靠的 PXE 启动。
1# systemctl restart cmd
重启 CMDaemon 将断开 cmsh 会话。在 CMDaemon 重启后,键入 connect 重新连接。或者输入 exit,然后重启 cmsh。
在 DGX 节点上配置配置接口#
以下步骤在头节点上执行,应在所有 DGX 系统上运行。
警告
仔细检查每个接口的 MAC 地址以及 bond0 接口的 IP 地址。这里的错误将难以诊断。
使用 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)
根据需要设置物理接口 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.227.20.69 ipminet always 16physical BOOTIF [prov] 10.227.48.4 internalnet always 17bond bond0 10.227.48.13 internalnet always 18physical enp225s0f1 0.0.0.0 always 19physical enp225s0f1np1 0.0.0.0 always 20physical enp97s0f1 0.0.0.0 always 21physical enp97s0f1np1 0.0.0.0 always
使用 foreach 循环,将 bond0 接口设置为 provisioninginterface 并删除 bootif。
1% / # go to top level of cmsh 2% device 3% foreach -n dgx01..dgx04 (set provisioninginterface bond0; commit; interfaces; remove bootif; commit)
验证配置。
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.227.20.69 ipminet always 10bond bond0 [prov] 10.227.48.13 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
在 Kubernetes 节点上配置配置接口#
本节中的所有以下步骤都必须为三个 Kubernetes (K8s) 节点中的每个节点运行。
使用 cmsh for 循环快速添加新的物理接口和 bond0 接口。这将更新所有三个 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)
根据需要设置物理接口 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% add bond bond0 10% set ipmi0 ip 10.227.20.80 11% set bond0 ip 10.227.48.30 12% list 13% commit 14 15Type Network device name IP Network Start if 16------------ -------------------- ---------------- ---------------- -------- 17bmc ipmi0 10.227.20.80 ipminet always 18physical BOOTIF [prov] 10.227.48.4 internalnet always 19bond bond0 10.227.48.30 internalnet always 20physical ens1f1 (bond0) 0.0.0.0 always 21physical ens1f1np1 (bond0) 0.0.0.0 always 22physical ens2f1 (bond0) 0.0.0.0 always 23physical ens2f1np1 (bond0) 0.0.0.0 always
将 bond0 接口设置为 provisioninginterface,并删除 bootif。应再次在此处使用 for 循环。
1% / 2% device 3% foreach -n knode01..knode03 (set provisioninginterface bond0; commit; interfaces; remove bootif; commit)
在 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)
为每个物理 InfiniBand 接口设置 IP 地址— 这需要在每个 DGX 系统上重复(此处显示单个系统)。
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 11Type Network device name IP Network Start if 12------------ ---------------------- ---------------- ---------------- -------- 13bmc ipmi0 10.227.20.69 ipminet always 14bond bond0 [prov] 10.227.48.13 internalnet always 15physical enp225s0f1 (bond0) 0.0.0.0 always 16physical enp225s0f1np1 (bond0) 0.0.0.0 always 17physical enp97s0f1 (bond0) 0.0.0.0 always 18physical enp97s0f1np1 (bond0) 0.0.0.0 always 19physical ibp12s0 10.126.0.13 ibnet always 20physical ibp141s0 10.126.2.13 ibnet always 21physical ibp186s0 10.126.3.13 ibnet always 22physical ibp75s0 10.126.1.13 ibnet always
识别集群节点#
通过为每个节点的配置接口设置 MAC 地址为站点勘测中列出的 MAC 地址来识别节点。
1% device 2% set dgx01 mac b8:ce:f6:2f:08:69 3% set dgx02 mac 0c:42:a1:54:32:a7 4% set dgx03 mac 0c:42:a1:0a:7a:51 5% set dgx04 mac 1c:34:da:29:17:6e 6% set knode01 mac 04:3F:72:E7:64:97 7% set knode02 mac 04:3F:72:D3:FC:EB 8% set knode03 mac 04:3F:72:D3:FC:DB 9% foreach -c dgx-a100,k8s-master (get mac) 10B8:CE:F6:2F:08:69 110C:42:A1:54:32:A7 120C:42:A1:0A:7A:51 131C:34:DA:29:17:6E 1404:3F:72:E7:64:97 1504:3F:72:D3:FC:EB 1604:3F:72:D3:FC:DB
如果所有 MAC 地址都设置正确,请提交更改。
1% device commit 2% quit 3% commit
下一步#
完成此页面上的步骤后,请参阅 开启电源并配置集群节点。