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

已完成

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

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

注释

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

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

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

注释

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

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

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

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

  2. 在 Azure 门户中,通过选择搜索框旁边的工具栏中的图标打开 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 应用程序,请打开另一个浏览器窗口并导航到 https://< IP_address> URL。 如果系统提示,请确认要继续操作。

  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
    

    屏幕截图显示了 Azure CycleCloud Web 应用程序中“编辑 contoso-custom-slurm-lab-cluster”弹出窗口的“Cloud-init”选项卡。

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

任务 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 部分中,选择包含连接到计划程序节点命令的条目,然后选择 关闭

    屏幕截图展示了 Azure CycleCloud Web 应用程序中的“连接到节点: 计划程序”弹出窗口。

    注释

    该命令应具有格式 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条目,然后选择Actions选项卡标题。 在下拉菜单中,选择“ 开始”,并在系统提示确认时选择 “确定 ”。

    Azure CycleCloud 网页应用中 contoso-custom-slurm-lab-cluster 页上的“操作”菜单的屏幕截图。

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

    注释

    这可能需要大约三分钟。

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

    Azure CycleCloud Web 应用程序中“连接到节点:htc-1”弹出窗口的屏幕截图。

    注释

    该命令应具有格式 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. 连接到 tc-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 脚本对其进行测试,该脚本修改了每个节点上本地文件的内容。 通过连接到群集节点并查看已修改文件的内容来验证结果。 之后,你终止了群集并删除了本模块中使用的所有群集资源,以避免任何不必要的成本。