练习 - 创建 cloud-init 脚本以用于 Azure CycleCloud

已完成

为群集预配节点时,你可能希望能够先在操作系统启动过程中执行自定义配置任务,然后计划程序驱动的更改才生效。 例如,这些任务可能包括更新路径环境变量、配置域名系统 (DNS) 名称解析设置,或将节点绑定到 Microsoft Entra 域服务 (AD DS) 域。

为了实现此功能,你决定探索在 Azure CycleCloud 群集中使用 cloud-init,并使用用于修改每个节点上本地文件内容的简单 Bash 脚本对其进行测试。 你打算通过连接到群集节点并查看已修改文件的内容来验证结果。

注意

编写 cloud-init 脚本时,可以使用目标节点上运行的操作系统可识别并处理的任何脚本或配置方法,包括传统的 shell 脚本、Python 和 YAML。

在本练习中,您将执行以下任务:

  • 任务 1:为 Azure CycleCloud 群集节点配置基于 SSH 的身份验证
  • 任务 2:向群集节点添加 cloud-init 脚本
  • 任务 3:在计划程序节点上验证 cloud-init 功能
  • 任务 4:在计算节点上验证 cloud-init 功能
  • 任务 5:清理练习环境

注意

在开始本练习之前,请确保已成功完成上一个练习。

任务 1:为 Azure CycleCloud 群集节点配置基于 SSH 的身份验证

为了验证 cloud-init 脚本的执行,你将使用 Azure CycleCloud CLI 从 Azure Cloud Shell 连接到群集节点。 此连接依赖于基于 SSH 密钥的身份验证,因此需要将与分发给群集节点的公钥对应的私钥上传到 Azure Cloud Shell 主目录。

  1. 导航到 Azure 门户,并在出现提示时,使用 Microsoft 帐户或 Microsoft Entra 帐户进行身份验证,该帐户在本模块中使用的 Azure 订阅中具有参与者或所有者角色。

  2. 在 Azure 门户中,通过选择搜索框旁边的工具栏中的 Cloud Shell 图标来打开 Cloud Shell,并确保正在运行 Bash 会话。

  3. 在 Azure Cloud Shell 窗格中,在窗格的工具栏中,选择第四个图标,该图标显示带有一对指向相反方向的垂直箭头的页面。 然后,在下拉菜单中,选择“上传”。

  4. 在“打开”对话框中,导航到包含私钥的“.pem”文件的位置,然后选择“打开”。

  5. 在 Cloud Shell 中运行以下命令,以将上传的“.pem”文件移动到正确的位置并配置必要的文件级权限(将 <private_key.pem> 占位符替换为“.pem”文件的名称)

    mkdir -p ~/.ssh
    mv private_key.pem ~/.ssh
    chmod 600 ~/.ssh/cc-ssh-keys.pem
    

任务 2:向群集节点添加 cloud-init 脚本

将脚本添加到群集节点的选项可直接从 Azure CycleCloud 图形界面获取。 你将使用该选项为计划程序节点和计算节点分配相同的 cloud-init 脚本,并验证其功能。 该脚本将条目“10.10.10.10 cc.contoso.com”添加到“/etc/hosts”文件。

  1. 如果尚未连接到 Azure CycleCloud Web 应用程序,请打开另一个浏览器窗口并导航到 URL https://<IP_address> 。 如果系统提示,请确认要继续操作。

  2. 如果系统提示进行身份验证,请提供具有管理员角色的 Azure CycleCloud 应用程序用户帐户的凭据进行登录。

  3. 在 Azure CycleCloud 图形界面中,导航到“群集”页面。 在群集列表中,选择“contoso-custom-slurm-lab-cluster”条目,然后选择“编辑”

  4. 在“编辑 contoso-custom-slurm-lab-cluster”弹出窗口中,选择“Cloud-init”条目,然后在“Cloud-init 配置”部分的“计划程序”选项卡上输入以下脚本

    #!/bin/bash
    echo "10.10.10.10 www.contoso.com" >> /etc/hosts
    

    Screenshot of the Cloud-init tab of the Edit contoso-custom-slurm-lab-cluster pop-up window in the Azure CycleCloud web application.

  5. 在同一弹出窗口中,选中“Cloud-init”条目,并选择剩余的每个选项卡(包括“cuda”、“hpc”和“htc”),然后输入相同的脚本。 选择“保存”。

任务 3:在计划程序节点上验证 cloud-init 功能

若要在计划程序节点上验证 cloud-init 功能,请启动群集。 这将触发计划程序节点的预配。 节点运行后,你将能够从 Azure Cloud Shell 连接到该节点,并验证“/etc/hosts”文件是否包含条目“10.10.10.10 www.contoso.com”。

  1. 在显示 Azure CycleCloud Web 应用程序的浏览器窗口中,选择“contoso-custom-slurm-lab-cluster”页面上的“启动”链接。 出现确认提示时,请选择“确定”。

    注意

    如果群集已在运行,则需要终止并重新启动该群集才能应用更新的配置,否则该配置在后续步骤中将不可见。

  2. 在节点列表中,选择“计划程序”条目并在“详细信息”窗格中监视其状态,等待它从“正在获取”变为“就绪”

    注意

    这可能需要大约三分钟。

  3. 在“详细信息”窗格中,选择“连接”。 在“连接到节点: 计划程序”弹出窗口中的“使用 CycleCloud CLI”部分,选择包含使你能够连接到计划程序节点的命令的条目,然后选择“关闭”:

    Screenshot of the Connect to node: scheduler pop-up window in the Azure CycleCloud web application.

    注意

    该命令的格式应为 cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster

  4. 切换到 Cloud Shell 窗格中的 Web 浏览器窗口,并运行在上一步中复制的命令。

    注意

    该命令应生成以下格式的输出:

    m@Azure:~$ cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster
    Connecting to cc-admin@40.87.52.25 (contoso-custom-slurm-lab-cluster scheduler) using SSH
    [cc-admin@ip-0A000304 ~]$
    
  5. 连接到计划程序节点时,请运行以下命令,以验证“/etc/hosts”文件是否包含条目“10.10.10.10 www.contoso.com”:

    grep "10.10.10.10 www.contoso.com" /etc/hosts
    

    注意

    该命令应生成以下格式的输出:

    [cc-admin@ip-0A000304 ~]$ grep "10.10.10.10 www.contoso.com" /etc/hosts
    10.10.10.10 www.contoso.com
    

