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
: 集群的期望状态,可以是 present
、absent
或 query
。默认值为 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。可以是(例如)centos
、debian
或ubuntu
。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::NodeNet1WithFIP
或Cluster::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_net
和security_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_pairs。router_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
作者信息
- Stig Telfer (stig@stackhpc.com)
- Bharat Kunwar (bharat@stackhpc.com)
This role generates software-defined OpenStack infrastructure that can be used for generating complex application topologies on demand.
ansible-galaxy install stackhpc.cluster-infra