director Operator を使用した Red Hat OpenShift Container Platform クラスターへのオーバークラウドのデプロイ
director Operator を使用して Red Hat OpenShift Container Platform で Red Hat OpenStack Platform オーバークラウドをデプロイおよび管理する
OpenStack Documentation Team
rhos-docs@redhat.com
概要
Red Hat OpenStack Platform director Operator のサポートは、アーキテクチャーが Red Hat サービスまたはテクニカルアカウントマネージャーによって承認された場合にのみ付与されます。この機能を導入する前に Red Hat にお問い合わせください。
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ を参照してください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。
Jira でのドキュメントフィードバックの提供
Create Issue フォームを使用して、ドキュメントに関するフィードバックを提供します。Jira 問題は Red Hat OpenStack Platform Jira プロジェクトに作成され、フィードバックの進捗を追跡できます。
- Jira にログインしていることを確認してください。Jira アカウントをお持ちでない場合は、フィードバックを送信するアカウントを作成します。
- 以下のリンクをクリックして、 Create Issue ページを開きます。
- Summary フィールドおよび Description フィールドを入力します。Description フィールドに、ドキュメント URL、章、またはセクション番号、および課題の詳細な説明を含めます。フォーム内の他のフィールドは変更しないでください。
- Create をクリックします。
第1章 director Operator を使用した RHOSP オーバークラウドの作成とデプロイ
Red Hat OpenShift Container Platform (RHOCP) は、Operator のモジュラーシステムを使用して RHOCP クラスターの機能を拡張します。Red Hat OpenStack Platform (RHOSP) director Operator (OSPdO) は、RHOCP 内で RHOSP クラウドをインストールして実行する機能を追加します。OSPdO は、RHOSP ノードのインフラストラクチャーと設定をデプロイおよび管理する一連のカスタムリソース定義 (CRD) を管理します。OSPdO でデプロイされた RHOSP クラウドの基本アーキテクチャーには、以下の機能が含まれます。
- 仮想コントロールプレーン
- コントローラーノードは、OSPdO が Red Hat OpenShift Virtualization で作成する仮想マシン (VM) です。
- ベアメタルマシンのプロビジョニング
- OSPdO は、RHOCP ベアメタルマシン管理を使用して、RHOSP クラウドの Compute ノードをプロビジョニングします。
- ネットワーク
- OSPdO は、RHOSP サービスの基盤となるネットワークを設定します。
- Heat および Ansible ベースの設定
-
OSPdO はカスタム Heat 設定を RHOCP に保存し、director の
config-download
機能を使用して設定を Ansible Playbook に変換します。保存された Heat 設定を変更すると、OSPdO は Ansible Playbook を自動的に再生成します。 - CLI クライアント
-
OSPdO は、ユーザーが RHOSP CLI コマンドを実行し、RHOSP クラウドと対話するための
openstackclient
Pod を作成します。
OSPdO に固有のリソースを使用して、オーバークラウドインフラストラクチャーのプロビジョニング、オーバークラウド設定の生成、およびオーバークラウドの作成を行うことができます。OSPdO を使用して RHOSP オーバークラウドを作成するには、以下のタスクを完了する必要があります。
- 稼働中の RHOCP クラスターに OSPdO をインストールします。
- ベースオペレーティングシステムの RHOCP クラスターデータボリュームを作成し、リモート Git リポジトリーの認証の詳細を追加します。
-
OpenStackNetConfig
CRD を使用して、コントロールプレーンと分離されたネットワークを含むオーバークラウドネットワークを作成します。 -
ConfigMap
を作成して、オーバークラウド用のカスタム heat テンプレートおよび環境ファイルを保存します。 - コントローラーノード用の 3 つの仮想マシンと、クライアント操作を実行するための Pod を含むコントロールプレーンを作成します。
- ベアメタルの Compute ノードを作成します。
-
オーバークラウド設定用の Ansible Playbook をレンダリングするための
openstackconfiggenerator
リソースを作成します。 -
openstackdeploy
を使用して、Ansible Playbook 設定をオーバークラウドノードに適用します。
1.1. director Operator のカスタムリソース定義
Red Hat OpenStack Platform (RHOSP) director Operator (OSPdO) には、オーバークラウドリソースの管理に使用できるカスタムリソース定義 (CRD) のセットが含まれています。
OSPdO CRD の完全なリストを表示するには、次のコマンドを使用します。
$ oc get crd | grep "^openstack"
特定の 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 の設定に使用できるフィールドの説明を表示するには、次のコマンドを使用します。
$ oc explain openstackbaremetalset.spec KIND: OpenStackBaremetalSet VERSION: osp-director.openstack.org/v1beta1 RESOURCE: spec <Object> DESCRIPTION: <empty> FIELDS: count <Object> baseImageUrl <Object> deploymentSSHSecret <Object> ctlplaneInterface <Object> networks <[]Object> ...
OSPdO には、ハードウェアプロビジョニングとソフトウェア設定という 2 種類の CRD が含まれています。
ハードウェアプロビジョニング CRD
openstacknetattachment
(internal)-
OSPdO によって、ネットワークを仮想マシン (VM) に接続するために使用される
NodeNetworkConfigurationPolicy
およびNodeSriovConfigurationPolicy
CRD を管理するために使用されます。 openstacknetconfig
-
完全なネットワーク設定を記述する
openstacknetattachment
およびopenstacknet
CRD を指定するために使用します。各ノードの予約された IP アドレスと MAC アドレスのセットがステータスに反映されます。 openstackbaremetalset
- コンピューティングやストレージなど、特定の RHOSP ロール用のベアメタルホストのセットを作成するために使用します。
openstackcontrolplane
-
RHOSP コントロールプレーンを作成し、関連する
openstackvmset
CR を管理するために使用します。 openstacknet
(internal)-
IP を
openstackvmset
およびopenstackbaremetalset
CR に割り当てるために使用されるネットワークを作成するために使用します。 openstackipset
(internal)- 特定のネットワークとロールの一連の IP が含まれています。OSPdO が IP アドレスを管理するために使用します。
openstackprovisionservers
- Metal3 でベアメタルノードをプロビジョニングするためのカスタムイメージを提供するために使用します。
openstackvmset
- コントローラー、データベース、ネットワークコントローラーなど、特定の RHOSP ロール用の OpenShift Virtualization VM のセットを作成するために使用します。
ソフトウェア設定 CRD
openstackconfiggenerator
-
デプロイメント用のカスタム
ConfigMap
をスケールアップまたは変更するときに、デプロイメント用の Ansible Playbook を自動的に生成するために使用します。 openstackconfigversion
- 実行可能な Ansible Playbook のセットを表すために使用します。
openstackdeploy
-
openstackconfigversion
CR で定義された Ansible Playbook のセットを実行するために使用します。 openstackclient
- RHOSP デプロイメントコマンドの実行に使用される Pod を作成します。
1.2. 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.3. director Operator でサポートされていない機能
- ファイバーチャネルバックエンド
-
ファイバーチャネルを使用するバックエンドについては、Block Storage (cinder) のイメージからボリュームへの転送はサポートされません。Red Hat OpenShift Virtualization は、N_Port ID Virtualization (NPIV) をサポートしていません。したがって、デフォルトで
cinder-volume
が実行される、ストレージバックエンドからコントローラーに LUN をマッピングする必要がある Block Storage ドライバーは機能しません。cinder-volume
専用のロールを作成し、そのロールを仮想化コントローラーに含めるのではなく、そのロールを使用して物理ノードを作成する必要があります。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 ガイドの コンポーザブルサービスとカスタムロール を参照してください。 - ロールベースの Ansible Playbook
-
Director Operator (OSPdO) は、ベアメタルノードのプロビジョニング後にロールベースのノード属性を設定するための Ansible Playbook の実行をサポートしていません。つまり、追加の Ansible 変数
role_growvols_args
を使用して、Object Storage サービス (Swift) のディスクパーティション全体を設定することはできません。ロールベースの Ansible Playbook 設定は、ノード定義ファイルを使用してプロビジョニングされたベアメタルノードにのみ適用されます。
1.4. 関連情報
第2章 director Operator のインストールと準備
Red Hat OpenStack Platform (RHOSP) director Operator (OSPdO) を既存の稼働中の Red Hat Openshift Container Platform (RHOCP) クラスターにインストールします。OSPdO のインストールタスクとすべてのオーバークラウド作成タスクは、RHOCP クラスターにアクセスできるワークステーションで実行します。OSPdO をインストールした後、ベースオペレーティングシステムのデータボリュームを作成し、リモート Git リポジトリーの認証の詳細を追加する必要があります。また、ノードに root パスワードを設定することもできます。root パスワードを設定していない場合でも、osp-controlplane-ssh-keys
シークレットで定義した SSH 鍵を使用してノードにログインすることができます。
Red Hat OpenStack Platform director Operator のサポートは、アーキテクチャーが Red Hat サービスまたはテクニカルアカウントマネージャーによって承認された場合にのみ付与されます。この機能を導入する前に Red Hat にお問い合わせください。
2.1. 前提条件
稼働中の Red Hat Openshift Container Platform (RHOCP) クラスター、バージョン 4.12 以降。クラスターには
provisioning
ネットワークと次の Operator が含まれている必要があります。-
baremetal
クラスターの Operator。baremetal
クラスター Operator を有効にする必要があります。baremental
クラスターオペレーターの詳細は、ベアメタルクラスター Operator を参照してください。 - OpenShift Virtualization Operator.OpenShift Virtualization Operator のインストールの詳細は、Web コンソールを使用した OpenShift Virtualization のインストール を参照してください。
- SR-IOV Network Operator.
Kubernetes NMState Operator.すべての NMState CRD のインストールを完了するには、NMState インスタンスを作成する必要もあります。
cat <<EOF | oc apply -f - apiVersion: nmstate.io/v1 kind: NMState metadata: name: nmstate namespace: openshift-nmstate EOF
Kubernetes NMState Operator のインストールの詳細は、Kubernetes NMState Operator のインストール を参照してください。
-
-
oc
コマンドラインツールがワークステーションにインストールされています。 - オーバークラウド用に生成された設定を保存するための OSPdO のリモート Git リポジトリー。
- Git リポジトリー用の SSH キーペアが生成され、公開キーが Git リポジトリーにアップロードされます。
OSPdO が作成する永続ボリューム要求を満たすための次の永続ボリューム:
-
4G (
openstackclient-cloud-admin
) -
1G (
openstackclient-hosts
) - OSPdO が各コントローラー仮想マシンのクローンを作成する基本イメージ用に 50G。
- 最低 50 GB (コントローラー仮想マシンごと)。詳細情報は、コントローラーノードの要件 を参照してください。
-
4G (
2.2. ベアメタルクラスター Operators
インストーラープロビジョニングインフラストラクチャー (IPI) またはアシストインストール (AI) を使用してインストールする Red Hat Openshift Container Platform (RHOCP) クラスターは、ベアメタル
プラットフォームタイプを使用し、baremetal
クラスター Operator を有効にします。ユーザーがプロビジョニングするインフラストラクチャー (UPI) でインストールする RHOCP クラスターは、プラットフォームタイプ none
を使用し、baremetal
Operator が無効になる可能性があります。
クラスターのタイプが AI または IPI の場合、ベアメタルホストを管理するための Kubernetes API である metal3
が使用されます。これは、利用可能なホストのインベントリーを BareMetalHost
カスタムリソース定義 (CRD) のインスタンスとして維持します。ベアメタル Operator を使用して、次のタスクを実行できます。
-
ホストのハードウェア詳細を検査し、それを対応する
BareMetalHost
CR に報告します。これには、CPU、RAM、ディスク、および NIC に関する情報が含まれます。 - 特定のイメージを使用してホストをプロビジョニングします。
- プロビジョニング前または後に、ホストのディスクコンテンツを消去します。
baremetal
クラスター Operator が有効かどうかを確認するには、Administration > Cluster Settings > ClusterOperators > baremetal に移動し、Conditions セクションまでスクロールして Disabled ステータスを表示します。
RHOCP クラスターのプラットフォームタイプを確認するには、Administration > Cluster Settings > Configuration > Infrastructure に移動し、YAML ビューに切り替え、Conditions セクションまでスクロールして、status.platformStatus
値を表示します。
2.3. director Operator のインストール
director Operator (OSPdO) をインストールするには、OSPdO の openstack
プロジェクト (namespace
) を作成し、プロジェクト内に次のカスタムリソース (CR) を作成する必要があります。
-
CatalogSource
: OSPdO カタログに使用するインデックスイメージを識別します。 -
OperatorGroup
: OSPdO の Operator グループを定義し、OSPdO をターゲット名前空間に制限します。 -
OSPdO カタログ内の変更を追跡する
Subscription
。
手順
OSPdO プロジェクトを作成します。
$ oc new-project openstack
-
https://catalog.redhat.com/software/containers/search から最新の
osp-director-operator-bundle
イメージを取得します。 -
Operator Package Manager (
opm
) ツールを https://console.redhat.com/openshift/downloads からダウンロードします。 opm
ツールを使用してインデックスイメージを作成します。$ BUNDLE_IMG="registry.redhat.io/rhosp-rhel9/osp-director-operator-bundle:1.3.1" $ 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
インデックスイメージをレジストリーにプッシュします。
$ podman push ${INDEX_IMG}
-
OSPdO のインストールに必要な
CatalogSource
、OperatorGroup
、およびSubscription
CR を設定する環境ファイル (例:osp-director-operator.yaml
) を作成します。 CatalogSource
CR を設定するには、次の設定をosp-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
Operator デプロイメントがイメージをプルできるように Quay 認証を適用する方法は、プライベートレジストリーから Operator のイメージにアクセスする を参照してください。
OperatorGroup
CR を設定するには、次の設定をosp-director-operator.yaml
に追加します。--- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: "osp-director-operator-group" namespace: openstack spec: targetNamespaces: - openstack
サブスクリプション
CR を設定するには、次の設定をosp-director-operator.yaml
に追加します。--- 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
openstack
namespace 内に新規のCatalogSource
、Subscription
、およびSubscription
CR を作成します。$ oc apply -f osp-director-operator.yaml
インストールされているオペレーターをリストして、OSPdO、
osp-director-operator.openstack
がインストールされていることを確認します。$ oc get operators NAME AGE osp-director-operator.openstack 5m
次のステップ
2.4. ベースオペレーティングシステムのデータボリュームの作成
コントローラー仮想マシン (VM) のベースオペレーティングシステムイメージを保存するには、Red Hat OpenShift Container Platform (RHOCP) クラスターを使用してデータボリュームを作成する必要があります。OpenStackControlPlane
および OpenStackVmSet
カスタムリソースを作成するときに、baseImageVolumeName
パラメーターを使用してこのデータボリュームを指定します。
前提条件
virtctl
クライアントツールがワークステーションにインストールされます。このツールを Red Hat Enterprise Linux (RHEL) ワークステーションにインストールするには、次のコマンドを使用します。$ sudo subscription-manager repos --enable=cnv-4.12-for-rhel-8-x86_64-rpms $ sudo dnf install -y kubevirt-virtctl
virt-customize
クライアントツールがワークステーションにインストールされます。このツールを RHEL ワークステーションにインストールするには、次のコマンドを使用します。$ dnf install -y libguestfs-tools-c
手順
- Red Hat Customer Portal の 製品ダウンロード セクションから RHEL 9.2 QCOW2 イメージをワークステーションにダウンロードします。
オプション: カスタム CA 証明書を追加します。
$ sudo -s $ export LIBGUESTFS_BACKEND=direct $ virt-copy-in -a <local_path_to_image> <ca_certificate>.pem /etc/pki/ca-trust/source/anchors/
Identity Service の LDAP 通信を保護したり、RHOSP 以外のシステムと通信したりするために、カスタム CA 証明書を追加することができます。
イメージをカスタマイズして、予測可能なネットワークインターフェイス名を割り当てるスクリプトを作成します。
#!/bin/bash set -eux if [ -e /etc/kernel/cmdline ]; then echo 'Updating /etc/kernel/cmdline' sed -i -e "s/^\(.*\)net\.ifnames=0\s*\(.*\)/\1\2/" /etc/kernel/cmdline fi source /etc/default/grub if grep -q "net.ifnames=0" <<< "$GRUB_CMDLINE_LINUX"; then echo 'Updating /etc/default/grub' sed -i -e "s/^\(GRUB_CMDLINE_LINUX=.*\)net\.ifnames=0\s*\(.*\)/\1\2/" /etc/default/grub fi if [ "$GRUB_ENABLE_BLSCFG" == "true" ]; then echo 'Fixing BLS entries' find /boot/loader/entries -type f -exec sed -i -e "s/^\(.*\)net\.ifnames=0\s*\(.*\)/\1\2/" {} \; fi # Always do this, on RHEL8 with BLS we still need it as the BLS entry uses $kernelopts from grubenv echo 'Running grub2-mkconfig' grub2-mkconfig -o /etc/grub2.cfg grub2-mkconfig -o /etc/grub2-efi.cfg rm -f /etc/sysconfig/network-scripts/ifcfg-ens* /etc/sysconfig/network-scripts/ifcfg-eth* update-ca-trust extract
イメージのカスタマイズスクリプトを実行します。
$ sudo -s $ export LIBGUESTFS_BACKEND=direct $ chmod 755 customize_image.sh $ virt-customize -a <local_path_to_image> --run customize_image.sh --truncate /etc/machine-id
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
です。
-
次のステップ
2.5. リモート Git リポジトリーの認証情報の追加
director Operator (OSPdO) はレンダリングされた Ansible Playbook をリモート Git リポジトリーに保管し、このリポジトリーを使用してオーバークラウドの設定に対する変更を追跡します。SSH 認証をサポートする Git リポジトリーであれば、どのリポジトリーでも使用できます。Git リポジトリーの詳細を、git-secret
という名前の Red Hat OpenShift Platform (RHOCP) Secret リソースとして指定する必要があります。
前提条件
- OSPdO Git リポジトリー用の SSH キーペアの秘密鍵。
手順
git-secret
シークレットリソースを作成します。$ oc create secret generic <secret_name> -n <namespace> \ --from-file=git_ssh_identity=<path_to_private_SSH_key> \ --from-literal=git_url=<git_server_URL>
-
<secret_name>
をシークレットの名前 (この場合はgit-secret
に置き換えます。 -
<namespace>
をopenstack
などにシークレットを作成するネームスペースの名前に置き換えます。 -
<path_to_private_SSH_key>
を Git リポジトリーにアクセスするための秘密鍵へのパスに置き換えます。 -
<git_server_URL>
を、OSPdO 設定を保存する git リポジトリーの SSH URL (ssh://<user>@<server>:2202/repo.git
など) に置き換えます。
-
Secret リソースが作成されたことを確認します。
$ oc get secret/git-secret -n openstack
関連情報
2.6. ノードの root パスワードの設定
各ノードのパスワードを使用して root
ユーザーにアクセスするには、userpassword
という名前の Secret
リソースに root
パスワードを設定します。ノードの root パスワードの設定はオプションです。root
パスワードを設定ていない場合には、osp-controlplane-ssh-keys
シークレットで定義した SSH 鍵を使用してノードにログインすることができます。
root パスワードを設定する場合は、OpenStackControlPlane
および OpenStackBaremetalSet
カスタムリソースを作成するときに、passwordSecret
パラメーターを使用してこの Secret
リソースの名前を指定する必要があります。このガイドの例では、Secret
リソース名 userpassword
を使用します。
手順
選択したパスワードを base64 値に変換します。
$ echo -n "p@ssw0rd!" | base64 cEBzc3cwcmQh
重要-n
オプションは、echo 出力から末尾の改行を削除します。ワークステーションに
openstack-userpassword.yaml
という名前のファイルを作成します。ファイルに、Secret の以下のリソース仕様を追加します。apiVersion: v1 kind: Secret metadata: name: <secret_name> namespace: openstack data: NodeRootPassword: "<password>"
-
<secret_name>
をこのシークレットリソースの名前 (userpassword
など) に置き換えます。 -
<password>
を、base64 でエンコードされたパスワードに置き換えます。
-
userpassword
シークレットを作成します。$ oc create -f openstack-userpassword.yaml -n openstack
関連情報
第3章 director Operator とネットワークを構築する
OpenShift Virtualization ワーカーノード上にネットワークとブリッジを作成し、仮想マシン (VM) をこれらのネットワークに接続するには、OpenStackNetConfig
カスタムリソース (CR) を定義し、オーバークラウドネットワークのすべてのサブネットを指定します。オーバークラウド用にコントロールプレーンネットワークを 1 つ作成する必要があります。オプションで追加のネットワークを作成して、コンポーザブルネットワークのネットワーク分離を実装することもできます。
3.1. OpenStackNetConfig
CRD を使用したオーバークラウドネットワークの作成
OpenStackNetConfig
CRD を使用して、オーバークラウド用に少なくとも 1 つのコントロールプレーンネットワークを定義する必要があります。オプションで、VLAN ネットワークを定義して、InternalAPI
、Storage
、External
などの設定可能なネットワークのネットワーク分離を作成することもできます。各ネットワーク定義には、IP アドレスの割り当てと、OpenStackNetAttachment
CRD のマッピング情報が含まれている必要があります。OpenShift Virtualization は、ネットワーク定義を使用して、仮想マシン (VM) をコントロールプレーンおよび VLAN ネットワークに接続します。
OpenStackNetConfig
CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstacknetconfig $ oc explain openstacknetconfig.spec
手順
-
ワークステーション上に
openstacknetconfig.yaml
という名前のファイルを作成します。 次の設定を
openstacknetconfig.yaml
に追加して、OpenStackNetConfig
カスタムリソース (CR) を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig
ネットワークに必要なブリッジのネットワークアタッチメント定義を設定します。たとえば、次の設定を
openstacknetconfig.yaml
に追加して RHOSP ブリッジのネットワーク接続定義br-osp
を作成し、nodeNetworkConfigurationPolicy
オプションを設定して Linux ブリッジを作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: 1 nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 2 description: Linux bridge with enp6s0 as a port name: br-osp 3 state: up type: linux-bridge mtu: 1500 4 # 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
オプション: ブリッジにジャンボフレームを使用するには、ジャンボフレームを使用するようにブリッジインターフェイスを設定し、ブリッジの
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: enp6s0 description: Linux bridge with enp6s0 as a port name: br-osp state: up type: linux-bridge mtu: 9000 1 - name: enp6s0 2 description: Configuring enp6s0 on workers type: ethernet state: up mtu: 9000 ...
各オーバークラウドネットワークを定義します。次の例では、
InternalAPI
トラフィック用にコントロールプレーンネットワークと分離されたネットワークを作成します。spec: ... networks: - name: Control 1 nameLower: ctlplane 2 subnets: 3 - name: ctlplane 4 ipv4: 5 allocationEnd: 172.22.0.250 allocationStart: 172.22.0.100 cidr: 172.22.0.0/24 gateway: 172.22.0.1 attachConfiguration: br-osp 6 - name: InternalApi 7 nameLower: internal_api mtu: 1350 subnets: - name: internal_api attachConfiguration: br-osp vlan: 20 8 ipv4: allocationEnd: 172.17.0.250 allocationStart: 172.17.0.10 cidr: 172.17.0.0/24 ...
- 1
- ネットワークの名前 (例:
Control
)。 - 2
- ネットワーク名の小文字バージョン (
ctlplane
など)。 - 3
- サブネットの仕様。
- 4
- サブネットの名前 (
ctlplane
など)。 - 5
allocationStart
、allocationEnd
、cidr
、gateway
、オプションのルートリスト (destination
とnexthop
を含む) を含む ipv4 サブネットの詳細- 6
- ネットワークを接続するネットワーク接続定義。この例では、RHOSP ブリッジ
br-osp
が各ワーカーの NIC に接続されています。 - 7
- コンポーザブルネットワークのネットワーク定義。デフォルトの RHOSP ネットワークを使用するには、ネットワークごとに
OpenStackNetConfig
リソースを作成する必要があります。デフォルトの RHOSP ネットワークは、デフォルトの Red Hat OpenStack Platform ネットワーク を参照してください。異なるネットワークを使用するには、カスタムnetwork_data.yaml
ファイルを作成する必要があります。カスタムのnetwork_data.yaml
ファイルの作成は、オーバークラウドネットワークの設定 を参照してください。 - 8
- ネットワーク VLAN。デフォルトの RHOSP ネットワークは、デフォルトの Red Hat OpenStack Platform ネットワーク を参照してください。
OpenStackNetConfig
CRD を使用した仮想マシンブリッジングの詳細は、OpenStackNetConfig CRD を使用した仮想マシンブリッジングについて を参照してください。
オプション: 特定のノード上のネットワーク用に静的 IP アドレスを予約します。
spec: ... reservations: controller-0: ipReservations: ctlplane: 172.22.0.120 compute-0: ipReservations: ctlplane: 172.22.0.140 internal_api: 172.17.0.40 storage: 172.18.0.40 tenant: 172.20.0.40
注記予約は、自動生成された IP アドレスよりも優先されます。
-
openstacknetconfig.yaml
定義ファイルを保存します。 オーバークラウドネットワークを作成します。
$ oc create -f osnetconfig.yaml -n openstack
オーバークラウドネットワークが作成されたことを確認するには、オーバークラウドネットワークのリソースを表示します。
$ oc get openstacknetconfig/openstacknetconfig
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.1.1. デフォルトの Red Hat OpenStack Platform ネットワーク
ネットワーク | VLAN | CIDR | 割り当て |
---|---|---|---|
外部 | 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 |
ストレージ | 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 |
3.2. OpenStackNetConfig
CRD を使用した仮想マシンのブリッジングについて
OpenStackVMSet
CRD を使用して仮想マシン (VM) を作成する場合は、これらの VM を関連する Red Hat OpenStack Platform (RHOSP) ネットワークに接続する必要があります。OpenStackNetConfig
CRD を使用すると、Red Hat OpenShift Container Platform (RHOCP) ワーカーノード上に必要なブリッジを作成し、コントローラー VM を RHOSP オーバークラウドネットワークに接続できます。RHOSP をデプロイメントするには専用の NIC が必要です。
OpenStackNetConfig
CRD には、nodeNetworkConfigurationPolicy
のハッシュである attachConfigurations
オプションが含まれています。OpenStackNetConfig
カスタムリソース (CR) で指定されたそれぞれの attachConfiguration
は、NetworkAttachmentDefinition
オブジェクトを作成し、ネットワークインターフェイスデータを RHOCP クラスターの NodeNetworkConfigurationPolicy
リソースに渡します。NodeNetworkConfigurationPolicy
リソースは、nmstate
API を使用して、各 RHOCP ワーカーノードのネットワーク設定の最終状態を設定します。各ネットワークの NetworkAttachmentDefinition
オブジェクトは、Multus CNI プラグイン設定を定義します。NetworkAttachmentDefinition
オブジェクトの VLAN ID を指定すると、Multus CNI プラグインによってブリッジ上の vlan-filtering
が有効になります。OpenStackNetConfig
で設定された各ネットワークは、attachConfigurations
の 1 つを参照します。VM 内には、ネットワークごとに 1 つのインターフェイスがあります。
次の例では、br-ospattachConfiguration
を作成し、Linux ブリッジを作成し、そのブリッジを各ワーカーの NIC に接続するように、nodeNetworkConfigurationPolicy
オプションを設定します。この設定を適用すると、NodeNetworkConfigurationPolicy
オブジェクトは、必要な最終状態に一致するように各 RHOCP ワーカーノードを設定します。各ワーカーには、各ホストの enp6s0
NIC に接続される br-osp
という名前の新しいブリッジが含まれます。すべての RHOSP コントローラー VM は、コントロールプレーンネットワークトラフィックの br-osp
ブリッジに接続できます。
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
VLAN 20 を介して内部 API ネットワークを指定する場合は、attachConfiguration
オプションを設定して、各 RHOCP ワーカーノードのネットワーク設定を変更し、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 に接続されているので、ブリッジ自体に変更は加えられません。ただし、InternalAPI
OpenStackNet
は VLAN 20 をこのネットワークに関連付けます。これは、RHOSP コントローラー VM が内部 API ネットワークトラフィックの br-osp
ブリッジ上の VLAN 20 に接続できることを意味します。
OpenStackVMSet
CRD を使用して VM を作成すると、VM は各ネットワークに接続された複数の Virtio デバイスを使用します。OpenShift Virtualization は、default
ネットワーク (常に最初にくるインターフェイス) を除き、ネットワーク名をアルファベット順に並べ替えます。たとえば、OpenStackNetConfig
を使用してデフォルトの RHOSP ネットワークを作成すると、コントローラー VM に対して次のインターフェイス設定が生成されます。
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 デフォルトのネットワークからインターフェイスへのマッピング
ネットワーク | インターフェイス |
---|---|
default | nic1 |
ctlplane | nic2 |
external | nic3 |
InternalApi | nic4 |
storage | nic5 |
storagemgmt | nic6 |
tenant | nic7 |
OpenStackVMSet
で使用されるロール NIC テンプレートは自動生成されます。カスタム NIC テンプレートファイル <role>-nic-template.j2
(たとえば、controller-nic-template.j2
) のデフォルト設定を上書きできます。カスタム NIC ファイルを、OpenShift ConfigMap オブジェクトを使用して実装されるオーバークラウド設定を含む tarball ファイルに追加する必要があります。詳細は、第 4 章director Operator を使用したオーバークラウドのカスタマイズ。
関連情報
3.3. OpenStackNetConfig カスタムリソースファイルの例
次の OpenStackNetConfig
カスタムリソース (CR) ファイルの例では、デフォルトの RHOSP デプロイメント用のコントロールプレーンネットワークと分離された VLAN ネットワークを含むオーバークラウドネットワークを定義します。この例では、特定のノード上のネットワーク用に静的 IP アドレスも予約します。
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 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 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: 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 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 テンプレートと環境ファイルを作成することで、オーバークラウドをカスタマイズしたり、特定の機能を有効にしたりできます。Director Operator (OSPdO) オーバークラウドデプロイメントでは、オーバークラウドデプロイメントを実行する前に、これらのファイルを ConfigMap
オブジェクトに保存します。
4.1. オーバークラウド設定へのカスタムテンプレートの追加
director Operator (OSPdO) は、各ノードで Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する準備が整うと、オーバークラウドヒートテンプレートのコアセットをプロビジョニングノードに適用する Ansible Playbook に変換します。独自のカスタム heat テンプレートおよびカスタムロールファイルをオーバークラウドデプロイメントに追加するには、テンプレートファイルを tarball ファイルにアーカイブし、tarball ファイルのバイナリーコンテンツを tripleo-tarball-config
という名前の OpenShift ConfigMap
に含める必要があります。この tarball ファイルには、テンプレートのコアセットを拡張するための複雑なディレクトリー構造を含めることができます。OSPdO は、tarball ファイルから、heat テンプレートのコアセットと同じディレクトリーにファイルとディレクトリーを展開します。カスタムテンプレートのいずれかがコアコレクションのテンプレートと名前が同じ場合には、カスタムテンプレートはコアテンプレートを上書きします。
環境ファイル内のすべての参照は、tarball が抽出される TripleO heat テンプレートに関連している必要があります。
前提条件
- プロビジョニングされたノードに適用するカスタムオーバークラウドテンプレート。
手順
カスタムテンプレートの場所に移動します。
$ cd ~/custom_templates
テンプレートを gzip 圧縮された tarball にアーカイブします。
$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
CR を作成し、tarball をデータとして使用します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
ConfigMap
CR が作成されたことを確認します。$ oc get configmap/tripleo-tarball-config -n openstack
次のステップ
4.2. オーバークラウド設定へのカスタム環境ファイルの追加
オーバークラウドで機能を有効にしたりパラメーターを設定するには、オーバークラウドのデプロイメントに環境ファイルを含める必要があります。director Operator (OSPdO) は heat-env-config
という名前の ConfigMap
オブジェクトを使用して、環境ファイルを保存および取得します。ConfigMap
オブジェクトは、環境ファイルを次の形式で保存します。
... data: <environment_file_name>: |+ <environment_file_contents>
たとえば、次の ConfigMap
には 2 つの環境ファイルが含まれています。
... data: network_environment.yaml: |+ parameter_defaults: ComputeNetworkConfigTemplate: 'multiple_nics_vlans_dvr.j2' 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
ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap
オブジェクトにカスタム環境ファイルのセットをアップロードします。
前提条件
- オーバークラウドデプロイメント用のカスタム環境ファイル。
手順
heat-env-config ConfigMap
オブジェクトを作成します。$ oc create configmap -n openstack heat-env-config \ --from-file=~/<dir_custom_environment_files>/ \ --dry-run=client -o yaml | oc apply -f -
-
<dir_custom_environment_files>
をオーバークラウドのデプロイメントで使用する環境ファイルが含まれるディレクトリーに置き換えます。ConfigMap
オブジェクトは、これらを個別のdata
エントリーとして保存します。
-
heat-env-config ConfigMap
オブジェクトに必要な環境ファイルがすべて含まれていることを確認します。$ oc get configmap/<configmap_name> -n openstack
4.3. 関連情報
第5章 director Operator を使用したオーバークラウドノードの作成
Red Hat OpenStack Platform (RHOSP) オーバークラウドは、コントロールプレーンサービスを提供するコントロールノードや、コンピュートリソースを提供する Compute ノードなど、複数のノードで設定されます。高可用性に対応したオーバークラウドには、3 つのコントローラーノードと少なくとも 1 つの Compute ノードが必要です。OpenStackControlPlane
カスタムリソース定義 (CRD) を使用してコントローラーノードを作成し、OpenStackBaremetalSet
CRD を使用して Compute ノードを作成できます。
Red Hat OpenShift Container Platform (RHOCP) は、RHOCP ワーカーノードの問題を自動検出しません。また、ワーカーノードに障害が発生したり問題が発生した場合に、RHOSP コントローラー VM をホストするワーカーノードの自動回復を実行しません。ホストワーカーノードに障害が発生したときにコントローラー VM Pod を自動的に再配置するには、RHOCP クラスターでヘルスチェックを有効にする必要があります。RHOCP ワーカーノードの問題を自動検出する方法は、マシンヘルスチェックのデプロイ を参照してください。
5.1. OpenStackControlPlane CRD を使用したコントロールプレーンの作成
Red Hat OpenStack Platform (RHOSP) コントロールプレーンには、オーバークラウドを管理する RHOSP サービスが含まれています。デフォルトのコントロールプレーンは 3 つのコントローラーノードで設定されます。設定可能なロールを使用して、専用コントローラー仮想マシン (VM) 上のサービスを管理できます。コンポーザブルロールの詳細は、コンポーザブルサービスとカスタムロール を参照してください。
OpenStackControlPlane
カスタムリソース (CR) を定義して、コントローラーノードを OpenShift Virtualization 仮想マシン (VM) として作成します。
OpenStackControlPlane
CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstackcontrolplane $ oc explain openstackcontrolplane.spec
前提条件
-
OpenStackNetConfig
CR を使用して、コントロールプレーンネットワークと追加の分離ネットワークを作成している。
手順
ワークステーションに
openstack-controller.yaml
という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。次の例では、3 つのコントローラーノードで設定されるコントロールプレーンの仕様を定義します。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud 1 namespace: openstack 2 spec: 3 openStackClientNetworks: - ctlplane - internal_api - external openStackClientStorageClass: host-nfs-storageclass passwordSecret: userpassword 4 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 5 storageClass: host-nfs-storageclass 6 storageAccessMode: ReadWriteMany 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: "17.1"
- 1
- オーバークラウドのコントロールプレーンの名前 (例:
overcloud
)。 - 2
- OSPdO 名前空間 (例:
openstack
)。 - 3
- コントロールプレーンの設定。
- 4
- オプション: パスワードを使用してユーザーに各ノードでの root アクセスを提供する
Secret
リソース。 - 5
- Controller VM の基本オペレーティングシステムイメージを保存するデータボリュームの名前。データボリュームの作成の詳細は、ベースオペレーティングシステムのデータボリュームの作成 を参照してください。
- 6
- Red Hat OpenShift Container Platform (RHOCP)ストレージの設定は、動的プロビジョニング を参照してください。
-
openstack-controller.yaml
ファイルを保存します。 コントロールプレーンを作成します。
$ oc create -f openstack-controller.yaml -n openstack
-
RHOCP が
OpenStackControlPlane
CR に関連するリソースを作成するまで待ちます。OSPdO は、リモートシェルを通じてアクセスして RHOSP コマンドを実行できるOpenStackClient
Pod も作成します。
検証
コントロールプレーンのリソースを表示します。
$ oc get openstackcontrolplane/overcloud -n openstack
OpenStackVMSet
リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。$ oc get openstackvmsets -n openstack
VM を表示して、コントロールプレーン OpenShift Virtualization VM の作成を確認します。
$ oc get virtualmachines
openstackclient
リモートシェルにアクセスできるかをテストします。$ oc rsh -n openstack openstackclient
5.2. OpenStackBaremetalSet CRD を使用したコンピュートノードの作成
Compute ノードは Red Hat OpenStack Platform (RHOSP) 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後にCompute ノードの数をスケーリングできます。
OpenStackBaremetalSet
カスタムリソース (CR) を定義して、Red Hat OpenShift Container Platform (RHOCP) が管理するベアメタルマシンから Compute ノードを作成します。
OpenStackBareMetalSet
CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstackbaremetalset $ oc explain openstackbaremetalset.spec
前提条件
-
OpenStackNetConfig
CR を使用して、コントロールプレーンネットワークと追加の分離ネットワークを作成している。 -
OpenStackControlPlane
CRD を使用してコントロールプレーンを作成している。
手順
ワークステーションに
openstack-compute.yaml
という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。次の例では、1 つの Compute ノードの仕様を定義します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBaremetalSet metadata: name: compute 1 namespace: openstack 2 spec: 3 count: 1 baseImageUrl: http://<source_host>/rhel-9.2-x86_64-kvm.qcow2 deploymentSSHSecret: osp-controlplane-ssh-keys # If you manually created an OpenStackProvisionServer, you can use it here, # otherwise 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 4
-
openstack-compute.yaml
ファイルを保存します。 Compute ノードを作成します。
$ oc create -f openstack-compute.yaml -n openstack
検証
Compute ノードのリソースを表示します。
$ oc get openstackbaremetalset/compute -n openstack
RHOCP が管理するベアメタルマシンを表示し、Compute ノードの作成を確認します。
$ oc get baremetalhosts -n openshift-machine-api
5.3. OpenStackProvisionServer
CRD を使用したプロビジョニングサーバーの作成
プロビジョニングサーバーは、Red Hat OpenStack Platform (RHOSP) の Compute ノードをプロビジョニングするための特定の Red Hat Enterprise Linux (RHEL) QCOW2 イメージを提供します。OpenStackProvisionServer
CR は、作成した OpenStackBaremetalSet
CR に対して自動的に作成されます。OpenStackProvisionServer
CR を手動で作成し、作成する OpenStackBaremetalSet
CR に名前を指定できます。
OpenStackProvisionServer
CRD は、特定の RHEL QCOW2 イメージ用に Red Hat OpenShift Container Platform (RHOCP) プロビジョニングネットワーク上に Apache サーバーを作成します。
手順
ワークステーションに
openstack-provision.yaml
という名前のファイルを作成します。プロビジョニングサーバーのリソース仕様を含めます。次の例では、特定の RHEL 9.2 QCOW2 イメージを使用してプロビジョニングサーバーの仕様を定義します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackProvisionServer metadata: name: openstack-provision-server 1 namespace: openstack 2 spec: baseImageUrl: http://<source_host>/rhel-9.2-x86_64-kvm.qcow2 3 port: 8080 4
OpenStackProvisionServer
CR の設定に使用できる値の説明は、OpenStackProvisionServer
CRD 仕様スキーマを参照してください。$ oc describe crd openstackprovisionserver
-
openstack-provision.yaml
ファイルを保存します。 Provisioning サーバーを作成します。
$ oc create -f openstack-provision.yaml -n openstack
プロビジョニングサーバーのリソースが作成されたことを確認します。
$ oc get openstackprovisionserver/openstack-provision-server -n openstack
第6章 Director Operator を使用したオーバークラウドの設定とデプロイメント
オーバークラウドに仮想ノードとベアメタルノードをプロビジョニングした後、オーバークラウドノードを設定できます。OpenStackConfigGenerator
リソースを作成して Ansible Playbook を生成し、ノードを Red Hat Customer Portal または Red Hat Satellite に登録してから、OpenStackDeploy
リソースを作成して設定をノードに適用する必要があります。
6.1. OpenStackConfigGenerator CRD を使用したオーバークラウド設定用の Ansible Playbook の作成
オーバークラウドのインフラストラクチャーをプロビジョニングした後に、オーバークラウドノード上に Red Hat OpenStack Platform (RHOSP) を設定する Ansible Playbook のセットを作成する必要があります。これらの Playbook を作成するには、OpenStackConfigGenerator
カスタムリソース定義 (CRD) を使用します。OpenStackConfigGenerator
CRD は、RHOSP ディレクターの config-download
機能を使用して、Heat 設定を Playbook に変換します。
OpenStackConfigGenerator
CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstackconfiggenerator $ oc explain openstackconfiggenerator.spec
前提条件
-
OpenStackControlPlane
CRD を使用してコントロールプレーンを作成している。 -
OpenStackBarementalSets
CRD を使用して Compute ノードを作成している。 -
カスタム Heat テンプレートを含む
ConfigMap
オブジェクトを作成している。 -
カスタム環境ファイルを含む
ConfigMap
オブジェクトを作成している。
手順
ワークステーションに
openstack-config-generator.yaml
という名前のファイルを作成します。リソース仕様を追加して Ansible Playbook を生成します。次の例では、Playbook を生成するための仕様を定義します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: default 1 namespace: openstack spec: enableFencing: true 2 gitSecret: git-secret 3 imageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:17.1 heatEnvConfigMap: heat-env-config 4 # List of heat environment files to include from tripleo-heat-templates/environments heatEnvs: 5 - ssl/tls-endpoints-public-dns.yaml - ssl/enable-tls.yaml tarballConfigMap: tripleo-tarball-config 6
- 1
- 設定ジェネレータの名前。デフォルトではこれが
default
です。 - 2
true
に設定すると、フェンシングを有効にするために必要な熱環境ファイルの自動作成が有効になります。本番 RHOSP 環境では、フェンシングを有効にする必要があります。pacemaker を実行する仮想マシンには、fence-agents-kubevirt
パッケージが必要です。- 3
- Git 認証認証情報 (デフォルトでは
git-secret
) を含むConfigMap
オブジェクトに設定します。 - 4
- カスタム環境ファイルを含む
ConfigMap
オブジェクト (デフォルトではheat-env-config
)。 - 5
- Playbook の生成に使用する、TripleO によって
TripleO-heat-templates/environments
ディレクトリーに提供される、デフォルトの Heat 環境ファイルのリスト。 - 6
- カスタム Heat テンプレートを含む tarball を含む
ConfigMap
オブジェクト (デフォルトではTripleo-tarball-config
)。
オプション:
OpenStackConfigGenerator
CR が一時的 Heat サービスの作成に使用するコンテナーイメージの場所を変更するには、openstack-config-generator.yaml
ファイルに次の設定を追加します。spec: ... ephemeralHeatSettings: heatAPIImageURL: <heat_api_image_location> heatEngineImageURL: <heat_engine_image_location> mariadbImageURL: <mariadb_image_location> rabbitImageURL: <rabbitmq_image_location>
-
<heat_api_image_location>
を、heat API イメージをホストするディレクトリーopenstack-heat-api
へのパスに置き換えます。 -
<heat_engine_image_location>
を、ヒートエンジンイメージをホストするディレクトリーへのパス、openstack-heat-engine
に置き換えます。 -
<mariadb_image_location>
を、MariaDB イメージをホストするディレクトリー (openstack-mariadb
) へのパスに置き換えます。 -
<rabbitmq_image_location>
を、RabbitMQ イメージをホストするディレクトリーopenstack-rabbitmq
へのパスに置き換えます。
-
オプション: デバッグモードで設定を生成するための Ansible Playbook を作成するには、次の設定を
openstack-config-generator.yaml
ファイルに追加します。spec: ... interactive: true
対話モードでの
OpenStackConfigGenerator
Pod のデバッグの詳細は、設定生成のデバッグ を参照してください。-
openstack-config-generator.yaml
ファイルを保存します。 Ansible 設定ジェネレーターを作成します。
$ oc create -f openstack-config-generator.yaml -n openstack
設定ジェネレーターのリソースが作成されたことを確認します。
$ oc get openstackconfiggenerator/default -n openstack
6.2. オーバークラウドのオペレーティングシステムの登録
Director Operator (OSPdO) がオーバークラウドノードを設定する前に、すべてのノードのオペレーティングシステムを Red Hat Customer Portal または Red Hat Satellite Server に登録し、ノードのリポジトリーを有効にする必要があります。
OpenStackControlPlane
CR の一部として、OSPdO は、リモートシェル (RSH) 経由でアクセスして Red Hat OpenStack Platform (RHOSP) コマンドを実行する OpenStackClient
Pod を作成します。この Pod には、/home/cloud-admin/ctlplane-ansible-inventory
という名前の Ansible インベントリースクリプトも含まれています。
ノードを登録するには、redhat_subscription
Ansible モジュールを OpenStackClient Pod のインベントリースクリプトと共に使用できます。
手順
OpenStackClient
Pod への RSH 接続を開きます。$ oc rsh -n openstack openstackclient
cloud-admin
ホームディレクトリーに移動します。$ cd /home/cloud-admin
ノードを登録する
redhat_subscription
モジュールを使用して Playbook を作成します。たとえば、以下の Playbook はコントローラーノードを登録します。--- - name: Register Controller nodes hosts: Controller become: yes vars: repos: - rhel-9-for-x86_64-baseos-eus-rpms - rhel-9-for-x86_64-appstream-eus-rpms - rhel-9-for-x86_64-highavailability-eus-rpms - openstack-17.1-for-rhel-9-x86_64-rpms - fast-datapath-for-rhel-9-x86_64-rpms - rhceph-6-tools-for-rhel-9-x86_64-rpms tasks: - name: Register system 1 redhat_subscription: username: myusername password: p@55w0rd! org_id: 1234567 release: 9.2 pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd - name: Disable all repos 2 command: "subscription-manager repos --disable *" - name: Enable Controller node repos 3 command: "subscription-manager repos --enable {{ item }}" with_items: "{{ repos }}"
必要なリポジトリーにオーバークラウドノードを登録します。
$ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ./rhsm.yaml
6.3. director Operator を使用したオーバークラウドの設定の適用
コントロールプレーンを作成してベアメタルの Compute ノードをプロビジョニングし、各ノードにソフトウェアを設定する Ansible Playbook を生成してからしか、director Operator (OSPdO) でオーバークラウドを設定できません。OpenStackDeploy
カスタムリソース (CR) を作成すると、OSPdO は Ansible Playbook を実行してオーバークラウドを設定するジョブを作成します。
OpenStackDeploy
CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstackdeploy $ oc explain openstackdeploy.spec
前提条件
-
OpenStackControlPlane
CRD を使用してコントロールプレーンを作成している。 -
OpenStackBarementalSets
CRD を使用して Compute ノードを作成している。 -
OpenStackConfigGenerator
CRD を使用して、オーバークラウドの Ansible Playbook 設定を作成している。
手順
最新の
OpenStackConfigVersion
オブジェクトのhash/digest
を取得します。これは、オーバークラウドの設定に使用する必要がある Ansible Playbook を表します。$ oc get -n openstack --sort-by {.metadata.creationTimestamp} openstackconfigversion -o json
ワークステーション上に
openstack-deployment.yaml
という名前のファイルを作成し、リソース仕様を Ansible Playbook に含めます。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: default spec: configVersion: <config_version> configGenerator: default
-
<config_version>
を、ステップ 1 で取得した Ansible Playbook のhash/digest
(例:n5fch96h548h75hf4hbdhb8hfdh676h57bh96h5c5h59hf4h88h...
) に置き換えます。
-
-
openstack-deployment.yaml
ファイルを保存します。 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 に手動でアクセスすることもできます。現在のデプロイメントの ansible Playbook とansible.log
ファイルは/home/cloud-admin/work/directory
にあります。
6.4. 設定生成のデバッグ
設定生成操作をデバッグするには、対話型モードを使用するように OpenStackConfigGenerator
CR を設定します。対話型モードでは、OpenStackConfigGenerator
CR は Playbook のレンダリングを開始する環境を作成しますが、Playbook は自動的にレンダリングされません。
前提条件
OpenStackConfigGenerator
CR は対話モードで作成されました。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: default namespace: openstack spec: … interactive: true
-
接頭辞
generate-config
が付いたOpenStackConfigGenerator
Pod が開始されました。
手順
OpenStackConfigGenerator
Pod へのリモートシェル (RSH) 接続を開きます。$ oc rsh $(oc get pod -o name -l job-name=generate-config-default)
ファイルと Playbook のレンダリングを検査します。
$ 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
- OSPdO によって自動レンダリングされたファイルを保存するディレクトリー。
- 2
heatEnvConfigMap
オプションで指定された環境ファイルを格納するディレクトリー。- 3
- OSPdO によって作成されたオーバークラウドサービスのパスワードを保存するディレクトリー。
- 4
- Ansible Playbook をレンダリングするスクリプト。
- 5
create-playbooks
で使用される内部スクリプト。文書化されていない heat クライアントのマップパラメーターのマージを複製します。- 6
tarballConfigMap
オプションで指定された tarball を格納するディレクトリー。
第7章 director Operator を使用した RHOSP ハイパーコンバージドインフラストラクチャー (HCI) のデプロイ
director Operator (OSPdO) を使用して、ハイパーコンバージドインフラストラクチャー (HCI) を備えたオーバークラウドをデプロイできます。HCI を備えたオーバークラウドは、Compute サービスと Red Hat Ceph Storage OSD サービスを同じノードに配置します。
7.1. 前提条件
- お使いの Compute HCI ノードに OSD として使用する追加のディスクが必要である。
- 稼働中の Red Hat OpenShift Container Platform (RHOCP) クラスターに OSPdO をインストールして準備している。詳細は、director Operator のインストールと準備 を参照してください。
-
OpenStackNetConfig
カスタムリソース定義 (CRD) を使用して、コントロールプレーンと分離されたネットワークを含むオーバークラウドネットワークを作成している。詳細は、director Operator を使用したネットワークの作成 を参照してください。 -
オーバークラウドのカスタム heat テンプレートおよび環境ファイルを保存するために
ConfigMap
を作成している。詳細は、director Operator を使用したオーバークラウドのカスタマイズ を参照してください。 - オーバークラウド用のコントロールプレーンとベアメタル Compute ノードを作成している。詳細は、director Operator を使用したオーバークラウドノードの作成 を参照してください。
-
オーバークラウド設定用の Ansible Playbook をレンダリングするための
openstackconfiggenerator
リソースを作成して適用している。
7.2. ディレクターオペレーターの Compute HCI ロールを使用して、roles_data.yaml ファイルを作成する
オーバークラウドに Compute HCI ロールの設定を追加するには、オーバークラウドのデプロイメントに含める roles_data.yaml
ファイルに Compute HCI ロールを追加する必要があります。
roles_data.yaml
をファイル名として使用するようにしてください。
手順
openstackclient
のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclient
OS_CLOUD
環境変数の設定を解除します。$ unset OS_CLOUD
cloud-admin
ディレクトリーに移動します。$ cd /home/cloud-admin/
Controller
ロールおよびComputeHCI
ロールを設定して、新しいroles_data.yaml
ファイルを生成します。$ openstack overcloud roles generate -o roles_data.yaml Controller ComputeHCI
openstackclient
Pod を終了します。$ exit
カスタムの
roles_data.yaml
ファイルをopenstackclient
Pod からカスタムテンプレートディレクトリーにコピーします。$ oc cp openstackclient:/home/cloud-admin/roles_data.yaml custom_templates/roles_data.yaml -n openstack
関連情報
7.3. director Operator での HCI ネットワークの設定
ワークステーション上にディレクトリーを作成してカスタムテンプレートと環境ファイルを保存し、Compute HCI ロールの NIC テンプレートを設定します。
手順
カスタムテンプレートのディレクトリーを作成します。
$ mkdir custom_templates
-
custom_templates
ディレクトリーにmultiple_nics_vlans_dvr.j2
という名前のカスタムテンプレートファイルを作成します。 -
ベアメタルノードの NIC の設定を
multiple_nics_vlans_dvr.j2
ファイルに追加します。NIC 設定ファイルの例は、HCI Compute ノード用のカスタム NIC heat テンプレート を参照してください。 カスタム環境ファイルのディレクトリーを作成します。
$ mkdir custom_environment_files
オーバークラウドロールの NIC テンプレートを、
custom_environment_files
ディレクトリーのnetwork-environment.yaml
環境ファイルにマップします。parameter_defaults: ComputeHCINetworkConfigTemplate: 'multiple_nics_vlans_dvr.j2'
次のステップ
7.4. HCI Compute ノード用のカスタム NIC heat テンプレート
以下は、HCI Compute ノードの NIC 設定が含まれる heat テンプレート例です。heat テンプレートの設定は、ネットワークを次のブリッジとインターフェイスにマッピングします。
Networks | ブリッジ | インターフェイス |
---|---|---|
コントロールプレーン、ストレージ、内部 API | 該当なし |
|
外部、テナント |
|
|
デプロイメントで次のテンプレートを使用するには、この例をワークステーションの custom_templates
ディレクトリーの multiple_nics_vlans_dvr.j2
にコピーします。ベアメタルノードの NIC 設定に合わせてこの設定を変更できます。
例
{% set mtu_list = [ctlplane_mtu] %} {% for network in role_networks %} {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }} {%- endfor %} {% set min_viable_mtu = mtu_list | max %} network_config: # BMH provisioning interface used for ctlplane - type: interface name: nic1 mtu: 1500 use_dhcp: false dns_servers: {{ ctlplane_dns_nameservers }} domain: {{ dns_search_domains }} addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} routes: {{ ctlplane_host_routes }} # Disable OCP cluster interface - type: interface name: nic2 mtu: 1500 use_dhcp: false {% for network in networks_all if network not in networks_skip_config|default([]) %} {% if network == 'External' %} - type: ovs_bridge name: {{ neutron_physical_bridge_name }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} dns_servers: {{ ctlplane_dns_nameservers }} use_dhcp: false {% if network in role_networks %} addresses: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} {% endif %} members: - type: interface name: nic3 mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} primary: true {% endif %} {% endfor %} - type: ovs_bridge name: br-tenant mtu: {{ min_viable_mtu }} use_dhcp: false members: - type: interface name: nic4 mtu: {{ min_viable_mtu }} use_dhcp: false primary: true {% for network in networks_all if network not in networks_skip_config|default([]) %} {% if network not in ["External"] and network in role_networks %} - type: vlan mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }} addresses: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} {% endif %} {% endfor %}
7.5. オーバークラウド設定へのカスタムテンプレートの追加
director Operator (OSPdO) は、各ノードで Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する準備が整うと、オーバークラウドヒートテンプレートのコアセットをプロビジョニングノードに適用する Ansible Playbook に変換します。独自のカスタム heat テンプレートおよびカスタムロールファイルをオーバークラウドデプロイメントに追加するには、テンプレートファイルを tarball ファイルにアーカイブし、tarball ファイルのバイナリーコンテンツを tripleo-tarball-config
という名前の OpenShift ConfigMap
に含める必要があります。この tarball ファイルには、テンプレートのコアセットを拡張するための複雑なディレクトリー構造を含めることができます。OSPdO は、tarball ファイルから、heat テンプレートのコアセットと同じディレクトリーにファイルとディレクトリーを展開します。カスタムテンプレートのいずれかがコアコレクションのテンプレートと名前が同じ場合には、カスタムテンプレートはコアテンプレートを上書きします。
環境ファイル内のすべての参照は、tarball が抽出される TripleO heat テンプレートに関連している必要があります。
前提条件
- プロビジョニングされたノードに適用するカスタムオーバークラウドテンプレート。
手順
カスタムテンプレートの場所に移動します。
$ cd ~/custom_templates
テンプレートを gzip 圧縮された tarball にアーカイブします。
$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
CR を作成し、tarball をデータとして使用します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
ConfigMap
CR が作成されたことを確認します。$ oc get configmap/tripleo-tarball-config -n openstack
次のステップ
7.6. director Operator でハイパーコンバージドインフラストラクチャー (HCI) ストレージを設定するためのカスタム環境ファイル
以下の例は、Compute HCI ノード用の Ceph Storage 設定が含まれる環境ファイルです。この設定により、OSD ノードを sdb
、sdc
、sdd
デバイスにマッピングし、is_hci
オプションで HCI を有効にします。
この設定は、ベアメタルノードのストレージ設定に合わせて変更できます。CephPoolDefaultPgNum
パラメーターの値を確認するには、Ceph Placement Groups (PG) per Pool Calculator を使用します。
デプロイメントでこのテンプレートを使用するには、サンプルの内容を、ワークステーションの custom_environment_files
ディレクトリーの compute-hci.yaml
にコピーします。
resource_registry: OS::TripleO::Services::CephMgr: deployment/cephadm/ceph-mgr.yaml OS::TripleO::Services::CephMon: deployment/cephadm/ceph-mon.yaml OS::TripleO::Services::CephOSD: deployment/cephadm/ceph-osd.yaml OS::TripleO::Services::CephClient: deployment/cephadm/ceph-client.yaml parameter_defaults: CephDynamicSpec: true CephSpecFqdn: true CephConfigOverrides: rgw_swift_enforce_content_length: true rgw_swift_versioning_enabled: true osd: osd_memory_target_autotune: true osd_numa_auto_affinity: true mgr: mgr/cephadm/autotune_memory_target_ratio: 0.2 CinderEnableIscsiBackend: false CinderEnableRbdBackend: true CinderBackupBackend: ceph CinderEnableNfsBackend: false NovaEnableRbdBackend: true GlanceBackend: rbd CinderRbdPoolName: "volumes" NovaRbdPoolName: "vms" GlanceRbdPoolName: "images" CephPoolDefaultPgNum: 32 CephPoolDefaultSize: 2
7.7. オーバークラウド設定へのカスタム環境ファイルの追加
オーバークラウドで機能を有効にしたりパラメーターを設定するには、オーバークラウドのデプロイメントに環境ファイルを含める必要があります。director Operator (OSPdO) は heat-env-config
という名前の ConfigMap
オブジェクトを使用して、環境ファイルを保存および取得します。ConfigMap
オブジェクトは、環境ファイルを次の形式で保存します。
... data: <environment_file_name>: |+ <environment_file_contents>
たとえば、次の ConfigMap
には 2 つの環境ファイルが含まれています。
... data: network_environment.yaml: |+ parameter_defaults: ComputeNetworkConfigTemplate: 'multiple_nics_vlans_dvr.j2' 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
ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap
オブジェクトにカスタム環境ファイルのセットをアップロードします。
前提条件
- オーバークラウドデプロイメント用のカスタム環境ファイル。
手順
heat-env-config ConfigMap
オブジェクトを作成します。$ oc create configmap -n openstack heat-env-config \ --from-file=~/<dir_custom_environment_files>/ \ --dry-run=client -o yaml | oc apply -f -
-
<dir_custom_environment_files>
をオーバークラウドのデプロイメントで使用する環境ファイルが含まれるディレクトリーに置き換えます。ConfigMap
オブジェクトは、これらを個別のdata
エントリーとして保存します。
-
heat-env-config ConfigMap
オブジェクトに必要な環境ファイルがすべて含まれていることを確認します。$ oc get configmap/<configmap_name> -n openstack
7.8. HCI Compute ノードの作成およびオーバークラウドのデプロイ
Compute ノードは Red Hat OpenStack Platform (RHOSP) 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後にCompute ノードの数をスケーリングできます。
OpenStackBaremetalSet
カスタムリソース (CR) を定義して、Red Hat OpenShift Container Platform (RHOCP) が管理するベアメタルマシンから Compute ノードを作成します。
OpenStackBareMetalSet
CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstackbaremetalset $ oc explain openstackbaremetalset.spec
前提条件
-
OpenStackNetConfig
CR を使用して、コントロールプレーンネットワークと追加の分離ネットワークを作成している。 -
OpenStackControlPlane
CRD を使用してコントロールプレーンを作成している。
手順
ワークステーションに
openstack-hcicompute.yaml
という名前のファイルを作成します。HCI Compute のリソース仕様を含めます。たとえば、3 つの HCI Compute ノードの仕様は次のとおりです。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBaremetalSet metadata: name: computehci 1 namespace: openstack 2 spec: 3 count: 3 baseImageUrl: http://<source_host>/rhel-9.2-x86_64-kvm.qcow2 deploymentSSHSecret: osp-controlplane-ssh-keys ctlplaneInterface: enp8s0 networks: - ctlplane - internal_api - tenant - storage - storage_mgmt roleName: ComputeHCI passwordSecret: userpassword 4
-
openstack-hcicompute.yaml
ファイルを保存します。 HCI Compute ノードを作成します。
$ oc create -f openstack-hcicompute.yaml -n openstack
HCI Compute ノードのリソースが作成されたことを確認します。
$ oc get openstackbaremetalset/computehci -n openstack
HCI Compute ノードの作成を確認するには、RHOCP が管理するベアメタルマシンを表示します。
$ oc get baremetalhosts -n openshift-machine-api
-
OpenStackConfigGenerator
CRD を使用して、オーバークラウド設定用の Ansible Playbook を作成します。詳細は、OpenStackConfigGenerator CRD を使用したオーバークラウド設定用の Ansible Playbook の作成 を参照してください。 - オーバークラウドのオペレーティングシステムを登録します。詳細は、オーバークラウドのオペレーティングシステムの登録 を参照してください。
- オーバークラウド設定を適用します。詳細は、director Operator を使用したオーバークラウド設定の適用 を参照してください。
第8章 外部 Red Hat Ceph Storage クラスターを使用した RHOSP のデプロイ (director Operator を使用)
director Operator (OSPdO) を使用して、外部の Red Hat Ceph Storage クラスターに接続するオーバークラウドをデプロイできます。
前提条件
- 外部 Red Hat Ceph Storage クラスターがあります。
- 稼働中の Red Hat OpenShift Container Platform (RHOCP) クラスターに OSPdO をインストールして準備している。詳細は、director Operator のインストールと準備 を参照してください。
-
OpenStackNetConfig
カスタムリソース定義 (CRD) を使用して、コントロールプレーンと分離されたネットワークを含むオーバークラウドネットワークを作成している。詳細は、director Operator を使用したネットワークの作成 を参照してください。 -
オーバークラウドのカスタム heat テンプレートおよび環境ファイルを保存するために
ConfigMap
を作成している。詳細は、director Operator を使用したオーバークラウドのカスタマイズ を参照してください。 - オーバークラウド用のコントロールプレーンとベアメタル Compute ノードを作成している。詳細は、director Operator を使用したオーバークラウドノードの作成 を参照してください。
-
オーバークラウド設定用の Ansible Playbook をレンダリングするための
openstackconfiggenerator
リソースを作成して適用している。
8.1. director Operator での Compute ロールのネットワークの設定
ワークステーション上にディレクトリーを作成してカスタムテンプレートと環境ファイルを保存し、Compute ロールの NIC テンプレートを設定します。
手順
カスタムテンプレートのディレクトリーを作成します。
$ mkdir custom_templates
-
custom_templates
ディレクトリーにmultiple_nics_vlans_dvr.j2
という名前のカスタムテンプレートファイルを作成します。 -
ベアメタル Compute ノードの NIC の設定を
multiple_nics_vlans_dvr.j2
ファイルに追加します。NIC 設定ファイルの例は、Compute ノード用のカスタム NIC heat テンプレート を参照してください。 カスタム環境ファイルのディレクトリーを作成します。
$ mkdir custom_environment_files
オーバークラウドロールの NIC テンプレートを、
custom_environment_files
ディレクトリーのnetwork-environment.yaml
環境ファイルにマップします。parameter_defaults: ComputeNetworkConfigTemplate: 'multiple_nics_vlans_dvr.j2'
8.2. Compute ノード用のカスタム NIC heat テンプレート
次の例は、外部 Red Hat Ceph Storage クラスターに接続するオーバークラウド内の Compute ベアメタルノードの NIC 設定を含む Heat テンプレートです。heat テンプレートの設定は、ネットワークを次のブリッジとインターフェイスにマッピングします。
Networks | ブリッジ | interface |
---|---|---|
コントロールプレーン、ストレージ、内部 API | 該当なし |
|
外部、テナント |
|
|
デプロイメントで次のテンプレートを使用するには、この例をワークステーションの custom_templates
ディレクトリーの multiple_nics_vlans_dvr.j2
にコピーします。ベアメタルノードの NIC 設定に合わせてこの設定を変更できます。
例
{% set mtu_list = [ctlplane_mtu] %} {% for network in role_networks %} {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }} {%- endfor %} {% set min_viable_mtu = mtu_list | max %} network_config: # BMH provisioning interface used for ctlplane - type: interface name: nic1 mtu: 1500 use_dhcp: false dns_servers: {{ ctlplane_dns_nameservers }} domain: {{ dns_search_domains }} addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} routes: {{ ctlplane_host_routes }} # Disable OCP cluster interface - type: interface name: nic2 mtu: 1500 use_dhcp: false {% for network in networks_all if network not in networks_skip_config|default([]) %} {% if network == 'External' %} - type: ovs_bridge name: {{ neutron_physical_bridge_name }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} dns_servers: {{ ctlplane_dns_nameservers }} use_dhcp: false {% if network in role_networks %} addresses: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} {% endif %} members: - type: interface name: nic3 mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} primary: true {% endif %} {% endfor %} - type: ovs_bridge name: br-tenant mtu: {{ min_viable_mtu }} use_dhcp: false members: - type: interface name: nic4 mtu: {{ min_viable_mtu }} use_dhcp: false primary: true {% for network in networks_all if network not in networks_skip_config|default([]) %} {% if network not in ["External"] and network in role_networks %} - type: vlan mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }} addresses: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} {% endif %} {% endfor %}
8.3. オーバークラウド設定へのカスタムテンプレートの追加
director Operator (OSPdO) は、各ノードで Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する準備が整うと、オーバークラウドヒートテンプレートのコアセットをプロビジョニングノードに適用する Ansible Playbook に変換します。独自のカスタム heat テンプレートおよびカスタムロールファイルをオーバークラウドデプロイメントに追加するには、テンプレートファイルを tarball ファイルにアーカイブし、tarball ファイルのバイナリーコンテンツを tripleo-tarball-config
という名前の OpenShift ConfigMap
に含める必要があります。この tarball ファイルには、テンプレートのコアセットを拡張するための複雑なディレクトリー構造を含めることができます。OSPdO は、tarball ファイルから、heat テンプレートのコアセットと同じディレクトリーにファイルとディレクトリーを展開します。カスタムテンプレートのいずれかがコアコレクションのテンプレートと名前が同じ場合には、カスタムテンプレートはコアテンプレートを上書きします。
環境ファイル内のすべての参照は、tarball が抽出される TripleO heat テンプレートに関連している必要があります。
前提条件
- プロビジョニングされたノードに適用するカスタムオーバークラウドテンプレート。
手順
カスタムテンプレートの場所に移動します。
$ cd ~/custom_templates
テンプレートを gzip 圧縮された tarball にアーカイブします。
$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
CR を作成し、tarball をデータとして使用します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
ConfigMap
CR が作成されたことを確認します。$ oc get configmap/tripleo-tarball-config -n openstack
次のステップ
8.4. director Operator で外部の Ceph Storage の使用状況を設定するためのカスタム環境ファイル
外部の Red Hat Ceph Storage クラスターと統合するには、次の例に示すようなパラメーターと値を持つ環境ファイルを含めます。この例では、オーバークラウドノードで CephExternal
サービスと CephClient
サービスを有効にし、さまざまな RHOSP サービスのプールを設定します。
この設定は、ストレージ設定に合わせて変更できます。
デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_environment_files
ディレクトリーの ceph-ansible-external.yaml
にコピーします。
resource_registry: OS::TripleO::Services::CephExternal: deployment/cephadm/ceph-client.yaml parameter_defaults: CephClusterFSID: '4b5c8c0a-ff60-454b-a1b4-9747aa737d19' 1 CephClientKey: 'AQDLOh1VgEp6FRAAFzT7Zw+Y9V6JJExQAsRnRQ==' 2 CephExternalMonHost: '172.16.1.7, 172.16.1.8' 3 ExternalCeph: true # the following parameters enable Ceph backends for Cinder, Glance, Gnocchi and Nova NovaEnableRbdBackend: true CinderEnableRbdBackend: true CinderBackupBackend: ceph GlanceBackend: rbd # Uncomment below if enabling legacy telemetry # GnocchiBackend: rbd # If the Ceph pools which host VMs, Volumes and Images do not match these # names OR the client keyring to use is not named 'openstack', edit the # following as needed. NovaRbdPoolName: vms CinderRbdPoolName: volumes CinderBackupRbdPoolName: backups GlanceRbdPoolName: images # Uncomment below if enabling legacy telemetry # GnocchiRbdPoolName: metrics CephClientUserName: openstack # finally we disable the Cinder LVM backend CinderEnableIscsiBackend: false
8.5. オーバークラウド設定へのカスタム環境ファイルの追加
オーバークラウドで機能を有効にしたりパラメーターを設定するには、オーバークラウドのデプロイメントに環境ファイルを含める必要があります。director Operator (OSPdO) は heat-env-config
という名前の ConfigMap
オブジェクトを使用して、環境ファイルを保存および取得します。ConfigMap
オブジェクトは、環境ファイルを次の形式で保存します。
... data: <environment_file_name>: |+ <environment_file_contents>
たとえば、次の ConfigMap
には 2 つの環境ファイルが含まれています。
... data: network_environment.yaml: |+ parameter_defaults: ComputeNetworkConfigTemplate: 'multiple_nics_vlans_dvr.j2' 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
ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap
オブジェクトにカスタム環境ファイルのセットをアップロードします。
前提条件
- オーバークラウドデプロイメント用のカスタム環境ファイル。
手順
heat-env-config ConfigMap
オブジェクトを作成します。$ oc create configmap -n openstack heat-env-config \ --from-file=~/<dir_custom_environment_files>/ \ --dry-run=client -o yaml | oc apply -f -
-
<dir_custom_environment_files>
をオーバークラウドのデプロイメントで使用する環境ファイルが含まれるディレクトリーに置き換えます。ConfigMap
オブジェクトは、これらを個別のdata
エントリーとして保存します。
-
heat-env-config ConfigMap
オブジェクトに必要な環境ファイルがすべて含まれていることを確認します。$ oc get configmap/<configmap_name> -n openstack
8.6. Compute ノードの作成およびオーバークラウドのデプロイ
Compute ノードは Red Hat OpenStack Platform (RHOSP) 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後にCompute ノードの数をスケーリングできます。
OpenStackBaremetalSet
カスタムリソース (CR) を定義して、Red Hat OpenShift Container Platform (RHOCP) が管理するベアメタルマシンから Compute ノードを作成します。
OpenStackBareMetalSet
CRD 定義と仕様スキーマを表示するには、次のコマンドを使用します。
$ oc describe crd openstackbaremetalset $ oc explain openstackbaremetalset.spec
前提条件
-
OpenStackNetConfig
CR を使用して、コントロールプレーンネットワークと追加の分離ネットワークを作成している。 -
OpenStackControlPlane
CRD を使用してコントロールプレーンを作成している。
手順
-
OpenStackBaremetalSet
CRD を使用して Compute ノードを作成します。詳細は、OpenStackBaremetalSet CRD を使用した Compute ノードの作成を 参照してください。 -
OpenStackConfigGenerator
CRD を使用して、オーバークラウド設定用の Ansible Playbook を作成します。詳細は、OpenStackConfigGenerator CRD を使用したオーバークラウド設定用の Ansible Playbook の作成 を参照してください。 - オーバークラウドのオペレーティングシステムを登録します。詳細は、オーバークラウドのオペレーティングシステムの登録 を参照してください。
- オーバークラウド設定を適用します。詳細は、director Operator を使用したオーバークラウド設定の適用 を参照してください。
第9章 director Operator を使用してデプロイされたオーバークラウドへのアクセス
director Operator (OSPdO) を使用してオーバークラウドをデプロイした後に、openstack
クライアントツールを使用してそのオーバークラウドにアクセスし、コマンドを実行できます。オーバークラウドの主なアクセスポイントは、作成した OpenStackControlPlane
リソースの一部として OSPdO がデプロイする OpenStackClient
Pod を経由します。
9.1. OpenStackClient Pod へのアクセス
OpenStackClient
Pod は、オーバークラウドに対してコマンドを実行する主なアクセスポイントです。この Pod には、オーバークラウドに対してアクションを実行するのに必要なクライアントツールおよび認証情報が含まれます。ワークステーションから Pod にアクセスするには、ワークステーションで oc
コマンドを使用して、Pod のリモートシェルに接続する必要があります。
director Operator (OSPdO) なしでデプロイするオーバークラウドにアクセスする場合には、通常、source ~/overcloudrc
コマンドを実行して、オーバークラウドにアクセスする環境変数を設定します。この手順は、OSPdO を使用してデプロイするオーバークラウドでは、必要ありません。
手順
openstackclient
のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclient
cloud-admin
ホームディレクトリーに移動します。$ cd /home/cloud-admin
openstack
コマンドを実行します。たとえば、以下のコマンドを使用してdefault
ネットワークを作成できます。$ openstack network create default
9.2. オーバークラウドのダッシュボードへのアクセス
Director Operator (OSPdO) でデプロイしたオーバークラウドのダッシュボードには、標準のオーバークラウドと同じ方法 (Web ブラウザーを使用してコントロールプレーンによって予約された仮想 IP アドレスにアクセス) を使用してアクセスします。
手順
オプション:
admin
ユーザーとしてログインするには、tripleo-passwords
シークレットにあるAdminPassword
パラメーターから admin パスワードを取得します。$ oc get secret tripleo-passwords -o jsonpath='{.data.tripleo-overcloud-passwords\.yaml}' | base64 -d
OpenStackNetConfig
CR からコントロールプレーン用に予約されている IP アドレスを取得します。spec: ... reservations: 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
- Web ブラウザーを開きます。
- URL フィールドにコントロールプレーンの IP アドレスを入力します。
- ユーザー名とパスワードを使用して Dashboard にログインします。
第10章 director Operator を使用した Compute ノードのスケーリング
必要なオーバークラウドのコンピュートリソース数が多い場合も少ない場合も、要件に応じて Compute ノード数をスケーリングできます。
10.1. director Operator を使用したオーバークラウドの Compute ノードの追加
Compute ノードにさらにオーバークラウドを追加するには、compute
OpenStackBaremetalSet
リソースのノード数を増やす必要があります。新しいノードがプロビジョニングされると、新しい OpenStackConfigGenerator
リソースを作成して Ansible Playbook の新しいセットを生成し、次に OpenStackConfigVersion
を使用して OpenStackDeploy
オブジェクトを作成または更新し、Ansible 設定をオーバークラウドに再適用します。
手順
openshift-machine-api
namespace の準備ができている状態にあるホストが十分に存在することを確認します。$ oc get baremetalhosts -n openshift-machine-api
ベアメタルホストの管理の詳細は、ベアメタルホストの管理 を参照してください。
I
compute
OpenStackBaremetalSet
リソースのcount
パラメーターの値を増やします。$ oc patch openstackbaremetalset compute --type=merge --patch '{"spec":{"count":3}}' -n openstack
OpenStackBaremetalSet
リソースは、Red Hat Enterprise Linux のベースオペレーティングシステムで新規ノードを自動的にプロビジョニングします。プロビジョニングプロセスが完了するまで待ちます。ノードを定期的にチェックし、ノードの readiness を判別します。
$ oc get baremetalhosts -n openshift-machine-api $ oc get openstackbaremetalset
-
OpenStackConfigGenerator
を使用して Ansible Playbook を生成し、オーバークラウド設定を適用します。詳細は、director Operator を使用したオーバークラウドの設定とデプロイ を参照してください。
関連情報
10.2. director Operator を使用したオーバークラウドからの Compute ノードの削除
オーバークラウドからCompute ノードを削除するには、Compute ノードを無効にして削除のマークを付け、Compute
OpenStackBaremetalSet
リソースのノード数を減らす必要があります。
同じロールの新規ノードでオーバークラウドをスケーリングする場合に、ノードが一番小さい数値の ID 接尾辞で始まるホスト名と、対応の IP 予約を再利用する。
前提条件
- Compute ノードのワークロードは、他の Compute ノードに移行されました。詳細は、コンピュートノード間の仮想マシンインスタンスの移行 を参照してください。
手順
openstackclient
のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclient
削除する Compute ノードを特定します。
$ openstack compute service list
ノード上の Compute サービスを無効にして、ノードが新しいインスタンスをスケジュールできないようにします。
$ openstack compute service set <hostname> nova-compute --disable
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 の名前に置き換えます。
-
root
ユーザーとしてコンピュートノードにログインし、ベアメタルノードをシャットダウンします。[root@compute-0 ~]# shutdown -h now
コンピュートノードにアクセスできない場合は、次の手順を実行します。
-
コントローラーノードに
root
ユーザーとしてログインします。 インスタンス HA が有効になっている場合は、コンピュートノードの STONITH デバイスを無効にします。
[root@controller-0 ~]# pcs stonith disable <stonith_resource_name>
-
<stonith_resource_name>
は、ノードに対応する STONITH リソースの名前に置き換えます。リソース名には<resource_agent>-<host_mac>
形式が使用されます。リソースエージェントおよびホストの MAC アドレスは、fencing.yaml
ファイルのFencingConfig
セクションに記載されています。
-
- IPMI を使用してベアメタルノードの電源をオフにします。詳細は、ハードウェアベンダーのドキュメントを参照してください。
-
コントローラーノードに
削除するノードに対応する
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"
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
オプション:
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" } }
compute OpenStackBaremetalSet
リソースのcount
パラメーターの値を増やします。$ oc patch openstackbaremetalset compute --type=merge --patch '{"spec":{"count":1}}' -n openstack
OpenStackBaremetalSet
リソースのリソース数を減らすと、対応するコントローラーがリソースの削除を処理するようトリガーされ、以下のアクションが発生します。-
director Operator は、削除されたノードの対応する IP 予約を
OpenStackIPSet
およびOpenStackNetConfig
から削除します。 director Operator は、
OpenStackNet
リソースの IP 予約エントリーを削除済みとしてフラグします。$ oc get osnet ctlplane -o json -n openstack | jq .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" }
-
director Operator は、削除されたノードの対応する IP 予約を
-
オプション: 削除された
OpenStackBaremetalSet
リソースの IP 予約を他のロールが使用できるようにするには、OpenStackNetConfig
オブジェクトでspec.preserveservations
パラメーターの値を false に設定します。 openstackclient
のリモートシェルにアクセスします。$ oc rsh openstackclient -n openstack
オーバークラウドから Compute サービスエントリーを削除します。
$ openstack compute service list $ openstack compute service delete <service-id>
オーバークラウドの 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
openstackclient
を終了します。$ exit
第11章 director Operator を使用した RHOSP オーバークラウドのマイナー更新の実行
openstackclient
Pod を更新した後、オーバークラウドとコンテナーイメージの準備デプロイメントを実行し、ノードを更新し、オーバークラウド更新収束デプロイメントを実行して、オーバークラウドを更新します。マイナー更新中は、コントロールプレーン API が利用可能です。
Red Hat OpenStack Platform (RHOSP)環境のマイナー更新には、オーバークラウドノードの RPM パッケージとコンテナーの更新が含まれます。一部のサービスの設定を更新する必要がある場合もあります。データプレーンとコントロールプレーンは、マイナー更新中に完全に利用可能になります。RHOSP 環境を更新するには、次の各手順を完了する必要があります。
- マイナー更新用に RHOSP 環境を準備します。
-
オプション:
ovn-controller
コンテナーを更新します。 - Pacemaker サービスが含まれるコントローラーノードとコンポーザブルノードを更新します。
- コンピュートノードを更新します。
- Red Hat Ceph Storage ノードを更新します。
- Red Hat Ceph Storage クラスターを更新します。
- オーバークラウドノードを再起動します。
前提条件
- RHOSP デプロイメントのバックアップがある。詳細は、director Operator がデプロイしたオーバークラウドのバックアップと復元 を 参照してください。
11.1. マイナー更新用の director オペレーターの準備
director Operator (OSPdO)を使用したマイナー更新を実行するために Red Hat OpenStack Platform (RHOSP)環境を準備するには、次のタスクを実行します。
- RHOSP 環境を Red Hat Enterprise Linux (RHEL)リリースにロックします。
- RHOSP リポジトリーを更新します。
- コンテナーイメージ準備ファイルを更新します。
- オーバークラウドでフェンシングを無効にします。
11.1.1. RHOSP 環境の RHEL リリースへのロック
Red Hat OpenStack Platform (RHOSP) 17.1 は Red Hat Enterprise Linux 9.2 (RHEL) でサポートされています。更新を実行する前に、オーバークラウドのリポジトリーを RHEL 8.4 リリースにロックして、オペレーティングシステムが新しいマイナーリリースにアップグレードされないようにします。
手順
オーバークラウドのサブスクリプション管理用環境ファイル
rhsm.yaml
をopenstackclient
にコピーします。$ oc cp rhsm.yaml openstackclient:/home/cloud-admin/rhsm.yaml
openstackclient
Pod のリモートシェルにアクセスします。$ oc rsh openstackclient
rhsm.yaml
ファイルを開き、Subscription Management 設定にrhsm_release
パラメーターが含まれているかどうかを確認します。rhsm_release パラメーターが存在しない場合は、追加して 9.2 に設定します。parameter_defaults: RhsmVars: … rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567" rhsm_pool_ids: "1a85f9223e3d5e43013e3d6e8ff506fd" rhsm_method: "portal" rhsm_release: "9.2"
-
rhsm.yaml
ファイルを保存します。 すべてのノードでオペレーティングシステムのバージョンを RHEL 9.2 にロックするタスクを含む、
set_release.yaml
という名前の Playbook を作成します。- hosts: all gather_facts: false tasks: - name: set release to 9.2 command: subscription-manager release --set=9.2 become: true
openstackclient
Pod でset_release.yaml
Playbook を実行します。$ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/set_release.yaml --limit Controller,Compute
--limit
オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。これらのノードには別のサブスクリプションがある可能性があるため、Ceph Storage ノードに対してこの Playbook を実行しないでください。注記手動でノードを特定のバージョンにロックするには、ノードにログインして
subscription-manager release
コマンドを実行します。$ sudo subscription-manager release --set=9.2
openstackclient
Pod のリモートシェルを終了します。$ exit
11.1.2. RHOSP リポジトリーの更新
Red Hat OpenStack Platform (RHOSP) 17.1 を使用するようにリポジトリーを更新します。
手順
rhsm.yaml
ファイルを開き、rhsm_repos
パラメーターを正しいリポジトリーバージョンに更新します。parameter_defaults: RhsmVars: rhsm_repos: - rhel-9-for-x86_64-baseos-eus-rpms - rhel-9-for-x86_64-appstream-eus-rpms - rhel-9-for-x86_64-highavailability-eus-rpms - openstack-17.1-for-rhel-9-x86_64-rpms - fast-datapath-for-rhel-9-x86_64-rpms
-
rhsm.yaml
ファイルを保存します。 openstackclient
Pod のリモートシェルにアクセスします。$ oc rsh openstackclient
すべてのノードで、リポジトリーを
RHOSP 17
.1 に設定するタスクが含まれるupdate_rhosp_repos.yaml
という名前の Playbook を作成します。- hosts: all gather_facts: false tasks: - name: change osp repos command: subscription-manager repos --enable=openstack-17.1-for-rhel-9-x86_64-rpms become: true
openstackclient
Pod で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 ノードに対して実行しないでください。すべての Red Hat Ceph Storage ノードでリポジトリーを
RHOSP 17
.1 に設定するタスクを含む、update_ceph_repos.yaml
という名前の Playbook を作成します。- hosts: all gather_facts: false tasks: - name: change ceph repos command: subscription-manager repos --enable=openstack-17.1-deployment-tools-for-rhel-9-x86_64-rpms become: true
openstackclient
Pod で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 ノードに適用します。openstackclient
Pod のリモートシェルを終了します。$ exit
11.1.3. コンテナーイメージ準備ファイルの更新
コンテナー準備ファイルは、ContainerImagePrepare
パラメーターが含まれるファイルです。このファイルを使用して、オーバークラウドのコンテナーイメージを取得するためのルールを定義します。
環境を更新する前に、ファイルを確認して正しいイメージバージョンを取得するようにしてください。
手順
-
コンテナー準備ファイルを編集します。このファイルのデフォルト名は
containers-prepare-parameter.yaml
です。 それぞれのルールセットについて、
tag
パラメーターが16.2
に設定されていることを確認します。parameter_defaults: ContainerImagePrepare: - push_destination: false set: ... tag: '17.1' tag_from_label: '{version}-{release}'
注記更新に特定のタグ (
17.1
や17.1.1
など) を使用しない場合は、tag
キーと値のペアを削除し、tag_from_label
のみを指定します。tag_from_label
タグは、インストールされた Red Hat OpenStack Platform (RHOSP)バージョンを使用して、更新プロセスの一部として使用するタグの値を判別します。-
containers-prepare-parameter.yaml
ファイルを保存します。
11.1.4. オーバークラウドでのフェンシングの無効化
オーバークラウドを更新する前に、フェンシングが無効になっていることを確認します。
コントローラーノードの更新プロセス中にフェンシングが環境にデプロイされると、オーバークラウドは特定ノードが無効であることを検出し、フェンシング操作を試みる場合があります。これにより、意図しない結果が生じる可能性があります。
オーバークラウドでフェンシングを有効にした場合、更新中はフェンシングを一時的に無効にする必要があります。
手順
openstackclient
Pod のリモートシェルにアクセスします。$ oc rsh openstackclient
コントローラーノードにログインし、Pacemaker コマンドを実行してフェンシングを無効にします。
$ ssh <controller-0.ctlplane> "sudo pcs property set stonith-enabled=false"
-
<controller-0.ctlplane>
をコントローラーノードの名前に置き換えます。
-
openstackclient
Pod のリモートシェルを終了します。$ exit
11.2. director Operator のオーバークラウド更新準備の実行
更新プロセスのためにオーバークラウドを準備するには、更新準備設定を生成します。これにより、更新された ansible Playbook が作成され、ノードが更新のために準備されます。
手順
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 enableFencing: false heatEnvs: - lifecycle/update-prepare.yaml heatEnvConfigMap: heat-env-config-update tarballConfigMap: tripleo-tarball-config-update EOF
設定を適用します。
$ oc apply -f osconfiggenerator-update-prepare.yaml
- 更新の準備プロセスが完了するまで待ちます。
11.3. すべてのオーバークラウドサーバーでの ovn-controller コンテナーの更新
Modular Layer 2 Open Virtual Network メカニズムドライバー(ML2/OVN)を使用してオーバークラウドをデプロイした場合は、ovn-controller
コンテナーを最新の Red Hat OpenStack Platform (RHOSP) 17.1 バージョンに更新します。更新は、ovn-controller
コンテナーを実行するすべてのオーバークラウドサーバーで行われます。
次の手順では、コントローラーノードの ovn-northd
サービスを更新する前に、コンピュートノード上の ovn-controller
コンテナーを更新します。この手順を実行する前に誤って ovn-northd
サービスを更新した場合、仮想マシンインスタンスにアクセスしたり、新しいインスタンスや仮想ネットワークを作成したりできない可能性があります。次の手順で接続を復元します。
手順
osdeploy-ovn-update.yaml
という名前のOpenStackDeploy
カスタムリソース(CR)を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: ovn-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: tags: - ovn
更新された設定を適用します。
$ oc apply -f osdeploy-ovn-update.yaml
-
ovn-controller
コンテナーの更新が完了するまで待ちます。
11.4. すべてのコントローラーノードの更新
すべてのコントローラーノードを最新の Red Hat OpenStack Platform (RHOSP) 17.0 バージョンに更新します。
手順
osdeploy-controller-update.yaml
という名前のOpenStackDeploy
カスタムリソース(CR)を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: controller-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: Controller
更新された設定を適用します。
$ oc apply -f osdeploy-controller-update.yaml
- コントローラーノードの更新が完了するまで待ちます。
11.5. すべてのコンピュートノードの更新
すべてのコンピュートノードを最新の Red Hat OpenStack Platform (RHOSP) 17.0 バージョンに更新します。コンピュートノードを更新するには、limit: Compute
オプションを指定して、OpenStackDeploy
カスタムリソース(CR)を作成し、操作をコンピュートノードのみに制限します。
手順
osdeploy-compute-update.yaml
という名前のOpenStackDeploy
CR を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: compute-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: Compute
更新された設定を適用します。
$ oc apply -f osdeploy-compute-update.yaml
- コンピュートノードの更新が完了するまで待ちます。
11.6. 全 HCI コンピュートノードの更新
ハイパーコンバージドインフラストラクチャー (HCI) コンピュートノードを最新の Red Hat OpenStack Platform (RHOSP) 17.0 バージョンに更新します。HCI コンピュートノードを更新するには、limit: ComputeHCI
オプションを指定して OpenStackDeploy
カスタムリソース(CR)を作成し、操作を HCI ノードのみに制限します。また、コンテナー化された Red Hat Ceph Storage 4 クラスターへの更新を実行するには、mode: external-update
および tags: ["ceph"]
オプションを使用して OpenStackDeploy
CR を作成する必要もあります。
手順
osdeploy-computehci-update.yaml
という名前のOpenStackDeploy
CR を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: computehci-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: ComputeHCI
更新された設定を適用します。
$ oc apply -f osdeploy-computehci-update.yaml
- ComputeHCI ノードの更新が完了するまで待ちます。
osdeploy-ceph-update.yaml
という名前のOpenStackDeploy
CR を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: ceph-update spec: configVersion: <config_version> configGenerator: update mode: external-update advancedSettings: tags: - ceph
更新された設定を適用します。
$ oc apply -f osdeploy-ceph-update.yaml
- Red Hat Ceph Storage ノードの更新が完了するまで待ちます。
11.7. すべての Red Hat Ceph Storage ノードの更新
Red Hat Ceph Storage ノードを最新の Red Hat OpenStack Platform (RHOSP) 17.0 バージョンに更新します。
RHOSP 17.1 は RHEL 9.2 でサポートされています。ただし、Ceph Storage ロールにマップされているホストは、最新のメジャー RHEL リリースに更新されます。詳細は、Red Hat Ceph Storage: サポートされる設定 を参照してください。
手順
osdeploy-cephstorage-update.yaml
という名前のOpenStackDeploy
カスタムリソース(CR)を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: cephstorage-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: CephStorage
更新された設定を適用します。
$ oc apply -f osdeploy-cephstorage-update.yaml
- Red Hat Ceph Storage ノードの更新が完了するまで待ちます。
osdeploy-ceph-update.yaml
という名前のOpenStackDeploy
CR を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: ceph-update spec: configVersion: <config_version> configGenerator: update mode: external-update advancedSettings: tags: - ceph
更新された設定を適用します。
$ oc apply -f osdeploy-ceph-update.yaml
- Red Hat Ceph Storage ノードの更新が完了するまで待ちます。
11.8. Red Hat Ceph Storage クラスターの更新
cephadm
Orchestrator を使用して、director でデプロイされた Red Hat Ceph Storage クラスターを、Red Hat OpenStack Platform (RHOSP) 17.1 と互換性のある最新バージョンに更新します。
手順
openstackclient
Pod のリモートシェルにアクセスします。$ oc rsh openstackclient
コントローラーノードにログインします。
$ ssh <controller-0.ctlplane>
-
<controller-0.ctlplane>
をコントローラーノードの名前に置き換えます。
-
cephadm
シェルにログインします。[cloud-admin@controller-0 ~]$ sudo cephadm shell
-
cephadm
を使用して Red Hat Ceph Storage クラスターをアップグレードします。詳細は、Red Hat Ceph Storage 5 アップグレードガイド の cephadm を使用して Red Hat Ceph Storage クラスターをアップグレードする を参照してください。 openstackclient
Pod のリモートシェルを終了します。$ exit
11.9. データベースのオンライン更新の実施
一部のオーバークラウドコンポーネントでは、データベーステーブルのオンライン更新 (または移行) が必要です。データベースのオンライン更新は、次のコンポーネントに適用されます。
- Block Storage サービス (cinder)
- Compute サービス(nova)
手順
osdeploy-online-migration.yaml
という名前のOpenStackDeploy
カスタムリソース(CR)を作成します。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
更新された設定を適用します。
$ oc apply -f osdeploy-online-migration.yaml
11.10. オーバークラウドでのフェンシングの再有効化
最新の Red Hat OpenStack Platform (RHOSP) 17.1 に更新するには、オーバークラウドでフェンシングを再度有効にする必要があります。
手順
openstackclient
Pod のリモートシェルにアクセスします。$ oc rsh openstackclient
コントローラーノードにログインし、Pacemaker コマンドを実行してフェンシングを再度有効にします。
$ ssh <controller-0.ctlplane> "sudo pcs property set stonith-enabled=true"
-
<controller-0.ctlplane>
をコントローラーノードの名前に置き換えます。
-
openstackclient
Pod のリモートシェルを終了します。$ exit
11.11. オーバークラウドの再起動
最新の 17.1 バージョンへの Red Hat Open Stack Platform (RHOSP) のマイナー更新実行後、オーバークラウドを再起動します。リブートにより、関連付けられたカーネル、システムレベル、およびコンテナーコンポーネントの更新と共にノードがリフレッシュされます。これらの更新により、パフォーマンスとセキュリティー上のメリットが得られます。ダウンタイムを計画して、再起動手順を実施します。
以下のガイドを使用して、さまざまなノードのタイプを再起動する方法を説明します。
- 1 つのロールで全ノードを再起動する場合は、各ノードを個別に再起動します。ロールの全ノードを同時に再起動すると、その操作中サービスにダウンタイムが生じる場合があります。
次の順序でノードの再起動の手順を完了します。
11.11.1. コントローラーノードおよびコンポーザブルノードの再起動
設定可能なロールに基づいてコントローラーノードとスタンドアロンノードを再起動し、コンピュートノードと Ceph ストレージノードを除外します。
手順
- リブートするノードにログインします。
オプション: ノードが Pacemaker リソースを使用している場合は、クラスターを停止します。
[tripleo-admin@overcloud-controller-0 ~]$ sudo pcs cluster stop
ノードをリブートします。
[tripleo-admin@overcloud-controller-0 ~]$ sudo reboot
- ノードがブートするまで待ちます。
検証
サービスが有効になっていることを確認します。
ノードが Pacemaker サービスを使用している場合は、ノードがクラスターに再度加わったか確認します。
[tripleo-admin@overcloud-controller-0 ~]$ sudo pcs status
ノードが Systemd サービスを使用している場合は、すべてのサービスが有効化されていることを確認します。
[tripleo-admin@overcloud-controller-0 ~]$ sudo systemctl status
ノードがコンテナー化されたサービスを使用している場合は、ノード上の全コンテナーがアクティブであることを確認します。
[tripleo-admin@overcloud-controller-0 ~]$ sudo podman ps
11.11.2. Ceph Storage (OSD) クラスターの再起動
Ceph Storage (OSD) ノードのクラスターを再起動するには、以下の手順を実施します。
前提条件
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードで、Red Hat Ceph Storage クラスターのステータスが正常であり、pg ステータスがactive+clean
であることを確認する。$ sudo cephadm -- shell ceph status
Ceph クラスターが正常な場合、
HEALTH_OK
のステータスが返されます。Ceph クラスターのステータスが異常な場合、
HEALTH_WARN
またはHEALTH_ERR
のステータスが返されます。トラブルシューティングのガイダンスは、Red Hat Ceph Storage 5 トラブルシューティングガイド または Red Hat Ceph Storage 6 トラブルシューティングガイド を参照してください。
手順
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードにログインし、Ceph Storage クラスターのリバランスを一時的に無効にします。$ sudo cephadm shell -- ceph osd set noout $ sudo cephadm shell -- ceph osd set norebalance
注記マルチスタックまたは分散コンピュートノード (DCN) アーキテクチャーを使用している場合は、
noout
フラグとnorebalance
フラグの設定時に Ceph クラスター名を指定する必要があります。例:sudo cephadm shell -c /etc/ceph/<cluster>.conf -k /etc/ceph/<cluster>.client.keyring
。- 再起動する最初の Ceph Storage ノードを選択し、そのノードにログインします。
ノードをリブートします。
$ sudo reboot
- ノードがブートするまで待ちます。
ノードにログインし、Ceph クラスターのステータスを確認します。
$ sudo cephadm -- shell ceph status
pgmap
により、すべてのpgs
が正常な状態 (active+clean
) として報告されることを確認します。- ノードからログアウトして、次のノードを再起動し、ステータスを確認します。全 Ceph Storage ノードが再起動されるまで、このプロセスを繰り返します。
完了したら、
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードにログインし、クラスターのリバランスを有効にします。$ sudo cephadm shell -- ceph osd unset noout $ sudo cephadm shell -- ceph osd unset norebalance
注記マルチスタックまたは分散コンピュートノード (DCN) アーキテクチャーを使用している場合は、
noout
フラグとnorebalance
フラグの設定解除時に Ceph クラスター名を指定する必要があります。例:sudo cephadm shell -c /etc/ceph/<cluster>.conf -k /etc/ceph/<cluster>.client.keyring
。最終のステータスチェックを実行して、クラスターが
HEALTH_OK
を報告していることを確認します。$ sudo cephadm shell ceph status
11.11.3. コンピュートノードの再起動
Red Hat Open Stack Platform 環境でのインスタンスのダウンタイムを最小限に抑えるために、インスタンスの移行ワークフローでは、再起動するコンピュートノードからインスタンスを移行する時に必要な手順を概説します。
インスタンスの移行ワークフロー
- コンピュートノードを再起動する前に、インスタンスを別のノードに移行するか決定します。
- 再起動するコンピュートノードを選択して無効にし、新規インスタンスをプロビジョニングしないようにします。
- インスタンスを別のコンピュートノードに移行します。
- 空のコンピュートノードを再起動します。
- 空のコンピュートノードを有効にします。
前提条件
コンピュートノードを再起動する前に、ノードの再起動中にインスタンスを別のコンピュートノードに移行するか決定する。
コンピュートノード間で仮想マシンインスタンスを移行する際に発生する可能性のある移行の制約リストを確認する。詳細は、インスタンス作成のための Compute サービスの設定 の 移行の制約 を参照してください。
注記Multi-RHEL 環境があり、RHEL 9.2 を実行しているコンピュートノードから RHEL 8.4 を実行しているコンピュートノードに仮想マシンを移行する場合は、コールドマイグレーションのみがサポートされます。コールドマイグレーションの詳細は、インスタンス作成のための Compute サービスの設定 の インスタンスのコールドマイグレーション を参照してください。
インスタンスを移行できない場合は、以下のコアテンプレートパラメーターを設定して、コンピュートノード再起動後のインスタンスの状態を制御する。
NovaResumeGuestsStateOnHostBoot
-
リブート後のコンピュートノードで、インスタンスを同じ状態に戻すか定義します。
False
に設定すると、インスタンスは停止した状態を維持し、手動で起動する必要があります。デフォルト値はFalse
です。 NovaResumeGuestsShutdownTimeout
再起動する前に、インスタンスのシャットダウンを待つ秒数。この値を
0
に設定することは推奨されません。デフォルト値は300
です。オーバークラウドパラメーターおよびその使用方法の詳細は、オーバークラウドのパラメーター を参照してください。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 コンピュートノードのリストを取得して、再起動するノードのホスト名を特定します。
(undercloud)$ source ~/overcloudrc (overcloud)$ openstack compute service list
再起動するコンピュートノードのホスト名を特定します。
再起動するコンピュートノードで Compute サービスを無効にします。
(overcloud)$ openstack compute service list (overcloud)$ openstack compute service set <hostname> nova-compute --disable
-
<hostname>
は、コンピュートノードのホスト名に置き換えます。
-
コンピュートノード上の全インスタンスをリスト表示します。
(overcloud)$ openstack server list --host <hostname> --all-projects
オプション: インスタンスを別のコンピュートノードに移行するには、次の手順を実行します。
インスタンスを別のコンピュートノードに移行する場合は、以下のコマンドのいずれかを使用します。
インスタンスを別のホストに移行するには、次のコマンドを実行します。
(overcloud) $ openstack server migrate <instance_id> --live <target_host> --wait
-
<instance_id>
は、インスタンス ID に置き換えます。 -
<target_host>
は、インスタンスの移行先のホストに置き換えます。
-
nova-scheduler
がターゲットホストを自動的に選択できるようにします。(overcloud) $ nova live-migration <instance_id>
すべてのインスタンスを一度にライブマイグレーションします。
$ nova host-evacuate-live <hostname>
注記nova
コマンドで非推奨の警告が表示される可能性がありますが、無視しても問題ありません。
- 移行が完了するまで待ちます。
移行が正常に完了したことを確認します。
(overcloud) $ openstack server list --host <hostname> --all-projects
- コンピュートノードのインスタンスがなくなるまで、移行を続けます。
コンピュートノードにログインして、ノードをリブートします。
[tripleo-admin@overcloud-compute-0 ~]$ sudo reboot
- ノードがブートするまで待ちます。
コンピュートノードを再度有効にします。
$ source ~/overcloudrc (overcloud) $ openstack compute service set <hostname> nova-compute --enable
コンピュートノードが有効であることを確認します。
(overcloud) $ openstack compute service list
11.11.4. オーバークラウドの更新後の RHOSP の検証
Red Hat OpenStack Platform (RHOSP) 環境を更新した後、tripleo-validations
Playbook を使用してオーバークラウドを検証します。
検証の詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 の 検証フレームワークの使用 を参照してください。
手順
-
アンダークラウドホストに
stack
ユーザーとしてログインします。 stackrc
アンダークラウド認証情報ファイルを入手します。$ source ~/stackrc
検証を実行します。
$ validation run -i ~/overcloud-deploy/<stack>/tripleo-ansible-inventory.yaml --group post-update
- <stack> をスタックの名前に置き換えます。
検証
- 検証レポートの結果を表示するには、director を使用した Red Hat OpenStack Platform のインストールと管理 の 検証履歴の表示 を参照してください。
No host matched
(唯一返されるエラー) と報告する FAILED
の検証を無視します。このエラーは、検証ホストグループに一致するホストがないことを意味しますが、これは予期されることです。検証が FAILED
であっても、更新された RHOSP 環境を使用できないことはありません。ただし、検証が FAILED
の場合は、環境に問題があることを示している可能性があります。
第12章 director Operator を使用してパブリックエンドポイントに TLS をデプロイする
TLS を使用してオーバークラウドをデプロイし、director Operator (OSPdO) のパブリックエンドポイント IP または DNS 名を作成します。
前提条件
- 稼働中の Red Hat OpenShift Container Platform (RHOCP) クラスターに OSPdO をインストールしている。
-
ワークステーションに
oc
コマンドラインツールをインストールしている。 - 認証局、キー、および証明書を作成している。詳細は、オーバークラウドのパブリックエンドポイントでの SSL/TLS の有効化 を参照してください。
12.1. パブリックエンドポイント IP アドレスの TLS
パブリックエンドポイント IP アドレスを参照するには、CA 証明書を保存する ConfigMap
リソースを作成し、OpenStackControlPlane
リソースでその ConfigMap
リソースを参照することにより、CA 証明書を openstackclient
Pod に追加します。
手順
CA 証明書を保存するための
ConfigMap
リソースを作成します。apiVersion: v1 kind: ConfigMap metadata: name: cacerts namespace: openstack data: local_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE----- another_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE-----
OpenStackControlPlane
リソースを作成し、ConfigMap
リソースを参照します。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: <overcloud> namespace: openstack spec: caConfigMap: cacerts
-
<overcloud>
をオーバークラウドのコントロールプレーンの名前に置き換えます。
-
-
~/custom_environment_files
ディレクトリーにtls-certs.yaml
という名前のファイルを作成します。このファイルは、SSLCertificate
、SSLIntermediateCertificate
、SSLKey
、およびCAMap
パラメーターを使用して、デプロイメント用に生成された証明書を指定します。 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 -
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
-
OpenStackConfigGenerator
を使用して Ansible Playbook を生成し、オーバークラウド設定を適用します。詳細は、director Operator を使用したオーバークラウドの設定とデプロイ を参照してください。
12.2. パブリックエンドポイント DNS 名の TLS
パブリックエンドポイント DNS 名を参照するには、CA 証明書を保存する ConfigMap
リソースを作成し、OpenStackControlPlane
リソースでその ConfigMap
リソースを参照することにより、CA 証明書を openstackclient
Pod に追加します。
手順
CA 証明書を保存するための
ConfigMap
リソースを作成します。apiVersion: v1 kind: ConfigMap metadata: name: cacerts namespace: openstack data: local_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE----- another_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE-----
OpenStackControlPlane
リソースを作成し、ConfigMap
リソースを参照します。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: <overcloud> namespace: openstack spec: caConfigMap: cacerts
-
<overcloud>
をオーバークラウドのコントロールプレーンの名前に置き換えます。
-
-
~/custom_environment_files
ディレクトリーにtls-certs.yaml
という名前のファイルを作成します。このファイルは、SSLCertificate
、SSLIntermediateCertificate
、SSLKey
、およびCAMap
パラメーターを使用して、デプロイメント用に生成された証明書を指定します。 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 -
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
-
OpenStackConfigGenerator
を使用して Ansible Playbook を生成し、オーバークラウド設定を適用します。詳細は、director Operator を使用したオーバークラウドの設定とデプロイ を参照してください。
第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) 環境で使用されるオーバークラウドのサービスアカウントパスワードをローテーションできます。
手順
現在の
Tripleo-passwords
シークレットのバックアップを作成します。$ oc get secret tripleo-passwords -n openstack -o yaml > tripleo-passwords_backup.yaml
Tripleo-overcloud-passwords_preserve_list
という名前のプレインテキストファイルを作成して、次のサービスのパスワードをローテーションしないように指定します。parameter_defaults BarbicanSimpleCryptoKek KeystoneCredential0 KeystoneCredential1 KeystoneFernetKey0 KeystoneFernetKey1 KeystoneFernetKeys CephClientKey CephClusterFSID CephManilaClientKey CephRgwKey HeatAuthEncryptionKey MysqlClustercheckPassword MysqlMariabackupPassword PacemakerRemoteAuthkey PcsdPassword
パスワードを保持したいサービスが他にもある場合は、そのサービスをリストに追加できます。
変更すべきでないパスワードをリストするためのパスワードパラメーターファイル (
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
-
Tripleo-overcloud-passwords.yaml
ファイルに、ローテーションしないパスワードが含まれていることを検証します。 tripleo-password
シークレットを更新します。$ oc create secret generic tripleo-passwords -n openstack \ --from-file=./tripleo-overcloud-passwords.yaml \ --dry-run=client -o yaml | oc apply -f -
- Ansible Playbook を作成し、OpenStackConfigGenerator CRD を使用してオーバークラウドを設定します。詳細は、OpenStackConfigGenerator CRD を使用したオーバークラウド設定用の Ansible Playbook の作成 を参照してください。
- 更新された設定を適用します。詳細は、director Operator を使用したオーバークラウド設定の適用 を参照してください。
検証
シークレット内の新しい NovaPassword
を、コントローラーノードにインストールされたものと比較します。
更新されたシークレットからパスワードを取得します。
$ oc get secret tripleo-passwords -n openstack -o jsonpath='{.data.tripleo-overcloud-passwords\.yaml}' | base64 -d | grep NovaPassword
出力例:
NovaPassword: hp4xpt7t2p79ktqjjnxpqwbp6
コントローラーノード上で稼働している Compute サービス (nova) のパスワードを取得します。
openstackclient
リモートシェルにアクセスします。$ oc rsh openstackclient -n openstack
ホームディレクトリーにいることを確認します。
$ cd
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
カスタムリソース (CR) を定義し、オーバークラウドネットワークのサブネットを指定します。次に、Red Hat OpenStack Platform (RHOSP) director Operator (OSPdO) は設定をレンダリングし、ネットワークトポロジーを作成または更新します。
前提条件
- 稼働中の Red Hat OpenShift Container Platform (RHOCP) クラスターに OSPdO をインストールしている。
-
ワークステーションに
oc
コマンドラインツールをインストールしている。
手順
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
内部 API ネットワークを作成します。
$ oc create -f openstacknetconfig.yaml -n openstack
OpenStackNetConfig
リソースのリソースと子リソースが作成されていることを確認します。$ oc get openstacknetconfig/openstacknetconfig -n openstack $ oc get openstacknetattachment -n openstack $ oc get openstacknet -n openstack
14.2. デプロイメントにリーフネットワークのロールを追加する
リーフネットワークのロールをデプロイに追加するには、roles_data.yaml
設定ファイルを更新します。リーフネットワークロールに異なる NIC 設定がある場合、ロールごとに Ansible NIC テンプレートを作成してスパイン/リーフネットワークを設定し、NIC テンプレートを登録して、ConfigMap
カスタムリソースを作成できます。
ファイル名として roles_data.yaml
を使用する必要があります。
手順
roles_data.yaml
ファイルを更新します。... ############################################################################### # Role: ComputeLeaf1 # ############################################################################### - name: ComputeLeaf1 description: | Basic ComputeLeaf1 Node role # Create external Neutron bridge (unset if using ML2/OVS without DVR) tags: - compute - 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: - compute - external_bridge networks: InternalApi: subnet: internal_api_leaf2 Tenant: subnet: tenant_leaf2 Storage: subnet: storage_leaf2 HostnameFormatDefault: '%stackname%-novacompute-leaf2-%index%' ...
- Compute ロールごとに NIC テンプレートを作成します。Ansible NIC テンプレートの例は、https://github.com/openstack/tripleo-ansible/tree/stable/wallaby/tripleo_ansible/roles/tripleo_network_config/templates を参照してください。
新しいノードの NIC テンプレートを環境ファイルに追加します。
parameter_defaults: ComputeNetworkConfigTemplate: 'multiple_nics_vlans_dvr.j2' ComputeLeaf1NetworkConfigTemplate: 'multiple_nics_vlans_dvr.j2' ComputeLeaf2NetworkConfigTemplate: 'multiple_nics_compute_leaf_2_vlans_dvr.j2'
~/custom_environment_files
ディレクトリーで、roles_data.yaml
ファイル、環境ファイル、NIC テンプレートを tarball にアーカイブします。$ tar -cvzf custom-spine-leaf-config.tar.gz *.yaml
tripleo-tarball-config
ConfigMap
リソースを作成します。$ oc create configmap tripleo-tarball-config --from-file=custom-spine-leaf-config.tar.gz -n openstack
14.3. 複数のルーティングされたネットワークを使用したオーバークラウドのデプロイ
複数のルーテッドネットワークセットを使用してオーバークラウドをデプロイするには、スパインリーフネットワークのコントロールプレーンと Compute ノードを作成し、Ansible Playbook をレンダリングして適用します。コントロールプレーンを作成するには、Controller ノードのリソースを指定します。ベアメタルマシンからリーフの Compute ノードを作成するには、OpenStackBaremetalSet
カスタムリソースにリソース仕様を含めます。
手順
ワークステーションに
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-rhel9/openstack-tripleoclient:17.1 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
コントロールプレーンを作成します。
$ oc create -f openstack-controller.yaml -n openstack
-
Red Hat OpenShift Container Platform (RHOCP) が
OpenStackControlPlane
リソースに関連するリソースを作成するまで待ちます。 Compute リーフごとにワークステーション上にファイル (例:
openstack-computeleaf1.yaml
) を作成します。リーフの Compute ノードのリソース仕様を含めます。次の例は、1 つの Compute ノードを含む 1 つの計算リーフの仕様を示しています。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://<source_host>/rhel-9.2-x86_64-kvm.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
各リーフの Compute ノードを作成します。
$ oc create -f openstack-computeleaf1.yaml -n openstack
-
OpenStackConfigGenerator
を使用して Ansible Playbook を生成し、オーバークラウド設定を適用します。詳細は、director Operator を使用したオーバークラウドの設定とデプロイ を参照してください。
検証
コントロールプレーンのリソースを表示します。
$ oc get openstackcontrolplane/overcloud -n openstack
OpenStackVMSet
リソースを表示して、コントロールプレーンの仮想マシン (VM) セットの作成を確認します。$ oc get openstackvmsets -n openstack
VM リソースを表示して、OpenShift Virtualization でのコントロールプレーン VM の作成を確認します。
$ oc get virtualmachines
openstackclient
Pod リモートシェルへのアクセスをテストします。$ oc rsh -n openstack openstackclient
各 Compute リーフのリソースを表示します。
$ oc get openstackbaremetalset/computeleaf1 -n openstack
RHOCP によって管理されるベアメタルマシンを表示して、Compute ノードの作成を確認します。
$ oc get baremetalhosts -n openshift-machine-api
第15章 director Operator でデプロイされたオーバークラウドのバックアップおよび復元
Red Hat OpenStack Platform (RHOSP) の Director Operator (OSPdO) は、デプロイメントのバックアップと復元のためのカスタムリソース定義 (CRD) を提供します。複数の設定を手動でエクスポートおよびインポートする必要はありません。OSPdO は、すべてのリソースの状態を認識しているため、ConfigMap
および Secret
CR を含むどのカスタムリソース (CR) が完全なバックアップを作成する必要があるかを認識しています。したがって、OSPdO は、不完全またはエラー状態にある設定をバックアップしません。
OSPdO デプロイメントをバックアップおよび復元するには、OpenStackBackupRequest
CR を作成して、バックアップの作成または復元を開始します。OpenStackBackupRequest
CR は、指定された名前空間のカスタムリソース (CR)、ConfigMap
、および Secret
設定のバックアップを保存する OpenStackBackup
CR を作成します。
15.1. Director Operator のバックアップ
バックアップを作成するには、名前空間の OpenStackBackupRequest
カスタムリソース (CR) を作成する必要があります。OpenStackBackup
CR は、OpenStackBackupRequest
オブジェクトが 保存
モードで作成されるときに作成されます。
手順
-
ワークステーション上に
openstack_backup.yaml
という名前のファイルを作成します。 以下の設定を
openstack_backup.yaml
ファイルに追加して、OpenStackBackupRequest
カスタムリソース (CR) を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBackupRequest metadata: name: openstackbackupsave namespace: openstack spec: mode: save 1 additionalConfigMaps: [] 2 additionalSecrets: [] 3
注記OSPdO は、
OpenStackControlPlane
やOpenStackBaremetalSet
など、OSPdO CR に関連付けられたすべてのConfigMap
オブジェクトとSecret
オブジェクトを名前空間に含めようとします。これらを追加リストに含める必要はありません。-
openstack_backup.yaml
ファイルを保存します。 OpenStackBackupRequest
CR を作成します。$ oc create -f openstack_backup.yaml -n openstack
OpenStackBackupRequest
CR の作成ステータスを監視します。$ oc get openstackbackuprequest openstackbackupsave -n openstack
Quiescing
状態は、OSPdO が CR が終了状態に達するのを待っていることを示します。CR の数は、バックアップの作成が完了するまでにかかる時間に影響を与える可能性があります。NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackupsave save Quiescing
ステータスが予想よりも長く
Quiescing
状態のままである場合は、OSPdO ログを調査して進行状況を確認できます。$ 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 の名前に置き換えます。
-
Saved
状態は、OpenStackBackup
CR が作成されたことを示します。NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackupsave save Saved 2022-01-11T19:12:58Z
Error
状態は、バックアップの作成に失敗したことを示します。リクエストの内容を確認してエラーを見つけます。$ oc get openstackbackuprequest openstackbackupsave -o yaml -n openstack
OpenStackBackup
リソースを表示して、存在することを確認します。$ oc get openstackbackup -n openstack NAME AGE openstackbackupsave-1641928378 6m7s
15.2. バックアップからの director Operator の復元
バックアップの復元をリクエストすると、Red Hat OpenStack Platform (RHOSP) ディレクターオペレーター (OSPdO) は、指定された OpenStackBackup
リソースの内容を取得し、それらを namespace 内に存在するすべての既存のカスタムリソース (CR)、ConfigMap
、および Secret
リソースに適用しようとします。。OSPdO は、namespace 内の既存のリソースを上書きし、namesapce 内に見つからないリソースに対して新しいリソースを作成します。
手順
利用可能なバックアップを一覧表示します。
$ oc get osbackup
特定のバックアップの詳細を調べます。
$ oc get backup <name> -o yaml
-
<name>
を検査するバックアップの名前に置き換えます。
-
-
ワークステーション上に
openstack_restore.yaml
という名前のファイルを作成します。 以下の設定を
openstack_restore.yaml
ファイルに追加して、OpenStackBackupRequest
カスタムリソース (CR) を作成します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBackupRequest metadata: name: openstackbackuprestore namespace: openstack spec: mode: <mode> restoreSource: <restore_source>
<mode>
を次のいずれかのオプションに置き換えます。-
restore
: 既存のOpenStackBackup
からのリストアを要求します。 -
cleanRestore
: 既存のOpenStackBackup
から新しいリソースを復元して作成する前に、namespace 内の既存の OSPdO リソースを完全に消去します。
-
-
<restore_source>
を復元するOpenStackBackup
の ID に置き換えます (例:openstackbackupsave-1641928378
)。
-
openstack_restore.yaml
ファイルを保存します。 OpenStackBackupRequest
CR を作成します。$ oc create -f openstack_restore.yaml -n openstack
OpenStackBackupRequest
CR の作成ステータスを監視します。$ oc get openstackbackuprequest openstackbackuprestore -n openstack
Loading
状態は、OpenStackBackup
のすべてのリソースがクラスターに対して適用されていることを示します。NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackuprestore restore openstackbackupsave-1641928378 Loading
Reconciling
状態は、すべてのリソースがロードされ、OSPdO がすべてのリソースのプロビジョニングを試みるために調整を開始したことを示します。NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackuprestore restore openstackbackupsave-1641928378 Reconciling
Restored
状態は、OpenStackBackup
CR が復元されたことを示します。NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackuprestore restore openstackbackupsave-1641928378 Restored 2022-01-12T13:48:57Z
Error
状態は、復元が失敗したことを示します。リクエストの内容を確認してエラーを見つけます。$ oc get openstackbackuprequest openstackbackuprestore -o yaml -n openstack
第16章 director Operator を使用して仮想マシンのリソースを変更する
OpenStackVMSet
カスタムリソース (CR) の CPU、RAM、およびディスクリソースを変更するには、OpenStackControlPlane
CRD を使用します。
16.1. OpenStackVMSet
の CPU または RAM を変更する
OpenStackControlPlane
CRD を使用して、OpenStackVMSet
カスタムリソース (CR) の CPU または RAM を変更できます。
手順
Controller virtualMachineRole コアの数を 8 に変更します。
$ oc patch -n openstack osctlplane overcloud --type='json' -p='[{"op": "add", "path": "/spec/virtualMachineRoles/controller/cores", "value": 8 }]'
コントローラーの virtualMachineRole RAM サイズを 22GB に変更します。
$ oc patch -n openstack osctlplane overcloud --type='json' -p='[{"op": "add", "path": "/spec/virtualMachineRoles/controller/memory", "value": 22 }]'
virtualMachineRole リソースを検証します。
$ oc get osvmset NAME CORES RAM DESIRED READY STATUS REASON controller 8 22 1 1 Provisioned All requested VirtualMachines have been provisioned
- 仮想マシンの内部から、正常なシャットダウンを実行します。更新された各仮想マシンを 1 つずつシャットダウンします。
仮想マシンをパワーオンします。
$ `virtctl start <VM>` to power on the virtual machine.
-
<VM> を
仮想マシンの名前に置き換えます。
-
16.2. OpenStackVMSet
CR にディスクを追加する
additionalDisks
プロパティーを編集することで、OpenStackControlPlane
CRD を使用して仮想マシンにディスクを追加できます。
手順
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
パッチを適用します。
$ oc patch -n openstack osctlplane overcloud --patch-file controller_add_data_disk1.yaml
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" } ]
- 仮想マシンの内部から、正常なシャットダウンを実行します。更新された各仮想マシンを 1 つずつシャットダウンします。
仮想マシンをパワーオンします。
$ `virtctl start <VM>` to power on the virtual machine.
-
<VM> を
仮想マシンの名前に置き換えます。
-
第17章 エアギャップ環境
エアギャップ環境は、他のネットワークやシステムから物理的に分離することでセキュリティーを確保します。director Operator をエアギャップ環境にインストールして、セキュリティーを確保し、特定の規制要件を提供できます。
17.1. 前提条件
稼働中の Red Hat Openshift Container Platform (RHOCP) クラスター、バージョン 4.12 以降。クラスターには
provisioning
ネットワークと次の Operator が含まれている必要があります。-
baremetal
クラスターの Operator。baremetal
クラスター Operator を有効にする必要があります。baremental
クラスターオペレーターの詳細は、ベアメタルクラスター Operator を参照してください。 - OpenShift Virtualization Operator.OpenShift Virtualization Operator のインストールの詳細は、Web コンソールを使用した OpenShift Virtualization のインストール を参照してください。
- SR-IOV Network Operator.
-
- docker v2 スキーマに準拠する切断されたレジストリーがあります。詳細は、切断されたインストールのイメージのミラーリング を参照してください。
- オーバークラウドノードの登録とパッケージのインストールに使用される Satellite Server またはその他のリポジトリーにアクセスできます。
-
oc
コマンドラインツールがワークステーションにインストールされています。 - ローカルの git リポジトリーにアクセスして、デプロイアーティファクトを保存できます。
-
ワークステーションに
podman
およびskopeo
コマンドラインツールをインストールしました。
17.2. エアギャップ環境の設定
エアギャップ環境を設定するには、registry.redhat.io
とエアギャップ環境のレジストリーの両方にアクセスできる必要があります。両方のレジストリーにアクセスする方法の詳細は、エアギャップレジストリーへのカタログコンテンツのミラーリング を参照してください。
手順
openstack
namespace を作成します。$ oc new-project openstack
インデックスイメージを作成し、レジストリーにプッシュします。
$ 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
を検索します。オペレータインデックスイメージに基づいて、関連するイメージをミラーリングします。
$ oc adm catalog mirror ${INDEX_IMG} your.registry.local --insecure --index-filter-by-os='Linux/x86_64'
ミラーリングが完了すると、現在のディレクトリーに
manifests-osp-director-operator-index-<random_number>
というmanifests
ディレクトリーが生成されます。作成した ImageContentSourcePolicy をクラスターに適用します。$ os apply -f manifests-osp-director-operator-index-<random_number>/imageContentSourcePolicy.yaml
-
<random_number>
をランダムに生成された数値に置き換えます。
-
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
openstack
namespace に新しいリソースを作成します。$ oc apply -f osp-director-operator.yaml
必要なオーバークラウドイメージをリポジトリーにコピーします。
$ for i in $(podman search --limit 1000 "registry.redhat.io/rhosp-rhel9/openstack" --format="{{ .Name }}" | awk '{print $1 ":" "17.1.0"}' | 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 の準備 を参照できます。
- これで、director Operator のインストールと準備 に進むことができます。
検証
director Operator が正常にインストールされたことを確認します。
$ oc get operators NAME AGE osp-director-operator.openstack 5m