使用插件部署混合云集群

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

背景信息

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

  • 统一调度|

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

  • 安全性

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

  • 高可用

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

  • 低成本

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

适用场景

本文适用于以下场景:

  • 云上计算节点。

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

  • 集群节点的操作系统为CentOS或Redhat。

image

操作步骤

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

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

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

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

    说明

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

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

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

    说明

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

  3. 确认网络连通性。

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

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

步骤二:制作自定义镜像

  1. 登录ECS管理控制台

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

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

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

    • 调度器

      PBS

      服务

      端口

      协议

      备注

      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计算节点服务。

      Slurm

      服务

      端口

      协议

      备注

      slurmctld

      6817

      TCP

      Slurm Server。

      slurmdbd

      6819

      TCP

      Slurm Server数据库服务。

      slurmd

      6818

      TCP

      Slurm数据库服务。

      LSF

      服务

      端口

      协议

      备注

      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

      UDP和TCP

      DNS域名解析。

      LDAP

      389

      UDP和TCP

      LDAP目录访问。

      Samba

      445

      UDP和TCP

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

      Kerberos

      88

      UDP和TCP

      Kerberos认证。

      Kerberos

      464

      UDP和TCP

      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会作为SSSD中AD 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。

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

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

      重要

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

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

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

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

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

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

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

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

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

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

  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。