使用插件部署混合云集群

更新时间:2024-06-17 08:43:25

本文介绍如何使用E-HPC插件部署混合云集群,该集群由本地调度器、本地域控和云上计算节点等组成。

背景信息

混合云集群是E-HPC提供的一套用于云上计算资源和本地服务之间互通的集群结构,通常由本地调度器、本地域控、云上计算节点、共享存储与互联互通网络组成。混合云集群具备以下优势:

  • 统一调度|

    在不改变本地已有调度策略与域控的基础上,实现本地与云上资源统一调度。通过E-HPC混合云插件,可以实现云上资源弹性伸缩。

  • 安全性

    通过专线打通云上VPC与线下网络,可以保护本地数据安全与隐私。

  • 高可用

    云上资源通常具备较高可用性与性能,某些情况下,企业需要性能更好的云上资源与本地算力共同支撑关键业务应用。

  • 低成本

    动态弹性使用云上资源,与本地资源实现互补,使得企业具备优化成本的空间。

适用场景

本文适用于以下场景:

  • 云上计算节点。

  • 本地管控节点,包括本地调度器、域控与DNS。

  • 集群节点的操作系统为CentOSRedhat。

image

操作步骤

步骤一:确认本地集群信息

  1. 确认调度器可以正常调度作业。

    本文方案适用于管控节点(含调度器)在本地,计算节点在云上的场景。您需要自行确认本地管控节点上部署的调度器可以正常调度作业。

    E-HPC支持的调度器类型为PBS、Slurm、LSFOpenLava。

    说明

    如果您的本地集群使用其他类型的调度器,请联系阿里云技术支持确认是否支持。

  2. 确认域控服务部署正常。

    您需要自行确认本地管控节点上部署的域控服务部署正常,以保证后续新增的用户可以正常登录本地节点。

    说明

    关于如何搭建域控服务(以Windows AD为例),请参见使用Windows实例搭建AD

  3. 确认网络连通性。

    由于云上节点需要连通本地调度器与域账户,因此需要确保云上环境和本地环境的网络连通性。

    可以通过VPN网关或者物理专线等方式打通云上和本地网络。

