创建混合云标准版集群

更新时间:
复制为 MD 格式

混合云集群在云上部署代理节点(proxymgr),打通本地集群与云端的网络、域账号和调度器。本地负载超限时,自动扩展ECS资源缓解IDC压力。本文介绍如何在控制台创建混合云标准版集群。

背景信息

混合云集群由以下部分组成:

  • 计算节点:由多个ECS实例组成,按队列分组管理,支持扩缩容,用于运行作业。

  • 云上代理节点(proxymgr):对应一个ECS实例,部署了调度器插件,用于感知本地集群调度器负载信息,并触发ECS资源的弹性扩缩容。

工作原理:本地调度器检测到队列负载超限时,代理节点自动申请ECS资源。计算节点加入本地队列参与作业调度。作业完成后,节点按缩容等待时间自动释放。

重要
  • 创建E-HPC集群时,自动创建ECS实例等资源,可能产生费用。详见计费概述

  • 创建E-HPC集群后,通过弹性高性能计算控制台调整节点。勿直接使用云服务器ECS控制台操作单个节点。

  • 混合云集群需要具备网络、域名账号和调度器运维经验。无运维经验,建议使用标准集群或托管版集群。更多关于E-HPC集群的相关信息,请参见集群概述


前提条件

  • 已创建服务关联角色。首次登录E-HPC控制台,按提示创建服务关联角色。

  • 已创建专有网络VPC和交换机。具体操作,请参见专有网络与交换机专有网络与交换机

  • 已创建本地集群DNS、域账号和调度器环境。

  • 已打通本地集群与云上VPC的网络连通性。

  • 混合云集群仅支持使用插件模式代理以下外部调度服务:

    • LSF调度服务。

    • SLURM调度服务。

    • PBS Pro调度服务。

  • 已准备本地集群对应版本的调度器客户端安装包。

    • PBS:参见PBS Professional

    • Slurm:参见Slurm

    • LSF:可在集群创建后通过共享存储安装。


操作步骤

步骤一:创建混合云集群

  1. 单击前往创建集群页面

  2. 集群配置

    • 专有网络VPC:选择已与本地集群打通网络的VPC。

    • 安全组:建议选择与本地集群相同的安全组;如不同,需在安全组入方向开放调度器、域账号等服务的端口。

    • 部署模式:选择混合云集群

    • 集群类型:根据本地集群调度器类型选择。

      • LSF-Plugin:使用插件模式代理外部LSF调度服务

      • PBS Pro-Plugin:使用插件模式代理外部PBS Pro调度服务

      • SLURM-Plugin:使用插件模式代理外部Slurm调度服务

    • 云上代理节点:选择合适的实例规格和可用镜像(系统提供默认镜像 CentOS 7.6)。

  3. 软件组件:可选,默认为空,直接跳过。

  4. 确认配置:集群名称自动生成(如 lsf-plugin-hybrid-cluster-20260331),可修改。设置节点登录密码,单击创建集群

步骤二:配置混合云集群

  1. 进入集群列表,单击集群名称。在概览页单击配置,进入配置向导。

  2. 单击远程连接按钮,登录proxymgr节点。

