stackhpc.cluster-infra
OpenStack クラスター・アズ・ア・サービス インフラストラクチャ
この役割は、オンデマンドで複雑なアプリケーショントポロジーを生成するために使用できる、ソフトウェア定義の OpenStack インフラストラクチャを生み出します。これを実現するために、最近のバージョンの OpenStack Heat が使用されます。
要件
OpenStack API は対象ホストからアクセス可能でなければなりません。OpenStack Newton 以降が必要です。クライアントの認証情報は、環境内に設定されるか、clouds.yaml
フォーマットで用意される必要があります。
Python パッケージに関する要件は以下の通りです:
- ansible
- jmespath (
json_query
フィルターによって必要)
役割の変数
cluster_venv
:python の shade
パッケージがインストールされている python 仮想環境へのオプションのパス。
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
内のグローバルデフォルトリソースに取って代わられます。
cluster_environment_instance
:インスタンス用に使用するリソース Cluster::Instance
を指定する環境ファイル。注意: このオプションは非推奨で、グループに対して node_resource
定義を追加し、cluster_params
内でグローバルデフォルトリソースを定義することが推奨されます。
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
:インスタンスに接続するための Neutron ネットワークの名前または UUID。subnet
:インスタンスに接続するための Neutron サブネットの名前または UUID。security_groups
:インスタンスのポートに追加するセキュリティグループの名前または UUID のオプションリスト。セキュリティグループは各リストされたネットワークに存在または存在しないことがあります。floating_net
:Cluster::NodeNet1WithFIP
またはCluster::NodeNet2WithFIP
リソースを使用する際に浮動 IP を接続するためのオプションの Neutron ネットワークの名前または UUID。
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
の形式と一致する必要があります。単純で許容的な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@stackhpc.com)
- バラト・クンワール (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