OpenShift Container Platform 向けの RHOSP director Operator

Red Hat OpenStack Platform 16.2

Red Hat OpenShift Container Platform クラスターへの Red Hat OpenStack Platform オーバークラウドのデプロイ

OpenStack Documentation Team

概要

RHOSP director Operator を Red Hat OpenShift Container Platform クラスターにインストールし、director Operator を使用して RHOSP オーバークラウドをデプロイする方法を学びます。
注記
Support for Red Hat OpenStack Platform director Operator will only be granted if your architecture is approved by Red Hat Services or by a Technical Account Manager. Please contact Red Hat before deploying this feature.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

Red Hat ドキュメントへのフィードバック (英語のみ)

Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。

Jira でドキュメントのフィードバックを提供する

ドキュメントに関するフィードバックを提供するには、Create Issue フォームを使用します。Red Hat OpenStack Platform Jira プロジェクトで Jira Issue が作成され、フィードバックの進行状況を追跡できます。

  1. Jira にログインしていることを確認してください。Jira アカウントをお持ちでない場合は、アカウントを作成してフィードバックを送信してください。
  2. Create Issue をクリックして、Create Issue ページを開きます。
  3. Summary フィールドと Description フィールドに入力します。Description フィールドに、ドキュメントの URL、章またはセクション番号、および問題の詳しい説明を入力します。フォーム内の他のフィールドは変更しないでください。
  4. Create をクリックします。

第1章 Red Hat OpenStack Platform director Operator の概要

OpenShift Container Platform (OCP) は、Operator のモジュラーシステムを使用して OCP クラスターの機能を拡張します。Red Hat OpenStack Platform (RHOSP) director Operator は、OCP 内で RHOSP クラウドをインストールして実行する機能を追加します。この Operator は、RHOSP ノードのインフラストラクチャーおよび設定を管理してデプロイするためのカスタムリソース定義 (CRD) のセットを管理します。operator でデプロイされた RHOSP クラウドの基本アーキテクチャーには、以下の機能が含まれます。

仮想コントロールプレーン
director Operator は、コントローラーノードとして機能するように OpenShift Virtualization に仮想マシンのセットを作成します。
ベアメタルマシンのプロビジョニング
director Operator は、OCP ベアメタルマシン管理を使用して、operator でデプロイされた RHOSP クラウドに Compute ノードをプロビジョニングします。
ネットワーク
director Operator は、RHOSP サービスの基礎となるネットワークを設定します。
Heat および Ansible ベースの設定
director Operator は、カスタム Heat 設定を OCP に保存し、director の config-download 機能を使用して設定を Ansible Playbook に変換します。保存された heat 設定を変更すると、director Operator は Ansible Playbook を自動的に再生成します。
CLI クライアント
director Operator は、ユーザーが RHOSP CLI コマンドを実行して RHOSP クラウドと対話するための Pod を作成します。
注記

Red Hat OpenStack Platform director Operator のサポートは、アーキテクチャーが Red Hat サービスまたはテクニカルアカウントマネージャーによって承認された場合にのみ付与されます。この機能を導入する前に Red Hat にお問い合わせください。

1.1. director Operator の前提条件

Red Hat OpenStack Platform (RHOSP) director Operator をインストールする前に、以下の前提条件のタスクを完了する必要があります。

  • 有効な baremetal のクラスター Operator と provisioning ネットワークを含む OpenshiftContainer Platform (OCP) 4.10 以降のクラスターをインストールします。

    注記

    インストーラープロビジョニングインフラストラクチャー (IPI) またはアシストインストール (AI) を使用してインストールする OCP クラスターは、ベアメタル プラットフォームタイプを使用し、ベアメタル クラスター Operator を有効にします。ユーザーがプロビジョニングするインフラストラクチャー (UPI) でインストールする OCP クラスターは、プラットフォームタイプ none を使用し、baremetal Operator が無効になる可能性があります。

    クラスターのタイプが AI または IPI の場合、ベアメタルホストを管理するための Kubernetes API である metal3 が使用されます。これは、利用可能なホストのインベントリーを BareMetalHost カスタムリソース定義 (CRD) のインスタンスとして維持します。ベアメタル Operator は以下を実行します。

    • ホストのハードウェア詳細を検査し、それを対応する BareMetalHost に報告します。これには、CPU、RAM、ディスク、および NIC に関する情報が含まれます。
    • 特定のイメージを使用してホストをプロビジョニングします。
    • プロビジョニング前または後に、ホストのディスクコンテンツを消去します。

    baremetal クラスター Operator が有効かどうかを確認するには、Administration > Cluster Settings > ClusterOperators > baremetal に移動し、Conditions セクションまでスクロールして Disabled ステータスを表示します。

    OCP クラスターのプラットフォームタイプを確認するには、Administration > Global Configuration > Infrastructure の順に移動し、YAML ビューに切り替えて、Conditions セクションまでスクロールして status.platformStatus の値を表示します。

  • OperatorHub から OCP クラスターに次の Operators をインストールします。

    • OpenShift Virtualization Operator
    • SR-IOV Network Operator
    • OCP 4.11 以降のクラスターの場合: Kubernetes NMState Operator
  • OCP 4.11 以降のクラスターの場合: NMState インスタンスを作成して、すべての NMState CRD のインストールを完了します。

    cat <<EOF | oc apply -f -
    apiVersion: nmstate.io/v1
    kind: NMState
    metadata:
      name: nmstate
      namespace: openshift-nmstate
    EOF
  • director オペレーターのリモート Git リポジトリーを設定して、オーバークラウド向けに生成された設定を保存します。
  • 以下の永続ボリュームを作成し、director Operator が作成する以下の永続ボリューム要求 (PVC) に対応します。

    • 4G (openstackclient-cloud-admin)
    • 1G (openstackclient-hosts)
    • 50G (director Operator がコントローラー仮想マシンごとに複製するベースイメージの場合)
    • 最低 50 GB (コントローラー仮想マシンごと)。詳細情報は、コントローラーノードの要件 を参照してください。

1.2. director Operator のインストール

director Operator をインストールするには、Operator の namespace を作成し、以下の 3 つのリソースを namespace 内に作成する必要があります。

  • CatalogSource: director Operator カタログに使用するインデックスイメージを識別します。
  • Subscription: director Operator カタログ内の変更を追跡します。
  • OperatorGroup: director Operator の Operator グループを定義し、director Operator をターゲット名前空間に制限します。

前提条件

  • OpenShift Container Platform クラスターが機能していることを確認する。
  • OperatorHub から以下の前提条件 Operator をインストールする。

    • OpenShift Virtualization 4.10
    • SR-IOV Network Operator 4.10
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. openstack namespace を作成します。

    $ oc new-project openstack
  2. https://catalog.redhat.com/software/containers/search から最新の osp-director-operator-bundle イメージを取得します。
  3. Operator Package Manager (opm) ツールを https://console.redhat.com/openshift/downloads からダウンロードします。
  4. opm ツールを使用してインデックスイメージを作成します。

    $ BUNDLE_IMG="registry.redhat.io/rhosp-rhel8/osp-director-operator-bundle@sha256:c19099ac3340d364307a43e0ae2be949a588fefe8fcb17663049342e7587f055"
    $ INDEX_IMG="quay.io/<account>/osp-director-operator-index:x.y.z-a"
    $ opm index add --bundles ${BUNDLE_IMG} --tag ${INDEX_IMG} -u podman --pull-tool podman
  5. インデックスイメージをレジストリーにプッシュします。

    $ podman push ${INDEX_IMG}
  6. osp-director-operator.yaml という名前のファイルを作成し、3 つのリソースを設定して director Operator をインストールするように設定するための以下の YAML コンテンツを追加します。

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: osp-director-operator-index
      namespace: openstack
    spec:
      sourceType: grpc
      image: quay.io/<account>/osp-director-operator-index:x.y.z-a 1
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: "osp-director-operator-group"
      namespace: openstack
    spec:
      targetNamespaces:
      - openstack
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: osp-director-operator-subscription
      namespace: openstack
    spec:
      config:
        env:
        - name: WATCH_NAMESPACE
          value: openstack,openshift-machine-api,openshift-sriov-network-operator
      source: osp-director-operator-index
      sourceNamespace: openstack
      name: osp-director-operator
    1
    Operator デプロイメントがイメージをプルできるように Quay 認証を適用する方法の詳細は、プライベートレジストリーから Operator のイメージにアクセスする を参照してください。
  7. openstack namespace 内に 3 つの新規リソースを作成します。

    $ oc apply -f osp-director-operator.yaml

検証

  1. director Operator が正常にインストールされていることを確認します。

    $ oc get operators
    NAME                                     AGE
    osp-director-operator.openstack          5m

1.3. director Operator のカスタムリソース定義

director Operator には、オーバークラウドのリソース管理に使用できるカスタムリソース定義 (CRD) のセットが含まれます。CRD には、ハードウェアプロビジョニングとソフトウェア設定という 2 つのタイプがあります。

ハードウェアプロビジョニング CRD

openstacknetattachment (internal)
ネットワークを仮想マシンに接続するために使用される NodeNetworkConfigurationPolicy および NodeSriovConfigurationPolicy を管理します
openstacknetconfig
openstacknetattachments と openstacknets を指定して完全なネットワーク設定を記述する高レベル CRD。ノードごとに予約済みの IP/MAC アドレスのセットがステータスに反映されます。
openstackbaremetalset
特定の TripleO ロール (Compute、Storageなど) 用のベアメタルホストのセットを作成します。
openstackcontrolplane
OpenStack コントロールプレーンを作成し、関連する openstackvmsets を管理するために使用される CRD
openstacknet (internal)
以下の vmset および baremetalset リソースに IP を割り当てるために使用されるネットワークを作成します。
openstackipset (internal)
特定のネットワークとロールの一連の IP が含まれています。内部で IP アドレスを管理するために使用されます。
openstackprovisionservers
Metal3 でベアメタルプロビジョニング用のカスタムイメージを提供するために使用されます
openstackvmset
特定の TripleO ロール (Controller、Database、NetworkController など) 用に OpenShift Virtualization を使用して一連の VM を作成します。

ソフトウェア設定 CRD

openstackconfiggenerator
デプロイ用のカスタム ConfigMap をスケールアップまたは変更するときに、デプロイ用の Ansible Playbook を自動的に生成します
openstackconfigversion
実行可能な Ansible Playbook のセットを表します
openstackdeploy
Ansible Playbook のセットを実行します (openstackconfigversion)
openstackclient
TripleO デプロイコマンドの実行に使用される Pod を作成します

director Operator CRD の表示

  • oc get crd コマンドを使用してこれらの CRD のリストを表示します。

    $ oc get crd | grep "^openstack"
  • oc describe crd コマンドを使用して、特定の CRD の定義を表示します。

    $ oc describe crd openstackbaremetalset
    Name:         openstackbaremetalsets.osp-director.openstack.org
    Namespace:
    Labels:       operators.coreos.com/osp-director-operator.openstack=
    Annotations:  cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME)
                  controller-gen.kubebuilder.io/version: v0.3.0
    API Version:  apiextensions.k8s.io/v1
    Kind:         CustomResourceDefinition
    ...

CRD の命名規則

各 CRD には spec.names セクションに複数の名前が含まれます。アクションのコンテキストに応じて、これらの名前を使用します。

  • リソースのマニフェストを作成して操作する場合は kind を使用します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackBaremetalSet
    ....

    リソースマニフェストの kind 名は、それぞれの CRD の kind 名に相関します。

  • 複数のリソースを操作する場合は plural を使用します。

    $ oc get openstackbaremetalsets
  • 単一リソースを操作する場合は、singular を使用します。

    $ oc describe openstackbaremetalset/compute
  • CLI での操作には shortName を使用します。

    $ oc get osbmset

1.4. director Operator でサポートされていない機能

ファイバーチャネルバックエンド
ファイバーチャネルを使用するバックエンドについては、Block Storage (cinder) のイメージからボリュームへの転送はサポートされません。Red Hat OpenShift Virtualization は、N_Port ID Virtualization (NPIV) をサポートしていません。したがって、デフォルトで cinder-volume が実行される、ストレージバックエンドからコントローラーに LUN をマッピングする必要がある Block Storage ドライバーは機能しません。cinder-volume 専用のロールを作成し、そのロールを仮想化コントローラーに含めるのではなく、そのロールを使用して物理ノードを作成する必要があります。詳しい情報は、Composable Services and Custom Roles を参照してください。

1.5. director Operator を使用したオーバークラウドデプロイメントのワークフロー

Red Hat OpenStack Platform director Operator のインストール後に、director Operator に固有のリソースを使用してオーバークラウドインフラストラクチャーのプロビジョニング、オーバークラウドの設定の生成、オーバークラウドの作成を行うことができます。

以下のワークフローで、オーバークラウド作成の一般的なプロセスを概説します。

  1. openstacknetconfig CRD を使用して、コントロールプレーンと分離されたネットワークを含むオーバークラウドネットワークを作成します。
  2. ConfigMap を作成して、オーバークラウド用のカスタム heat テンプレートおよび環境ファイルを保存します。
  3. コントローラーノード用の 3 つの仮想マシンと、クライアント操作を実行するための Pod を含むコントロールプレーンを作成します。
  4. ベアメタルの Compute ノードを作成します。
  5. オーバークラウド設定用の Ansible Playbook をレンダリングするための openstackconfiggenerator を作成します。
  6. openstackdeploy を使用して、Ansible Playbook 設定をオーバークラウドノードに適用します。

第2章 director Operator を使用したオーバークラウドのデプロイメントの準備

director Operator を使用してオーバークラウドをデプロイする前に、ベースオペレーティングシステム用のデータボリュームを作成し、リモート git リポジトリーの認証情報を追加する必要があります。また、ノードに root パスワードを設定することもできます。root パスワードを設定していない場合でも、osp-controlplane-ssh-keys シークレットで定義した SSH 鍵を使用してノードにログインすることができます。

2.1. ベースオペレーティングシステムのデータボリュームの作成

コントローラー仮想マシンのベースオペレーティングシステムのイメージを保存するには、OpenShift Container Platform (OCP) クラスターでデータボリュームを作成する必要があります。

前提条件

  • Red Hat Enterprise Linux 8.4 QCOW2 イメージをワークステーションにダウンロードします。このイメージは、Red Hat カスタマーポータルの 製品ダウンロード セクションからダウンロードできます。
  • virtctl クライアントツールをワークステーションにインストールします。以下のコマンドを実行して、このツールを Red Hat Enterprise Linux ワークステーションにインストールできます。

    $ sudo subscription-manager repos --enable=cnv-4.10-for-rhel-8-x86_64-rpms
    $ sudo dnf install -y kubevirt-virtctl
  • virt-customize クライアントツールをワークステーションにインストールします。このツールは、以下のコマンドを使用して Red Hat Enterprise Linux ワークステーションにインストールできます。

    $ dnf install -y libguestfs-tools-c

手順

  1. access.redhat.com からダウンロードしたデフォルトの QCOW2 イメージでは、biosdev の予測可能なネットワークインターフェイス名は使用されません。biosdev の予測可能なネットワークインターフェイス名を使用するように、virt-customize でイメージを変更します。

    $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(kernelopts=.*\)net.ifnames=0 \(.*\)/\1\2/" /boot/grub2/grubenv'
    $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(GRUB_CMDLINE_LINUX=.*\)net.ifnames=0 \(.*\)/\1\2/" /etc/default/grub' --truncate /etc/machine-id
  2. virtctl でイメージを OpenShift Virtualization にアップロードします。

    $ virtctl image-upload dv <datavolume_name> -n openstack \
     --size=<size> --image-path=<local_path_to_image> \
     --storage-class <storage_class> --access-mode <access_mode> --insecure
    • <datavolume_name> をデータボリュームの名前 (例: openstack-base-img) に置き換えます。
    • <size> を、環境に必要なデータボリュームのサイズ (たとえば、50Gi) に置き換えます。最小サイズは 50GB です。
    • <storage_class> をクラスターの必要なストレージクラスに置き換えます。次のコマンドを使用して、利用可能なストレージクラスを取得します。

      $ oc get storageclass
    • <access_mode> を、PVC のアクセスモードに置き換えます。デフォルト値は ReadWriteOnce です。
  3. OpenStackControlPlane リソースおよび個別の OpenStackVmSet リソースの作成時に、baseImageVolumeName パラメーターをデータボリューム名に設定します。

    ...
    spec:
      ...
      baseImageVolumeName: openstack-base-img
    ...

2.2. リモート Git リポジトリーの認証情報の追加

director Operator はレンダリングされた Ansible Playbook をリモート Git リポジトリーに保管し、このリポジトリーを使用してオーバークラウドの設定に対する変更を追跡します。SSH 認証をサポートする Git リポジトリーであれば、どのリポジトリーでも使用できます。git-secret という名前の OpenShift Secret リソースとして Git リポジトリーの詳細を指定する必要があります。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • director オペレーターのリモート Git リポジトリーを作成して、オーバークラウド向けに生成された設定を保存します。
  • SSH キーペアを準備します。公開鍵を Git リポジトリーにアップロードし、秘密鍵を利用できる状態にして、git-secret Secret リソースに追加します。

手順

  1. Secret リソースを作成します。

    $ oc create secret generic git-secret -n openstack --from-file=git_ssh_identity=<path_to_private_SSH_key> --from-literal=git_url=<git_server_URL>

    git-secret Secret リソースには、2 つのキーと値のペアが含まれます。

    git_ssh_identity
    Git リポジトリーにアクセスするための秘密鍵--from-file オプションは、SSH 秘密鍵ファイルの内容を保存します。
    git_url
    設定を保存する git リポジトリーの SSH URL。--from-literal オプションは、このキーに入力した URL を保存します。

検証

  1. Secret リソースを表示します。

    $ oc get secret/git-secret -n openstack

2.3. ノードの root パスワードの設定

各ノードのパスワードを使用して root ユーザーにアクセスするには、userpassword という名前の Secret リソースに root パスワードを設定します。

注記

ノードの root パスワードの設定はオプションです。root パスワードを設定ていない場合には、osp-controlplane-ssh-keys シークレットで定義した SSH 鍵を使用してノードにログインすることができます。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. 選択したパスワードを base64 値に変換します。

    $ echo -n "p@ssw0rd!" | base64
    cEBzc3cwcmQh
    注記

    -n オプションは、echo 出力から末尾の改行を削除します。

  2. ワークステーションに openstack-userpassword.yaml という名前のファイルを作成します。ファイルに、Secret の以下のリソース仕様を追加します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: userpassword
      namespace: openstack
    data:
      NodeRootPassword: "cEBzc3cwcmQh"

    NodeRootPassword パラメーターを base64 でエンコードされたパスワードに設定します。

  3. userpassword シークレットを作成します。

    $ oc create -f openstack-userpassword.yaml -n openstack
注記

OpenStackControlPlane または OpenStackBaremetalSet を作成するときに、passwordSecretuserpassword Secret を入力します。

apiVersion: osp-director.openstack.org/v1beta2
kind: OpenStackControlPlane
metadata:
  name: overcloud
  namespace: openstack
spec:
  passwordSecret: <userpassword>
  • <userpassword>userpassword Secret に置き換えます。

第3章 director Operator を使用したネットワークの作成

OpenStackNetConfig リソースを使用して OpenShift Virtualization ワーカーノードでネットワークおよびブリッジを作成し、仮想マシンをこれらのネットワークに接続します。コンポーザブルネットワークのネットワーク分離を実装するには、オーバークラウドおよび追加のネットワーク用にコントロールプレーンネットワークを 1 つ作成する必要があります。

3.1. OpenStackNet での仮想マシンのブリッジについて

OpenStackVMSet リソースで仮想マシンを作成する場合には、これらの仮想マシンを関連する Red Hat OpenStack Platform (RHOSP) ネットワークに接続する必要があります。OpenStackNetConfig リソースには、nodeNetworkConfigurationPolicy のハッシュである attachConfigurations オプションが含まれています。OpenStackNetConfig で指定されたそれぞれの attachConfiguration は、OpenStackNet Attachment を作成し、ネットワークインターフェイスデータを OpenShift の NodeNetworkConfigurationPolicy リソースに渡します。NodeNetworkConfigurationPolicy リソースは nmstate API を使用して、各 OCP ワーカーノードでネットワーク設定の最終状態を設定します。OpenStackNetConfig で設定された各ネットワークは、attachConfigurations の 1 つを参照します。仮想マシン内には、ネットワークごとに 1 つのインターフェイスがあります。この方法により、OCP ワーカーノード上に必要なブリッジを作成し、コントローラー仮想マシンを RHOSP ネットワークに接続できます。

たとえば、br-osp attachConfiguration を作成し、nodeNetworkConfigurationPolicy オプションを設定して Linux ブリッジを作成し、各ワーカーの NIC にブリッジに接続する場合は、NodeNetworkConfigurationPolicy リソースは、この必要な終了状態になるように、それぞれの OCP ワーカーノードを設定します。

apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackNetConfig
metadata:
  name: openstacknetconfig
spec:
  attachConfigurations:
    br-osp:
      nodeNetworkConfigurationPolicy:
        nodeSelector:
          node-role.kubernetes.io/worker: ""
        desiredState:
          interfaces:
          - bridge:
              options:
                stp:
                  enabled: false
              port:
              - name: enp6s0
            description: Linux bridge with enp6s0 as a port
            name: br-osp
            state: up
            type: linux-bridge
            mtu: 1500
…
  networks:
  - name: Control
    nameLower: ctlplane
    subnets:
    - name: ctlplane
      ipv4:
        allocationEnd: 192.168.25.250
        allocationStart: 192.168.25.100
        cidr: 192.168.25.0/24
        gateway: 192.168.25.1
      attachConfiguration: br-osp

この設定を適用すると、各ワーカーに br-osp という名前の新規ブリッジが追加され、各ホストの enp6s0 NIC に接続されます。RHOSP をデプロイするには、専用の NIC が必要です。すべての RHOSP コントローラー仮想マシンは、コントロールプレーンのネットワークトラフィックの br-osp ブリッジに接続できます。

VLAN 20 を介して内部 API ネットワークを指定する場合は、attachConfiguration オプションを設定して、各 OCP ワーカーノードのネットワーク設定を変更し、VLAN を既存の br-osp ブリッジに接続できます。

apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackNetConfig
metadata:
  name: openstacknetconfig
spec:
  attachConfigurations:
    br-osp:
…
  networks:
…
 - isControlPlane: false
    mtu: 1500
    name: InternalApi
    nameLower: internal_api
    subnets:
    - attachConfiguration: br-osp
      ipv4:
        allocationEnd: 172.17.0.250
        allocationStart: 172.17.0.10
        cidr: 172.17.0.0/24
        gateway: 172.17.0.1
        routes:
        - destination: 172.17.1.0/24
          nexthop: 172.17.0.1
        - destination: 172.17.2.0/24
          nexthop: 172.17.0.1
      name: internal_api
      vlan: 20

br-osp はすでに存在し、各ホストの enp6s0 NIC に接続されているので、ブリッジ自体に変更は加えられません。ただし、OpenStackNet は VLAN 20 をこのネットワークに関連付けます。つまり、RHOSP コントローラーの仮想マシンは、内部 API ネットワークトラフィック用の br-osp ブリッジ上の VLAN 20 に接続できます。

OpenStackVMSet リソースで仮想マシンを作成すると、仮想マシンは、各ネットワークに接続された複数の Virtio デバイスを使用します。OpenShift Virtualization は、default ネットワーク (常に最初にくるインターフェイス) を除き、ネットワーク名をアルファベット順に並べ替えます。

たとえば、OpenStackNetConfig を使用してデフォルトの RHOSP ネットワークを作成する場合、コントローラー仮想マシンのインターフェイス設定は次の例のようになります。

interfaces:
  - masquerade: {}
    model: virtio
    name: default
  - bridge: {}
    model: virtio
    name: ctlplane
  - bridge: {}
    model: virtio
    name: external
  - bridge: {}
    model: virtio
    name: internalapi
  - bridge: {}
    model: virtio
    name: storage
  - bridge: {}
    model: virtio
    name: storagemgmt
  - bridge: {}
    model: virtio
    name: tenant

この設定により、コントローラーノードの以下のネットワークとインターフェイスのマッピングが作成されます。

表3.1 デフォルトのネットワークからインターフェイスへのマッピング

Networkインターフェイス

default

nic1

ctlplane

nic2

external

nic3

internalapi

nic4

storage

nic5

storagemgmt

nic6

tenant

nic7

注記

OpenStackVMSet で使用されるロール NIC テンプレートは自動生成されます。これは、nic-template.role.j2 ファイルを tarball ファイルに追加することで上書きできます。tarball ファイルのバイナリーコンテンツを OpenShift ConfigMap 名 tripleo-tarball-config に含めます。

3.2. OpenStackNetConfig を使用したオーバークラウドのコントロールプレーンネットワークの作成