步骤三:根据本地环境手动加入proxymgr节点

  • DNS及域账号服务加入

    DNS解析 + Windows AD域控

    DNS解析 + Windows AD域控:

    1. proxymgr节点安装SSSD软件

      yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
    2. 设置AD Server hostname解析

      执行vi /etc/hosts命令编辑hosts文件,添加AD Server hostname解析。示例如下:

      • 10.0.XX.XX:本地AD域控服务器的IP地址,请确保可以访问该IP地址。

      • ted-test:本地AD域控服务器的hostname。

      • test.com:本地AD域控的域名后缀。

      10.0.XX.XX  ted-test.test.com  ted-test
      说明:示例中的ted-test.test.com会作为SSSDAD Server的参数,需要解析其IP地址。
    3. DNS Server增加proxymgr的正向解析及反向解析记录

    4. 设置DNS地址

      执行vi /etc/resolv.conf命令编辑DNS配置文件,添加的内容示例如下:

      # 补全test.com域名
      search test.com
      # 10.0.XX.XX为本地DNS服务器的IP地址,如果不使用本地DNS服务,可以不设置nameserver
      nameserver 10.0.XX.XX
    5. 加入域

      通过realm join命令将ECS实例加入到域中。

      realm join -v --user=administrator ted-test.test.com

      命令说明如下:

      • --user:本地AD域控的管理员用户,如administrator,加域过程中需要输入该用户密码。

      • -v:显示加域过程信息。

      • ted-test.test.com:本地AD域控的域名,一般是<hostname>.<domain>格式。

      • --computer-name:可选参数。如果没有指定该参数,加域时系统会自动通过hostname获取。

      提示Successfully enrolled machine,则加域成功。自动生成/etc/sssd/sssd.conf和/etc/krb5.keytab。
    6. 查询加域结果。

      通过realm list命令查询,如果返回信息中包含了本地AD域控的域名后缀(本文示例为test.com),则表示加域成功。

    7. 执行vi /etc/sssd/sssd.conf命令修改sssd.conf配置文件。

      修改内容如下:

      • use_fully_qualified_names = False

      • fallback_homedir = /home/%u:设置用户目录和名称。

      [sssd]
      domains = test.com
      config_file_version = 2
      services = nss, pam
      debug_level = 6
      
      [nss]
      debug_level = 6
      
      [pam]
      debug_level = 6
      
      [domain/test.com]
      ad_server = ted-test.test.com
      ad_domain = test.com
      krb5_realm = TEST.COM
      realmd_tags = manages-system joined-with-adcli
      cache_credentials = True
      id_provider = ad
      krb5_store_password_if_offline = True
      default_shell = /bin/bash
      ldap_id_mapping = True
      use_fully_qualified_names = False
      fallback_homedir = /home/%u
      access_provider = ad

      修改后需执行 systemctl restart sssd 重启SSSD服务。

    8. 测试用户账号同步情况。

      • 同步用户目录:通过su命令切换用户,查看用户目录是否与sssd.conf配置文件中fallback_homedir的设置一致。

      • 新增用户并测试:在本地AD域控中创建一个新的用户,在线上测试是否可以切换。

    9. 退出域。

      加域生成与机器绑定的唯一krb5。以加域实例制作镜像,新实例会出现加域状态异常。制作镜像前必须先退域。

      realm leave test.com
    10. 把加域操作写入服务器的启动脚本中(例如/etc/rc.local)。

      echo "your passwd"|realm join -v --user=administrator TED-TEST.test.com

    hosts文件解析 + NIS

    hosts文件解析 + NIS:

    1. proxymgr节点安装ypbind软件

      yum install -y ypbind yp-tools
    2. proxymgr节点配置NIS

      # 补全test.com域名
      echo NISDOMAIN=test.com >> /etc/sysconfig/network
       10.0.XX.XX为本地NIS服务器的IP地址
      echo domain test.com server 10.0.XX.XX > /etc/yp.conf
    3. proxymgr节点配置名称解析顺序为NIS优先

      sed -i "s/\(^\s*passwd:.*\)/\1 nis/" /etc/nsswitch.conf
      sed -i "s/\(^\s*shadow:.*\)/\1 nis/" /etc/nsswitch.conf
      sed -i "s/\(^\s*group:.*\)/\1 nis/" /etc/nsswitch.conf
      sed -i "s/\(^\s*hosts:.*\)/\1 nis/" /etc/nsswitch.conf
      sed -i "s/\(^\s*password\s*sufficient.*\)/\1 nis/" /etc/pam.d/system-auth-ac
      dracut -v -f
    4. 重启ypbind服务

      systemctl start ypbind.service
      systemctl enable ypbind.service
    5. NIS Server节点/etc/hosts添加proxymgr解析

      172.16.xx.xx	proxymgr	proxymgr
    6. NIS Server更新数据库映射文件

      make -C /var/yp
  • 设置用户免密(可选)

    节点间需要免密(如并行任务),按以下步骤配置。
    1. 选择互信的用户(以testuser为例),运行 su testuser进入该用户目录。

    2. 运行ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa -q生成密钥。执行命令后,会在当前用户目录下生成ssh/id_rsa.pub, id_rsa密钥文件。

    3. 运行 cat .ssh/id_rsa.pub >> .ssh/authorized_keys 设置互信。

    4. 设置免提示。如果需要登录时免提示输入,可在ssh/config文件中输入以下信息:

      Host *
          StrictHostKeyChecking no
          UserKnownHostsFile=/dev/null
  • 设置共享存储

    • 挂载本地文件系统。将挂载命令写入启动脚本,例如/etc/rc.local文件或者 /etc/fstab文件。

    • 挂载阿里云NAS文件系统。具体操作,请参见挂载NFS协议文件系统

  • 安装调度器并将proxymgr节点加入调度器

    LSF

    LSF调度器安装及加入:

    1. 通过共享存储在Proxymgr节点安装LSF调度器客户端(LSF License需要自行解决)

    2. LSF本地管控节点修改 lsf.cluster.lsf 添加proxymgr名称

      proxymgr   !   !   1   (mg)
    3. LSF本地管控节点重启lsf-server服务

      lsf_daemons restart
    4. Proxymgr节点启动lsf客户端

      /opt/lsf/10.1/install/hostsetup --top="/opt/lsf" --boot="y"
      lsf_daemons restart
    5. 若不希望作业调度到proxymgr节点,则需要下线proxymgr节点

      badmin hclose proxymgr

    PBS Pro

    PBS Pro调度器安装及加入:

    1. 参见PBS ProfessionalProxymgr节点安装PBS Pro客户端

    2. PBS本地管控节点执行以下命令添加Proxymgr节点

      qmgr -c "create node proxymgr"
      qmgr -c "set node proxymgr queue = cloudq"
    3. 若不希望作业调度到proxymgr节点,则需要下线proxymgr节点

      pbdnodes -o proxymgr

    SLURM(No DynamicNode)

    SLURM调度器安装及加入(No DynamicNode):

    1. 参见 SlurmProxymgr节点安装SLURMD服务

    2. Slurm本地管控节点修改slurm.conf 将proxymgr加入SLURM集群

      NodeName=proxymgr Sockets=1 CoresPerSocket=1 ThreadsPerCore=2 RealMemory=3646 Gres=gpu:0  State=IDLE
      PartitionName=cloudq Nodes=proxymgr Default=NO MaxTime=INFINITE State=UP
    3. Slurm本地管控节点重启slurmctld服务

      systemctl restart slurmctld
    4. 查看proxymgr节点是否加入调度器

      scontrol show node proxymgr
    5. 若不希望作业调度到proxymgr节点,则需要下线proxymgr节点

      scontrol update node=proxymgr state=down Reason=suspend

    SLURM(DynamicNode)

    SLURM调度器安装及加入(DynamicNode):

    1. 参见 Slurm DynamicNodeProxymgr节点安装SLURMD服务

    2. Slurm本地管控节点修改slurm.conf 增加NodeSet

      ## 添加configless参数
      SlurmctldParameters=enable_configless
      
      ## 使用NodeSet方式
      NodeSet=compNodeSet Feature=compFeature
      PartitionName=comp Nodes=compNodeSet Default=YES MaxTime=INFINITE State=UP
    3. Slurm本地管控节点重启slurmctld服务

      systemctl restart slurmctld
    4. Proxymgr节点修改slurmd.service启动程序

      ExecStart=/usr/sbin/slurmd -D -s -Z --conf Feature=compFeature --conf-server manager:port
    5. 若不希望作业调度到proxymgr节点,则需要下线proxymgr节点

      scontrol update node=proxymgr state=down Reason=suspend