步骤二:制作自定义镜像

  1. 登录ECS管理控制台

  2. 创建一台ECS实例用于制作自定义镜像。具体操作,请参见自定义购买实例

  3. 开放服务端口并测试。

    您需要打开云上安全组和本地防火墙的相关端口。关于如何配置安全组规则,请参见添加安全组规则

    • 调度器

      PBS
      Slurm
      LSF

      服务

      端口

      协议

      备注

      pbs_server

      15001

      TCP

      PBS Server。

      pbs_sched

      15004

      TCP

      PBS Server调度。

      pbs_comm

      17001

      TCP

      PBS Server command服务。

      postgres

      15007

      TCP

      PBS Server数据库服务。

      pbs_comm

      • 15002

      • 15003

      TCP

      PBS计算节点服务。

      服务

      端口

      协议

      备注

      slurmctld

      6817

      TCP

      Slurm Server。

      slurmdbd

      6819

      TCP

      Slurm Server数据库服务。

      slurmd

      6818

      TCP

      Slurm数据库服务。

      服务

      端口

      协议

      备注

      mbatchd

      • 6891

      • 50941

      • 6881

      • 37826

      TCP

      LSF Server。

      pim

      45423

      TCP

      lim

      7869

      TCP

      sbatchd

      • 6882

      • 41192

      TCP

      res

      • 6878

      • 42467

      • 58745

      TCP

      pim

      40361

      TCP

      LSF计算节点服务。

      lim

      7869

      TCP

      sbatchd

      6882

      TCP

      res

      42151

      TCP

    • 域控(以Windows AD+Linux SSSD为例)

      服务

      端口

      协议

      备注

      服务

      端口

      协议

      备注

      DNS

      53

      UDPTCP

      DNS域名解析。

      LDAP

      389

      UDPTCP

      LDAP目录访问。

      Samba

      445

      UDPTCP

      SMB服务通信。用于AD组策略对象(GPO)。

      Kerberos

      88

      UDPTCP

      Kerberos认证。

      Kerberos

      464

      UDPTCP

      Kerberos重新设置密码。

      LDAP全局目录

      3268

      TCP

      如果使用id_provider=ad选项。

      NTP

      123

      UDP

      NTP服务。可选配置。

    开放端口后,需测试端口。您可以登录云上节点,通过telnet <ip> <port>命令测试调度器和域控服务的所有端口号。例如:

    telnet 10.0.XX.XX 88

    如果返回Connected,则表示端口已经打开;如果返回Connected refused,则表示端口未打开。

    说明

    您也可以使用wget命令等方法进行测试。

  4. 设置AD域控。

    以下步骤以Linux SSSD加入Windows AD域控为例,演示如何在ECS实例中安装AD Client环境,测试加入本地域控。

    1. 连接ECS实例。

    2. 安装SSSD软件环境。

      yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python
    3. 设置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地址。

    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. 修改sssd.conf配置文件。

      vi /etc/sssd/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

      修改后需重启SSSD服务。

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

      • 同步用户目录

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

      • 新增用户并测试

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

    9. 退出域。

      由于加域过程会生成与机器绑定的唯一krb5,如果使用已加域的ECS实例制作自定义镜像,后续使用该镜像创建新的ECS实例会出现加域状态不对的情况,因此需要退域后再制作自定义镜像。

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

      echo "your passwd"|realm join -v --user=administrator TED-TEST.test.com
  5. 设置用户免密。

    如果需要用户间免密,例如执行并行任务需求,可以通过以下方式设置:

    1. 设置互信。

      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
    2. 测试互信。

      使用互相的用户登录ECS实例,无需输入用户密码。

  6. 设置DNS。

    云上节点需要支持hostnameIP,以及线下服务解析,以下使用阿里云云解析PrivateZone完成。

    1. 开通PrivateZone。具体操作,请参见开通PrivateZone

      重要

      关于PrivateZone的计费方式,请参见PrivateZone定价

    2. 创建PrivateZone并添加云上节点的hostnameIP地址的解析记录。具体操作,请参见添加ZonePrivateZone解析记录

    3. 关联VPC。具体操作,请参见关联/解关联VPC

      选择混合云集群要使用的VPC进行关联,关联后VPC内所有节点均能使用DNS解析hostnameIP地址。

    4. 修改/ect/resolv.conf,添加解析信息。

      search <PrivateZone名称>
    5. 在本地DNS Server中,增加节点hostnameIP。

    6. 通过PrivateZoneResolver解析线下DNS。具体操作,请参见解析器(Resolver)

    7. 选择以下一种方式测试DNS设置。

      • 执行dig +search <节点hostname>命令,如果返回域名、节点IP等信息,则表示设置成功。

      • 执行nslookup <节点hostname>命令,如果返回NameAddress,则表示设置成功。

  7. 挂载存储。

    • 挂载本地文件系统。请自行确认存储挂载点,将挂载命令写入自定义镜像的启动脚本中,例如/etc/rc.local文件。

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

  8. 安装调度器。

    需要在云上节点上安装对应的调度器。

    • PBS:参见PBS Professional

    • Slurm:参见Slurm

    • LSF、OpenLava:制作镜像前无需安装,可在集群创建后通过共享存储安装。

  9. 测试并制作自定义镜像。

    1. 下载并运行测试脚本。

      beijing地域为例:

      export REGION=beijing
      wget https://e-hpc-$REGION.oss-cn-$REGION-internal.aliyuncs.com/softwares/check-image-for-ehpc.sh
      sh check-image-for-ehpc.sh
      说明

      您也可以自行手动校验,确认调度器状态、域控服务、本地节点hostname等。

    2. 制作自定义镜像。具体操作,请参见使用实例创建自定义镜像