OpenStackNetConfig で、オーバークラウド用に少なくとも 1 つのコントロールプレーンネットワークを定義する必要があります。IP アドレスの割り当てに加えて、ネットワーク定義には OpenStackNetAttachment のマッピング情報が含まれます。OpenShift Virtualization はこの情報を使用して、仮想マシンをネットワークに接続します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. ワークステーション上に osnetconfig.yaml という名前のファイルを作成します。ctlplane という名前のコントロールプレーンネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの enp6s0 イーサネットデバイスに接続された Linux ブリッジを使用するコントロールプレーンの仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackNetConfig
    metadata:
      name: openstacknetconfig
    spec:
      attachConfigurations:
        br-osp:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp6s0
                description: Linux bridge with enp6s0 as a port
                name: br-osp
                state: up
                type: linux-bridge
                mtu: 1500
      # optional DnsServers list
      dnsServers:
      - 192.168.25.1
      # optional DnsSearchDomains list
      dnsSearchDomains:
      - osptest.test.metalkube.org
      - some.other.domain
      # DomainName of the OSP environment
      domainName: osptest.test.metalkube.org
      networks:
      - name: Control
        nameLower: ctlplane
        subnets:
        - name: ctlplane
          ipv4:
            allocationEnd: 172.22.0.250
            allocationStart: 172.22.0.100
            cidr: 172.22.0.0/24
            gateway: 172.22.0.1
          attachConfiguration: br-osp
      # optional: configure static mapping for the networks per nodes. If there is none, a random gets created
      reservations:
        controller-0:
          ipReservations:
            ctlplane: 172.22.0.120
        compute-0:
          ipReservations:
            ctlplane: 172.22.0.140

    ネットワーク仕様で次の値を設定します。

    name
    コントロールプレーンネットワークの名 (Control) を設定します。
    nameLower
    コントロールプレーンネットワークの下位の名前 (ctlplane) を設定します。
    subnets
    サブネットの仕様を設定します。
    subnets.name
    コントロールプレーンサブネットの名前 (ctlplane) を設定します。
    subnets.attachConfiguration
    どのアタッチ設定を使用するかの参照を設定します。
    subnets.ipv4
    allocationStart、allocationEnd、cidr、ゲートウェイ、オプションのルートリスト (宛先と nexthop を含む) を含む ipv4 サブネットの詳細

    このセクションで使用できる値の詳細は、openstacknetconfig CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstacknetconfig

    ネットワーク仕様の設定が完了したら、ファイルを保存します。

  2. コントロールプレーンネットワークを作成します。

    $ oc create -f osnetconfig.yaml -n openstack

検証

  1. コントロールプレーンネットワークのリソースを表示します。

    $ oc get openstacknetconfig/openstacknetconfig

3.3. OpenStackNetConfig を使用したネットワーク分離用の VLAN ネットワークの作成

コンポーザブルネットワークのネットワーク分離を実装するには、追加のネットワークを作成する必要があります。このネットワーク分離を実現するには、コンポーザブルネットワークを個別の VLAN ネットワークに配置できます。OpenStackNetConfig リソースには、IP アドレスの割り当てに加えて、OpenShift Virtualization が仮想マシンを VLAN ネットワークにアタッチするために使用するネットワーク設定ポリシーを定義する情報が含まれます。

デフォルトの Red Hat OpenStack Platform ネットワークを使用するには、各ネットワークを定義する OpenStackNetConfig リソースを作成する必要があります。

表3.2 デフォルトの Red Hat OpenStack Platform ネットワーク

NetworkVLANCIDR割り当て

External

10

10.0.0.0/24

10.0.0.10 - 10.0.0.250

InternalApi

20

172.17.0.0/24

172.17.0.10 - 172.17.0.250

Storage

30

172.18.0.0/24

172.18.0.10 - 172.18.0.250

StorageMgmt

40

172.19.0.0/24

172.19.0.10 - 172.19..250

テナント

50

172.20.0.0/24

172.20.0.10 - 172.20.0.250

重要

各ネットワークごとに異なるネットワークの詳細を使用するには、カスタム network_data.yaml ファイルを作成する必要があります。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. ネットワーク設定用のファイルを作成します。VLAN ネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの enp6s0 および enp7s0 イーサネットデバイスに接続された Linux ブリッジ br-ex および br-osp を介して VLAN タグ付きトラフィックを管理する内部 API、ストレージ、ストレージ管理、テナント、および外部ネットワークの仕様は次のとおりです。:

    kind: OpenStackNetConfig
    metadata:
      name: openstacknetconfig
    spec:
      attachConfigurations:
        br-osp:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp7s0
                description: Linux bridge with enp7s0 as a port
                name: br-osp
                state: up
                type: linux-bridge
                mtu: 1500
        br-ex:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp6s0
                description: Linux bridge with enp6s0 as a port
                name: br-ex
                state: up
                type: linux-bridge
                mtu: 1500
      # optional DnsServers list
      dnsServers:
      - 172.22.0.1
      # optional DnsSearchDomains list
      dnsSearchDomains:
      - osptest.test.metalkube.org
      - some.other.domain
      # DomainName of the OSP environment
      domainName: osptest.test.metalkube.org
      networks:
      - name: Control
        nameLower: ctlplane
        subnets:
        - name: ctlplane
          ipv4:
            allocationEnd: 172.22.0.250
            allocationStart: 172.22.0.10
            cidr: 172.22.0.0/24
            gateway: 172.22.0.1
          attachConfiguration: br-osp
      - name: InternalApi
        nameLower: internal_api
        mtu: 1350
        subnets:
        - name: internal_api
          attachConfiguration: br-osp
          vlan: 20
          ipv4:
            allocationEnd: 172.17.0.250
            allocationStart: 172.17.0.10
            cidr: 172.17.0.0/24
      - name: External
        nameLower: external
        subnets:
        - name: external
          ipv4:
            allocationEnd: 10.0.0.250
            allocationStart: 10.0.0.10
            cidr: 10.0.0.0/24
            gateway: 10.0.0.1
          attachConfiguration: br-ex
      - name: Storage
        nameLower: storage
        mtu: 1500
        subnets:
        - name: storage
          ipv4:
            allocationEnd: 172.18.0.250
            allocationStart: 172.18.0.10
            cidr: 172.18.0.0/24
          vlan: 30
          attachConfiguration: br-osp
      - name: StorageMgmt
        nameLower: storage_mgmt
        mtu: 1500
        subnets:
        - name: storage_mgmt
          ipv4:
            allocationEnd: 172.19.0.250
            allocationStart: 172.19.0.10
            cidr: 172.19.0.0/24
          vlan: 40
          attachConfiguration: br-osp
      - name: Tenant
        nameLower: tenant
        vip: False
        mtu: 1500
        subnets:
        - name: tenant
          ipv4:
            allocationEnd: 172.20.0.250
            allocationStart: 172.20.0.10
            cidr: 172.20.0.0/24
          vlan: 50
          attachConfiguration: br-osp

    linux-bridge でネットワーク分離に VLAN を使用する場合に、以下のような処理が行われます。

    • director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、nmstate を使用してワーカーノードにブリッジを設定します。
    • director Operator は、Multus CNI プラグイン設定を定義するネットワークごとにネットワーク接続定義を作成します。ネットワーク接続定義で VLAN ID を指定する場合には、Multus CNI プラグインはブリッジで vlan-filtering を有効にします。
    • director Operator は、仮想マシン上の各ネットワーク専用のインターフェイスを割り当てます。これは、OpenStackVMSet のネットワークテンプレートがマルチ NIC ネットワークテンプレートであることを意味します。

    リソース仕様に以下の値を設定します。

    metadata.name
    OpenStackNetConfig の名前に設定します。
    spec

    ネットワークを接続するためのネットワーク設定とネットワークの詳細を設定します。このセクションで使用できる値の詳細は、openstacknetconfig CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstacknetconfig

    ネットワーク仕様の設定が完了したら、ファイルを保存します。

  2. ネットワーク設定を作成します。

    $ oc apply -f openstacknetconfig.yaml -n openstack

検証

  1. OpenStackNetConfig API と作成された子リソースを表示します。

    $ oc get openstacknetconfig/openstacknetconfig -n openstack
    $ oc get openstacknetattachment -n openstack
    $ oc get openstacknet -n openstack

    エラーが表示された場合は、基礎となる network-attach-definition とノードのネットワーク設定ポリシーを確認してください。

    $ oc get network-attachment-definitions -n openstack
    $ oc get nncp

3.4. OpenStackNetConfig を使用したジャンボフレームの設定

ブリッジに Jumbo Frames を使用するには、デバイスの設定を作成して、正しい MTU を設定します。

apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackNetConfig
metadata:
  name: openstacknetconfig
spec:
  attachConfigurations:
    br-osp:
      nodeNetworkConfigurationPolicy:
        nodeSelector:
          node-role.kubernetes.io/worker: ""
        desiredState:
          interfaces:
          - bridge:
              options:
                stp:
                  enabled: false
              port:
              - name: enp7s0
            description: Linux bridge with enp7s0 as a port
            name: br-osp
            state: up
            type: linux-bridge
            mtu: 9000
          - name: enp7s0
            description: Configuring enp7s0 on workers
            type: ethernet
            state: up
            mtu: 9000

3.5. OpenStackNetConfig による静的 IP 予約

OpenStackNetConfig 仕様の予約パラメーターを使用して、ホストおよびネットワークごとに静的 IP アドレスを予約できます。そこに提供される予約は、`OpenStackNet` 仕様の予約まで取り込まれ、自動生成された IP よりも優先されます。以下の例は、3 つのコントローラーと 2 つの Compute ノードを持つオーバークラウドを示しています。controller-2compute-1 を除くすべてのノードには静的予約があります。

spec:
  …
  reservations:
    compute-0:
      ipReservations:
        ctlplane: 172.22.0.140
        internal_api: 172.17.0.40
        storage: 172.18.0.40
        tenant: 172.20.0.40
      macReservations: {}
    controller-0:
      ipReservations:
        ctlplane: 172.22.0.120
        external: 10.0.0.20
        internal_api: 172.17.0.20
        storage: 172.18.0.20
        storage_mgmt: 172.19.0.20
        tenant: 172.20.0.20
      macReservations: {}
    controller-1:
      ipReservations:
        ctlplane: 172.22.0.130
        external: 10.0.0.30
        internal_api: 172.17.0.30
        storage: 172.18.0.30
        storage_mgmt: 172.19.0.30
        tenant: 172.20.0.30
      macReservations: {}
    controlplane:
      ipReservations:
        ctlplane: 172.22.0.110
        external: 10.0.0.10
        internal_api: 172.17.0.10
        storage: 172.18.0.10
        storage_mgmt: 172.19.0.10
      macReservations: {}
    openstackclient-0:
      ipReservations:
        ctlplane: 172.22.0.251
        external: 10.0.0.251
        internal_api: 172.17.0.251
      macReservations: {}

第4章 director Operator を使用した heat テンプレートおよび環境ファイルの追加

オーバークラウドをカスタマイズしたり、特定の機能を有効にする場合には、希望するカスタマイズ似合わせて heat テンプレートおよび環境ファイルを作成する必要があります。デプロイメントにカスタムのテンプレートおよび環境ファイルを追加して、オーバークラウドを設定できます。director Operator のコンテキストでは、オーバークラウドのデプロイメントを実行する前にこれらのファイルを ConfigMap リソースに保存します。

4.1. director Operator を使用したカスタムテンプレートの使用方法について

director Operator は、各ノードで Red Hat OpenStack Platform ソフトウェアを設定する準備が整うと、テンプレートのコアセットをプロビジョニングノードに適用する Ansible Playbook に変換します。

独自のカスタム heat テンプレートおよびカスタムロールファイルをオーバークラウドデプロイメントに追加するには、テンプレートファイルを tarball ファイルにアーカイブし、tarball ファイルのバイナリーコンテンツを tripleo-tarball-config という名前の OpenShift ConfigMap に含める必要があります。この tarball ファイルには、テンプレートのコアセットを拡張するための複雑なディレクトリー構造を含めることができます。director Operator は、tarball ファイルから、heat テンプレートのコアセットと同じディレクトリーにファイルとディレクトリーをデプロイメントします。カスタムテンプレートのいずれかがコアコレクションのテンプレートと名前が同じ場合には、カスタムテンプレートはコアテンプレートを上書きします。

注記

環境ファイル内のすべての参照は、tarball が抽出される TripleO Heat テンプレートに関連している必要があります。

たとえば、tarball ファイルに以下の YAML ファイルが含まれる場合があります。

$ tar -tf custom-config.tar.gz
custom-template.yaml
net-config-static-bridge.yaml
net-config-static.yaml
roles_data.yaml

custom-template.yaml ファイルは、新しいファイルで、既存のテンプレートを上書きしません。ただし、net-config-static-bridge.yaml ファイルおよび net-config-static.yaml ファイルは、事前にプロビジョニングされたノードネットワーク設定のデフォルトの heat テンプレートを、roles_data.yaml ファイルはデフォルトのロール設定を上書きします。

4.2. オーバークラウド設定へのカスタムテンプレートの追加

カスタムテンプレートを tarball ファイルにアーカイブし、これらのテンプレートをオーバークラウドデプロイメントの一部として追加できるようにします。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • プロビジョニングしたノードに適用するカスタムテンプレートを作成します。

手順

  1. カスタムテンプレートの場所に移動します。

    $ cd ~/custom_templates
  2. テンプレートを tarball にアーカイブします。

    $ tar -cvzf custom-config.tar.gz *.yaml
  3. tripleo-tarball-config ConfigMap を作成し、tarball をデータとして使用します。

    $ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack

検証

  1. ConfigMap を表示します。

    $ oc get configmap/tripleo-tarball-config -n openstack

4.3. director Operator を使用したカスタム環境ファイルの使用方法について

オーバークラウドに機能またはパラメーターを設定するには、デプロイメントの実行に環境ファイルを追加する必要があります。director Operator は heat-env-config という名前の ConfigMap を使用して環境ファイルを保存し、取得します。heat-env-config ConfigMap のデータには、以下の構文を使用します。

...
data:
  <environment_file_name>: |+
    <environment_file_contents>

たとえば、heat-env-config ConfigMap には 2 つの環境ファイルが含まれる可能性があります。

...
data:
  network_environment.yaml: |+
    resource_registry:
      OS::TripleO::Compute::Net::SoftwareConfig: net-config-static-bridge-compute.yaml
  cloud_name.yaml: |+
    parameter_defaults:
      CloudDomain: ocp4.example.com
      CloudName: overcloud.ocp4.example.com
      CloudNameInternal: overcloud.internalapi.ocp4.example.com
      CloudNameStorage: overcloud.storage.ocp4.example.com
      CloudNameStorageManagement: overcloud.storagemgmt.ocp4.example.com
      CloudNameCtlplane: overcloud.ctlplane.ocp4.example.com
  • 最初の環境ファイルは network_environment.yaml という名前で、このファイルにはネットワークインターフェイス設定を適切な heat テンプレートにマッピングする resource_registry セクションが含まれています。
  • 2 番目の環境ファイルは cloud_name.yaml という名前で、オーバークラウドのホスト名に関連するパラメーターを設定する parameter_defaults セクションが含まれます。
  • director Operator がオーバークラウドをデプロイする時に、Operator には heat-env-config ConfigMap からの両方のファイルがデプロイメントで追加されます。

関連情報

4.4. オーバークラウド設定へのカスタム環境ファイルの追加

ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap にカスタム環境ファイルのセットをアップロードします。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • オーバークラウドデプロイメント用のカスタム環境ファイルを作成します。

手順

  1. heat-env-config ConfigMap を作成し、環境ファイルが含まれるディレクトリーをデータとして使用します。

    $ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -

検証

  1. ConfigMap を表示します。

    $ oc get configmap/heat-env-config -n openstack

第5章 director Operator を使用したオーバークラウドノードの作成

Red Hat OpenStack Platform オーバークラウドは、コントロールプレーンサービスを提供するコントロールノードや、コンピュートリソースを提供する Compute ノードなど、複数のノードで設定されます。高可用性に対応したオーバークラウドには、3 つのコントローラーノードと少なくとも 1 つの Compute ノードが必要です。OpenStackBaremetalSet リソースで Compute ノードを、OpenStackControlPlane リソースでコントローラーノードを作成することができます。

デフォルトでは、自動検出はなく、仮想マシンがホストされている OpenShift ワーカーノードで動作します。OpenShift ワーカーノードの問題を自動検出する方法の詳細は、マシンのヘルスチェックのデプロイ を参照してください。

5.1. OpenStackControlPlane でのコントロールプレーンの作成

オーバークラウドのコントロールプレーンには、オーバークラウドの機能を管理するメインの Red Hat OpenStack Platform サービスが含まれます。コントロールプレーンは、通常 3 つのコントローラーノードで設定されており、他のコントロールプレーンベースのコンポーザブルロールにスケーリングできます。コンポーザブルロールを使用する場合は、各サービスは 3 つの追加の専用ノードで実行される必要があり、Pacemaker のクォーラムを維持するために、コントロールプレーン内のノードの合計数を追加する必要があります。

OpenStackControlPlane カスタムリソースは、コントロールプレーンベースのノードを OpenShift Virtualization 内の仮想マシンとして作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。

手順

  1. ワークステーションに openstack-controller.yaml という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。たとえば、3 つのコントローラーノードで設定されるコントロールプレーンの仕様は以下のとおりです。

    apiVersion: osp-director.openstack.org/v1beta2
    kind: OpenStackControlPlane
    metadata:
      name: overcloud
      namespace: openstack
    spec:
      openStackClientNetworks:
            - ctlplane
            - internal_api
            - external
      openStackClientStorageClass: host-nfs-storageclass
      passwordSecret: userpassword
      virtualMachineRoles:
        Controller:
          roleName: Controller
          roleCount: 3
          networks:
            - ctlplane
            - internal_api
            - external
            - tenant
            - storage
            - storage_mgmt
          cores: 12
          memory: 64
          rootDisk:
            diskSize: 100
            baseImageVolumeName: openstack-base-img
            # storageClass must support RWX to be able to live migrate VMs
            storageClass: host-nfs-storageclass
            storageAccessMode:  ReadWriteMany
            # When using OpenShift Virtualization with OpenShift Container Platform Container Storage,
            # specify RBD block mode persistent volume claims (PVCs) when creating virtual machine disks.
            # With virtual machine disks, RBD block mode volumes are more efficient and provide better
            # performance than Ceph FS or RBD filesystem-mode PVCs.
            # To specify RBD block mode PVCs, use the 'ocs-storagecluster-ceph-rbd' storage class and
            # VolumeMode: Block.
            storageVolumeMode: Filesystem
          # optional configure additional discs to be attached to the VMs,
          # need to be configured manually inside the VMs where to be used.
          additionalDisks:
            - name: datadisk
              diskSize: 500
              storageClass: host-nfs-storageclass
              storageAccessMode:  ReadWriteMany
              storageVolumeMode: Filesystem
      openStackRelease: "16.2"

    リソース仕様に以下の値を設定します。

    metadata.name
    オーバークラウドコントロールプレーンの名前を overcloud に設定します。
    metadata.namespace
    director Operator namespace を openstack に設定します。
    spec

    コントロールプレーンの設定を指定します。このセクションで使用できる値の詳細は、openstackcontrolplane CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackcontrolplane

    コントロールプレーンの仕様の設定が完了したら、ファイルを保存します。

  2. コントロールプレーンを作成します。

    $ oc create -f openstack-controller.yaml -n openstack

    OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。

    director Operator は、OpenStackControlPlane リソースの一部として、リモートシェルからアクセスして RHOSP コマンドを実行できる OpenStackClient Pod も作成します。

検証

  1. コントロールプレーンのリソースを表示します。

    $ oc get openstackcontrolplane/overcloud -n openstack
  2. OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。

    $ oc get openstackvmsets -n openstack
  3. 仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。

    $ oc get virtualmachines
  4. openstackclient リモートシェルにアクセスできるかをテストします。

    $ oc rsh -n openstack openstackclient

5.2. OpenStackProvisionServer を使用したプロビジョニングサーバーの作成 (オプション)

プロビジョニングサーバーは、Red Hat OpenStack Platform (RHOSP) の Compute ノードをプロビジョニングするための特定の Red Hat Enterprise Linux (RHEL) QCOW2 イメージを提供します。OpenStackProvisionServer は、作成した OpenStackBaremetalSets に対して自動的に作成されます。ただし、OpenStackProvisionServer を手動で作成し、後でその名前を将来の OpenStackBaremetalSets に提供することもできます。

OpenStackProvisionServer は、特定の RHEL QCOW2 イメージ用に OpenShift Container Platform プロビジョニングネットワーク上に Apache サーバーを作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. ワークステーションに openstack-provision.yaml という名前のファイルを作成します。プロビジョニングサーバーのリソース仕様を含めます。たとえば、特定の RHEL 8.4 QCOW2 イメージを使用する Provisioing サーバーの仕様は次のとおりです。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackProvisionServer
    metadata:
      name: openstack-provision-server
      namespace: openstack
    spec:
      baseImageUrl: http://<source_host>/rhel-guest-image-8.4-992.x86_64.qcow2
      port: 8080

    リソース仕様に以下の値を設定します。

    metadata.name
    OpenStackProvisionServer を識別する名前を設定します。
    metadata.namespace
    director Operator namespace を openstack に設定します。
    spec
    baseImageURL
    Provisioing サーバーの RHEL QCOW2 イメージの初期ソースを設定します。イメージは、サーバーの作成時にこのリモートソースからダウンロードされます。
    port
    デフォルトでは、8080 に設定されています。特定のポート設定に合わせて変更できます。

    このセクションで使用できる値の詳細は、OpenStackProvisionServer CRD のカスタムリソース定義の仕様スキーマを参照してください。

    $ oc describe crd openstackprovisionserver

    Provisioning サーバー仕様の設定が完了したら、ファイルを保存します。

  2. Provisioning サーバーを作成します。

    $ oc create -f openstack-provision-server.yaml -n openstack

検証

  1. Provisioning サーバーのリソースを表示します。

    $ oc get openstackprovisionserver/openstack-provision-server -n openstack

5.3. OpenStackBaremetalSet を使用した Compute ノードの作成

Compute ノードは Red Hat OpenStack Platform 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後に Compute ノードの数をスケーリングできます。

OpenStackBaremetalSet カスタムリソースは、OpenShift Container Platform が管理するベアメタルマシンから Compute ノードを作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。

手順

  1. ワークステーションに openstack-compute.yaml という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。たとえば、Compute ノード 1 つの仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackBaremetalSet
    metadata:
      name: compute
      namespace: openstack
    spec:
      count: 1
      baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2
      deploymentSSHSecret: osp-controlplane-ssh-keys
      # If you manually created an OpenStackProvisionServer, you can use it here,
      # otherwise the director Operator will create one for you (with `baseImageUrl` as the image that it server)
      # to use with this OpenStackBaremetalSet
      # provisionServerName: openstack-provision-server
      ctlplaneInterface: enp2s0
      networks:
        - ctlplane
        - internal_api
        - tenant
        - storage
      roleName: Compute
      passwordSecret: userpassword

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前を overcloud に設定します。
    metadata.namespace
    director Operator namespace を openstack に設定します。
    spec

    Compute ノードの設定を定義します。このセクションで使用できる値の詳細は、openstackbaremetalset CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackbaremetalset

    Compute ノードの仕様の設定が完了したら、ファイルを保存します。

  2. Compute ノードを作成します。

    $ oc create -f openstack-compute.yaml -n openstack

検証

  1. Compute ノードのリソースを表示します。

    $ oc get openstackbaremetalset/compute -n openstack
  2. OpenShift が管理するベアメタルマシンを表示し、Compute ノードの作成を確認します。

    $ oc get baremetalhosts -n openshift-machine-api

第6章 director Operator を使用したオーバークラウドソフトウェアの設定

オーバークラウドの仮想ノードおよびベアメタルノードをプロビジョニングしたら、オーバークラウドを設定できます。OpenStackConfigGenerator リソースを作成して Ansible Playbook を生成し、ノードを Red Hat Customer Portal または Red Hat Satellite に登録してから、OpenStackDeploy リソースを作成して設定をノードに適用する必要があります。

6.1. OpenStackConfigGenerator を使用したオーバークラウド設定用の Ansible Playbook の作成

オーバークラウドのインフラストラクチャーをプロビジョニングした後に、オーバークラウドノード上に Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する Ansible Playbook のセットを作成する必要があります。これらの Playbook を OpenStackPlaybookGenerator リソースで作成し、RHOSP director の config-download 機能を使用して heat 設定を Playbook に変換します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • 必要に応じて作成される OpenStackControlPlane および OpenStackBarementalSets。
  • リモート Git リポジトリーの認証情報が含まれる git-secret シークレットを設定します。
  • カスタム heat テンプレートが含まれる tripleo-tarball-config ConfigMap を設定します。
  • カスタム環境ファイルが含まれる heat-env-config ConfigMap を設定します。

手順

  1. ワークステーションに openstack-config-generator.yaml という名前のファイルを作成します。リソース仕様を追加して Ansible Playbook を生成します。たとえば、Playbook を生成する仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackConfigGenerator
    metadata:
      name: default
      namespace: openstack
    spec:
      enableFencing: true
      gitSecret: git-secret
      imageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2
      heatEnvConfigMap: heat-env-config
      # List of heat environment files to include from tripleo-heat-templates/environments
      heatEnvs:
      - ssl/tls-endpoints-public-dns.yaml
      - ssl/enable-tls.yaml
      tarballConfigMap: tripleo-tarball-config

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前に設定します。デフォルトは default です。
    metadata.namespace
    director の Operator の namespace (デフォルトでは openstack) に設定します。
    spec.enableFencing
    フェンシングを有効にするために必要な heat 環境ファイルの自動作成を有効にします。
    注記

    本番 OSP 環境では、フェンシングを有効にする必要があります。pacemaker を実行する仮想マシンには、fence-agents-kubevirt パッケージが必要です。

    spec.gitSecret
    Git 認証の認証情報を含む ConfigMap に設定します (デフォルトでは git-secret)。
    spec.heatEnvs
    Playbook の生成に使用されるデフォルトの Tripleo 環境ファイルのリスト。
    spec.heatEnvConfigMap
    カスタム環境ファイルを含む ConfigMap に設定します (デフォルトは heat-env-config)。
    spec.tarballConfigMap
    カスタムの heat テンプレートを使用して tarball が含まれる ConfigMap (tripleo-tarball-config) に設定します。

    spec セクションで使用できる値の詳細は、openstackconfiggenerator CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackconfiggenerator

    Ansible 設定ジェネレーター仕様の設定が完了したら、ファイルを保存します。

  2. Ansible 設定ジェネレーターを作成します。

    $ oc create -f openstack-config-generator.yaml -n openstack

