6.4. CRUSH 階層の定義

director は CRUSH 階層用のデータを提供しますが、実際には ceph-ansible が Ansible インベントリーファイルを介して CRUSH マッピングを取得し、そのデータを渡します。デフォルトのルートを維持しない場合は、各ノードのルートの場所を指定する必要があります。

たとえば、ノード lab-ceph01 (プロビジョニング IP 172.16.0.26) が fast_root 内の rack1 に置かれる場合、Ansible インベントリーは以下のようになります。

172.16.0.26:
osd_crush_location: {host: lab-ceph01, rack: rack1, root: fast_root}

director を使用して Ceph をデプロイする場合、Ansible インベントリーは実際に作成するのではなく、生成されます。したがって、NodeDataLookup を使用してデータを追加する必要があります。

NodeDataLookup は、システムのマザーボードに保管されているシステム製品 UUID を指定することで機能します。Bare Metal サービス (ironic) も、イントロスペクションフェーズ後にこの情報を保管します。

2 層ストレージをサポートする CRUSH マップを作成するには、以下の手順を行います。

手順

  1. 以下のコマンドを実行して、4 つのノードの UUID を取得します。

    for ((x=1; x<=4; x++)); \
    { echo "Node overcloud-ceph0${x}"; \
    openstack baremetal introspection data save overcloud-ceph0${x} | jq .extra.system.product.uuid; }
    Node overcloud-ceph01
    "32C2BC31-F6BB-49AA-971A-377EFDFDB111"
    Node overcloud-ceph02
    "76B4C69C-6915-4D30-AFFD-D16DB74F64ED"
    Node overcloud-ceph03
    "FECF7B20-5984-469F-872C-732E3FEF99BF"
    Node overcloud-ceph04
    "5FFEFA5F-69E4-4A88-B9EA-62811C61C8B3"
    注記

    この例では、overcloud-ceph0[1-4] は Ironic ノードの名前です。これらは、(HostnameMap.yaml を介して) lab-ceph0[1-4] としてデプロイされます。

  2. 以下のようにノードの配置を指定します。

    ルートラックノード

    standard_root

    rack1_std

    overcloud-ceph01 (lab-ceph01)

    rack2_std

    overcloud-ceph02 (lab-ceph02)

    fast_root

    rack1_fast

    overcloud-ceph03 (lab-ceph03)

    rack2_fast

    overcloud-ceph04 (lab-ceph04)

    注記

    同じ名前のバケットを 2 つ持つことはできません。lab-ceph01lab-ceph03 が同じ物理ラックにある場合でも、rack1 と呼ばれるバケットを 2 つ持つことはできません。そのため、rack1_std および rack1_fast と命名しました。

    注記

    この例では、複数のカスタムルートを示すために「standard_root」という特定のルートの作成方法を説明します。ただし、デフォルトのルートに HDD の OSD ノードを保持することもできたはずです。

  3. 以下の NodeDataLookup 構文を使用します。

    NodeDataLookup: {"SYSTEM_UUID": {"osd_crush_location": {"root": "$MY_ROOT", "rack": "$MY_RACK", "host": "$OVERCLOUD_NODE_HOSTNAME"}}}
    注記

    システム UUID を指定してから、CRUSH 階層を上から順に指定する必要があります。また、host パラメーターは、Bare Metal サービス (ironic) ノード名ではなく、ノードのオーバークラウドホスト名を参照する必要があります。設定例と一致するには、以下を入力します。

    parameter_defaults:
      NodeDataLookup: {"32C2BC31-F6BB-49AA-971A-377EFDFDB111": {"osd_crush_location": {"root": "standard_root", "rack": "rack1_std", "host": "lab-ceph01"}},
         "76B4C69C-6915-4D30-AFFD-D16DB74F64ED": {"osd_crush_location": {"root": "standard_root", "rack": "rack2_std", "host": "lab-ceph02"}},
         "FECF7B20-5984-469F-872C-732E3FEF99BF": {"osd_crush_location": {"root": "fast_root", "rack": "rack1_fast", "host": "lab-ceph03"}},
         "5FFEFA5F-69E4-4A88-B9EA-62811C61C8B3": {"osd_crush_location": {"root": "fast_root", "rack": "rack2_fast", "host": "lab-ceph04"}}}
  4. ceph-ansible レベルで CRUSH マップ管理を有効にします。

    parameter_defaults:
      CephAnsibleExtraConfig:
        create_crush_tree: true
  5. スケジューラーヒントを使用して、Bare Metal サービスノードの UUID がホスト名に正しくマッピングされていることを確認します。

    parameter_defaults:
      CephStorageCount: 4
      OvercloudCephStorageFlavor: ceph-storage
      CephStorageSchedulerHints:
        'capabilities:node': 'ceph-%index%'
  6. Bare Metal サービスノードを対応するヒントでタグ付けします。

    openstack baremetal node set --property capabilities='profile:ceph-storage,node:ceph-0,boot_option:local' overcloud-ceph01
    
    openstack baremetal node set --property capabilities=profile:ceph-storage,'node:ceph-1,boot_option:local' overcloud-ceph02
    
    openstack baremetal node set --property capabilities='profile:ceph-storage,node:ceph-2,boot_option:local' overcloud-ceph03
    
    openstack baremetal node set --property capabilities='profile:ceph-storage,node:ceph-3,boot_option:local' overcloud-ceph04
    注記

    予測可能な配置の詳細は、『オーバークラウドの 高度なカスタマイズ』 の「特定の ノード ID の割り当て 」を参照してください。