stackhpc.cluster-infra

OpenStack 集群即服务基础设施

这个角色生成软件定义的 OpenStack 基础设施,可以根据需求生成复杂的应用拓扑。使用的是最新版本的 OpenStack Heat。

要求

OpenStack API 应该能从目标主机访问。需要 OpenStack Newton 或更高版本。客户凭据应该已在环境中设置,或者使用 clouds.yaml 格式。

在 Python 包方面,要求如下:

  • ansible
  • jmespath(json_query 过滤器所需)

角色变量

cluster_venv: 可选的 Python 虚拟环境路径,其中安装了 shade 包。

cluster_auth_type: 可选的 OpenStack 认证插件名称。

cluster_auth: 可选的字典,包含认证信息。

cluster_cloud: 可选的 OpenStack 客户端配置云名称。

cluster_state: 集群的期望状态,可以是 presentabsentquery。默认值为 present。如果值为 query,则不会更新集群,但会查询其配置并生成 Ansible 清单。

cluster_name: Heat 堆栈的名称。默认值为 cluster

cluster_environment_nodenet: 指定每个节点网络资源的环境文件,Cluster::NodeNet注意: 此选项已弃用,建议使用定义 nodenet_resource 的资源和通过 cluster_params 中的 nodenet_resource 使用的全局默认资源。

cluster_environment_instance: 针对实例的环境文件,指定要使用的资源,Cluster::Instance注意: 此选项已弃用,建议通过为组添加定义 node_resource 和通过在 cluster_params 中定义 node_resource 使用的全局默认资源。

cluster_environment: 创建 Heat 堆栈时使用的环境文件列表。

cluster_params: 传递给 Heat 堆栈的参数。

  • cluster_prefix: 实例主机名构建所用的名称前缀。

  • cluster_groups: JSON 结构的节点组列表,每个组使用字典描述,包含以下内容:

    • name: 用于引用此组的名称
    • flavor: 用于部署此组的实例风格名称或 UUID。
    • image: 用于部署此组的映像名称或 UUID。
    • user: 一个云用户的名称,已配置 SSH 密钥和无密码 sudo。可以是(例如)centosdebianubuntu
    • num_nodes: 在此组中创建的节点数。
    • volume_size: 在使用 instance-w-volume.yaml 环境时,用于启动实例的卷的可选大小(以 GB 为单位)。
    • volume_type: 在使用 instance-w-volume.yaml 环境时,用于启动实例的卷的可选类型。
  • cluster_keypair: 用于访问实例的 SSH 密钥对名称。

  • cluster_az: 创建实例的可用区名称。

  • cluster_config_drive: 是否通过配置驱动提供元数据。默认值为 false

  • cluster_net: JSON 结构的网络列表,每个网络由字典描述,包含以下内容:

    • net: 附加到实例的神经网络的名称或 UUID。
    • subnet: 附加到实例的神经子网的名称或 UUID。
    • security_groups: 可选的安全组名称或 UUID 列表,可将其添加到实例的端口。安全组可以在列出的每个网络上存在或不存在。
    • floating_net: 可选名称或 UUID,当使用 Cluster::NodeNet1WithFIPCluster::NodeNet2WithFIP 资源时,附加浮动 IP 的神经网络。
  • node_resource: 自定义节点资源名称库中的资源名称。此资源类型用于不覆盖特定节点资源类型的组的默认值。

    有效选项包括:

    • Cluster::Instance: 仅具有临时存储的实例。这是默认值。
    • Cluster::InstanceWithVolume: 配置了 Cinder 卷的实例。
  • nodenet_resource: 自定义网络资源库中的资源名称,供节点网络使用。对于未为组实例指定网络配置的组,将使用此资源类型。

    有效选项包括:

    • Cluster::NodeNet1: 单个网络,不关联浮动 IP。这是默认值。
    • Cluster::NodeNet1WithFIP: 单个网络,分配并关联浮动 IP。
    • Cluster::NodeNet1WithPreallocatedFIP: 单个网络,浮动 IP(来自预分配和供应的列表)并关联端口。
    • Cluster::NodeNet2: 两个网络接口。使用 cluster_net 中列出的前两个网络。
    • Cluster::NodeNet2WithFIP: 两个网络接口。使用 cluster_net 中列出的前两个网络。从第一个网络分配浮动 IP 并与实例关联。
    • Cluster::NodeNet2WithFIPSRIOV: 两个网络接口。第一个接口附加了浮动 IP(使用 floating_netsecurity_groups)。第二个接口配置为 SR-IOV 端口资源,用于高性能内部网络。使用 cluster_net 中列出的前两个网络。
    • Cluster::NodeNet3: 三个网络接口。使用 cluster_net 中列出的前三个网络。
  • router_networks: 可选的 IP 子网 CIDR 列表,应该被添加为允许的网络。如果某个端口与执行子网之间 IP 路由的网关节点相关联,则需要此项。这些应与 allowed_address_pairs 格式匹配https://docs.openstack.org/heat/rocky/template_guide/openstack.html#OS::Neutron::Port-prop-allowed_address_pairsrouter_networks 的简单、宽松配置如下:

router_networks:
  - ip_address: "0.0.0.0/0"

cluster_inventory: 部署后,生成一个清单文件,可在后续的 Ansible 配置中使用。

cluster_roles: 在生成的 Ansible 清单文件中进行的一组群体分配。该参数是字典形式的列表,包含:

  • name: 定义在 Ansible 清单中的组名称。
  • groups: 从上面提供给 cluster_groups 的字典对象中选择的组列表。

cluster_group_vars: 将清单组映射到要为该组定义的组变量的字典。每个组的组变量定义为映射变量名称及其值的字典。

cluster_environment_group: 可选的 Ansible 组名称,将所有集群主机和本地主机添加到该组。如果存在单个组表示开发/暂存/生产等环境,这将很有帮助。

依赖关系

此角色依赖于目标主机上安装 Python shade 包。该包可以安装在 Python 虚拟环境中,在这种情况下,应该在 cluster_venv 变量中指定虚拟环境的路径。

可以使用 stackhpc.os-shade 角色来安装 Python shade 包。

示例剧本

以下剧本创建一个包含 login 组和 compute 组的集群 Heat 堆栈。

---
# 这个剧本使用 Ansible OpenStack 模块创建一个集群
# 使用多个裸金属计算节点实例,并为 SLURM 分区进行配置
- hosts: openstack
  roles:
    - role: stackhpc.cluster-infra
      cluster_name: "openhpc"
      cluster_params:
        cluster_prefix: "ohpc"
        cluster_keypair: "admin_rsa"
        cluster_net:
          - net: "internal"
            subnet: "internal"
            floating_net: "external"
            security_groups:
              - "default"
              - "slurm"
        cluster_groups:
          - name: "login"
            flavor: "compute-B"
            image: "CentOS7-OpenHPC"
            num_nodes: 1
            node_resource: "Cluster::InstanceWithVolume"
            node_resource: "Cluster::NodeNet1WithFIP"
          - name: "compute"
            flavor: "compute-A"
            image: "CentOS7-OpenHPC"
            num_nodes: 16
      cluster_group_vars:
        cluster:
          ansible_user: centos

作者信息

关于项目

This role generates software-defined OpenStack infrastructure that can be used for generating complex application topologies on demand.

安装
ansible-galaxy install stackhpc.cluster-infra
许可证
apache-2.0
下载
281
拥有者
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.