検証

  1. 設定ジェネレーターのリソースを表示します。

    $ oc get openstackconfiggenerator/default -n openstack

6.2. 一時 heat コンテナーイメージのソースパラメーター

エフェメラル heat サービスを作成するには、OpenStackPlaybookGenerator リソースに registry.redhat.io からの固有のコンテナーイメージが 4 つ必要です。

  • openstack-heat-api
  • openstack-heat-engine
  • openstack-mariadb
  • openstack-rabbitmq

これらのイメージのソースの場所は、spec.ephemeralHeatSettings パラメーターで変更できます。たとえば、これらのイメージまたは Red Hat Satellite Server をホストする場合には、これらのイメージのソースとして Red Hat Satellite Server を使用するように、spec.ephemeralHeatSettings パラメーターおよびサブパラメーターを変更できます。

apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackConfigGenerator
metadata:
  name: default
  namespace: openstack
spec:
  …​
  ephemeralHeatSettings:
    heatAPIImageURL: <heat_api_image_location>
    heatEngineImageURL: <heat_engine_image_location>
    mariadbImageURL: <mariadb_image_location>
    rabbitImageURL: <rabbitmq_image-location>

リソース仕様に以下の値を設定します。

spec.ephemeralHeatSettings.heatAPIImageURL
heat API のイメージの場所。
spec.ephemeralHeatSettings.heatEngineImageURL
heat エンジンのイメージの場所。
spec.ephemeralHeatSettings.mariadbImageURL
MariaDB のイメージの場所。
spec.ephemeralHeatSettings.rabbitImageURL
RabbitMQ のイメージの場所。

6.3. 生成インタラクティブモードの設定

設定生成操作をデバッグするには、OpenStackConfigGenerator リソースを対話モードを使用するように設定できます。

apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackConfigGenerator
metadata:
  name: default
  namespace: openstack
spec:
  …​
  interactive: true

このモードでは、OpenStackConfigGenerator リソースは、Playbook のレンダリングを開始する環境を作成しますが、Playbook は自動的にレンダリングされません。接頭辞が generate-config の OpenStackConfigGenerator Pod が起動したら、Pod に rsh し、ファイルと Playbook のレンダリングを検査できます。

$ oc rsh $(oc get pod -o name -l job-name=generate-config-default)
$ ls -la /home/cloud-admin/
...
config 1
config-custom 2
config-passwords 3
create-playbooks.sh 4
process-heat-environment.py 5
tht-tars 6
1
director オペレーターによって自動レンダリングされたファイルを格納するディレクトリー
2
heatEnvConfigMap 経由で提供される環境ファイルを格納するディレクトリー
3
director オペレーターによって作成されたオーバークラウドサービスのパスワードを格納するディレクトリー
4
Ansible Playbook をレンダリングするスクリプト
5
create-playbooks で使用される内部スクリプト。文書化されていない heat クライアントのマップパラメーターのマージを複製します。
6
tarballConfigMap からの tarball を格納するディレクトリー

6.4. tripleo-heat-templates/environments からの heat 環境の使用

TripleO は、パブリックエンドポイント用の TLS など、さまざまなデプロイメントシナリオ用の heat 環境ファイルと共に提供されます。heatEnvs パラメーターリストを使用して、heat 環境ファイルを Playbook 生成に含めることができます。

apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackConfigGenerator
metadata:
  name: default
  namespace: openstack
spec:
  …
  heatEnvs:
  - ssl/tls-endpoints-public-dns.yaml
  - ssl/enable-tls.yaml

6.5. オーバークラウドのオペレーティングシステムの登録

director Operator がノードにオーバークラウドソフトウェアを設定する前に、全ノードのオペレーティングシステムを Red Hat カスタマーポータルまたは Red Hat Satellite Server のいずれかに登録して、ノードのリポジトリーを有効にする必要があります。

OpenStackControlPlane リソースの一部として、director Operator はリモートシェル経由でアクセスする OpenStackClient Pod を作成し、Red Hat OpenStack Platform (RHOSP) コマンドを実行します。この Pod には、/home/cloud-admin/ctlplane-ansible-inventory という名前の ansible インベントリースクリプトも含まれています。

ノードを登録するには、redhat_subscription Ansible モジュールを OpentackClient Pod のインベントリースクリプトと共に使用できます。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
  • OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。

手順

  1. openstackclient のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. cloud-admin ホームディレクトリーに移動します。

    $ cd /home/cloud-admin
  3. ノードを登録する redhat_subscription モジュールを使用して Playbook を作成します。たとえば、以下の Playbook はコントローラーノードを登録します。

    ---
    - name: Register Controller nodes
      hosts: Controller
      become: yes
      vars:
        repos:
          - rhel-8-for-x86_64-baseos-eus-rpms
          - rhel-8-for-x86_64-appstream-eus-rpms
          - rhel-8-for-x86_64-highavailability-eus-rpms
          - ansible-2.9-for-rhel-8-x86_64-rpms
          - openstack-16.2-for-rhel-8-x86_64-rpms
          - fast-datapath-for-rhel-8-x86_64-rpms
      tasks:
        - name: Register system
          redhat_subscription:
            username: myusername
            password: p@55w0rd!
            org_id: 1234567
            release: 8.4
            pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd
        - name: Disable all repos
          command: "subscription-manager repos --disable *"
        - name: Enable Controller node repos
          command: "subscription-manager repos --enable {{ item }}"
          with_items: "{{ repos }}"

    このプレイには、以下の 3 つのタスクが含まれます。

    • ノードを登録します。
    • 自動的に有効化されるリポジトリーをすべて無効にする。
    • コントローラーノードに関連するリポジトリーだけを有効にする。リポジトリーは repos 変数でリストされます。
  4. 必要なリポジトリーにオーバークラウドノードを登録します。

    ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ./rhsm.yaml

6.6. 最新の OpenStackConfigVersion を取得する

さまざまなバージョンの Ansible Playbook が git リポジトリーに保存されています。バージョンごとに、git の hash/digest を参照する OpenStackConfigVersion オブジェクトが存在します。

手順

  1. 最新の OpenStackConfigVersion の hash/digest を選択します。

    $ oc get -n openstack --sort-by {.metadata.creationTimestamp} osconfigversions -o json
注記

OpenStackConfigVersion オブジェクトには、Ansible Playbook のバージョン間の変更を簡単に比較するために使用できる git diff 属性もあります。

6.7. director Operator を使用したオーバークラウドの設定の適用

コントロールプレーンを作成してベアメタルの Compute ノードをプロビジョニングし、各ノードにソフトウェアを設定する Ansible Playbook を生成してからしか、director Operator でオーバークラウドを設定できません。OpenStackDeploy リソースを作成すると、director Operator は ansible Playbook を実行してオーバークラウドを設定するジョブを作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
  • OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
  • OpentackConfigGenerator を使用して、オーバークラウドの Ansible Playbook 設定を作成します。
  • OpenenstackConfigVersion を使用して、オーバークラウドの設定に使用する ansible Playbook のハッシュ/ダイジェストを選択します。

手順

  1. ワークステーションに openstack-deployment.yaml という名前のファイルを作成します。リソース仕様を Ansible Playbook に含めます。以下に例を示します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: default
    spec:
      configVersion: n5fch96h548h75hf4hbdhb8hfdh676h57bh96h5c5h59hf4h88h…
      configGenerator: default

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前を設定します。デフォルトは default です。
    metadata.namespace
    デフォルトの openstack で、diretor Operator namespace に設定します。
    spec.configVersion
    デプロイする Playbook の設定バージョン/git ハッシュ。
    spec.configGenerator
    configGenerator の名前。

    spec セクションで使用できる値の詳細は、openstackdeploy CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackdeploy

    OpenStackDeploy 仕様の設定が完了したら、ファイルを保存します。

  2. OpenStackDeploy リソースを作成します。

    $ oc create -f openstack-deployment.yaml -n openstack

    デプロイメントが実行すると、Ansible Playbook を実行するための Kubernetes ジョブが作成されます。ジョブのログを追跡して、実行中の Ansible Playbook を確認できます。

    $ oc logs -f jobs/deploy-openstack-default

    さらに、openstackclient Pod にログインすることで、実行された Ansible Playbook に手動でアクセスできます。/home/cloud-admin/work/directory には、現在のデプロイメントの ansible Playbook と ansible.log ファイルがあります。

第7章 director operator のデプロイメントシナリオ: ハイパーコンバージドインフラストラクチャー (HCI) が含まれるオーバークラウド

director Operator を使用して、ハイパーコンバージドインフラストラクチャー (HCI) を設定してオーバークラウドをデプロイできます。このシナリオでは、Compute サービスと Ceph Storage OSD サービスの両方を同じノードにインストールします。

前提条件

  • お使いの Compute HCI ノードに OSD として使用する追加のディスクが必要である。

7.1. ベースオペレーティングシステムのデータボリュームの作成

コントローラー仮想マシンのベースオペレーティングシステムのイメージを保存するには、OpenShift Container Platform (OCP) クラスターでデータボリュームを作成する必要があります。

前提条件

  • Red Hat Enterprise Linux 8.4 QCOW2 イメージをワークステーションにダウンロードします。このイメージは、Red Hat カスタマーポータルの 製品ダウンロード セクションからダウンロードできます。
  • virtctl クライアントツールをワークステーションにインストールします。以下のコマンドを実行して、このツールを Red Hat Enterprise Linux ワークステーションにインストールできます。

    $ sudo subscription-manager repos --enable=cnv-4.10-for-rhel-8-x86_64-rpms
    $ sudo dnf install -y kubevirt-virtctl
  • virt-customize クライアントツールをワークステーションにインストールします。このツールは、以下のコマンドを使用して Red Hat Enterprise Linux ワークステーションにインストールできます。

    $ dnf install -y libguestfs-tools-c

手順

  1. access.redhat.com からダウンロードしたデフォルトの QCOW2 イメージでは、biosdev の予測可能なネットワークインターフェイス名は使用されません。biosdev の予測可能なネットワークインターフェイス名を使用するように、virt-customize でイメージを変更します。

    $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(kernelopts=.*\)net.ifnames=0 \(.*\)/\1\2/" /boot/grub2/grubenv'
    $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(GRUB_CMDLINE_LINUX=.*\)net.ifnames=0 \(.*\)/\1\2/" /etc/default/grub' --truncate /etc/machine-id
  2. virtctl でイメージを OpenShift Virtualization にアップロードします。

    $ virtctl image-upload dv <datavolume_name> -n openstack \
     --size=<size> --image-path=<local_path_to_image> \
     --storage-class <storage_class> --access-mode <access_mode> --insecure
    • <datavolume_name> をデータボリュームの名前 (例: openstack-base-img) に置き換えます。
    • <size> を、環境に必要なデータボリュームのサイズ (たとえば、50Gi) に置き換えます。最小サイズは 50GB です。
    • <storage_class> をクラスターの必要なストレージクラスに置き換えます。次のコマンドを使用して、利用可能なストレージクラスを取得します。

      $ oc get storageclass
    • <access_mode> を、PVC のアクセスモードに置き換えます。デフォルト値は ReadWriteOnce です。
  3. OpenStackControlPlane リソースおよび個別の OpenStackVmSet リソースの作成時に、baseImageVolumeName パラメーターをデータボリューム名に設定します。

    ...
    spec:
      ...
      baseImageVolumeName: openstack-base-img
    ...

7.2. リモート Git リポジトリーの認証情報の追加

director Operator はレンダリングされた Ansible Playbook をリモート Git リポジトリーに保管し、このリポジトリーを使用してオーバークラウドの設定に対する変更を追跡します。SSH 認証をサポートする Git リポジトリーであれば、どのリポジトリーでも使用できます。git-secret という名前の OpenShift Secret リソースとして Git リポジトリーの詳細を指定する必要があります。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • director オペレーターのリモート Git リポジトリーを作成して、オーバークラウド向けに生成された設定を保存します。
  • SSH キーペアを準備します。公開鍵を Git リポジトリーにアップロードし、秘密鍵を利用できる状態にして、git-secret Secret リソースに追加します。

手順

  1. Secret リソースを作成します。

    $ oc create secret generic git-secret -n openstack --from-file=git_ssh_identity=<path_to_private_SSH_key> --from-literal=git_url=<git_server_URL>

    git-secret Secret リソースには、2 つのキーと値のペアが含まれます。

    git_ssh_identity
    Git リポジトリーにアクセスするための秘密鍵--from-file オプションは、SSH 秘密鍵ファイルの内容を保存します。
    git_url
    設定を保存する git リポジトリーの SSH URL。--from-literal オプションは、このキーに入力した URL を保存します。

検証

  1. Secret リソースを表示します。

    $ oc get secret/git-secret -n openstack

7.3. ノードの root パスワードの設定

各ノードのパスワードを使用して root ユーザーにアクセスするには、userpassword という名前の Secret リソースに root パスワードを設定します。

注記

ノードの root パスワードの設定はオプションです。root パスワードを設定ていない場合には、osp-controlplane-ssh-keys シークレットで定義した SSH 鍵を使用してノードにログインすることができます。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. 選択したパスワードを base64 値に変換します。

    $ echo -n "p@ssw0rd!" | base64
    cEBzc3cwcmQh
    注記

    -n オプションは、echo 出力から末尾の改行を削除します。

  2. ワークステーションに openstack-userpassword.yaml という名前のファイルを作成します。ファイルに、Secret の以下のリソース仕様を追加します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: userpassword
      namespace: openstack
    data:
      NodeRootPassword: "cEBzc3cwcmQh"

    NodeRootPassword パラメーターを base64 でエンコードされたパスワードに設定します。

  3. userpassword シークレットを作成します。

    $ oc create -f openstack-userpassword.yaml -n openstack
注記

OpenStackControlPlane または OpenStackBaremetalSet を作成するときに、passwordSecretuserpassword Secret を入力します。

apiVersion: osp-director.openstack.org/v1beta2
kind: OpenStackControlPlane
metadata:
  name: overcloud
  namespace: openstack
spec:
  passwordSecret: <userpassword>
  • <userpassword>userpassword Secret に置き換えます。

7.4. OpenStackNetConfig を使用したオーバークラウドのコントロールプレーンネットワークの作成

OpenStackNetConfig で、オーバークラウド用に少なくとも 1 つのコントロールプレーンネットワークを定義する必要があります。IP アドレスの割り当てに加えて、ネットワーク定義には OpenStackNetAttachment のマッピング情報が含まれます。OpenShift Virtualization はこの情報を使用して、仮想マシンをネットワークに接続します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. ワークステーション上に osnetconfig.yaml という名前のファイルを作成します。ctlplane という名前のコントロールプレーンネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの enp6s0 イーサネットデバイスに接続された Linux ブリッジを使用するコントロールプレーンの仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackNetConfig
    metadata:
      name: openstacknetconfig
    spec:
      attachConfigurations:
        br-osp:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp6s0
                description: Linux bridge with enp6s0 as a port
                name: br-osp
                state: up
                type: linux-bridge
                mtu: 1500
      # optional DnsServers list
      dnsServers:
      - 192.168.25.1
      # optional DnsSearchDomains list
      dnsSearchDomains:
      - osptest.test.metalkube.org
      - some.other.domain
      # DomainName of the OSP environment
      domainName: osptest.test.metalkube.org
      networks:
      - name: Control
        nameLower: ctlplane
        subnets:
        - name: ctlplane
          ipv4:
            allocationEnd: 172.22.0.250
            allocationStart: 172.22.0.100
            cidr: 172.22.0.0/24
            gateway: 172.22.0.1
          attachConfiguration: br-osp
      # optional: configure static mapping for the networks per nodes. If there is none, a random gets created
      reservations:
        controller-0:
          ipReservations:
            ctlplane: 172.22.0.120
        compute-0:
          ipReservations:
            ctlplane: 172.22.0.140

    ネットワーク仕様で次の値を設定します。

    name
    コントロールプレーンネットワークの名 (Control) を設定します。
    nameLower
    コントロールプレーンネットワークの下位の名前 (ctlplane) を設定します。
    subnets
    サブネットの仕様を設定します。
    subnets.name
    コントロールプレーンサブネットの名前 (ctlplane) を設定します。
    subnets.attachConfiguration
    どのアタッチ設定を使用するかの参照を設定します。
    subnets.ipv4
    allocationStart、allocationEnd、cidr、ゲートウェイ、オプションのルートリスト (宛先と nexthop を含む) を含む ipv4 サブネットの詳細

    このセクションで使用できる値の詳細は、openstacknetconfig CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstacknetconfig

    ネットワーク仕様の設定が完了したら、ファイルを保存します。

  2. コントロールプレーンネットワークを作成します。

    $ oc create -f osnetconfig.yaml -n openstack

検証

  1. コントロールプレーンネットワークのリソースを表示します。

    $ oc get openstacknetconfig/openstacknetconfig

7.5. OpenStackNetConfig を使用したネットワーク分離用の VLAN ネットワークの作成

コンポーザブルネットワークのネットワーク分離を実装するには、追加のネットワークを作成する必要があります。このネットワーク分離を実現するには、コンポーザブルネットワークを個別の VLAN ネットワークに配置できます。OpenStackNetConfig リソースには、IP アドレスの割り当てに加えて、OpenShift Virtualization が仮想マシンを VLAN ネットワークにアタッチするために使用するネットワーク設定ポリシーを定義する情報が含まれます。

デフォルトの Red Hat OpenStack Platform ネットワークを使用するには、各ネットワークを定義する OpenStackNetConfig リソースを作成する必要があります。

表7.1 デフォルトの Red Hat OpenStack Platform ネットワーク

NetworkVLANCIDR割り当て

External

10

10.0.0.0/24

10.0.0.10 - 10.0.0.250

InternalApi

20

172.17.0.0/24

172.17.0.10 - 172.17.0.250

Storage

30

172.18.0.0/24

172.18.0.10 - 172.18.0.250

StorageMgmt

40

172.19.0.0/24

172.19.0.10 - 172.19..250

テナント

50

172.20.0.0/24

172.20.0.10 - 172.20.0.250

重要

各ネットワークごとに異なるネットワークの詳細を使用するには、カスタム network_data.yaml ファイルを作成する必要があります。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. ネットワーク設定用のファイルを作成します。VLAN ネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの enp6s0 および enp7s0 イーサネットデバイスに接続された Linux ブリッジ br-ex および br-osp を介して VLAN タグ付きトラフィックを管理する内部 API、ストレージ、ストレージ管理、テナント、および外部ネットワークの仕様は次のとおりです。:

    kind: OpenStackNetConfig
    metadata:
      name: openstacknetconfig
    spec:
      attachConfigurations:
        br-osp:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp7s0
                description: Linux bridge with enp7s0 as a port
                name: br-osp
                state: up
                type: linux-bridge
                mtu: 1500
        br-ex:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp6s0
                description: Linux bridge with enp6s0 as a port
                name: br-ex
                state: up
                type: linux-bridge
                mtu: 1500
      # optional DnsServers list
      dnsServers:
      - 172.22.0.1
      # optional DnsSearchDomains list
      dnsSearchDomains:
      - osptest.test.metalkube.org
      - some.other.domain
      # DomainName of the OSP environment
      domainName: osptest.test.metalkube.org
      networks:
      - name: Control
        nameLower: ctlplane
        subnets:
        - name: ctlplane
          ipv4:
            allocationEnd: 172.22.0.250
            allocationStart: 172.22.0.10
            cidr: 172.22.0.0/24
            gateway: 172.22.0.1
          attachConfiguration: br-osp
      - name: InternalApi
        nameLower: internal_api
        mtu: 1350
        subnets:
        - name: internal_api
          attachConfiguration: br-osp
          vlan: 20
          ipv4:
            allocationEnd: 172.17.0.250
            allocationStart: 172.17.0.10
            cidr: 172.17.0.0/24
      - name: External
        nameLower: external
        subnets:
        - name: external
          ipv4:
            allocationEnd: 10.0.0.250
            allocationStart: 10.0.0.10
            cidr: 10.0.0.0/24
            gateway: 10.0.0.1
          attachConfiguration: br-ex
      - name: Storage
        nameLower: storage
        mtu: 1500
        subnets:
        - name: storage
          ipv4:
            allocationEnd: 172.18.0.250
            allocationStart: 172.18.0.10
            cidr: 172.18.0.0/24
          vlan: 30
          attachConfiguration: br-osp
      - name: StorageMgmt
        nameLower: storage_mgmt
        mtu: 1500
        subnets:
        - name: storage_mgmt
          ipv4:
            allocationEnd: 172.19.0.250
            allocationStart: 172.19.0.10
            cidr: 172.19.0.0/24
          vlan: 40
          attachConfiguration: br-osp
      - name: Tenant
        nameLower: tenant
        vip: False
        mtu: 1500
        subnets:
        - name: tenant
          ipv4:
            allocationEnd: 172.20.0.250
            allocationStart: 172.20.0.10
            cidr: 172.20.0.0/24
          vlan: 50
          attachConfiguration: br-osp

    linux-bridge でネットワーク分離に VLAN を使用する場合に、以下のような処理が行われます。

    • director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、nmstate を使用してワーカーノードにブリッジを設定します。
    • director Operator は、Multus CNI プラグイン設定を定義するネットワークごとにネットワーク接続定義を作成します。ネットワーク接続定義で VLAN ID を指定する場合には、Multus CNI プラグインはブリッジで vlan-filtering を有効にします。
    • director Operator は、仮想マシン上の各ネットワーク専用のインターフェイスを割り当てます。これは、OpenStackVMSet のネットワークテンプレートがマルチ NIC ネットワークテンプレートであることを意味します。

    リソース仕様に以下の値を設定します。

    metadata.name
    OpenStackNetConfig の名前に設定します。
    spec

    ネットワークを接続するためのネットワーク設定とネットワークの詳細を設定します。このセクションで使用できる値の詳細は、openstacknetconfig CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstacknetconfig

    ネットワーク仕様の設定が完了したら、ファイルを保存します。

  2. ネットワーク設定を作成します。

    $ oc apply -f openstacknetconfig.yaml -n openstack

検証

  1. OpenStackNetConfig API と作成された子リソースを表示します。

    $ oc get openstacknetconfig/openstacknetconfig -n openstack
    $ oc get openstacknetattachment -n openstack
    $ oc get openstacknet -n openstack

    エラーが表示された場合は、基礎となる network-attach-definition とノードのネットワーク設定ポリシーを確認してください。

    $ oc get network-attachment-definitions -n openstack
    $ oc get nncp

7.6. OpenStackControlPlane でのコントロールプレーンの作成

オーバークラウドのコントロールプレーンには、オーバークラウドの機能を管理するメインの Red Hat OpenStack Platform サービスが含まれます。コントロールプレーンは、通常 3 つのコントローラーノードで設定されており、他のコントロールプレーンベースのコンポーザブルロールにスケーリングできます。コンポーザブルロールを使用する場合は、各サービスは 3 つの追加の専用ノードで実行される必要があり、Pacemaker のクォーラムを維持するために、コントロールプレーン内のノードの合計数を追加する必要があります。

OpenStackControlPlane カスタムリソースは、コントロールプレーンベースのノードを OpenShift Virtualization 内の仮想マシンとして作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。

手順

  1. ワークステーションに openstack-controller.yaml という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。たとえば、3 つのコントローラーノードで設定されるコントロールプレーンの仕様は以下のとおりです。

    apiVersion: osp-director.openstack.org/v1beta2
    kind: OpenStackControlPlane
    metadata:
      name: overcloud
      namespace: openstack
    spec:
      openStackClientNetworks:
            - ctlplane
            - internal_api
            - external
      openStackClientStorageClass: host-nfs-storageclass
      passwordSecret: userpassword
      virtualMachineRoles:
        Controller:
          roleName: Controller
          roleCount: 3
          networks:
            - ctlplane
            - internal_api
            - external
            - tenant
            - storage
            - storage_mgmt
          cores: 12
          memory: 64
          rootDisk:
            diskSize: 100
            baseImageVolumeName: openstack-base-img
            # storageClass must support RWX to be able to live migrate VMs
            storageClass: host-nfs-storageclass
            storageAccessMode:  ReadWriteMany
            # When using OpenShift Virtualization with OpenShift Container Platform Container Storage,
            # specify RBD block mode persistent volume claims (PVCs) when creating virtual machine disks.
            # With virtual machine disks, RBD block mode volumes are more efficient and provide better
            # performance than Ceph FS or RBD filesystem-mode PVCs.
            # To specify RBD block mode PVCs, use the 'ocs-storagecluster-ceph-rbd' storage class and
            # VolumeMode: Block.
            storageVolumeMode: Filesystem
          # optional configure additional discs to be attached to the VMs,
          # need to be configured manually inside the VMs where to be used.
          additionalDisks:
            - name: datadisk
              diskSize: 500
              storageClass: host-nfs-storageclass
              storageAccessMode:  ReadWriteMany
              storageVolumeMode: Filesystem
      openStackRelease: "16.2"

    リソース仕様に以下の値を設定します。

    metadata.name
    オーバークラウドコントロールプレーンの名前を overcloud に設定します。
    metadata.namespace
    director Operator namespace を openstack に設定します。
    spec

    コントロールプレーンの設定を指定します。このセクションで使用できる値の詳細は、openstackcontrolplane CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackcontrolplane

    コントロールプレーンの仕様の設定が完了したら、ファイルを保存します。

  2. コントロールプレーンを作成します。

    $ oc create -f openstack-controller.yaml -n openstack

    OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。

    director Operator は、OpenStackControlPlane リソースの一部として、リモートシェルからアクセスして RHOSP コマンドを実行できる OpenStackClient Pod も作成します。

