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