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:クラスターの望ましい状態。presentabsent、または 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 が構成されたクラウドユーザーの名前。例えば、centosdebian、または ubuntu など。
    • num_nodes:このグループ内に作成するノードの数。
    • volume_sizeinstance-w-volume.yaml 環境を使用する際にこのグループ内のインスタンスを起動するために使用されるボリュームの GB 単位のオプションサイズ。
    • volume_typeinstance-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_netCluster::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_netsecurity_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

著者情報

プロジェクトについて

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.