步骤三:创建混合云集群

  1. 登录弹性高性能计算控制台

  2. 集群页面的右上角,单击创建混合云集群

  3. 硬件配置页,完成节点、存储、网络等配置,然后单击下一步

    需要注意的参数如下:

    配置

    说明

    示例值

    配置

    说明

    示例值

    可用区

    选择集群所属可用区。

    华东2 可用区L

    使用代理模式

    打开代理模式,表示该混合云集群由已有本地集群的管理节点代为管理。

    打开

    云上代理节点

    代理节点可感知作业调度状态,用于弹性伸缩等场景。请根据自身业务负载情况选择合适的规格,建议选择2 vCPU,4 GiB内存及以上规格。

    ecs.c7.large

    VPC、交换机

    选择集群所属的VPC和交换机。请请确保交换机下的IP地址空间足够(可用IP数大于集群节点的数量)。

    • vpc-uf62yvldgikwaf2******

    • vsw-uf60uwjzu2um4ip******

    安全组

    关闭新建安全组,选择步骤二中已配置好安全组规则的安全组。

    sg-test

    文件存储位置

    选择集群节点要挂载的文件存储。由于步骤二已在自定义镜像中配置了存储挂载信息。此处选择不挂载文件存储。

    不挂载文件存储

  4. 软件配置页,完成镜像、调度节点、账号节点等配置,然后单击下一步

    需要注意的参数如下:

    配置

    说明

    配置

    说明

    镜像类型

    选择自定义镜像。

    镜像

    选择步骤二制作的自定义镜像。

    调度器

    选择其他,然后选择custom

    账号系统

    选择custom

    是否使用插件

    选择使用插件

    插件模式

    选择镜像模式

    本地存放位置

    填写插件所在路径,保持默认的/opt/plugin

  5. 基础配置页,输入集群名称并配置登录密码。

    重要

    此处的登录密码必须与已有本地集群的root密码保持一致。

  6. 在右侧确认配置信息,选中服务条款,然后单击确认

  7. 调试插件。

    1. 连接集群。

    2. 拷贝插件。

      确认/opt目录下已正常挂载文件存储。然后拷贝插件。

      mkdir -p /opt/plugin
      cp -r /usr/local/ehpc/bin/ehs_util/scheduler/plugin/demo.cloud.example/* /opt/plugin/
    3. 创建管理用户。

      等待集群状态正常后,创建一个lsfadmin用户。具体操作,请参见管理用户

    4. 安装LSF调度器。

      1. manager节点上安装LSF调度器。

        该步骤需要您自行准备LSF安装包并安装LSF调度器。

      2. 激活环境变量。

        cp /opt/lsf/conf/profile.lsf /etc/profile.d/lsf.sh
        source /opt/lsf/conf/profile.lsf
      3. 下线manager节点。

        badmin hclose manager
    5. 拷贝LSF插件。

      rm -rf /opt/plugin/*
      mkdir -p /opt/plugin/tmp
      cp -r /usr/local/ehpc/bin/ehs_util/scheduler/plugin/lsf.cloud.example/* /opt/plugin/
    6. 检查文件。

      检查以下文件中指定的LSF安装路径是否为当前环境的LSF安装路径。

      • /opt/plugin/setup_scheduler.sh

      • /opt/plugin/LSF/10.1.0/pluginschedulercheck.py

      • /opt/plugin/LSF/10.1.0/node_del

      • /opt/plugin/LSF/10.1.0/node_add

      • /opt/plugin/LSF/10.1.0/lsfinit.sh

    7. 查看日志。

      执行以下命令:

      /usr/local/ehpc/bin/ehpcutil status ehs_node_status --cluster_version2

      查看/usr/local/ehpc/log/ehpc-plugin.log日志文件。

  8. 确认已成功创建混合云集群。

    1. 确认集群状态正常。

    2. 确认已同步AD用户信息。

    3. 确认已挂载共享存储。

常见问题

云上节点加入域后不稳定,退出域后重新加载失败,怎么办?

请按以下步骤排查:

  1. 确定已打开AD服务相关端口。

  2. 确定AD服务不存在IP地址冲突。

  3. 打开-v调试窗口,根据异常信息进一步排查。

云上节点加入域成功,但提示“没有用户xxx:no such user”,怎么办?

执行systemctl status sssd命令,如果返回类似如下图报错,则表示krb5.keytab信息与节点不一致。您可以删除krb5.keytab,重新加域。

image.png

服务器重启后,DNS配置被重置,怎么办?

默认情况下,服务器重启会重置DNS配置文件,导致DNS设置不成功。您可以通过以下方式修改:

  • (推荐)修改ifcfg-eth0。

    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    修改PEERDNS=no,表示不重置DNS。

    DEVICE=eth0
    BOOTPROTO=dhcp
    ONBOOT=yes
    PEERDNS=no
  • 修改cloud-init配置,避免ifctg-eth0被重置。

    vim /etc/cloud/cloud.cfg

    Example datasource config之前增加disabled配置。

    说明

    增加该配置之后,cloud-init不会管理/etc/sysconfig/network-scripts/下网络配置,需要您自行管理。

    network:
      config: disabled

    更多信息,请参见安装cloud-init

用户免密失效,怎么办?

请检查权限配置。

  • 确保用户目录(/home/user)的权限不是777。

  • 确保.ssh/目录及其目录下的文件的权限为600。

  • 本页导读 (1)
  • 背景信息
  • 适用场景
  • 操作步骤
  • 步骤一:确认本地集群信息
  • 步骤二:制作自定义镜像
  • 步骤三:创建混合云集群
  • 常见问题