步骤四:测试混合云集群环境

  1. 测试线上线下环境打通

    1. 编辑 /usr/local/ehpc_plugin/env/ehpc-cluster.yaml,替换线下环境配置(不需要检查的项,请自行注释):

      • 环境无DNS

      • 挂载点使用nfs协议,记录nfs-serverip

      • 域账号使用NIS,记录其domain及服务节点ip、hostname

      • 调度器使用SLURM,记录调度节点ip、hostname

      • 环境无相关依赖服务

      localInfo:
        # dns_server: <ip>        # 选填,根据是否有该参数来判断是否有线下DNS
        mount_point:            # 选填,根据是否有该参数来判断是否有挂载共享存储
          - 172.16.xx.xx
        account:
          name: NIS             # 必填,域账户名称(AD、NIS)
          domain: ehpc-test     # 必填,域账户的域名
          server_host: slurm-master   # 必填,域账户服务主机名,用于检查网络
          server_ip: 172.16.xx.xx    # 必填,域账户服务主机IP,用于检测服务端口
          user_case: testuser   # 必填,用于检测用户访问连通性
        scheduler:
          name: SLURM           # 必填,调度器名称(LSF、PBS、SLURM)
          server_host: slurm-master   # 必填,调度器服务主机名,用于检查网络
          server_ip: 172.xx.xx.xx       # 必填,调度器服务主机IP,用于检测服务端口
        # dependency_services:    # 选填,检测线下依赖服务的网络联通性
        #   - name: service_name
        #     ip: <ip>
        #     port: 1055,2325
    2. 根据ehpc-cluster.yaml配置文件执行检测脚本

      ehpcutil tools hybridcheck --yaml /usr/local/ehpc_plugin/env/ehpc-cluster.yaml --human
    3. 输出检测结果(无异常则可继续)。

      重要

      若有报错需要进行相应修改。

  2. 测试调度器插件

    1. 修改插件环境配置文件/usr/local/ehpc_plugin/env/plugin.env,本调度器暂不用修改

    2. 执行插件测试

      /usr/local/ehpc_plugin/test/test_plugin.py
    3. 执行成功时,输出如下。

    重要

    若报错找不到调度器命令,进入插件目录 /usr/local/ehpc_plugin/env 修改环境变量。