任务 4:在计算节点上验证 cloud-init 功能

现在,你将重复执行等效的步骤序列,以在计算节点上验证 cloud-init 功能。

重要

需要先删除并重新分配相应的虚拟机规模集,然后才能应用等效的过程在计算节点上验证 cloud-init 功能。 此步骤特定于基于 Slurm 的群集,因为在这种情况下,计划程序自动缩放集成需要 Azure CycleCloud 预填充计算节点。 因此,之前在本练习中应用的 cloud-init 配置不会影响现有节点。

  1. 连接到计划程序节点时,在 Cloud Shell 中运行以下命令以删除和重新分配 Azure CycleCloud 群集中的计算节点,并终止与计划程序节点的连接:

    sudo -i
    cd /opt/cycle/jetpack/system/bootstrap/slurm
    ./cyclecloud_slurm.sh remove_nodes
    ./cyclecloud_slurm.sh scale
    exit
    exit
    

    注意

    此步骤完成后,会显示一条消息,其中指出“正在尝试删除以下节点”,以及“重新缩放群集完成”

  2. 在计算机上,切换到显示 Azure CycleCloud Web 应用程序的“contoso-custom-slurm-lab-cluster”页面的 Web 浏览器窗口。 在“节点”选项卡上选择“htc”行,在“详细信息”窗格中选择“htc-1”条目,然后选择“操作”选项卡标头。 在下拉菜单中,选择“启动”,当系统提示确认时,选择“确定”

    Screenshot of the Actions menu on the contoso-custom-slurm-lab-cluster page in the Azure CycleCloud web application.

  3. 在“详细信息”窗格中,监视新启动的节点并等待其状态从“正在获取”变为“就绪”

    注意

    这可能需要大约三分钟。

  4. 在“详细信息”窗格中,选择“连接”。 在“连接到节点: htc-1”弹出窗口中,选择“使用 CycleCloud CLI”部分中包含使你能够连接到计划程序节点的命令的条目,然后选择“关闭”

    Screenshot of the Connect to node: htc-1 pop-up window in the Azure CycleCloud web application.

    注意

    该命令的格式应为 cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster

  5. 切换到 Cloud Shell 窗格,并运行在上一步中复制的命令。

    注意

    该命令应生成以下格式的输出:

    m@Azure:~$ cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster
    Connecting to cc-admin@10.0.3.5 (contoso-custom-slurm-lab-cluster htc-1) through SSH bastion at cc-admin@40.87.52.25
    [cc-admin@ip-0A000305 ~]$
    
  6. 连接到“htc-1”节点后,请运行以下命令以验证“/etc/hosts”文件是否包含条目“10.10.10.10 www.contoso.com”:

    cat /etc/hosts | grep "10.10.10.10 www.contoso.com"
    

    注意

    现在,你应该删除在本模块的本练习和之前的练习中部署的所有资源。 这将使你无需支付与维护这些资源相关的 Azure 订阅的费用。

任务 5:清理实验室环境

你已完成使用 Azure CycleCloud 应用程序对群集自定义进行测试。 为了避免与使用 Azure 资源相关的不必要成本,你现在将终止群集并删除在本模块的所有练习中预配的全部资源。

  1. 在显示 Azure CycleCloud Web 应用程序图形界面的 Web 浏览器中,在“contoso-custom-slurm-lab-cluster”页面上,选择“终止”链接,当系统提示确认时,选择“确定”

  2. 监视终止过程。

    注意

    此过程包含取消预配充当群集头节点角色的 Azure VM。 这可能需要大约五分钟。

    注意

    若要删除在此实验室中预配的所有其他资源,请删除托管群集资源的资源组。

  3. 在 Azure 门户中,导航到托管群集资源的资源组的边栏选项卡,在工具栏中选择“删除资源组”条目。 在“输入资源组名称以确认删除”文本框中,输入资源组的名称,然后选择“删除”。 再次选择“删除”以确认删除。

    注意

    可能有其他与 Slurm 资源关联的资源组。 为避免产生额外的费用,请确保删除所有这些与 Slurm 相关的资源组及其资源。

祝贺你! 你已成功完成本模块的第三个也是最后一个练习。 在此练习中,你探索了如何在 Azure CycleCloud 群集中使用 cloud init,并使用了用于修改每个节点上本地文件内容的简单 Bash 脚本对其进行测试。 你通过连接到群集节点并查看已修改文件的内容验证了结果。 之后,你终止了群集并删除了在本模块中使用的所有群集资源,以避免产生任何不必要的费用。