検証

  1. コントロールプレーンのリソースを表示します。

    $ oc get openstackcontrolplane/overcloud -n openstack
  2. OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。

    $ oc get openstackvmsets -n openstack
  3. 仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。

    $ oc get virtualmachines
  4. openstackclient リモートシェルにアクセスできるかをテストします。

    $ oc rsh -n openstack openstackclient

7.7. テンプレートおよび環境ファイル用のディレクトリーの作成

ワークステーションにディレクトリーを作成し、カスタムテンプレートおよび環境ファイルを保管します。このファイルは、OpenShift Container Platform (OCP) の ConfigMap にアップロードします。

手順

  1. カスタムテンプレートのディレクトリーを作成します。

    $ mkdir custom_templates
  2. カスタム環境ファイルのディレクトリーを作成します。

    $ mkdir custom_environment_files

7.8. HCI Compute ノード用のカスタム NIC heat テンプレート

以下は、HCI Compute ノードの NIC 設定が含まれる heat テンプレート例です。

heat_template_version: rocky
description: >
  Software Config to drive os-net-config to configure VLANs for the Compute role.
parameters:
  ControlPlaneIp:
    default: ''
    description: IP address/subnet on the ctlplane network
    type: string
  ControlPlaneSubnetCidr:
    default: ''
    description: >
      The subnet CIDR of the control plane network. (The parameter is
      automatically resolved from the ctlplane subnet's cidr attribute.)
    type: string
  ControlPlaneDefaultRoute:
    default: ''
    description: The default route of the control plane network. (The parameter
      is automatically resolved from the ctlplane subnet's gateway_ip attribute.)
    type: string
  ControlPlaneStaticRoutes:
    default: []
    description: >
      Routes for the ctlplane network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  ControlPlaneMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the network.
      (The parameter is automatically resolved from the ctlplane network's mtu attribute.)
    type: number
  StorageIpSubnet:
    default: ''
    description: IP address/subnet on the storage network
    type: string
  StorageNetworkVlanID:
    default: 30
    description: Vlan ID for the storage network traffic.
    type: number
  StorageMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      Storage network.
    type: number
  StorageInterfaceRoutes:
    default: []
    description: >
      Routes for the storage network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  StorageMgmtIpSubnet:
    default: ''
    description: IP address/subnet on the storage_mgmt network
    type: string
  StorageMgmtNetworkVlanID:
    default: 40
    description: Vlan ID for the storage_mgmt network traffic.
    type: number
  StorageMgmtMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      StorageMgmt network.
    type: number
  StorageMgmtInterfaceRoutes:
    default: []
    description: >
      Routes for the storage_mgmt network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  InternalApiIpSubnet:
    default: ''
    description: IP address/subnet on the internal_api network
    type: string
  InternalApiNetworkVlanID:
    default: 20
    description: Vlan ID for the internal_api network traffic.
    type: number
  InternalApiMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      InternalApi network.
    type: number
  InternalApiInterfaceRoutes:
    default: []
    description: >
      Routes for the internal_api network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  TenantIpSubnet:
    default: ''
    description: IP address/subnet on the tenant network
    type: string
  TenantNetworkVlanID:
    default: 50
    description: Vlan ID for the tenant network traffic.
    type: number
  TenantMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      Tenant network.
    type: number
  TenantInterfaceRoutes:
    default: []
    description: >
      Routes for the tenant network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  ExternalMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      External network.
    type: number
  DnsServers: # Override this via parameter_defaults
    default: []
    description: >
      DNS servers to use for the Overcloud (2 max for some implementations).
      If not set the nameservers configured in the ctlplane subnet's
      dns_nameservers attribute will be used.
    type: comma_delimited_list
  DnsSearchDomains: # Override this via parameter_defaults
    default: []
    description: A list of DNS search domains to be added (in order) to resolv.conf.
    type: comma_delimited_list

resources:

  MinViableMtu:
    # This resource resolves the minimum viable MTU for interfaces, bonds and
    # bridges that carry multiple VLANs. Each VLAN may have different MTU. The
    # bridge, bond or interface must have an MTU to allow the VLAN with the
    # largest MTU.
    type: OS::Heat::Value
    properties:
      type: number
      value:
        yaql:
          expression: $.data.max()
          data:
            - {get_param: ControlPlaneMtu}
            - {get_param: StorageMtu}
            - {get_param: StorageMgmtMtu}
            - {get_param: InternalApiMtu}
            - {get_param: TenantMtu}
            - {get_param: ExternalMtu}

  OsNetConfigImpl:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        str_replace:
          template:
            get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
          params:
            $network_config:
              network_config:
              - type: interface
                name: nic4
                mtu:
                  get_attr: [MinViableMtu, value]
                use_dhcp: false
                dns_servers:
                  get_param: DnsServers
                domain:
                  get_param: DnsSearchDomains
                addresses:
                - ip_netmask:
                    list_join:
                    - /
                    - - get_param: ControlPlaneIp
                      - get_param: ControlPlaneSubnetCidr
                routes:
                  list_concat_unique:
                    - get_param: ControlPlaneStaticRoutes
                    - - default: true
                        next_hop:
                          get_param: ControlPlaneDefaultRoute
              - type: vlan
                mtu:
                  get_param: StorageMtu
                device: nic4
                vlan_id:
                  get_param: StorageNetworkVlanID
                addresses:
                - ip_netmask:
                    get_param: StorageIpSubnet
                routes:
                  list_concat_unique:
                    - get_param: StorageInterfaceRoutes
              - type: vlan
                mtu:
                  get_param: InternalApiMtu
                device: nic4
                vlan_id:
                  get_param: InternalApiNetworkVlanID
                addresses:
                - ip_netmask:
                    get_param: InternalApiIpSubnet
                routes:
                  list_concat_unique:
                    - get_param: InternalApiInterfaceRoutes

              - type: ovs_bridge
                # This will default to br-ex, anything else   requires specific
                # bridge mapping entries for it to be used.
                name: bridge_name
                mtu:
                  get_param: ExternalMtu
                use_dhcp: false
                members:
                - type: interface
                  name: nic3
                  mtu:
                    get_param: ExternalMtu
                  use_dhcp: false
                  primary: true
                - type: vlan
                  mtu:
                    get_param: TenantMtu
                  vlan_id:
                    get_param: TenantNetworkVlanID
                  addresses:
                  - ip_netmask:
                      get_param: TenantIpSubnet
                  routes:
                    list_concat_unique:
                      - get_param: TenantInterfaceRoutes
outputs:
  OS::stack_id:
    description: The OsNetConfigImpl resource.
    value:
      get_resource: OsNetConfigImpl

この設定により、ネットワークが以下のブリッジおよびインターフェイスにマッピングされます。

Networksブリッジinterface

コントロールプレーン、ストレージ、内部 API

該当なし

nic4

外部、テナント

br-ex

nic3

注記

この設定は、ベアメタルノードの NIC 設定に合わせて変更できます。

デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_templates ディレクトリーの net-config-two-nic-vlan-computehci.yaml にコピーします。

7.9. director Operator の Compute HCI ロールを使用した roles_data.yaml ファイルの作成

オーバークラウドに Compute HCI ロールの設定を追加するには、オーバークラウドのデプロイメントに含める roles_data.yaml ファイルに Compute HCI ロールを追加する必要があります。

注記

roles_data.yaml をファイル名として使用するようにしてください。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。

手順

  1. openstackclient のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. OS_CLOUD 環境変数の設定を解除します。

    $ unset OS_CLOUD
  3. cloud-admin ディレクトリーに移動します。

    $ cd /home/cloud-admin/
  4. Controller ロールおよび ComputeHCI ロールを設定して、新しい roles_data.yaml ファイルを生成します。

    $ openstack overcloud roles generate Controller ComputeHCI > roles_data.yaml
  5. openstackclient Pod を終了します。

    $ exit
  6. カスタムの roles_data.yaml ファイルを openstackclient Pod からカスタムテンプレートディレクトリーにコピーします。

    $ oc cp openstackclient:/home/cloud-admin/roles_data.yaml custom_templates/roles_data.yaml -n openstack

7.10. オーバークラウド設定へのカスタムテンプレートの追加

カスタムテンプレートを tarball ファイルにアーカイブし、これらのテンプレートをオーバークラウドデプロイメントの一部として追加できるようにします。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • プロビジョニングしたノードに適用するカスタムテンプレートを作成します。

手順

  1. カスタムテンプレートの場所に移動します。

    $ cd ~/custom_templates
  2. テンプレートを tarball にアーカイブします。

    $ tar -cvzf custom-config.tar.gz *.yaml
  3. tripleo-tarball-config ConfigMap を作成し、tarball をデータとして使用します。

    $ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack

検証

  1. ConfigMap を表示します。

    $ oc get configmap/tripleo-tarball-config -n openstack

7.11. director Operator での HCI ネットワークを設定するためのカスタム環境ファイル

以下の例は、ネットワークソフトウェア設定リソースをオーバークラウドの NIC テンプレートにマッピングする環境ファイルです。

resource_registry:
  OS::TripleO::ComputeHCI::Net::SoftwareConfig: net-config-two-nic-vlan-computehci.yaml
注記

parameter_defaults セクションに別のネットワーク設定を追加します。

デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_environment_files ディレクトリーの network-environment.yaml にコピーします。

7.12. director Operator でのハイパーコンバージドインフラストラクチャー (HCI) ストレージを設定するためのカスタム環境ファイル

以下の例は、Compute HCI ノード用の Ceph Storage 設定が含まれる環境ファイルです。

resource_registry:
  OS::TripleO::Services::CephMgr: deployment/ceph-ansible/ceph-mgr.yaml
  OS::TripleO::Services::CephMon: deployment/ceph-ansible/ceph-mon.yaml
  OS::TripleO::Services::CephOSD: deployment/ceph-ansible/ceph-osd.yaml
  OS::TripleO::Services::CephClient: deployment/ceph-ansible/ceph-client.yaml

parameter_defaults:
  # needed for now because of the repo used to create tripleo-deploy image
  CephAnsibleRepo: "rhelosp-ceph-4-tools"
  CephAnsiblePlaybookVerbosity: 3
  CinderEnableIscsiBackend: false
  CinderEnableRbdBackend: true
  CinderBackupBackend: ceph
  CinderEnableNfsBackend: false
  NovaEnableRbdBackend: true
  GlanceBackend: rbd
  CinderRbdPoolName: "volumes"
  NovaRbdPoolName: "vms"
  GlanceRbdPoolName: "images"
  CephPoolDefaultPgNum: 32
  CephPoolDefaultSize: 2
  CephAnsibleDisksConfig:
    devices:
      - '/dev/sdb'
      - '/dev/sdc'
      - '/dev/sdd'
    osd_scenario: lvm
    osd_objectstore: bluestore
  CephAnsibleExtraConfig:
    is_hci: true
  CephConfigOverrides:
    rgw_swift_enforce_content_length: true
    rgw_swift_versioning_enabled: true

この設定により、OSD ノードを sdbsdcsdd デバイスにマッピングし、is_hci オプションで HCI を有効にします。

注記

この設定は、ベアメタルノードのストレージ設定に合わせて変更できます。CephPoolDefaultPgNum パラメーターの値を確認するには、Ceph Placement Groups (PG) per Pool Calculator を使用します。

デプロイメントでこのテンプレートを使用するには、サンプルの内容を、ワークステーションの custom_environment_files ディレクトリーの compute-hci.yaml にコピーします。

7.13. オーバークラウド設定へのカスタム環境ファイルの追加

ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap にカスタム環境ファイルのセットをアップロードします。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • オーバークラウドデプロイメント用のカスタム環境ファイルを作成します。

手順

  1. heat-env-config ConfigMap を作成し、環境ファイルが含まれるディレクトリーをデータとして使用します。

    $ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -

検証

  1. ConfigMap を表示します。

    $ oc get configmap/heat-env-config -n openstack

7.14. OpenStackBaremetalSet を使用した HCI Compute ノードの作成

Compute ノードは Red Hat OpenStack Platform 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後に Compute ノードの数をスケーリングできます。

OpenStackBaremetalSet カスタムリソースは、OpenShift Container Platform が管理するベアメタルマシンから Compute ノードを作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。

手順

  1. ワークステーションに openstack-hcicompute.yaml という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。たとえば、Compute ノード 1 つの仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackBaremetalSet
    metadata:
      name: computehci
      namespace: openstack
    spec:
      count: 3
      baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2
      deploymentSSHSecret: osp-controlplane-ssh-keys
      ctlplaneInterface: enp8s0
      networks:
        - ctlplane
        - internal_api
        - tenant
        - storage
        - storage_mgmt
      roleName: ComputeHCI
      passwordSecret: userpassword

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前を overcloud に設定します。
    metadata.namespace
    director Operator namespace を openstack に設定します。
    spec

    Compute ノードの設定を定義します。このセクションで使用できる値の詳細は、openstackbaremetalset CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackbaremetalset

    Compute ノードの仕様の設定が完了したら、ファイルを保存します。

  2. Compute ノードを作成します。

    $ oc create -f openstack-hcicompute.yaml -n openstack

検証

  1. コンピュート HCI ノードのリソースを表示します。

    $ oc get openstackbaremetalset/computehci -n openstack
  2. OpenShift が管理するベアメタルマシンを表示して、コンピュート HCI ノードの作成を確認します。

    $ oc get baremetalhosts -n openshift-machine-api

7.15. OpenStackConfigGenerator を使用したオーバークラウド設定用の Ansible Playbook の作成

オーバークラウドのインフラストラクチャーをプロビジョニングした後に、オーバークラウドノード上に Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する Ansible Playbook のセットを作成する必要があります。これらの Playbook を OpenStackPlaybookGenerator リソースで作成し、RHOSP director の config-download 機能を使用して heat 設定を Playbook に変換します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • 必要に応じて作成される OpenStackControlPlane および OpenStackBarementalSets。
  • リモート Git リポジトリーの認証情報が含まれる git-secret シークレットを設定します。
  • カスタム heat テンプレートが含まれる tripleo-tarball-config ConfigMap を設定します。
  • カスタム環境ファイルが含まれる heat-env-config ConfigMap を設定します。

手順

  1. ワークステーションに openstack-config-generator.yaml という名前のファイルを作成します。リソース仕様を追加して Ansible Playbook を生成します。たとえば、Playbook を生成する仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackConfigGenerator
    metadata:
      name: default
      namespace: openstack
    spec:
      enableFencing: true
      gitSecret: git-secret
      imageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2
      heatEnvConfigMap: heat-env-config
      # List of heat environment files to include from tripleo-heat-templates/environments
      heatEnvs:
      - ssl/tls-endpoints-public-dns.yaml
      - ssl/enable-tls.yaml
      tarballConfigMap: tripleo-tarball-config

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前に設定します。デフォルトは default です。
    metadata.namespace
    director の Operator の namespace (デフォルトでは openstack) に設定します。
    spec.enableFencing
    フェンシングを有効にするために必要な heat 環境ファイルの自動作成を有効にします。
    注記

    本番 OSP 環境では、フェンシングを有効にする必要があります。pacemaker を実行する仮想マシンには、fence-agents-kubevirt パッケージが必要です。

    spec.gitSecret
    Git 認証の認証情報を含む ConfigMap に設定します (デフォルトでは git-secret)。
    spec.heatEnvs
    Playbook の生成に使用されるデフォルトの Tripleo 環境ファイルのリスト。
    spec.heatEnvConfigMap
    カスタム環境ファイルを含む ConfigMap に設定します (デフォルトは heat-env-config)。
    spec.tarballConfigMap
    カスタムの heat テンプレートを使用して tarball が含まれる ConfigMap (tripleo-tarball-config) に設定します。

    spec セクションで使用できる値の詳細は、openstackconfiggenerator CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackconfiggenerator

    Ansible 設定ジェネレーター仕様の設定が完了したら、ファイルを保存します。

  2. Ansible 設定ジェネレーターを作成します。

    $ oc create -f openstack-config-generator.yaml -n openstack

検証

  1. 設定ジェネレーターのリソースを表示します。

    $ oc get openstackconfiggenerator/default -n openstack

7.16. オーバークラウドのオペレーティングシステムの登録

director Operator がノードにオーバークラウドソフトウェアを設定する前に、全ノードのオペレーティングシステムを Red Hat カスタマーポータルまたは Red Hat Satellite Server のいずれかに登録して、ノードのリポジトリーを有効にする必要があります。

OpenStackControlPlane リソースの一部として、director Operator はリモートシェル経由でアクセスする OpenStackClient Pod を作成し、Red Hat OpenStack Platform (RHOSP) コマンドを実行します。この Pod には、/home/cloud-admin/ctlplane-ansible-inventory という名前の ansible インベントリースクリプトも含まれています。

ノードを登録するには、redhat_subscription Ansible モジュールを OpentackClient Pod のインベントリースクリプトと共に使用できます。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
  • OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。

手順

  1. openstackclient のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. cloud-admin ホームディレクトリーに移動します。

    $ cd /home/cloud-admin
  3. ノードを登録する redhat_subscription モジュールを使用して Playbook を作成します。たとえば、以下の Playbook はコントローラーノードを登録します。

    ---
    - name: Register Controller nodes
      hosts: Controller
      become: yes
      vars:
        repos:
          - rhel-8-for-x86_64-baseos-eus-rpms
          - rhel-8-for-x86_64-appstream-eus-rpms
          - rhel-8-for-x86_64-highavailability-eus-rpms
          - ansible-2.9-for-rhel-8-x86_64-rpms
          - openstack-16.2-for-rhel-8-x86_64-rpms
          - fast-datapath-for-rhel-8-x86_64-rpms
      tasks:
        - name: Register system
          redhat_subscription:
            username: myusername
            password: p@55w0rd!
            org_id: 1234567
            release: 8.4
            pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd
        - name: Disable all repos
          command: "subscription-manager repos --disable *"
        - name: Enable Controller node repos
          command: "subscription-manager repos --enable {{ item }}"
          with_items: "{{ repos }}"

    このプレイには、以下の 3 つのタスクが含まれます。

    • ノードを登録します。
    • 自動的に有効化されるリポジトリーをすべて無効にする。
    • コントローラーノードに関連するリポジトリーだけを有効にする。リポジトリーは repos 変数でリストされます。
  4. 必要なリポジトリーにオーバークラウドノードを登録します。

    ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ./rhsm.yaml

7.17. director Operator を使用したオーバークラウドの設定の適用

コントロールプレーンを作成してベアメタルの Compute ノードをプロビジョニングし、各ノードにソフトウェアを設定する Ansible Playbook を生成してからしか、director Operator でオーバークラウドを設定できません。OpenStackDeploy リソースを作成すると、director Operator は ansible Playbook を実行してオーバークラウドを設定するジョブを作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
  • OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
  • OpentackConfigGenerator を使用して、オーバークラウドの Ansible Playbook 設定を作成します。
  • OpenenstackConfigVersion を使用して、オーバークラウドの設定に使用する ansible Playbook のハッシュ/ダイジェストを選択します。

手順

  1. ワークステーションに openstack-deployment.yaml という名前のファイルを作成します。リソース仕様を Ansible Playbook に含めます。以下に例を示します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: default
    spec:
      configVersion: n5fch96h548h75hf4hbdhb8hfdh676h57bh96h5c5h59hf4h88h…
      configGenerator: default

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前を設定します。デフォルトは default です。
    metadata.namespace
    デフォルトの openstack で、diretor Operator namespace に設定します。
    spec.configVersion
    デプロイする Playbook の設定バージョン/git ハッシュ。
    spec.configGenerator
    configGenerator の名前。

    spec セクションで使用できる値の詳細は、openstackdeploy CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackdeploy

    OpenStackDeploy 仕様の設定が完了したら、ファイルを保存します。

  2. OpenStackDeploy リソースを作成します。

    $ oc create -f openstack-deployment.yaml -n openstack

    デプロイメントが実行すると、Ansible Playbook を実行するための Kubernetes ジョブが作成されます。ジョブのログを追跡して、実行中の Ansible Playbook を確認できます。

    $ oc logs -f jobs/deploy-openstack-default

    さらに、openstackclient Pod にログインすることで、実行された Ansible Playbook に手動でアクセスできます。/home/cloud-admin/work/directory には、現在のデプロイメントの ansible Playbook と ansible.log ファイルがあります。

第8章 director operator のデプロイメントシナリオ: 外部の Ceph Storage を使用するオーバークラウド

director Operator を使用して、外部の Red Hat Ceph Storage クラスターに接続するオーバークラウドをデプロイできます。

前提条件

  • 外部の Red Hat Ceph Storage クラスター

8.1. ベースオペレーティングシステムのデータボリュームの作成

コントローラー仮想マシンのベースオペレーティングシステムのイメージを保存するには、OpenShift Container Platform (OCP) クラスターでデータボリュームを作成する必要があります。

前提条件

  • Red Hat Enterprise Linux 8.4 QCOW2 イメージをワークステーションにダウンロードします。このイメージは、Red Hat カスタマーポータルの 製品ダウンロード セクションからダウンロードできます。
  • virtctl クライアントツールをワークステーションにインストールします。以下のコマンドを実行して、このツールを Red Hat Enterprise Linux ワークステーションにインストールできます。

    $ sudo subscription-manager repos --enable=cnv-4.10-for-rhel-8-x86_64-rpms
    $ sudo dnf install -y kubevirt-virtctl
  • virt-customize クライアントツールをワークステーションにインストールします。このツールは、以下のコマンドを使用して Red Hat Enterprise Linux ワークステーションにインストールできます。

    $ dnf install -y libguestfs-tools-c

手順

  1. access.redhat.com からダウンロードしたデフォルトの QCOW2 イメージでは、biosdev の予測可能なネットワークインターフェイス名は使用されません。biosdev の予測可能なネットワークインターフェイス名を使用するように、virt-customize でイメージを変更します。

    $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(kernelopts=.*\)net.ifnames=0 \(.*\)/\1\2/" /boot/grub2/grubenv'
    $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(GRUB_CMDLINE_LINUX=.*\)net.ifnames=0 \(.*\)/\1\2/" /etc/default/grub' --truncate /etc/machine-id
  2. virtctl でイメージを OpenShift Virtualization にアップロードします。

    $ virtctl image-upload dv <datavolume_name> -n openstack \
     --size=<size> --image-path=<local_path_to_image> \
     --storage-class <storage_class> --access-mode <access_mode> --insecure
    • <datavolume_name> をデータボリュームの名前 (例: openstack-base-img) に置き換えます。
    • <size> を、環境に必要なデータボリュームのサイズ (たとえば、50Gi) に置き換えます。最小サイズは 50GB です。
    • <storage_class> をクラスターの必要なストレージクラスに置き換えます。次のコマンドを使用して、利用可能なストレージクラスを取得します。

      $ oc get storageclass
    • <access_mode> を、PVC のアクセスモードに置き換えます。デフォルト値は ReadWriteOnce です。
  3. OpenStackControlPlane リソースおよび個別の OpenStackVmSet リソースの作成時に、baseImageVolumeName パラメーターをデータボリューム名に設定します。

    ...
    spec:
      ...
      baseImageVolumeName: openstack-base-img
    ...

8.2. リモート Git リポジトリーの認証情報の追加

director Operator はレンダリングされた Ansible Playbook をリモート Git リポジトリーに保管し、このリポジトリーを使用してオーバークラウドの設定に対する変更を追跡します。SSH 認証をサポートする Git リポジトリーであれば、どのリポジトリーでも使用できます。git-secret という名前の OpenShift Secret リソースとして Git リポジトリーの詳細を指定する必要があります。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • director オペレーターのリモート Git リポジトリーを作成して、オーバークラウド向けに生成された設定を保存します。
  • SSH キーペアを準備します。公開鍵を Git リポジトリーにアップロードし、秘密鍵を利用できる状態にして、git-secret Secret リソースに追加します。

手順

  1. Secret リソースを作成します。

    $ oc create secret generic git-secret -n openstack --from-file=git_ssh_identity=<path_to_private_SSH_key> --from-literal=git_url=<git_server_URL>

    git-secret Secret リソースには、2 つのキーと値のペアが含まれます。

    git_ssh_identity
    Git リポジトリーにアクセスするための秘密鍵--from-file オプションは、SSH 秘密鍵ファイルの内容を保存します。
    git_url
    設定を保存する git リポジトリーの SSH URL。--from-literal オプションは、このキーに入力した URL を保存します。

検証

  1. Secret リソースを表示します。

    $ oc get secret/git-secret -n openstack

8.3. ノードの root パスワードの設定

各ノードのパスワードを使用して root ユーザーにアクセスするには、userpassword という名前の Secret リソースに root パスワードを設定します。

注記

ノードの root パスワードの設定はオプションです。root パスワードを設定ていない場合には、osp-controlplane-ssh-keys シークレットで定義した SSH 鍵を使用してノードにログインすることができます。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. 選択したパスワードを base64 値に変換します。

    $ echo -n "p@ssw0rd!" | base64
    cEBzc3cwcmQh
    注記

    -n オプションは、echo 出力から末尾の改行を削除します。

  2. ワークステーションに openstack-userpassword.yaml という名前のファイルを作成します。ファイルに、Secret の以下のリソース仕様を追加します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: userpassword
      namespace: openstack
    data:
      NodeRootPassword: "cEBzc3cwcmQh"

    NodeRootPassword パラメーターを base64 でエンコードされたパスワードに設定します。

  3. userpassword シークレットを作成します。

    $ oc create -f openstack-userpassword.yaml -n openstack
注記

OpenStackControlPlane または OpenStackBaremetalSet を作成するときに、passwordSecretuserpassword Secret を入力します。

apiVersion: osp-director.openstack.org/v1beta2
kind: OpenStackControlPlane
metadata:
  name: overcloud
  namespace: openstack
spec:
  passwordSecret: <userpassword>
  • <userpassword>userpassword Secret に置き換えます。

8.4. OpenStackNetConfig を使用したオーバークラウドのコントロールプレーンネットワークの作成

OpenStackNetConfig で、オーバークラウド用に少なくとも 1 つのコントロールプレーンネットワークを定義する必要があります。IP アドレスの割り当てに加えて、ネットワーク定義には OpenStackNetAttachment のマッピング情報が含まれます。OpenShift Virtualization はこの情報を使用して、仮想マシンをネットワークに接続します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. ワークステーション上に osnetconfig.yaml という名前のファイルを作成します。ctlplane という名前のコントロールプレーンネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの enp6s0 イーサネットデバイスに接続された Linux ブリッジを使用するコントロールプレーンの仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackNetConfig
    metadata:
      name: openstacknetconfig
    spec:
      attachConfigurations:
        br-osp:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp6s0
                description: Linux bridge with enp6s0 as a port
                name: br-osp
                state: up
                type: linux-bridge
                mtu: 1500
      # optional DnsServers list
      dnsServers:
      - 192.168.25.1
      # optional DnsSearchDomains list
      dnsSearchDomains:
      - osptest.test.metalkube.org
      - some.other.domain
      # DomainName of the OSP environment
      domainName: osptest.test.metalkube.org
      networks:
      - name: Control
        nameLower: ctlplane
        subnets:
        - name: ctlplane
          ipv4:
            allocationEnd: 172.22.0.250
            allocationStart: 172.22.0.100
            cidr: 172.22.0.0/24
            gateway: 172.22.0.1
          attachConfiguration: br-osp
      # optional: configure static mapping for the networks per nodes. If there is none, a random gets created
      reservations:
        controller-0:
          ipReservations:
            ctlplane: 172.22.0.120
        compute-0:
          ipReservations:
            ctlplane: 172.22.0.140

    ネットワーク仕様で次の値を設定します。

    name
    コントロールプレーンネットワークの名 (Control) を設定します。
    nameLower
    コントロールプレーンネットワークの下位の名前 (ctlplane) を設定します。
    subnets
    サブネットの仕様を設定します。
    subnets.name
    コントロールプレーンサブネットの名前 (ctlplane) を設定します。
    subnets.attachConfiguration
    どのアタッチ設定を使用するかの参照を設定します。
    subnets.ipv4
    allocationStart、allocationEnd、cidr、ゲートウェイ、オプションのルートリスト (宛先と nexthop を含む) を含む ipv4 サブネットの詳細

    このセクションで使用できる値の詳細は、openstacknetconfig CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstacknetconfig

    ネットワーク仕様の設定が完了したら、ファイルを保存します。

  2. コントロールプレーンネットワークを作成します。

    $ oc create -f osnetconfig.yaml -n openstack

検証

  1. コントロールプレーンネットワークのリソースを表示します。

    $ oc get openstacknetconfig/openstacknetconfig

8.5. OpenStackNetConfig を使用したネットワーク分離用の VLAN ネットワークの作成

コンポーザブルネットワークのネットワーク分離を実装するには、追加のネットワークを作成する必要があります。このネットワーク分離を実現するには、コンポーザブルネットワークを個別の VLAN ネットワークに配置できます。OpenStackNetConfig リソースには、IP アドレスの割り当てに加えて、OpenShift Virtualization が仮想マシンを VLAN ネットワークにアタッチするために使用するネットワーク設定ポリシーを定義する情報が含まれます。

デフォルトの Red Hat OpenStack Platform ネットワークを使用するには、各ネットワークを定義する OpenStackNetConfig リソースを作成する必要があります。

表8.1 デフォルトの Red Hat OpenStack Platform ネットワーク

NetworkVLANCIDR割り当て

External

10

10.0.0.0/24

10.0.0.10 - 10.0.0.250

InternalApi

20

172.17.0.0/24

172.17.0.10 - 172.17.0.250

Storage

30

172.18.0.0/24

172.18.0.10 - 172.18.0.250

StorageMgmt

40

172.19.0.0/24

172.19.0.10 - 172.19..250

テナント

50

172.20.0.0/24

172.20.0.10 - 172.20.0.250

重要

各ネットワークごとに異なるネットワークの詳細を使用するには、カスタム network_data.yaml ファイルを作成する必要があります。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. ネットワーク設定用のファイルを作成します。VLAN ネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの enp6s0 および enp7s0 イーサネットデバイスに接続された Linux ブリッジ br-ex および br-osp を介して VLAN タグ付きトラフィックを管理する内部 API、ストレージ、ストレージ管理、テナント、および外部ネットワークの仕様は次のとおりです。:

    kind: OpenStackNetConfig
    metadata:
      name: openstacknetconfig
    spec:
      attachConfigurations:
        br-osp:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp7s0
                description: Linux bridge with enp7s0 as a port
                name: br-osp
                state: up
                type: linux-bridge
                mtu: 1500
        br-ex:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp6s0
                description: Linux bridge with enp6s0 as a port
                name: br-ex
                state: up
                type: linux-bridge
                mtu: 1500
      # optional DnsServers list
      dnsServers:
      - 172.22.0.1
      # optional DnsSearchDomains list
      dnsSearchDomains:
      - osptest.test.metalkube.org
      - some.other.domain
      # DomainName of the OSP environment
      domainName: osptest.test.metalkube.org
      networks:
      - name: Control
        nameLower: ctlplane
        subnets:
        - name: ctlplane
          ipv4:
            allocationEnd: 172.22.0.250
            allocationStart: 172.22.0.10
            cidr: 172.22.0.0/24
            gateway: 172.22.0.1
          attachConfiguration: br-osp
      - name: InternalApi
        nameLower: internal_api
        mtu: 1350
        subnets:
        - name: internal_api
          attachConfiguration: br-osp
          vlan: 20
          ipv4:
            allocationEnd: 172.17.0.250
            allocationStart: 172.17.0.10
            cidr: 172.17.0.0/24
      - name: External
        nameLower: external
        subnets:
        - name: external
          ipv4:
            allocationEnd: 10.0.0.250
            allocationStart: 10.0.0.10
            cidr: 10.0.0.0/24
            gateway: 10.0.0.1
          attachConfiguration: br-ex
      - name: Storage
        nameLower: storage
        mtu: 1500
        subnets:
        - name: storage
          ipv4:
            allocationEnd: 172.18.0.250
            allocationStart: 172.18.0.10
            cidr: 172.18.0.0/24
          vlan: 30
          attachConfiguration: br-osp
      - name: StorageMgmt
        nameLower: storage_mgmt
        mtu: 1500
        subnets:
        - name: storage_mgmt
          ipv4:
            allocationEnd: 172.19.0.250
            allocationStart: 172.19.0.10
            cidr: 172.19.0.0/24
          vlan: 40
          attachConfiguration: br-osp
      - name: Tenant
        nameLower: tenant
        vip: False
        mtu: 1500
        subnets:
        - name: tenant
          ipv4:
            allocationEnd: 172.20.0.250
            allocationStart: 172.20.0.10
            cidr: 172.20.0.0/24
          vlan: 50
          attachConfiguration: br-osp

    linux-bridge でネットワーク分離に VLAN を使用する場合に、以下のような処理が行われます。

    • director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、nmstate を使用してワーカーノードにブリッジを設定します。
    • director Operator は、Multus CNI プラグイン設定を定義するネットワークごとにネットワーク接続定義を作成します。ネットワーク接続定義で VLAN ID を指定する場合には、Multus CNI プラグインはブリッジで vlan-filtering を有効にします。
    • director Operator は、仮想マシン上の各ネットワーク専用のインターフェイスを割り当てます。これは、OpenStackVMSet のネットワークテンプレートがマルチ NIC ネットワークテンプレートであることを意味します。

    リソース仕様に以下の値を設定します。

    metadata.name
    OpenStackNetConfig の名前に設定します。
    spec

    ネットワークを接続するためのネットワーク設定とネットワークの詳細を設定します。このセクションで使用できる値の詳細は、openstacknetconfig CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstacknetconfig

    ネットワーク仕様の設定が完了したら、ファイルを保存します。

  2. ネットワーク設定を作成します。

    $ oc apply -f openstacknetconfig.yaml -n openstack

検証

  1. OpenStackNetConfig API と作成された子リソースを表示します。

    $ oc get openstacknetconfig/openstacknetconfig -n openstack
    $ oc get openstacknetattachment -n openstack
    $ oc get openstacknet -n openstack

    エラーが表示された場合は、基礎となる network-attach-definition とノードのネットワーク設定ポリシーを確認してください。

    $ oc get network-attachment-definitions -n openstack
    $ oc get nncp

8.6. OpenStackControlPlane でのコントロールプレーンの作成

オーバークラウドのコントロールプレーンには、オーバークラウドの機能を管理するメインの Red Hat OpenStack Platform サービスが含まれます。コントロールプレーンは、通常 3 つのコントローラーノードで設定されており、他のコントロールプレーンベースのコンポーザブルロールにスケーリングできます。コンポーザブルロールを使用する場合は、各サービスは 3 つの追加の専用ノードで実行される必要があり、Pacemaker のクォーラムを維持するために、コントロールプレーン内のノードの合計数を追加する必要があります。

OpenStackControlPlane カスタムリソースは、コントロールプレーンベースのノードを OpenShift Virtualization 内の仮想マシンとして作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。

手順

  1. ワークステーションに openstack-controller.yaml という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。たとえば、3 つのコントローラーノードで設定されるコントロールプレーンの仕様は以下のとおりです。

    apiVersion: osp-director.openstack.org/v1beta2
    kind: OpenStackControlPlane
    metadata:
      name: overcloud
      namespace: openstack
    spec:
      openStackClientNetworks:
            - ctlplane
            - internal_api
            - external
      openStackClientStorageClass: host-nfs-storageclass
      passwordSecret: userpassword
      virtualMachineRoles:
        Controller:
          roleName: Controller
          roleCount: 3
          networks:
            - ctlplane
            - internal_api
            - external
            - tenant
            - storage
            - storage_mgmt
          cores: 12
          memory: 64
          rootDisk:
            diskSize: 100
            baseImageVolumeName: openstack-base-img
            # storageClass must support RWX to be able to live migrate VMs
            storageClass: host-nfs-storageclass
            storageAccessMode:  ReadWriteMany
            # When using OpenShift Virtualization with OpenShift Container Platform Container Storage,
            # specify RBD block mode persistent volume claims (PVCs) when creating virtual machine disks.
            # With virtual machine disks, RBD block mode volumes are more efficient and provide better
            # performance than Ceph FS or RBD filesystem-mode PVCs.
            # To specify RBD block mode PVCs, use the 'ocs-storagecluster-ceph-rbd' storage class and
            # VolumeMode: Block.
            storageVolumeMode: Filesystem
          # optional configure additional discs to be attached to the VMs,
          # need to be configured manually inside the VMs where to be used.
          additionalDisks:
            - name: datadisk
              diskSize: 500
              storageClass: host-nfs-storageclass
              storageAccessMode:  ReadWriteMany
              storageVolumeMode: Filesystem
      openStackRelease: "16.2"

    リソース仕様に以下の値を設定します。

    metadata.name
    オーバークラウドコントロールプレーンの名前を overcloud に設定します。
    metadata.namespace
    director Operator namespace を openstack に設定します。
    spec

    コントロールプレーンの設定を指定します。このセクションで使用できる値の詳細は、openstackcontrolplane CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackcontrolplane

    コントロールプレーンの仕様の設定が完了したら、ファイルを保存します。

  2. コントロールプレーンを作成します。

    $ oc create -f openstack-controller.yaml -n openstack

    OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。

    director Operator は、OpenStackControlPlane リソースの一部として、リモートシェルからアクセスして RHOSP コマンドを実行できる OpenStackClient Pod も作成します。

検証

  1. コントロールプレーンのリソースを表示します。

    $ oc get openstackcontrolplane/overcloud -n openstack
  2. OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。

    $ oc get openstackvmsets -n openstack
  3. 仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。

    $ oc get virtualmachines
  4. openstackclient リモートシェルにアクセスできるかをテストします。

    $ oc rsh -n openstack openstackclient

8.7. テンプレートおよび環境ファイル用のディレクトリーの作成

ワークステーションにディレクトリーを作成し、カスタムテンプレートおよび環境ファイルを保管します。このファイルは、OpenShift Container Platform (OCP) の ConfigMap にアップロードします。

手順

  1. カスタムテンプレートのディレクトリーを作成します。

    $ mkdir custom_templates
  2. カスタム環境ファイルのディレクトリーを作成します。

    $ mkdir custom_environment_files

8.8. Compute ノード用のカスタム NIC heat テンプレート

以下は、Compute ノードの NIC 設定が含まれる heat テンプレート例です。

heat_template_version: rocky
description: >
  Software Config to drive os-net-config to configure VLANs for the Compute role.
parameters:
  ControlPlaneIp:
    default: ''
    description: IP address/subnet on the ctlplane network
    type: string
  ControlPlaneSubnetCidr:
    default: ''
    description: >
      The subnet CIDR of the control plane network. (The parameter is
      automatically resolved from the ctlplane subnet's cidr attribute.)
    type: string
  ControlPlaneDefaultRoute:
    default: ''
    description: The default route of the control plane network. (The parameter
      is automatically resolved from the ctlplane subnet's gateway_ip attribute.)
    type: string
  ControlPlaneStaticRoutes:
    default: []
    description: >
      Routes for the ctlplane network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  ControlPlaneMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the network.
      (The parameter is automatically resolved from the ctlplane network's mtu attribute.)
    type: number
  StorageIpSubnet:
    default: ''
    description: IP address/subnet on the storage network
    type: string
  StorageNetworkVlanID:
    default: 30
    description: Vlan ID for the storage network traffic.
    type: number
  StorageMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      Storage network.
    type: number
  StorageInterfaceRoutes:
    default: []
    description: >
      Routes for the storage network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  InternalApiIpSubnet:
    default: ''
    description: IP address/subnet on the internal_api network
    type: string
  InternalApiNetworkVlanID:
    default: 20
    description: Vlan ID for the internal_api network traffic.
    type: number
  InternalApiMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      InternalApi network.
    type: number
  InternalApiInterfaceRoutes:
    default: []
    description: >
      Routes for the internal_api network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  TenantIpSubnet:
    default: ''
    description: IP address/subnet on the tenant network
    type: string
  TenantNetworkVlanID:
    default: 50
    description: Vlan ID for the tenant network traffic.
    type: number
  TenantMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      Tenant network.
    type: number
  TenantInterfaceRoutes:
    default: []
    description: >
      Routes for the tenant network traffic.
      JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
      Unless the default is changed, the parameter is automatically resolved
      from the subnet host_routes attribute.
    type: json
  ExternalMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is
      guaranteed to pass through the data path of the segments in the
      External network.
    type: number
  DnsServers: # Override this via parameter_defaults
    default: []
    description: >
      DNS servers to use for the Overcloud (2 max for some implementations).
      If not set the nameservers configured in the ctlplane subnet's
      dns_nameservers attribute will be used.
    type: comma_delimited_list
  DnsSearchDomains: # Override this via parameter_defaults
    default: []
    description: A list of DNS search domains to be added (in order) to resolv.conf.
    type: comma_delimited_list

resources:

  MinViableMtu:
    # This resource resolves the minimum viable MTU for interfaces, bonds and
    # bridges that carry multiple VLANs. Each VLAN may have different MTU. The
    # bridge, bond or interface must have an MTU to allow the VLAN with the
    # largest MTU.
    type: OS::Heat::Value
    properties:
      type: number
      value:
        yaql:
          expression: $.data.max()
          data:
            - {get_param: ControlPlaneMtu}
            - {get_param: StorageMtu}
            - {get_param: InternalApiMtu}
            - {get_param: TenantMtu}
            - {get_param: ExternalMtu}

  OsNetConfigImpl:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        str_replace:
          template:
            get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
          params:
            $network_config:
              network_config:
              - type: interface
                name: nic4
                mtu:
                  get_attr: [MinViableMtu, value]
                use_dhcp: false
                dns_servers:
                  get_param: DnsServers
                domain:
                  get_param: DnsSearchDomains
                addresses:
                - ip_netmask:
                    list_join:
                    - /
                    - - get_param: ControlPlaneIp
                      - get_param: ControlPlaneSubnetCidr
                routes:
                  list_concat_unique:
                    - get_param: ControlPlaneStaticRoutes
                    - - default: true
                        next_hop:
                          get_param: ControlPlaneDefaultRoute
              - type: vlan
                mtu:
                  get_param: StorageMtu
                device: nic4
                vlan_id:
                  get_param: StorageNetworkVlanID
                addresses:
                - ip_netmask:
                    get_param: StorageIpSubnet
                routes:
                  list_concat_unique:
                    - get_param: StorageInterfaceRoutes
              - type: vlan
                mtu:
                  get_param: InternalApiMtu
                device: nic4
                vlan_id:
                  get_param: InternalApiNetworkVlanID
                addresses:
                - ip_netmask:
                    get_param: InternalApiIpSubnet
                routes:
                  list_concat_unique:
                    - get_param: InternalApiInterfaceRoutes

              - type: ovs_bridge
                # This will default to br-ex, anything else requires specific
                # bridge mapping entries for it to be used.
                name: bridge_name
                mtu:
                  get_param: ExternalMtu
                use_dhcp: false
                members:
                - type: interface
                  name: nic3
                  mtu:
                    get_param: ExternalMtu
                  use_dhcp: false
                  primary: true
                - type: vlan
                  mtu:
                    get_param: TenantMtu
                  vlan_id:
                    get_param: TenantNetworkVlanID
                  addresses:
                  - ip_netmask:
                      get_param: TenantIpSubnet
                  routes:
                    list_concat_unique:
                      - get_param: TenantInterfaceRoutes
outputs:
  OS::stack_id:
    description: The OsNetConfigImpl resource.
    value:
      get_resource: OsNetConfigImpl

この設定により、ネットワークが以下のブリッジおよびインターフェイスにマッピングされます。

Networksブリッジinterface

コントロールプレーン、ストレージ、内部 API

該当なし

nic4

外部、テナント

br-ex

nic3

注記

この設定は、ベアメタルノードの NIC 設定に合わせて変更できます。

デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_templates ディレクトリーの net-config-two-nic-vlan-compute.yaml にコピーします。

8.9. オーバークラウド設定へのカスタムテンプレートの追加

カスタムテンプレートを tarball ファイルにアーカイブし、これらのテンプレートをオーバークラウドデプロイメントの一部として追加できるようにします。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • プロビジョニングしたノードに適用するカスタムテンプレートを作成します。

手順

  1. カスタムテンプレートの場所に移動します。

    $ cd ~/custom_templates
  2. テンプレートを tarball にアーカイブします。

    $ tar -cvzf custom-config.tar.gz *.yaml
  3. tripleo-tarball-config ConfigMap を作成し、tarball をデータとして使用します。

    $ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack

検証

  1. ConfigMap を表示します。

    $ oc get configmap/tripleo-tarball-config -n openstack

8.10. director Operator でネットワークを設定するためのカスタム環境ファイル

以下の例は、ネットワークソフトウェア設定リソースをオーバークラウドの NIC テンプレートにマッピングする環境ファイルです。

resource_registry:
  OS::TripleO::Compute::Net::SoftwareConfig: net-config-two-nic-vlan-compute.yaml
注記

parameter_defaults セクションに別のネットワーク設定を追加します。

デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_environment_files ディレクトリーの network-environment.yaml にコピーします。

8.11. director Operator で外部の Ceph Storage の使用状況を設定するためのカスタム環境ファイル

外部の Ceph Storage クラスターと統合するには、次の例に示すようなパラメーターと値を持つ環境ファイルを含めます。

resource_registry:
  OS::TripleO::Services::CephExternal: deployment/ceph-ansible/ceph-external.yaml

parameter_defaults:
  # needed for now because of the repo used to create tripleo-deploy image
  CephAnsibleRepo: "rhelosp-ceph-4-tools"
  CephAnsiblePlaybookVerbosity: 3

  NovaEnableRbdBackend: true
  GlanceBackend: rbd
  CinderEnableRbdBackend: true
  CinderBackupBackend: ceph
  CinderEnableIscsiBackend: false

  # Change the following values for your external ceph cluster
  NovaRbdPoolName: vms
  CinderRbdPoolName: volumes
  CinderBackupRbdPoolName: backups
  GlanceRbdPoolName: images
  CephClientUserName: openstack
  CephClientKey: AQDLOh1VgEp6FRAAFzT7Zw+Y9V6JJExQAsRnRQ==
  CephClusterFSID: 4b5c8c0a-ff60-454b-a1b4-9747aa737d19
  CephExternalMonHost: 172.16.1.7, 172.16.1.8, 172.16.1.9

  # Change the ContainerImageRegistryCredentials to a registry service account
  # OR remove ContainerImageRegistryCredentials and set ContainerCephDaemonImage
  # to a local registry not requiring authentication.
  ContainerCephDaemonImage: registry.redhat.io/rhceph/rhceph-4-rhel8:latest
  ContainerImageRegistryCredentials:
    registry.redhat.io:
      my_username: my_password

この設定には、ノード上で CephExternal サービスおよび CephClient サービスを有効にし、異なる RHOSP サービスのプールを設定するためのパラメーターが含まれており、以下のパラメーターを使用して外部 Ceph Storage クラスターを統合します。

CephClientKey
外部の Ceph Storage クラスターの Ceph クライアントキー。
CephClusterFSID
外部の Ceph Storage クラスターのファイルシステム ID。
CephExternalMonHost
外部 Ceph Storage クラスターの全 MON ホストの IP をコンマ区切りにしたリスト。
注記

この設定は、ストレージ設定に合わせて変更できます。

Ceph クライアントを設定するには、ceph-ansible クライアントロールで Ceph コンテナーが必要です。ContainerCephDaemonImage パラメーターを設定する必要があります。registry.redhat.io でホストされる Ceph コンテナーには認証が必要です。ContainerImageRegistryLogin パラメーターの詳細については、コンテナー化された サービスへの移行 を参照してください。

デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_environment_files ディレクトリーの ceph-ansible-external.yaml にコピーします。

8.12. オーバークラウド設定へのカスタム環境ファイルの追加

ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap にカスタム環境ファイルのセットをアップロードします。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • オーバークラウドデプロイメント用のカスタム環境ファイルを作成します。

手順

  1. heat-env-config ConfigMap を作成し、環境ファイルが含まれるディレクトリーをデータとして使用します。

    $ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -

検証

  1. ConfigMap を表示します。

    $ oc get configmap/heat-env-config -n openstack

8.13. OpenStackBaremetalSet を使用した Compute ノードの作成

Compute ノードは Red Hat OpenStack Platform 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後に Compute ノードの数をスケーリングできます。

OpenStackBaremetalSet カスタムリソースは、OpenShift Container Platform が管理するベアメタルマシンから Compute ノードを作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。

手順

  1. ワークステーションに openstack-compute.yaml という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。たとえば、Compute ノード 1 つの仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackBaremetalSet
    metadata:
      name: compute
      namespace: openstack
    spec:
      count: 1
      baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2
      deploymentSSHSecret: osp-controlplane-ssh-keys
      # If you manually created an OpenStackProvisionServer, you can use it here,
      # otherwise the director Operator will create one for you (with `baseImageUrl` as the image that it server)
      # to use with this OpenStackBaremetalSet
      # provisionServerName: openstack-provision-server
      ctlplaneInterface: enp2s0
      networks:
        - ctlplane
        - internal_api
        - tenant
        - storage
      roleName: Compute
      passwordSecret: userpassword

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前を overcloud に設定します。
    metadata.namespace
    director Operator namespace を openstack に設定します。
    spec

    Compute ノードの設定を定義します。このセクションで使用できる値の詳細は、openstackbaremetalset CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackbaremetalset

    Compute ノードの仕様の設定が完了したら、ファイルを保存します。

  2. Compute ノードを作成します。

    $ oc create -f openstack-compute.yaml -n openstack

検証

  1. Compute ノードのリソースを表示します。

    $ oc get openstackbaremetalset/compute -n openstack
  2. OpenShift が管理するベアメタルマシンを表示し、Compute ノードの作成を確認します。

    $ oc get baremetalhosts -n openshift-machine-api

8.14. OpenStackConfigGenerator を使用したオーバークラウド設定用の Ansible Playbook の作成

オーバークラウドのインフラストラクチャーをプロビジョニングした後に、オーバークラウドノード上に Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する Ansible Playbook のセットを作成する必要があります。これらの Playbook を OpenStackPlaybookGenerator リソースで作成し、RHOSP director の config-download 機能を使用して heat 設定を Playbook に変換します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • 必要に応じて作成される OpenStackControlPlane および OpenStackBarementalSets。
  • リモート Git リポジトリーの認証情報が含まれる git-secret シークレットを設定します。
  • カスタム heat テンプレートが含まれる tripleo-tarball-config ConfigMap を設定します。
  • カスタム環境ファイルが含まれる heat-env-config ConfigMap を設定します。

手順

  1. ワークステーションに openstack-config-generator.yaml という名前のファイルを作成します。リソース仕様を追加して Ansible Playbook を生成します。たとえば、Playbook を生成する仕様は以下のようになります。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackConfigGenerator
    metadata:
      name: default
      namespace: openstack
    spec:
      enableFencing: true
      gitSecret: git-secret
      imageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2
      heatEnvConfigMap: heat-env-config
      # List of heat environment files to include from tripleo-heat-templates/environments
      heatEnvs:
      - ssl/tls-endpoints-public-dns.yaml
      - ssl/enable-tls.yaml
      tarballConfigMap: tripleo-tarball-config

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前に設定します。デフォルトは default です。
    metadata.namespace
    director の Operator の namespace (デフォルトでは openstack) に設定します。
    spec.enableFencing
    フェンシングを有効にするために必要な heat 環境ファイルの自動作成を有効にします。
    注記

    本番 OSP 環境では、フェンシングを有効にする必要があります。pacemaker を実行する仮想マシンには、fence-agents-kubevirt パッケージが必要です。

    spec.gitSecret
    Git 認証の認証情報を含む ConfigMap に設定します (デフォルトでは git-secret)。
    spec.heatEnvs
    Playbook の生成に使用されるデフォルトの Tripleo 環境ファイルのリスト。
    spec.heatEnvConfigMap
    カスタム環境ファイルを含む ConfigMap に設定します (デフォルトは heat-env-config)。
    spec.tarballConfigMap
    カスタムの heat テンプレートを使用して tarball が含まれる ConfigMap (tripleo-tarball-config) に設定します。

    spec セクションで使用できる値の詳細は、openstackconfiggenerator CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackconfiggenerator

    Ansible 設定ジェネレーター仕様の設定が完了したら、ファイルを保存します。

  2. Ansible 設定ジェネレーターを作成します。

    $ oc create -f openstack-config-generator.yaml -n openstack

検証

  1. 設定ジェネレーターのリソースを表示します。

    $ oc get openstackconfiggenerator/default -n openstack

8.15. オーバークラウドのオペレーティングシステムの登録

director Operator がノードにオーバークラウドソフトウェアを設定する前に、全ノードのオペレーティングシステムを Red Hat カスタマーポータルまたは Red Hat Satellite Server のいずれかに登録して、ノードのリポジトリーを有効にする必要があります。

OpenStackControlPlane リソースの一部として、director Operator はリモートシェル経由でアクセスする OpenStackClient Pod を作成し、Red Hat OpenStack Platform (RHOSP) コマンドを実行します。この Pod には、/home/cloud-admin/ctlplane-ansible-inventory という名前の ansible インベントリースクリプトも含まれています。

ノードを登録するには、redhat_subscription Ansible モジュールを OpentackClient Pod のインベントリースクリプトと共に使用できます。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
  • OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。

手順

  1. openstackclient のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. cloud-admin ホームディレクトリーに移動します。

    $ cd /home/cloud-admin
  3. ノードを登録する redhat_subscription モジュールを使用して Playbook を作成します。たとえば、以下の Playbook はコントローラーノードを登録します。

    ---
    - name: Register Controller nodes
      hosts: Controller
      become: yes
      vars:
        repos:
          - rhel-8-for-x86_64-baseos-eus-rpms
          - rhel-8-for-x86_64-appstream-eus-rpms
          - rhel-8-for-x86_64-highavailability-eus-rpms
          - ansible-2.9-for-rhel-8-x86_64-rpms
          - openstack-16.2-for-rhel-8-x86_64-rpms
          - fast-datapath-for-rhel-8-x86_64-rpms
      tasks:
        - name: Register system
          redhat_subscription:
            username: myusername
            password: p@55w0rd!
            org_id: 1234567
            release: 8.4
            pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd
        - name: Disable all repos
          command: "subscription-manager repos --disable *"
        - name: Enable Controller node repos
          command: "subscription-manager repos --enable {{ item }}"
          with_items: "{{ repos }}"

    このプレイには、以下の 3 つのタスクが含まれます。

    • ノードを登録します。
    • 自動的に有効化されるリポジトリーをすべて無効にする。
    • コントローラーノードに関連するリポジトリーだけを有効にする。リポジトリーは repos 変数でリストされます。
  4. 必要なリポジトリーにオーバークラウドノードを登録します。

    ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ./rhsm.yaml

8.16. director Operator を使用したオーバークラウドの設定の適用

コントロールプレーンを作成してベアメタルの Compute ノードをプロビジョニングし、各ノードにソフトウェアを設定する Ansible Playbook を生成してからしか、director Operator でオーバークラウドを設定できません。OpenStackDeploy リソースを作成すると、director Operator は ansible Playbook を実行してオーバークラウドを設定するジョブを作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
  • OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
  • OpentackConfigGenerator を使用して、オーバークラウドの Ansible Playbook 設定を作成します。
  • OpenenstackConfigVersion を使用して、オーバークラウドの設定に使用する ansible Playbook のハッシュ/ダイジェストを選択します。

手順

  1. ワークステーションに openstack-deployment.yaml という名前のファイルを作成します。リソース仕様を Ansible Playbook に含めます。以下に例を示します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: default
    spec:
      configVersion: n5fch96h548h75hf4hbdhb8hfdh676h57bh96h5c5h59hf4h88h…
      configGenerator: default

    リソース仕様に以下の値を設定します。

    metadata.name
    Compute ノードのベアメタルセットの名前を設定します。デフォルトは default です。
    metadata.namespace
    デフォルトの openstack で、diretor Operator namespace に設定します。
    spec.configVersion
    デプロイする Playbook の設定バージョン/git ハッシュ。
    spec.configGenerator
    configGenerator の名前。

    spec セクションで使用できる値の詳細は、openstackdeploy CRD のカスタムリソース定義の仕様スキーマを確認します。

    $ oc describe crd openstackdeploy

    OpenStackDeploy 仕様の設定が完了したら、ファイルを保存します。

  2. OpenStackDeploy リソースを作成します。

    $ oc create -f openstack-deployment.yaml -n openstack

    デプロイメントが実行すると、Ansible Playbook を実行するための Kubernetes ジョブが作成されます。ジョブのログを追跡して、実行中の Ansible Playbook を確認できます。

    $ oc logs -f jobs/deploy-openstack-default

    さらに、openstackclient Pod にログインすることで、実行された Ansible Playbook に手動でアクセスできます。/home/cloud-admin/work/directory には、現在のデプロイメントの ansible Playbook と ansible.log ファイルがあります。

第9章 director Operator を使用してデプロイされたオーバークラウドへのアクセス

director Operator を使用してオーバークラウドをデプロイした後に、openstack クライアントツールを使用してそのオーバークラウドにアクセスし、コマンドを実行できます。オーバークラウドのメインアクセスポイントは、OpenStackClient Pod で、director Operator を使用して、作成する OpenStackControlPlane リソースの一部として この Pod をデプロイします。

9.1. OpenStackClient Pod へのアクセス

OpenStackClient Pod は、オーバークラウドに対してコマンドを実行する主なアクセスポイントです。この Pod には、オーバークラウドに対してアクションを実行するのに必要なクライアントツールおよび認証情報が含まれます。ワークステーションから Pod にアクセスするには、ワークステーションで oc コマンドを使用して、Pod のリモートシェルに接続する必要があります。

注記

director Operator なしでデプロイするオーバークラウドにアクセスする場合には、通常、source ~/overcloudrc コマンドを実行して、オーバークラウドにアクセスする環境変数を設定します。この手順は、director Operator を使用してデプロイするオーバークラウドでは、必要ありません。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • OCP クラスターで実行されるオーバークラウドをデプロイして設定する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. openstackclient のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. cloud-admin ホームディレクトリーに移動します。

    $ cd /home/cloud-admin
  3. openstack コマンドを実行します。たとえば、以下のコマンドを使用して default ネットワークを作成できます。

    $ openstack network create default

9.2. オーバークラウドのダッシュボードへのアクセス

標準のオーバークラウドと同じ手法を使用して、director Operator でデプロイするオーバークラウドのダッシュボードにアクセスします。Web ブラウザーを使用して、オーバークラウドホスト名またはパブリック仮想 IP アドレス (この IP アドレスは、通常 PublicVirtualFixedIPs heat パラメーターで設定) にアクセスし、ユーザー名およびパスワードでオーバークラウドのダッシュボードにログインします。

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • OCP クラスターで実行されるオーバークラウドをデプロイして設定する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。

手順

  1. オプション: admin ユーザーとしてログインするには、tripleo-passwords シークレットにある AdminPassword パラメーターから admin パスワードを取得します。

    $ oc get secret tripleo-passwords -o jsonpath='{.data.tripleo-overcloud-passwords\.yaml}' | base64 -d
  2. Web ブラウザーを開きます。
  3. URL フィールドに、オーバークラウドダッシュボードのホスト名またはパブリック仮想 IP を入力します。
  4. 選択したユーザー名とパスワードを使用して Dashboard にログインします。

第10章 director Operator を使用した Compute ノードのスケーリング

必要なオーバークラウドのコンピュートリソース数が多い場合も少ない場合も、要件に応じて Compute ノード数をスケーリングできます。

10.1. director Operator を使用したオーバークラウドの Compute ノードの追加

Compute ノードにさらにオーバークラウドを追加するには、コンピュート の OpenStackBaremetalSet リソースのノード数を増やす必要があります。新しいノードがプロビジョニングされると、新しい OpenStackConfigGenerator リソースが作成され、Ansible Playbook の新しいセットが生成されます。OpenStackConfig バージョンを使用して OpenStackDeploy オブジェクトを作成または更新し、Ansible 設定をオーバークラウドに再適用します

前提条件

  • OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
  • OCP クラスターで実行されるオーバークラウドをデプロイして設定する。
  • oc コマンドラインツールがワークステーションにインストールされていることを確認する。
  • openshift-machine-api namespace の準備ができている状態にあるホストが十分に存在することを確認する。oc get baremetalhosts -n openshift-machine-api コマンドを実行して、利用可能なホストを確認します。ベアメタルホストの管理の詳細は、ベアメタルホストの管理 を参照してください。

手順

  1. Compute OpenStackBaremetalSet の YAML 設定を変更し、リソースの count パラメーターを増やします。

    $ oc patch osbms compute --type=merge --patch '{"spec":{"count":3}}' -n openstack
  2. OpenStackBaremetalSet リソースは、Red Hat Enterprise Linux のベースオペレーティングシステムで新規ノードを自動的にプロビジョニングします。プロビジョニングプロセスが完了するまで待ちます。ノードを定期的にチェックし、ノードの readiness を判別します。

    $ oc get baremetalhosts -n openshift-machine-api
    $ oc get openstackbaremetalset
  3. OpenStackConfigGenerator を使用して Ansible Playbook を生成します。director Operator を使用したオーバークラウドソフトウェアの設定 を参照してください。

10.2. director Operator を使用したオーバークラウドからの Compute ノードの削除

オーバークラウドからCompute ノードを削除するには、Compute ノードを無効にして削除のマークを付け、Compute OpenStackBaremetalSet リソースのノード数を減らす必要があります。

注記

同じロールの新しいノードを使用してオーバークラウドをスケーリングすると、ノードは最小の ID 接尾辞で始まるホスト名と対応する IP 予約を再利用します。

前提条件

手順

  1. openstackclient のリモートシェルにアクセスします。

    $ oc rsh -n openstack openstackclient
  2. 削除する Compute ノードを特定します。

    $ openstack compute service list
  3. ノード上の Compute サービスを無効にして、ノードが新しいインスタンスをスケジュールできないようにします。

    $ openstack compute service set <hostname> nova-compute --disable
  4. Metal 3 がノードを起動しないようにベアメタルノードにアノテーションを付けます。

    $ oc annotate baremetalhost <node> baremetalhost.metal3.io/detached=true
    $ oc logs --since=1h <metal3-pod> metal3-baremetal-operator | grep -i detach
    $ oc get baremetalhost <node> -o json | jq .status.operationalStatus
    "detached"
    • <node>BareMetalHost リソースの名前に置き換えます。
    • <metal3-pod>metal3 Pod の名前に置き換えます。
  5. root ユーザーとして Compute ノードにログインし、ベアメタルノードをシャットダウンします。

    [root@compute-0 ~]# shutdown -h now

    Compute ノードにアクセスできない場合は、次の手順を実行します。

    1. コントローラーノードに root ユーザーとしてログインします。
    2. インスタンス HA が有効になっている場合は、Compute ノードの STONITH デバイスを無効にします。

      [root@controller-0 ~]# pcs stonith disable <stonith_resource_name>
      • <stonith_resource_name> は、ノードに対応する STONITH リソースの名前に置き換えます。リソース名には <resource_agent>-<host_mac> 形式が使用されます。リソースエージェントおよびホストの MAC アドレスは、fencing.yaml ファイルの FencingConfig セクションに記載されています。
    3. IPMI を使用してベアメタルノードの電源をオフにします。詳細は、ハードウェアベンダーのドキュメントを参照してください。
  6. 削除するノードに対応する BareMetalHost リソースを取得します。

    $ oc get openstackbaremetalset compute -o json | jq '.status.baremetalHosts | to_entries[] | "\(.key) => \(.value | .hostRef)"'
    "compute-0, openshift-worker-3"
    "compute-1, openshift-worker-4"
  7. OpenStackBaremetalSet リソースの annotatedForDeletion パラメーターのステータスを true に変更するには、BareMetalHost リソースに osp-director.openstack.org/delete-host=true のアノテーションを付けます。

    $ oc annotate -n openshift-machine-api bmh/openshift-worker-3 osp-director.openstack.org/delete-host=true --overwrite
  8. オプション: OpenStackBaremetalSet リソースで annotatedForDeletion ステータスが true に変更されたことを確認します。

    $ oc get openstackbaremetalset compute -o json -n openstack | jq .status
    {
      "baremetalHosts": {
        "compute-0": {
          "annotatedForDeletion": true,
          "ctlplaneIP": "192.168.25.105/24",
          "hostRef": "openshift-worker-3",
          "hostname": "compute-0",
          "networkDataSecretName": "compute-cloudinit-networkdata-openshift-worker-3",
          "provisioningState": "provisioned",
          "userDataSecretName": "compute-cloudinit-userdata-openshift-worker-3"
        },
        "compute-1": {
          "annotatedForDeletion": false,
          "ctlplaneIP": "192.168.25.106/24",
          "hostRef": "openshift-worker-4",
          "hostname": "compute-1",
          "networkDataSecretName": "compute-cloudinit-networkdata-openshift-worker-4",
          "provisioningState": "provisioned",
          "userDataSecretName": "compute-cloudinit-userdata-openshift-worker-4"
        }
      },
      "provisioningStatus": {
        "readyCount": 2,
        "reason": "All requested BaremetalHosts have been provisioned",
        "state": "provisioned"
      }
    }
  9. compute OpenStackBaremetalSet リソースの count パラメーターを減らします。

    $ oc patch openstackbaremetalset compute --type=merge --patch '{"spec":{"count":1}}' -n openstack

    OpenStackBaremetalSet リソースのリソース数を減らすと、対応するコントローラーがリソースの削除を処理するようトリガーされ、以下のアクションが発生します。

    • director Operator は、ノードの OpenStackIPSet および OpenStackNetConfig から対応する IP 予約を削除します。
    • director Operator は、OpenStackNet リソースの IP 予約エントリーを削除済みとしてフラグします。

      $ oc get osnet ctlplane -o json -n openstack | jq .status.reservations
      {
        "compute-0": {
          "deleted": true,
          "ip": "172.22.0.140"
        },
        "compute-1": {
          "deleted": false,
          "ip": "172.22.0.100"
        },
        "controller-0": {
          "deleted": false,
          "ip": "172.22.0.120"
        },
        "controlplane": {
          "deleted": false,
          "ip": "172.22.0.110"
        },
        "openstackclient-0": {
          "deleted": false,
          "ip": "172.22.0.251"
        }
  10. オプション: 削除された OpenStackBaremetalSet リソースの IP 予約を他のロールが使用できるようにするには、OpenStackNetConfig オブジェクトで spec.preserveservations パラメーターの値を false に設定します。
  11. openstackclient のリモートシェルにアクセスします。

    $ oc rsh openstackclient -n openstack
  12. オーバークラウドから Compute サービスエントリーを削除します。

    $ openstack compute service list
    $ openstack compute service delete <service-id>
  13. オーバークラウドの Compute ネットワークエージェントエントリーをチェックして、このようなエントリーが存在する場合は削除します。

    $ openstack network agent list
    $ for AGENT in $(openstack network agent list --host <scaled-down-node> -c ID -f value) ; do openstack network agent delete $AGENT ; done
  14. openstackclient を終了します。

    $ exit

第11章 director Operator のオーバークラウドの更新

openstackclient Pod を更新した後、オーバークラウドとコンテナーイメージの準備デプロイメントを実行し、ノードを更新し、オーバークラウド更新収束デプロイメントを実行して、オーバークラウドを更新します。マイナー更新中は、コントロールプレーン API が利用可能です。

11.1. マイナー更新用の director オペレーターの準備

Red Hat OpenStack Platform (RHOSP) マイナー更新プロセスのワークフロー:

  1. RHOSP マイナー更新向けの環境を準備します。
  2. openstackclient Pod イメージを最新の OpenStack 16.2.z バージョンに更新します。
  3. オーバークラウドを最新の Open Stack16.2.z バージョンに更新します。
  4. すべての Red Hat Ceph Storage サービスを更新します。
  5. コンバージェンスデプロイメントを実行して、オーバークラウドスタックを更新します。

11.1.1. 環境の Red Hat Enterprise Linux リリースへのロック

Red Hat OpenStack Platform (RHOSP) 16.2 は Red Hat Enterprise Linux 8.4 (RHEL) でサポートされています。更新を実行する前に、オーバークラウドのリポジトリーを RHEL 8.4 リリースにロックして、オペレーティングシステムが新しいマイナーリリースにアップグレードされないようにします。

手順

  1. rhsm.yaml ファイルを openstackclient にコピーします。

    $ oc cp rhsm.yaml openstackclient:/home/cloud-admin/rhsm.yaml
  2. openstackclient Pod でリモートシェルを開きます。

    $ oc rsh openstackclient
  3. rhsm.yaml ファイルを開き、Subscription Management 設定に rhsm_release パラメーターが含まれているかどうかを確認します。rhsm_release パラメーターが存在しない場合は、追加して 8.4に設定します。

    parameter_defaults:
      RhsmVars:
        …​
        rhsm_username: "myusername"
        rhsm_password: "p@55w0rd!"
        rhsm_org_id: "1234567"
        rhsm_pool_ids: "1a85f9223e3d5e43013e3d6e8ff506fd"
        rhsm_method: "portal"
        rhsm_release: "8.4"
  4. オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
  5. すべてのノードでオペレーティングシステムのバージョンを RHEL8.4 にロックするタスクを含めて、Playbook を作成します。

    $ cat > ~/set_release.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: set release to 8.4
          command: subscription-manager release --set=8.4
          become: true
    EOF
  6. openstackclient Pod で ansible Playbook を実行します。

    $ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/set_release.yaml --limit Controller,Compute

    --limit オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。Red Hat Ceph Storage ノードに対してこの Playbook を実行しないでください。これらのノードには別のサブスクリプションを使用している可能性があります。

注記

手動でノードを特定のバージョンにロックするには、ノードにログインして subscription-manager release コマンドを実行します。

$ sudo subscription-manager release --set=8.4

11.1.2. Extended Update Support (EUS) リポジトリーへの変更

Red Hat OpenStack Platform (RHOSP) サブスクリプションには、Red Hat Enterprise Linux (RHEL) 8.4 Extended Update Support (EUS) のリポジトリーが含まれます。EUS リポジトリーには、RHEL8.4 の最新のセキュリティーパッチとバグ修正が含まれています。更新を実行する前に、次のリポジトリーに切り替えてください。

表11.1 RHEL8.4 用の EUS リポジトリー

標準のリポジトリーEUS リポジトリー

rhel-8-for-x86_64-baseos-rpms

rhel-8-for-x86_64-baseos-eus-rpms

rhel-8-for-x86_64-appstream-rpms

rhel-8-for-x86_64-appstream-eus-rpms

rhel-8-for-x86_64-highavailability-rpms

rhel-8-for-x86_64-highavailability-eus-rpms

重要

特定バージョンの Podman との互換性を維持するには、EUS リポジトリーを使用する必要があります。それ以降のバージョンの Podman は RHOSP 16.2 でテストされておらず、予期しない結果を引き起こす可能性があります。

前提条件

  • openstackclient Pod の rhsm.yaml ファイルを /home/cloud-admin ディレクトリーにコピーします。

手順

  1. openstackclient Pod でリモートシェルを開きます。

    $ oc rsh openstackclient
  2. rhsm.yaml ファイルを開き、Subscription Management 設定で rhsm_repos パラメーターを確認します。このパラメーターに EUS リポジトリーが含まれていない場合は、該当するリポジトリーを EUS バージョンに変更します。

    parameter_defaults:
      RhsmVars:
        rhsm_repos:
          - rhel-8-for-x86_64-baseos-eus-rpms
          - rhel-8-for-x86_64-appstream-eus-rpms
          - rhel-8-for-x86_64-highavailability-eus-rpms
          - ansible-2.9-for-rhel-8-x86_64-rpms
          - openstack-16.2-for-rhel-8-x86_64-rpms
          - rhceph-4-tools-for-rhel-8-x86_64-rpms
          - fast-datapath-for-rhel-8-x86_64-rpms
  3. オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
  4. すべてのノードで、リポジトリーを RHEL 8.4 EUS に設定するタスクが含まれる Playbook を作成します。

    $ cat > ~/change_eus.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: change to eus repos
          command: subscription-manager repos --disable=rhel-8-for-x86_64-baseos-rpms --disable=rhel-8-for-x86_64-appstream-rpms --disable=rhel-8-for-x86_64-highavailability-rpms --enable=rhel-8-for-x86_64-baseos-eus-rpms --enable=rhel-8-for-x86_64-appstream-eus-rpms --enable=rhel-8-for-x86_64-highavailability-eus-rpms
          become: true
    EOF
  5. change_eus.yaml Playbook を実行します。

    $ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/change_eus.yaml --limit Controller,Compute

    --limit オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。Red Hat Ceph Storage ノードは通常異なるサブスクリプションを使用するため、この Playbook を Ceph Storage ノードに対して実行しないでください。

11.1.3. Red Hat Openstack Platform および Ansible リポジトリーの更新

Red Hat OpenStack Platform (RHOSP) 16.2 パッケージおよび Ansible 2.9 パッケージを使用するようにリポジトリーを更新します。詳細は、オーバークラウドのリポジトリー を参照してください。

前提条件

  • openstackclient Pod の rhsm.yaml ファイルを /home/cloud-admin ディレクトリーにコピーしました。

手順

  1. openstackclient Pod でリモートシェルを開きます。

    $ oc rsh openstackclient
  2. rhsm.yaml ファイルを開き、Subscription Management 設定で rhsm_repos パラメーターを確認します。rhsm_repos パラメーターが RHOSP 16.1 および Ansible 2.8 リポジトリーを使用している場合は、リポジトリーを正しいバージョンに変更します。

    parameter_defaults:
      RhsmVars:
        rhsm_repos:
          - rhel-8-for-x86_64-baseos-eus-rpms
          - rhel-8-for-x86_64-appstream-eus-rpms
          - rhel-8-for-x86_64-highavailability-eus-rpms
          - ansible-2.9-for-rhel-8-x86_64-rpms
          - openstack-16.2-for-rhel-8-x86_64-rpms
          - fast-datapath-for-rhel-8-x86_64-rpms
  3. オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
  4. すべての RHOSP ノードでリポジトリーを RHOSP {osp_curr_ver} に設定するタスクを含む Playbook を作成します。

    $ cat > ~/update_rhosp_repos.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: change osp repos
          command: subscription-manager repos --disable=openstack-16.1-for-rhel-8-x86_64-rpms --enable=openstack-16.2-for-rhel-8-x86_64-rpms --disable=ansible-2.8-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms
          become: true
    EOF
  5. update_rhosp_repos.yaml Playbook を実行します。

    $ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/update_rhosp_repos.yaml --limit Controller,Compute

    --limit オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。Red Hat Ceph Storage ノードは通常異なるサブスクリプションを使用するため、この Playbook を Ceph Storage ノードに対して実行しないでください。

  6. すべての Red Hat Ceph Storage ノードでリポジトリーを RHOSP {osp_curr_ver} に設定するタスクを含む Playbook を作成します。

    $ cat > ~/update_ceph_repos.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: change ceph repos
          command: subscription-manager repos --disable=openstack-16-deployment-tools-for-rhel-8-x86_64-rpms --enable=openstack-16.2-deployment-tools-for-rhel-8-x86_64-rpms --disable=ansible-2.8-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms
          become: true
    EOF
  7. update_ceph_repos.yaml Playbook を実行します。

    $ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/update_ceph_repos.yaml --limit CephStorage

    --limit オプションを使用して、コンテンツを Red Hat Ceph Storage ノードに適用します。

11.1.4. container-tools のバージョンの設定

container-toolsモジュールをバージョン2.0に設定して、すべてのノードで正しいパッケージバージョンを使用するようにします。

手順

  1. openstackclient Pod でリモートシェルを開きます。

    $ oc rsh openstackclient
  2. すべてのノードで container-tools モジュールをバージョン 3.0 に設定するタスクが含まれる Playbook を作成します。

    $ cat > ~/container-tools.yaml <<'EOF'
    - hosts: all
      gather_facts: false
      tasks:
        - name: disable default dnf module for container-tools
          command: dnf module reset container-tools
          become: true
        - name: set dnf module for container-tools:3.0
          command: dnf module enable -y container-tools:3.0
          become: true
        - name: disable dnf module for virt:8.2
          command: dnf module disable -y virt:8.2
          become: true
        - name: set dnf module for virt:rhel
          command: dnf module enable -y virt:rhel
          become: true
    EOF
  3. すべてのノードに対して container-tools.yaml Playbook を実行します。

    $ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ~/container-tools.yaml

11.1.5. コンテナーイメージ準備ファイルの更新

コンテナー準備ファイルは、ContainerImagePrepare パラメーターが含まれるファイルです。このファイルを使用して、オーバークラウドのコンテナーイメージを取得するためのルールを定義します。

環境を更新する前に、ファイルを確認して正しいイメージバージョンを取得するようにしてください。

手順

  1. コンテナー準備ファイルを編集します。通常、このファイルのデフォルト名は containers-prepare-parameter.yaml です。
  2. それぞれのルールセットについて、tag パラメーターが 16.2 に設定されていることを確認します。

    parameter_defaults:
      ContainerImagePrepare:
      - push_destination: true
        set:
          ...
          tag: '16.2'
        tag_from_label: '{version}-{release}'
    注記

    更新に特定のタグ (16.216.2.2 等) を使用しない場合は、tag キーと値のペアを削除し、tag_from_label のみを指定します。これにより、更新プロセスの一部として使用するタグの値を決定する際に、インストールされた Red Hat OpenStack Platform バージョンが使用されます。

  3. このファイルを保存します。

11.1.6. オーバークラウドでのフェンシングの無効化

オーバークラウドを更新する前に、フェンシングが無効になっていることを確認します。

コントローラーノードの更新プロセス中にフェンシングが環境にデプロイされると、オーバークラウドは特定ノードが無効であることを検出し、フェンシング操作を試みる場合があります。これにより、意図しない結果が生じる可能性があります。

オーバークラウドでフェンシングを有効にしている場合には、意図しない結果を防ぐために、更新期間中フェンシングを一時的に無効にする必要があります。

手順

  1. openstackclient Pod でリモートシェルを開きます。

    $ oc rsh openstackclient
  2. コントローラーノードにログインし、Pacemaker コマンドを実行してフェンシングを無効にします。

    ssh <controller-0.ctlplane> "sudo pcs property set stonith-enabled=false"
    • <controller-0.ctlplane> をコントローラーノードの名前に置き換えます。
  3. fencing.yaml 環境ファイルで、EnableFencing パラメーターを false に設定し、更新プロセス中にフェンシングが無効のままとなるようにします。

11.2. director Operator のオーバークラウド更新準備を実行する

更新プロセスのためにオーバークラウドを準備するには、更新準備設定を生成します。これにより、更新された ansible Playbook が作成され、ノードが更新のために準備されます。

手順

  1. fencing.yaml という heat パラメーター ConfigMap を変更して、更新中にフェンシングを無効にします。

    parameter_defaults:
      EnableFencing: false
  2. osconfiggenerator-update-prepare.yaml という OpenStackConfigGenerator リソースを作成します。

    $ cat <<EOF > osconfiggenerator-update-prepare.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackConfigGenerator
    metadata:
      name: "update"
      namespace: openstack
    spec:
      gitSecret: git-secret
      heatEnvs:
        - lifecycle/update-prepare.yaml
      heatEnvConfigMap: heat-env-config-update
      tarballConfigMap: tripleo-tarball-config-update
    EOF
  3. 設定を適用します。

    $ oc apply -f osconfiggenerator-update-prepare.yaml
  4. 更新の準備プロセスが完了するまで待ちます。

11.3. director Operator のコンテナーイメージ準備の実行

オーバークラウドを更新する前に、環境に必要なすべてのコンテナーイメージ設定を準備する必要があります。

コンテナーイメージの準備を完了するには、container_image_prepare タグを持つタスクに対してオーバークラウドのデプロイメントを実行する必要があります。

手順

  1. osdeploy-container-image-prepare.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-container-image-prepare.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: container_image_prepare
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: external-update
      advancedSettings:
        tags:
          - container_image_prepare
    EOF
  2. 設定を適用します。

    $ oc apply -f osdeploy-container-image-prepare.yaml

11.4. オプション: すべてのオーバークラウドサーバーでの ovn-controller コンテナーの更新

Modular Layer 2 Open Virtual Network メカニズムドライバー (ML2/OVN) を使用してオーバークラウドをデプロイした場合は、ovn-controller コンテナーを最新の RHOSP16.2 バージョンに更新します。更新は、ovn-controller コンテナーを実行するすべてのオーバークラウドサーバーで行われます。

重要

次の手順では、コントローラーのロールが割り当てられているサーバーの ovn-northd サービスを更新する前に、コンピュートのロールが割り当てられているサーバーの ovn-controller コンテナーを更新します。
この手順を実行する前に誤って ovn-northd サービスを更新した場合、仮想マシンにアクセスしたり、新しい仮想マシンや仮想ネットワークを作成したりできない可能性があります。次の手順で接続を復元します。

手順

  1. osdeploy-ovn-update.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-ovn-update.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: ovn-update
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: update
      advancedSettings:
        tags:
          - ovn
    EOF
  2. 設定を適用します。

    $ oc apply -f osdeploy-ovn-update.yaml
  3. ovn-controller コンテナーの更新が完了するまで待ちます。

11.5. director Operator 上のすべてのコントローラーノードを更新する

すべてのコントローラーノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。

重要

BZ#1872404 が解決されるまで、コンポーザブルロールに基づくノードについては、先ず Database ロールを更新してから、ControllerMessagingComputeCeph、およびその他のロールを更新する必要があります。

手順

  1. osdeploy-controller-update.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-controller-update.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: controller-update
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: update
      advancedSettings:
        limit: Controller
    EOF
  2. 設定を適用します。

    $ oc apply -f osdeploy-controller-update.yaml
  3. コントローラーノードの更新が完了するまで待ちます。

11.6. director Operator 上のすべての Compute ノードを更新する

すべての Compute ノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。Compute ノードを更新するには、limit: Compute オプションを指定してデプロイを実行し、操作を Compute ノードのみに制限します。

手順

  1. osdeploy-compute-update.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-compute-update.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: compute-update
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: update
      advancedSettings:
        limit: Compute
    EOF
  2. 設定を適用します。

    $ oc apply -f osdeploy-compute-update.yaml
  3. Compute ノードの更新が完了するまで待ちます。

11.7. director Operator 上のすべての HCI Compute ノードの更新

ハイパーコンバージドインフラストラクチャー (HCI) Compute ノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。HCI Compute ノードを更新するには、limit: ComputeHCI オプションを指定してデプロイを実行し、操作を HCI ノードのみに制限します。コンテナー化された Red Hat Ceph Storage 4 クラスターへの更新を実行するには、mode: external-update および tags: ["ceph"] オプションを使用してデプロイメントを実行する必要もあります。

手順

  1. osdeploy-computehci-update.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-computehci-update.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: computehci-update
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: update
      advancedSettings:
        limit: ComputeHCI
    EOF
  2. 設定を適用します。

    $ oc apply -f osdeploy-computehci-update.yaml
  3. ComputeHCI ノードの更新が完了するまで待ちます。
  4. osdeploy-ceph-update.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-ceph-update.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: ceph-update
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: external-update
      advancedSettings:
        tags:
          - ceph
    EOF
  5. 設定を適用します。

    $ oc apply -f osdeploy-ceph-update.yaml
  6. Red Hat Ceph Storage ノードの更新が完了するまで待ちます。

11.8. director Operator 上のすべての Red Hat Ceph Storage ノードの更新

Red Hat Ceph Storage ノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。

重要

RHOSP 16.2 は RHEL 8.4 でサポートされています。ただし、Ceph Storage ロールにマップされているホストは、最新のメジャー RHEL リリースに更新されます。詳細は、Red Hat Ceph Storage: サポートされる設定 を参照してください。

手順

  1. osdeploy-cephstorage-update.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-cephstorage-update.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: cephstorage-update
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: update
      advancedSettings:
        limit: CephStorage
    EOF
  2. 設定を適用します。

    $ oc apply -f osdeploy-cephstorage-update.yaml
  3. Red Hat Ceph Storage ノードの更新が完了するまで待ちます。
  4. osdeploy-ceph-update.yaml という osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-ceph-update.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: ceph-update
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: external-update
      advancedSettings:
        tags:
          - ceph
    EOF
  5. 設定を適用します。

    $ oc apply -f osdeploy-ceph-update.yaml
  6. Red Hat Ceph Storage ノードの更新が完了するまで待ちます。

11.9. director オペレーターでのオンラインデータベース更新の実行

一部のオーバークラウドコンポーネントでは、データベーステーブルのオンライン更新 (または移行) が必要です。

データベースのオンライン更新は、次のコンポーネントに適用されます。

  • OpenStack Block Storage (cinder)
  • OpenStack Compute (nova)

手順

  1. osdeploy-online-migration.yaml という名前の osdeploy ジョブを作成します。

    $ cat <<EOF > osdeploy-online-migration.yaml
    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackDeploy
    metadata:
      name: online-migration
    spec:
      configVersion: <config_version>
      configGenerator: update
      mode: external-update
      advancedSettings:
        tags:
          - online_upgrade
    EOF
  2. 設定を適用します。

    $ oc apply -f osdeploy-online-migration.yaml

11.10. 更新の最終処理

最新の Red Hat OpenStack Platform 16.2 バージョンへの更新を完了するには、オーバークラウドで生成された設定を更新する必要があります。これにより、スタックリソース構造が OSP 16.2 の通常のデプロイメントと一致し、将来的に標準のオーバークラウドデプロイメントを実行できるようになります。

手順

  1. fencing.yaml 環境ファイルでフェンシングを再度有効にします。

    parameter_defaults:
      EnableFencing: true
  2. デフォルト設定を再生成して、lifecycle/update-prepare.yaml が heatEnvs に含まれていないことを確認します。詳細は、director Operator を使用したオーバークラウドソフトウェアの設定 を参照してください。
  3. OpenStackConfigGenerator、ConfigVersion、および設定デプロイメントリソースを削除します。

    $ oc delete <type> <name>
    • <type> を、削除するリソースのタイプに置き換えます。
    • <name> を、削除するリソースの名前に置き換えます。
  4. 更新の最終処理が完了するまで待ちます。

第12章 director Operator を使用してパブリックエンドポイントに TLS をデプロイする

TLS を使用してオーバークラウドをデプロイし、RHOSP Director Operator のパブリックエンドポイント IP または DNS 名を作成します。

前提条件

  • OpenShift Container Platform クラスターが機能しています。
  • director Operator を正しくインストールしました。
  • ワークステーションに oc コマンドラインツールをインストールしました。

12.1. パブリックエンドポイント IP アドレスの TLS

パブリックエンドポイントの IP アドレスを参照するには、openstackclient Pod に証明書を追加します。

前提条件

手順

  1. CA 証明書を格納するための ConfigMap を作成します。ConfigMap は、OpenStackControlPlane オブジェクトを使用して CA 証明書を openstackclient Pod に追加するために使用されるインターフェイスです。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cacerts
      namespace: openstack
    data:
     local_CA: |
        -----BEGIN CERTIFICATE-----
        …
       -----END CERTIFICATE-----
      another_CA: |
        -----BEGIN CERTIFICATE-----
        …
       -----END CERTIFICATE-----
  2. OpenStackControlPlane を作成し、ConfigMap を参照します。

    apiVersion: osp-director.openstack.org/v1beta2
    kind: OpenStackControlPlane
    metadata:
      name: <overcloud>
      namespace: openstack
    spec:
      caConfigMap: cacerts
    • <overcloud> をスタックの名前に置き換えます。
  3. ~/custom_environment_files ディレクトリーで、SSLCertificateSSLIntermediateCertificateSSLKey、および CAMap パラメーターを使用して、デプロイ用に生成された証明書を含む tls-certs.yaml というファイルを作成します。

    注記

    証明書ファイルの作成の詳細は、SSL/TLS の有効化 を参照してください。

  4. heatEnvConfigMap を更新して tls-certs.yaml ファイルを追加します。

    $ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -
  5. OpenStackConfigGenerator を作成し、必要な heatEnvs 設定ファイルを追加して、パブリックエンドポイント IP の TLS を設定します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackConfigGenerator
    …
    spec:
      …
      heatEnvs:
        - ssl/tls-endpoints-public-ip.yaml
        - ssl/enable-tls.yaml
      …
      heatEnvConfigMap: heat-env-config
      tarballConfigMap: tripleo-tarball-config
  6. OpenStackConfigGenerator と新しい OpenStackConfigVersion が作成され、OpenStackDeploy リソースを使用してオーバークラウドに対して Ansible Playbook を実行します。

12.2. パブリックエンドポイント DNS 名の TLS

パブリックエンドポイントの DNS 名を参照するには、openstackclient Pod に証明書を追加します。

前提条件

手順

  1. CA 証明書を格納するための ConfigMap を作成します。ConfigMap は、OpenStackControlPlane オブジェクトを使用して、追加の CA 証明書を openstackclient Pod に追加するために使用されるインターフェイスです。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cacerts
      namespace: openstack
    data:
     local_CA: |
        -----BEGIN CERTIFICATE-----
        …
       -----END CERTIFICATE-----
      another_CA: |
        -----BEGIN CERTIFICATE-----
        …
       -----END CERTIFICATE-----
  2. OpenStackControlPlane を作成し、ConfigMap を参照します。

    apiVersion: osp-director.openstack.org/v1beta2
    kind: OpenStackControlPlane
    metadata:
      name: <overcloud>
      namespace: openstack
    spec:
      caConfigMap: cacerts
    • <overcloud> をスタックの名前に置き換えます。
  3. ~/custom_environment_files ディレクトリーで、SSLCertificateSSLIntermediateCertificateSSLKey、および CAMap パラメーターを使用して、デプロイ用に生成された証明書を含む tls-certs.yaml というファイルを作成します。

    注記

    証明書ファイルの作成の詳細は、SSL/TLS の有効化 を参照してください。

  4. heatEnvConfigMap を更新して tls-certs.yaml ファイルを追加します。

    $ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -
  5. OpenStackConfigGenerator を作成し、必要な heatEnvs 設定ファイルを追加して、パブリックエンドポイント DNS 名の TLS を設定します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackConfigGenerator
    …
    spec:
      …
      heatEnvs:
        - ssl/tls-endpoints-public-dns.yaml
        - ssl/enable-tls.yaml
      …
      heatEnvConfigMap: heat-env-config
      tarballConfigMap: tripleo-tarball-config
  6. OpenStackConfigGenerator と新しい OpenStackConfigVersion が作成され、OpenStackDeploy リソースを使用してオーバークラウドに対して Ansible Playbook を実行します。

第13章 Director Operator を使用してサービスアカウントのパスワードを変更する

Red Hat OpenStack Platform (RHOSP) サービスとそれらが使用するデータベースは、Identity サービス (keystone) の認証情報によって認証されます。Identity サービスは、RHOSP の初回デプロイプロセスを実行する間に RHOSP パスワードを生成します。脅威の軽減やセキュリティーコンプライアンスのために、パスワードを定期的に更新する必要がある場合もあります。director Operator (OSPdO) ネイティブのツールを使用して、RHOSP 環境をデプロイした後に多くの生成済みパスワードを変更できます。

13.1. director Operator を使用してオーバークラウドサービスアカウントのパスワードをローテーションする

director Operator (OSPdO) がデプロイされた Red Hat OpenStack Platform (RHOSP) 環境で使用されるオーバークラウドのサービスアカウントパスワードをローテーションできます。

手順

  1. 現在の Tripleo-passwords シークレットのバックアップを作成します。

    $ oc get secret tripleo-passwords -n openstack -o yaml > tripleo-passwords_backup.yaml
  2. Tripleo-overcloud-passwords_preserve_list という名前のプレインテキストファイルを作成して、次のサービスのパスワードをローテーションしないように指定します。

    parameter_defaults
    BarbicanSimpleCryptoKek
    KeystoneCredential0
    KeystoneCredential1
    KeystoneFernetKey0
    KeystoneFernetKey1
    KeystoneFernetKeys
    CephClientKey
    CephClusterFSID
    CephManilaClientKey
    CephRgwKey
    HeatAuthEncryptionKey
    MysqlClustercheckPassword
    MysqlMariabackupPassword
    PacemakerRemoteAuthkey
    PcsdPassword

    パスワードを保持したいサービスが他にもある場合は、そのサービスをリストに追加できます。

  3. 変更すべきでないパスワードをリストするためのパスワードパラメーターファイル (Tripleo-overcloud-passwords.yaml) を作成します。

    $ oc get secret tripleo-passwords -n openstack \
    -o jsonpath='{.data.tripleo-overcloud-passwords\.yaml}' \
    | base64 -d | grep -f ./tripleo-overcloud-passwords_preserve_list > tripleo-overcloud-passwords.yaml
  4. Tripleo-overcloud-passwords.yaml ファイルに、ローテーションしないパスワードが含まれていることを検証します。
  5. tripleo-password シークレットを更新します。

    $ oc create secret generic tripleo-passwords -n openstack \
    --from-file=./tripleo-overcloud-passwords.yaml \
    --dry-run=client -o yaml | oc apply -f -
  6. Ansible Playbook を作成し、OpenStackConfigGenerator CRD を使用してオーバークラウドを設定します。詳細は、OpenStackConfigGenerator CRD を使用したオーバークラウド設定用の Ansible Playbook の作成 を参照してください。
  7. 更新された設定を適用します。詳細は、director Operator を使用したオーバークラウド設定の適用 を参照してください。

検証

シークレット内の新しい NovaPassword を、コントローラーノードにインストールされたものと比較します。

  1. 更新されたシークレットからパスワードを取得します。

    $ oc get secret tripleo-passwords -n openstack -o jsonpath='{.data.tripleo-overcloud-passwords\.yaml}' | base64 -d | grep NovaPassword

    出力例:

    NovaPassword: hp4xpt7t2p79ktqjjnxpqwbp6
  2. コントローラーノード上で稼働している Compute サービス (nova) のパスワードを取得します。

    1. openstackclient リモートシェルにアクセスします。

      $ oc rsh openstackclient -n openstack
    2. ホームディレクトリーにいることを確認します。

      $ cd
    3. Compute サービスのパスワードを取得します。

      $ ansible -i /home/cloud-admin/ctlplane-ansible-inventory Controller -b -a "grep ^connection /var/lib/config-data/puppet-generated/nova/etc/nova/nova.conf"

      出力例:

      172.22.0.120 | CHANGED | rc=0 >> connection=mysql+pymysql://nova_api:hp4xpt7t2p79ktqjjnxpqwbp6@172.17.0.10/nova_api?read_default_file=/etc/my.cnf.d/tripleo.cnf&read_default_group=tripleo connection=mysql+pymysql://nova:hp4xpt7t2p79ktqjjnxpqwbp6@172.17.0.10/nova?read_default_file=/etc/my.cnf.d/tripleo.cnf&read_default_group=tripleo

第14章 director Operator を使用したスパインリーフ設定のノードのデプロイ

スパインリーフネットワーキングアーキテクチャーを備えたノードをデプロイメントして、環境内の広範なネットワークトポロジーを複製します。現在の制限により、Metal3 のプロビジョニングネットワークは 1 つだけ許可されます。

14.1. OpenStackNetConfig カスタムリソースを作成または更新して、すべてのサブネットを定義する

OpenStackNetConfig カスタムリソースを定義し、オーバークラウドネットワークのサブネットを指定します。次に、Director Operator は設定をレンダリングし、ネットワークトポロジーを作成または更新します。

前提条件

  • OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
  • ワークステーションに oc コマンドラインツールをインストールしました。

手順

  1. openstacknetconfig.yaml という設定ファイルを作成します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackNetConfig
    metadata:
      name: openstacknetconfig
    spec:
      attachConfigurations:
        br-osp:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp7s0
                description: Linux bridge with enp7s0 as a port
                name: br-osp
                state: up
                type: linux-bridge
                mtu: 1500
        br-ex:
          nodeNetworkConfigurationPolicy:
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            desiredState:
              interfaces:
              - bridge:
                  options:
                    stp:
                      enabled: false
                  port:
                  - name: enp6s0
                description: Linux bridge with enp6s0 as a port
                name: br-ex
                state: up
                type: linux-bridge
                mtu: 1500
      # optional DnsServers list
      dnsServers:
      - 192.168.25.1
      # optional DnsSearchDomains list
      dnsSearchDomains:
      - osptest.test.metalkube.org
      - some.other.domain
      # DomainName of the OSP environment
      domainName: osptest.test.metalkube.org
      networks:
      - name: Control
        nameLower: ctlplane
        subnets:
        - name: ctlplane
          ipv4:
            allocationEnd: 192.168.25.250
            allocationStart: 192.168.25.100
            cidr: 192.168.25.0/24
            gateway: 192.168.25.1
          attachConfiguration: br-osp
      - name: InternalApi
        nameLower: internal_api
        mtu: 1350
        subnets:
        - name: internal_api
          ipv4:
            allocationEnd: 172.17.0.250
            allocationStart: 172.17.0.10
            cidr: 172.17.0.0/24
            routes:
            - destination: 172.17.1.0/24
              nexthop: 172.17.0.1
            - destination: 172.17.2.0/24
              nexthop: 172.17.0.1
          vlan: 20
          attachConfiguration: br-osp
        - name: internal_api_leaf1
          ipv4:
            allocationEnd: 172.17.1.250
            allocationStart: 172.17.1.10
            cidr: 172.17.1.0/24
            routes:
            - destination: 172.17.0.0/24
              nexthop: 172.17.1.1
            - destination: 172.17.2.0/24
              nexthop: 172.17.1.1
          vlan: 21
          attachConfiguration: br-osp
        - name: internal_api_leaf2
          ipv4:
            allocationEnd: 172.17.2.250
            allocationStart: 172.17.2.10
            cidr: 172.17.2.0/24
            routes:
            - destination: 172.17.1.0/24
              nexthop: 172.17.2.1
            - destination: 172.17.0.0/24
              nexthop: 172.17.2.1
          vlan: 22
          attachConfiguration: br-osp
      - name: External
        nameLower: external
        subnets:
        - name: external
          ipv4:
            allocationEnd: 10.0.0.250
            allocationStart: 10.0.0.10
            cidr: 10.0.0.0/24
            gateway: 10.0.0.1
          attachConfiguration: br-ex
      - name: Storage
        nameLower: storage
        mtu: 1350
        subnets:
        - name: storage
          ipv4:
            allocationEnd: 172.18.0.250
            allocationStart: 172.18.0.10
            cidr: 172.18.0.0/24
            routes:
            - destination: 172.18.1.0/24
              nexthop: 172.18.0.1
            - destination: 172.18.2.0/24
              nexthop: 172.18.0.1
          vlan: 30
          attachConfiguration: br-osp
        - name: storage_leaf1
          ipv4:
            allocationEnd: 172.18.1.250
            allocationStart: 172.18.1.10
            cidr: 172.18.1.0/24
            routes:
            - destination: 172.18.0.0/24
              nexthop: 172.18.1.1
            - destination: 172.18.2.0/24
              nexthop: 172.18.1.1
          vlan: 31
          attachConfiguration: br-osp
        - name: storage_leaf2
          ipv4:
            allocationEnd: 172.18.2.250
            allocationStart: 172.18.2.10
            cidr: 172.18.2.0/24
            routes:
            - destination: 172.18.0.0/24
              nexthop: 172.18.2.1
            - destination: 172.18.1.0/24
              nexthop: 172.18.2.1
          vlan: 32
          attachConfiguration: br-osp
      - name: StorageMgmt
        nameLower: storage_mgmt
        mtu: 1350
        subnets:
        - name: storage_mgmt
          ipv4:
            allocationEnd: 172.19.0.250
            allocationStart: 172.19.0.10
            cidr: 172.19.0.0/24
            routes:
            - destination: 172.19.1.0/24
              nexthop: 172.19.0.1
            - destination: 172.19.2.0/24
              nexthop: 172.19.0.1
          vlan: 40
          attachConfiguration: br-osp
        - name: storage_mgmt_leaf1
          ipv4:
            allocationEnd: 172.19.1.250
            allocationStart: 172.19.1.10
            cidr: 172.19.1.0/24
            routes:
            - destination: 172.19.0.0/24
              nexthop: 172.19.1.1
            - destination: 172.19.2.0/24
              nexthop: 172.19.1.1
          vlan: 41
          attachConfiguration: br-osp
        - name: storage_mgmt_leaf2
          ipv4:
            allocationEnd: 172.19.2.250
            allocationStart: 172.19.2.10
            cidr: 172.19.2.0/24
            routes:
            - destination: 172.19.0.0/24
              nexthop: 172.19.2.1
            - destination: 172.19.1.0/24
              nexthop: 172.19.2.1
          vlan: 42
          attachConfiguration: br-osp
      - name: Tenant
        nameLower: tenant
        vip: False
        mtu: 1350
        subnets:
        - name: tenant
          ipv4:
            allocationEnd: 172.20.0.250
            allocationStart: 172.20.0.10
            cidr: 172.20.0.0/24
            routes:
            - destination: 172.20.1.0/24
              nexthop: 172.20.0.1
            - destination: 172.20.2.0/24
              nexthop: 172.20.0.1
          vlan: 50
          attachConfiguration: br-osp
        - name: tenant_leaf1
          ipv4:
            allocationEnd: 172.20.1.250
            allocationStart: 172.20.1.10
            cidr: 172.20.1.0/24
            routes:
            - destination: 172.20.0.0/24
              nexthop: 172.20.1.1
            - destination: 172.20.2.0/24
              nexthop: 172.20.1.1
          vlan: 51
          attachConfiguration: br-osp
        - name: tenant_leaf2
          ipv4:
            allocationEnd: 172.20.2.250
            allocationStart: 172.20.2.10
            cidr: 172.20.2.0/24
            routes:
            - destination: 172.20.0.0/24
              nexthop: 172.20.2.1
            - destination: 172.20.1.0/24
              nexthop: 172.20.2.1
          vlan: 52
          attachConfiguration: br-osp
  2. 内部 API ネットワークを作成します。

    $ oc create -f openstacknetconfig.yaml -n openstack

検証

  1. OpenStackNetConfig のリソースと子リソースを表示します。

    $ oc get openstacknetconfig/openstacknetconfig -n openstack
    $ oc get openstacknetattachment -n openstack
    $ oc get openstacknet -n openstack

14.2. デプロイメントにリーフネットワークのロールを追加する

リーフネットワークのロールをデプロイに追加するには、roles_data.yaml 設定ファイルを更新し、ConfigMap を作成します。

注記

ファイル名として roles_data.yaml を使用する必要があります。

前提条件

  • OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
  • ワークステーションに oc コマンドラインツールをインストールしました。

手順

  1. roles_data.yaml ファイルを更新します。

    ...
    ###############################################################################
    # Role: ComputeLeaf1                                                          #
    ###############################################################################
    - name: ComputeLeaf1
      description: |
        Basic ComputeLeaf1 Node role
      # Create external Neutron bridge (unset if using ML2/OVS without DVR)
      tags:
        - external_bridge
      networks:
        InternalApi:
          subnet: internal_api_leaf1
        Tenant:
          subnet: tenant_leaf1
        Storage:
          subnet: storage_leaf1
      HostnameFormatDefault: '%stackname%-novacompute-leaf1-%index%'
    ...
    ###############################################################################
    # Role: ComputeLeaf2                                                          #
    ###############################################################################
    - name: ComputeLeaf2
      description: |
        Basic ComputeLeaf1 Node role
      # Create external Neutron bridge (unset if using ML2/OVS without DVR)
      tags:
        - external_bridge
      networks:
        InternalApi:
          subnet: internal_api_leaf2
        Tenant:
          subnet: tenant_leaf2
        Storage:
          subnet: storage_leaf2
      HostnameFormatDefault: '%stackname%-novacompute-leaf2-%index%'
    ...
  2. ~/custom_environment_files ディレクトリーで、テンプレートを tarball にアーカイブします。

    $ tar -cvzf custom-config.tar.gz *.yaml
  3. tripleo-tarball-config ConfigMap を作成します。

    $ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack

14.3. 新しいロールの NIC テンプレートの作成

Red Hat OpenStack Platform (RHOSP) 16.2 では、トリプル NIC テンプレートにデフォルトで InterfaceRoutes パラメーターが含まれています。通常は、Networking サービス (neutron) ネットワークの host_routes プロパティーで、environments/network-environment.yaml 設定ファイルでレンダリングした routes パラメーターを設定します。次に、それを InterfaceRoutes パラメーターに追加します。

director Operator には Networking サービス (neutron) が存在しません。新しいロールの新しい NIC テンプレートを作成するには、特定のネットワークのルートを NIC テンプレートに追加し、リストを連結する必要があります。

14.3.1. デフォルトのネットワークルートの作成

ネットワークルートを NIC テンプレートに追加してデフォルトのネットワークルートを作成し、リストを連結します。

手順

  1. NIC テンプレートを開きます。
  2. テンプレートにネットワークルートを追加し、リストを連結します。

    parameters:
      ...
      {{ $net.Name }}Routes:
        default: []
        description: >
          Routes for the storage network traffic.
          JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
          Unless the default is changed, the parameter is automatically resolved
          from the subnet host_routes attribute.
        type: json
      ...
                  - type: interface
                    ...
                    routes:
                      list_concat_unique:
                        - get_param: {{ $net.Name }}Routes
                        - get_param: {{ $net.Name }}InterfaceRoutes

14.3.2. サブネットルート

Routes サブネット情報は、Ansible Playbook で使用される tripleo 環境ファイル environment/network-environment.yaml に自動レンダリングされます。NIC テンプレートでは、Routes_<subnet_name> パラメーターを使用して、ホストに正しいルーティングを設定します (例: StorageRoutes_storage_leaf1)。

14.3.3. スパインリーフネットワーキング用の NIC テンプレートの変更

スパインリーフネットワークを設定するには、ロールごとに NIC テンプレートを変更し、ConfigMap を再作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
  • ワークステーションに oc コマンドラインツールをインストールしました。

手順

  1. 各コンピュートロールの NIC テンプレートを作成します。

    ...
      StorageRoutes_storage_leaf1:
        default: []
        description: >
          Routes for the storage network traffic.
          JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
          Unless the default is changed, the parameter is automatically resolved
          from the subnet host_routes attribute.
        type: json
    ...
      InternalApiRoutes_internal_api_leaf1:
        default: []
        description: >
          Routes for the internal_api network traffic.
          JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
          Unless the default is changed, the parameter is automatically resolved
          from the subnet host_routes attribute.
        type: json
    ...
      TenantRoutes_tenant_leaf1:
        default: []
        description: >
          Routes for the internal_api network traffic.
          JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}]
          Unless the default is changed, the parameter is automatically resolved
          from the subnet host_routes attribute.
        type: json
    ...
                           get_param: StorageIpSubnet
                       routes:
                         list_concat_unique:
                          - get_param: StorageRoutes_storage_leaf1
                     - type: vlan
    ...
                           get_param: InternalApiIpSubnet
                       routes:
                         list_concat_unique:
                          - get_param: InternalApiRoutes_internal_api_leaf1
    ...
                           get_param: TenantIpSubnet
                       routes:
                         list_concat_unique:
                          - get_param: TenantRoutes_tenant_leaf1
                   - type: ovs_bridge
    ...
  2. ~/custom_environment_files ディレクトリーで、テンプレートを tarball にアーカイブします。

    $ tar -cvzf custom-config.tar.gz *.yaml
  3. tripleo-tarball-config ConfigMap を作成します。

    $ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack

14.3.4. NIC テンプレートを登録するための環境ファイルの作成または更新

環境ファイルを作成または更新するには、新しいノードの NIC テンプレートをリソースレジストリーに追加し、ConfigMap を再作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
  • ワークステーションに oc コマンドラインツールをインストールしました。
  • tripleo-tarball-config ConfigMap が、ロールに必要な roles_data.yaml と NIC テンプレートで更新されました。

手順

  1. 新しいノードの NIC テンプレートを、環境ファイルの resource_registry セクションに追加します。

    resource_registry:
      OS::TripleO::Compute::Net::SoftwareConfig: net-config-two-nic-vlan-compute.yaml
      OS::TripleO::ComputeLeaf1::Net::SoftwareConfig: net-config-two-nic-vlan-compute_leaf1.yaml
      OS::TripleO::ComputeLeaf2::Net::SoftwareConfig: net-config-two-nic-vlan-compute_leaf2.yaml
  2. ~/custom_environment_files ディレクトリーで、テンプレートを tarball にアーカイブします。

    $ tar -cvzf custom-config.tar.gz *.yaml
  3. tripleo-tarball-config ConfigMap を作成します。

    $ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack

14.4. 複数のルーティングされたネットワークを使用したオーバークラウドのデプロイ

複数のルーティングされたネットワーキングのセットを使用してオーバークラウドをデプロイするには、制御プレーンとスパインリーフネットワーキング用の Compute ノードを作成してから、Ansible Playbook をレンダリングして適用します。

14.4.1. コントロールプレーンの作成

コントロールプレーンを作成するには、コントローラーノードのリソースを指定します。director オペレーターは、リモートシェルアクセス用の openstackclient Pod を作成します。

前提条件

  • OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
  • ワークステーションに oc コマンドラインツールをインストールしました。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークと追加のネットワークリソースを作成しました。

手順

  1. ワークステーションに openstack-controller.yaml という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。次の例は、3 つのコントローラーノードで設定されるコントロールプレーンの仕様を示しています。

    apiVersion: osp-director.openstack.org/v1beta2
    kind: OpenStackControlPlane
    metadata:
      name: overcloud
      namespace: openstack
    spec:
      gitSecret: git-secret
      openStackClientImageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2
      openStackClientNetworks:
        - ctlplane
        - external
        - internal_api
        - internal_api_leaf1 # optionally the openstackclient can also be connected to subnets
      openStackClientStorageClass: host-nfs-storageclass
      passwordSecret: userpassword
      domainName: ostest.test.metalkube.org
      virtualMachineRoles:
        Controller:
          roleName: Controller
          roleCount: 1
          networks:
            - ctlplane
            - internal_api
            - external
            - tenant
            - storage
            - storage_mgmt
          cores: 6
          memory: 20
          rootDisk:
            diskSize: 50
            baseImageVolumeName: openstack-base-img
            storageClass: host-nfs-storageclass
            storageAccessMode: ReadWriteMany
            storageVolumeMode: Filesystem
      enableFencing: False
  2. コントロールプレーンを作成します。

    $ oc create -f openstack-controller.yaml -n openstack

    OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。

    director Operator は、Red Hat OpenStack Platform (RHOSP) コマンドを実行するためのリモートシェルアクセスを提供する openstackclient Pod も作成します。

検証

  1. コントロールプレーンのリソースを表示します。

    $ oc get openstackcontrolplane/overcloud -n openstack
  2. OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。

    $ oc get openstackvmsets -n openstack
  3. 仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。

    $ oc get virtualmachines
  4. openstackclient Pod リモートシェルへのアクセスをテストします。

    $ oc rsh -n openstack openstackclient

14.4.2. リーフの Compute ノードの作成

ベアメタルマシンから Compute ノードを作成するには、OpenStackBaremetalSet カスタムリソースにリソース仕様を含めます。

前提条件

  • OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
  • ワークステーションに oc コマンドラインツールをインストールしました。
  • OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークと追加のネットワークリソースを作成しました。

手順

  1. ワークステーションに openstack-computeleaf1.yaml という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。次の例は、1 つの Compute リーフノードの仕様を示しています。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackBaremetalSet
    metadata:
      name: computeleaf1
      namespace: openstack
    spec:
      # How many nodes to provision
      count: 1
      # The image to install on the provisioned nodes
      baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2
      # The secret containing the SSH pub key to place on the provisioned nodes
      deploymentSSHSecret: osp-controlplane-ssh-keys
      # The interface on the nodes that will be assigned an IP from the mgmtCidr
      ctlplaneInterface: enp7s0
      # Networks to associate with this host
      networks:
            - ctlplane
            - internal_api_leaf1
            - external
            - tenant_leaf1
            - storage_leaf1
      roleName: ComputeLeaf1
      passwordSecret: userpassword
  2. Compute ノードを作成します。

    $ oc create -f openstack-computeleaf1.yaml -n openstack

検証

  1. Compute ノードのリソースを表示します。

    $ oc get openstackbaremetalset/computeleaf1 -n openstack
  2. OpenShift によって管理されているベアメタルマシンを表示して、Compute ノードの作成を確認します。

    $ oc get baremetalhosts -n openshift-machine-api

14.5. Playbook をレンダリングして適用する

オーバークラウドを設定できるようになりました。詳細は、director Operator を使用したオーバークラウドソフトウェアの設定 を参照してください。

第15章 director オペレーターのバックアップと復元

Red Hat OpenStack Platform (RHOSP) Director Operator を使用して、現在の CR、ConfigMap、および Secret 設定のバックアップを作成および復元します。API は、2 つの CustomResourceDefinition (CRD) で設定されています。

  • OpenStackBackupRequest
  • OpenStackBackup

15.1. Director オペレーター CustomResourceDefinition (CRD)

OpenStackBackupRequest CRD を使用して、バックアップの作成または復元を開始します。OpenStackBackup CRD を使用して、特定の名前空間の CR、ConfigMap、および Secret データを保存します。これらの CRD は、次の機能を提供します。

  • CRD は単一の OpenStackBackup CR にバックアップを保存するため、複数の設定を手動でエクスポートおよびインポートする必要はありません。
  • Director Operator は、すべてのリソースの状態を認識しているため、不完全またはエラー状態の設定をバックアップしません。
  • Director Operator は、完全なバックアップを作成するために必要な CR、ConfigMap、およびシークレットを認識しています。

15.2. Director Operator のバックアップ

バックアップを作成するために、director Operator は現在の namespace の内容と、additionalConfigMaps および additionalSecrets リストで宣言されたものを含めます。手動で作成した ConfigMap とシークレットを追加の仕様に含めることができます。

手順

  1. OpenStackBackupRequest CRD を作成し、modesave に設定してバックアップをリクエストします。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackBackupRequest
    metadata:
      name: openstackbackupsave
      namespace: openstack
    spec:
      mode: save
      additionalConfigMaps: []
      additionalSecrets: []
  2. オプション: additionalConfigMaps および additionalSecrets 仕様を使用して、手動で作成した ConfigMaps またはシークレットを含めます。
  3. OpenStackBackupRequest のステータスをモニターします。

    $ oc get -n openstack osbackuprequest openstackbackupsave
    NAME                     OPERATION   SOURCE   STATUS      COMPLETION TIMESTAMP
    openstackbackupsave      save                 Quiescing
    注記

    Quiescing 状態は、director Operator が CR が終了状態に達するのを待っていることを示します。バックアップが完了するまでの時間は、CR の数によって異なります。

  4. director Operator ログを調査して、進行状況を確認できます。

    $ oc logs <operator_pod> -c manager -f
    2022-01-11T18:26:15.180Z        INFO    controllers.OpenStackBackupRequest      Quiesce for save for OpenStackBackupRequest openstackbackupsave is waiting for: [OpenStackBaremetalSet: compute, OpenStackControlPlane: overcloud, OpenStackVMSet: controller]
    • <operator_pod> を Operator Pod の名前に置き換えます。

検証

  1. OpenStackBackupRequest を表示して、STATUS が Saved であることを確認します。

    $ oc get -n openstack osbackuprequest
    NAME                     OPERATION   SOURCE   STATUS   COMPLETION TIMESTAMP
    openstackbackupsave      save                 Saved    2022-01-11T19:12:58Z
  2. OpenStackBackupRequest が Error 状態になった場合は、リクエストの内容を確認してエラーを見つけます。

    $ oc get -n openstack openstackbackuprequest <request_name> -o yaml
    • <request_name> をバックアップ要求の名前に置き換えます。
  3. OpenStackBackup を表示して、存在することを確認します。

    $ oc get -n openstack osbackup
    
    NAME                                AGE
    openstackbackupsave-1641928378      6m7s

15.3. バックアップからの director Operator の復元

director Operator にバックアップの復元を要求すると、director Operator は restoreSource OpenStackBackup の内容を取得し、namespace 内に存在するすべての既存の CR、ConfigMap、およびシークレットリソースにそれらを適用しようとします。Director operator は、namespace 内の既存の director Operator リソースを上書きし、namespace 内に見つからないリソースに対して新しいリソースを作成します。

手順

  1. 利用可能なバックアップを一覧表示します。

    $ oc get osbackup
    注記

    特定のバックアップの詳細を調べるには:

    $ oc get backup <name> -o yaml
    • <name> を検査するバックアップの名前に置き換えます。
  2. OpenStackBackupRequest CRD を作成し、moderestore に設定します。以下に例を示します。

    apiVersion: osp-director.openstack.org/v1beta1
    kind: OpenStackBackupRequest
    metadata:
      name: openstackbackupsave
      namespace: openstack
    spec:
      mode: <mode>
      restoreSource: <restore_source>
    • <mode> を次のいずれかのオプションに置き換えます。

      • restore - 既存の OpenStackBackup からの復元をリクエストします。
      • cleanRestore - 復元を試みる前に、namespace 内の既存の director Operator リソースを完全に消去します。
    • <restore_source> を復元する OpenStackBackup の ID に置き換えます (例: openstackbackupsave-1641928378)。
  3. OpenStackBackupRequest のステータスをモニターします。

    $ oc get -n openstack osbackuprequest openstackbackuprestore
    NAME                     OPERATION  SOURCE                           STATUS     COMPLETION TIMESTAMP
    openstackbackuprestore   restore    openstackbackupsave-1641928378   Loading

    すべてのリソースがロードされた後、director Operator は調整を開始します。

    $ oc get -n openstack osbackuprequest openstackbackuprestore
    NAME                     OPERATION  SOURCE                           STATUS       COMPLETION TIMESTAMP
    openstackbackuprestore   restore    openstackbackupsave-1641928378   Reconciling
    注記

    OpenStackBackupRequest がエラー状態になった場合は、リクエストの内容を表示してエラーを見つけます。

    $ oc get -n openstack openstackbackuprequest <name> -o yaml

検証

  1. OpenStackBackupRequest を表示して、STATUS が Restored であることを確認します。

    $ oc get -n openstack osbackuprequest
    NAME                     OPERATION  SOURCE                           STATUS     COMPLETION TIMESTAMP
    openstackbackuprestore   restore    openstackbackupsave-1641928378   Restored   2022-01-12T13:48:57Z

第16章 director Operator を使用して仮想マシンのリソースを変更する

OpenStackVMSet の CPU、RAM、およびディスクリソースを変更するには、OpenStackControlPlane を使用します。

16.1. OpenStackVMSet の CPU または RAM を変更する

OpenStackControlPlane を使用して、OpenStackVMSet の CPU または RAM を変更できます。

手順

  1. Controller virtualMachineRole コアの数を 8 に変更します。

    $ oc patch -n openstack osctlplane overcloud --type='json' -p='[{"op": "add", "path": "/spec/virtualMachineRoles/controller/cores", "value": 8 }]'
  2. コントローラーの virtualMachineRole RAM サイズを 22GB に変更します。

    $ oc patch -n openstack osctlplane overcloud --type='json' -p='[{"op": "add", "path": "/spec/virtualMachineRoles/controller/memory", "value": 22 }]'
  3. virtualMachineRole リソースを検証します。

    $ oc get osvmset
    NAME         CORES   RAM   DESIRED   READY   STATUS        REASON
    controller   8       22    1         1       Provisioned   All requested VirtualMachines have been provisioned
  4. 仮想マシンの内部から、正常なシャットダウンを実行します。更新された各仮想マシンを 1 つずつシャットダウンします。
  5. 仮想マシンをパワーオンします。

    $ `virtctl start <VM>` to power on the virtual machine.
    • <VM> を 仮想マシンの名前に置き換えます。

16.2. OpenStackVMSet にディスクを追加する

additionalDisks プロパティーを編集することで、OpenStackControlPlane を使用して仮想マシンにディスクを追加できます。

手順

  1. OpenStackControlPlane オブジェクトで additionalDisks パラメーターを追加または更新します。

    spec:
      ...
      virtualMachineRoles:
        Controller:
          ...
          additionalDisks:
          - baseImageVolumeName: openstack-base-img
            dedicatedIOThread: false
            diskSize: 10
            name: "data-disk1"
            storageAccessMode: ReadWriteMany
            storageClass: host-nfs-storageclass
            storageVolumeMode: Filesystem
  2. パッチを適用します。

    $ oc patch -n openstack osctlplane overcloud --patch-file controller_add_data_disk1.yaml
  3. virtualMachineRole リソースを検証します。

    $ oc get osvmset controller -o json | jq .spec.additionalDisks
    [
      {
        "baseImageVolumeName": "openstack-base-img",
        "dedicatedIOThread": false,
        "diskSize": 10,
        "name": "data-disk1",
        "storageAccessMode": "ReadWriteMany",
        "storageClass": "host-nfs-storageclass",
        "storageVolumeMode": "Filesystem"
      }
    ]
  4. 仮想マシンの内部から、正常なシャットダウンを実行します。更新された各仮想マシンを 1 つずつシャットダウンします。
  5. 仮想マシンをパワーオンします。

    $ `virtctl start <VM>` to power on the virtual machine.
    • <VM> を 仮想マシンの名前に置き換えます。

第17章 エアギャップ環境

エアギャップ環境は、他のネットワークやシステムから物理的に分離することでセキュリティーを確保します。director Operator をエアギャップ環境にインストールして、セキュリティーを確保し、特定の規制要件を提供できます。

17.1. エアギャップ環境の設定

エアギャップ環境を設定するには、registry.redhat.io とエアギャップ環境のレジストリーの両方にアクセスできる必要があります。両方のレジストリーにアクセスする方法の詳細は、エアギャップレジストリーへのカタログコンテンツのミラーリング を参照してください。

前提条件

  • Openshift Container Platform LTS リリース (OCP) 4.10 以降のクラスターがインストールされており、ベアメタルクラスターオペレーターが有効になっていて、ネットワークのプロビジョニングが行われている。
  • Kubevirt-Hyperconvered (OCP 仮想化オペレーター) と SR-IOV オペレーターをクラスターにインストールしました。
  • docker v2 スキーマに準拠する切断されたレジストリーがあります。詳細は、切断されたインストールのイメージのミラーリング を参照してください。
  • オーバークラウドノードの登録とパッケージのインストールに使用される Satellite Server またはその他のリポジトリーにアクセスできます。
  • ローカルの git リポジトリーにアクセスして、デプロイアーティファクトを保存できます。
  • ワークステーションに oc コマンドラインツールをインストールしました。
  • ワークステーションに podman および skopeo コマンドラインツールをインストールしました。

手順

  1. openstack namespace を作成します。

    $ oc new-project openstack
  2. インデックスイメージを作成し、レジストリーにプッシュします。

    $ podman login registry.redhat.io
    $ podman login your.registry.local
    $ BUNDLE_IMG="registry.redhat.io/rhosp-rhel8/osp-director-operator-bundle@sha256:c19099ac3340d364307a43e0ae2be949a588fefe8fcb17663049342e7587f055"
    注記

    最新のバンドルイメージは次の場所から取得できます: Certified container images .osp-director-operator-bundle を検索します。

  3. オペレータインデックスイメージに基づいて、関連するイメージをミラーリングします。

    $ oc adm catalog mirror ${INDEX_IMG} your.registry.local --insecure --index-filter-by-os='Linux/x86_64'
  4. ミラーリングが完了すると、現在のディレクトリーに manifests-osp-director-operator-index-<random_number> という manifests ディレクトリーが生成されます。作成した ImageContentSourcePolicy をクラスターに適用します。

    $ os apply -f manifests-osp-director-operator-index-<random_number>/imageContentSourcePolicy.yaml
    • <random_number> をランダムに生成された数値に置き換えます。
  5. osp-director-operator.yaml という名前のファイルを作成し、次の YAML コンテンツを含めて、director Operator のインストールに必要な 3 つのリソースを設定します。

    apiVersion: operators.coreos.com/v1alpha1
    kind: CatalogSource
    metadata:
      name: osp-director-operator-index
      namespace: openstack
    spec:
      sourceType: grpc
      image: your.registry.local/osp-director-operator-index:1.3.x-y
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: "osp-director-operator-group"
      namespace: openstack
    spec:
      targetNamespaces:
      - openstack
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: osp-director-operator-subscription
      namespace: openstack
    spec:
      config:
        env:
        - name: WATCH_NAMESPACE
          value: openstack,openshift-machine-api,openshift-sriov-network-operator
      source: osp-director-operator-index
      sourceNamespace: openstack
      name: osp-director-operator
  6. openstack namespace に新しいリソースを作成します。

    $ oc applycreate -f osp-director-operator.yaml
  7. 必要なオーバークラウドのイメージをリポジトリーにコピーします。

    $ for i in $(podman search --limit 1000 "registry.redhat.io/rhosp-rhel8/openstack" --format="{{ .Name }}" | awk '{print $1 ":" "16.2.4"}' | awk -F "/" '{print $2 "/" $3}'); do skopeo copy --all docker://registry.redhat.io/$i docker://your.registry.local/$i;done
    注記

    Red Hat Satellite がローカルレジストリーとして使用されている場合は、コンテナーイメージ用の Satellite Server の準備 を参照できます。

  8. これで、director Operator を使用したオーバークラウドデプロイメントの準備 に進むことができます。

検証

  1. director Operator が正常にインストールされていることを確認します。

    $ oc get operators
    NAME                                     AGE
    osp-director-operator.openstack          5m

法律上の通知

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.