步骤五:制作自定义镜像并激活集群

  1. 若上述步骤中修改了Proxymgr节点配置,需重新制作镜像以供后续扩容。

  2. 激活集群

    1. 进入集群配置页面。

    2. 勾选已手动完成以上所有配置向导,点击激活集群

步骤六:创建预设节点池并预配置线下环境

重要

混合云集群需提前配置预设节点池(固定主机映射列表)。创建后,一次性将节点列表预置到本地DNS、域账号和调度器中。后续扩缩容无需修改本地环境。

  1. 创建预设节点池

    1. 进入节点侧栏,单击预设节点池

      1. 新增一个预设节点池,填写以下信息后单击确认

        • 填写预设节点池名称

        • 选择虚拟交换机

        • 选择"规则生成"方式

        • 点击"确认"按钮

      2. 在预设节点池中执行添加预设节点

        • 选择起始和终止IP

        • 主机名规则填写

        • 点击"预览/收起"来查看预加入节点列表

        • 确认后点击"确定"按钮

  2. 返回到管理预设节点池页面,查看生成的预设节点列表信息。

    1. 点击下载节点列表,来下载预设节点池中的映射关系信息。

      更多预设节点池操作详见:预设节点池
    2. DNS及域账号预配置

      DNS解析 + Windows AD域控

      DNS解析 + Windows AD域控:

      获取预设节点列表,并在DNS Server批量增加正向解析及反向解析记录。

      hosts文件解析 + NIS

      hosts文件解析 + NIS:

      1. 获取预设节点列表,并在NIS Server节点/etc/hosts批量添加解析

      2. NIS Server更新数据库映射文件

        make -C /var/yp
    3. 调度器服务预配置

      LSF

      LSF调度器:

      1. 获取预设节点列表,并在LSF本地管控节点修改 lsf.cluster.lsf 批量添加

        cloudq001   !   !   1   (mg)
        ......
      2. LSF本地管控节点重启lsf-server服务

        lsf_daemons restart

      PBS Pro

      PBS Pro调度器:获取预设节点列表,并在PBS本地管控节点执行以下命令批量添加

      qmgr -c "create node cloudq001"
      qmgr -c "set node cloudq001 queue = cloudq"
      ......

      SLURM(No DynamicNode)

      SLURM调度器安装及加入(No DynamicNode):

      1. 获取预设节点列表,并在Slurm本地管控节点修改slurm.conf批量添加

        NodeName=cloudq[001-020] Sockets=1 CoresPerSocket=1 ThreadsPerCore=2 RealMemory=3646 Gres=gpu:0  State=IDLE
        PartitionName=cloudq Nodes=cloudq[001-020] Default=NO MaxTime=INFINITE State=UP
      2. Slurm本地管控节点重启slurmctld服务

        systemctl restart slurmctld

      SLURM(DynamicNode)

      SLURM调度器安装及加入(DynamicNode):无需提前做任何操作。

      重要

      DynamicNode模式下,节点启动时根据slurmdFeature参数决定所属队列。换队列须更换镜像。单个镜像只能扩容单个队列。

步骤七:创建自动伸缩配置

  1. 单击队列,页面将自动识别集群的队列信息。

  2. 找到目标队列,单击编辑,配置自动伸缩。

    1. 打开队列的自动伸缩开关(同时启用自动扩容和自动缩容)。

    2. 设置最小/最大节点数:最小节点数设为0(按需扩容);最大节点数设为预设节点池节点数。

    3. 选择节点间互联方式:选择VPC网络(通过VPC通信)或eRDMA网络(高带宽低延迟,适合MPI作业)。

    4. 使用预设节点池中,选择步骤七中创建的预设节点池,会展示该节点池下还剩余多少预设节点数量。

    5. 自定义镜像中,选择步骤六中制作的自定义镜像进行扩容。

    6. 伸缩策略:默认为供应优先策略(按交换机可售区顺序满足实例规格需求)。

    7. 单次最大伸缩节点数:单次扩容的最大节点数上限,默认为99,按需调整。

    8. 单击保存

步骤八:测试自动扩缩容

  1. 进入用户主目录,提交测试作业(例:提交10个单核作业)。

  2. 等待自动伸缩扩容节点,并通过以下方式查看进度:

    • 在节点列表页面查看扩容节点。

    • 自动伸缩超链接页面查看当前的队列自动伸缩配置。

    节点扩容完成后,作业直接调度到新节点。

  3. 缩容等待时间到期后,节点自动缩容。