OpenShift Container Platform 向けの RHOSP director Operator
Red Hat OpenShift Container Platform クラスターへの Red Hat OpenStack Platform オーバークラウドのデプロイ
OpenStack Documentation Team
rhos-docs@redhat.com
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。
Jira でドキュメントのフィードバックを提供する
ドキュメントに関するフィードバックを提供するには、Create Issue フォームを使用します。Red Hat OpenStack Platform Jira プロジェクトで Jira Issue が作成され、フィードバックの進行状況を追跡できます。
- Jira にログインしていることを確認してください。Jira アカウントをお持ちでない場合は、アカウントを作成してフィードバックを送信してください。
- Create Issue をクリックして、Create Issue ページを開きます。
- Summary フィールドと Description フィールドに入力します。Description フィールドに、ドキュメントの URL、章またはセクション番号、および問題の詳しい説明を入力します。フォーム内の他のフィールドは変更しないでください。
- Create をクリックします。
第1章 Red Hat OpenStack Platform director Operator の概要
OpenShift Container Platform (OCP) は、Operator のモジュラーシステムを使用して OCP クラスターの機能を拡張します。Red Hat OpenStack Platform (RHOSP) director Operator は、OCP 内で RHOSP クラウドをインストールして実行する機能を追加します。この Operator は、RHOSP ノードのインフラストラクチャーおよび設定を管理してデプロイするためのカスタムリソース定義 (CRD) のセットを管理します。operator でデプロイされた RHOSP クラウドの基本アーキテクチャーには、以下の機能が含まれます。
- 仮想コントロールプレーン
- director Operator は、コントローラーノードとして機能するように OpenShift Virtualization に仮想マシンのセットを作成します。
- ベアメタルマシンのプロビジョニング
- director Operator は、OCP ベアメタルマシン管理を使用して、operator でデプロイされた RHOSP クラウドに Compute ノードをプロビジョニングします。
- ネットワーク
- director Operator は、RHOSP サービスの基礎となるネットワークを設定します。
- Heat および Ansible ベースの設定
-
director Operator は、カスタム Heat 設定を OCP に保存し、director の
config-download
機能を使用して設定を Ansible Playbook に変換します。保存された heat 設定を変更すると、director Operator は Ansible Playbook を自動的に再生成します。 - CLI クライアント
- director Operator は、ユーザーが RHOSP CLI コマンドを実行して RHOSP クラウドと対話するための Pod を作成します。
Red Hat OpenStack Platform director Operator のサポートは、アーキテクチャーが Red Hat サービスまたはテクニカルアカウントマネージャーによって承認された場合にのみ付与されます。この機能を導入する前に Red Hat にお問い合わせください。
1.1. director Operator の前提条件
Red Hat OpenStack Platform (RHOSP) director Operator をインストールする前に、以下の前提条件のタスクを完了する必要があります。
有効な
baremetal
のクラスター Operator とprovisioning
ネットワークを含む OpenshiftContainer Platform (OCP) 4.10 以降のクラスターをインストールします。注記インストーラープロビジョニングインフラストラクチャー (IPI) またはアシストインストール (AI) を使用してインストールする OCP クラスターは、
ベアメタル
プラットフォームタイプを使用し、ベアメタル
クラスター Operator を有効にします。ユーザーがプロビジョニングするインフラストラクチャー (UPI) でインストールする OCP クラスターは、プラットフォームタイプnone
を使用し、baremetal
Operator が無効になる可能性があります。クラスターのタイプが AI または IPI の場合、ベアメタルホストを管理するための Kubernetes API である
metal3
が使用されます。これは、利用可能なホストのインベントリーを BareMetalHost カスタムリソース定義 (CRD) のインスタンスとして維持します。ベアメタル Operator は以下を実行します。- ホストのハードウェア詳細を検査し、それを対応する BareMetalHost に報告します。これには、CPU、RAM、ディスク、および NIC に関する情報が含まれます。
- 特定のイメージを使用してホストをプロビジョニングします。
- プロビジョニング前または後に、ホストのディスクコンテンツを消去します。
baremetal
クラスター Operator が有効かどうかを確認するには、Administration > Cluster Settings > ClusterOperators > baremetal に移動し、Conditions セクションまでスクロールして Disabled ステータスを表示します。OCP クラスターのプラットフォームタイプを確認するには、Administration > Global Configuration > Infrastructure の順に移動し、YAML ビューに切り替えて、Conditions セクションまでスクロールして
status.platformStatus
の値を表示します。OperatorHub から OCP クラスターに次の Operators をインストールします。
- OpenShift Virtualization Operator
- SR-IOV Network Operator
- OCP 4.11 以降のクラスターの場合: Kubernetes NMState Operator
OCP 4.11 以降のクラスターの場合: NMState インスタンスを作成して、すべての NMState CRD のインストールを完了します。
cat <<EOF | oc apply -f - apiVersion: nmstate.io/v1 kind: NMState metadata: name: nmstate namespace: openshift-nmstate EOF
- director オペレーターのリモート Git リポジトリーを設定して、オーバークラウド向けに生成された設定を保存します。
以下の永続ボリュームを作成し、director Operator が作成する以下の永続ボリューム要求 (PVC) に対応します。
-
4G (
openstackclient-cloud-admin
) -
1G (
openstackclient-hosts
) - 50G (director Operator がコントローラー仮想マシンごとに複製するベースイメージの場合)
- 最低 50 GB (コントローラー仮想マシンごと)。詳細情報は、コントローラーノードの要件 を参照してください。
-
4G (
関連情報
1.2. director Operator のインストール
director Operator をインストールするには、Operator の namespace を作成し、以下の 3 つのリソースを namespace 内に作成する必要があります。
-
CatalogSource
: director Operator カタログに使用するインデックスイメージを識別します。 -
Subscription
: director Operator カタログ内の変更を追跡します。 -
OperatorGroup
: director Operator の Operator グループを定義し、director Operator をターゲット名前空間に制限します。
前提条件
- OpenShift Container Platform クラスターが機能していることを確認する。
OperatorHub から以下の前提条件 Operator をインストールする。
- OpenShift Virtualization 4.10
- SR-IOV Network Operator 4.10
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
openstack
namespace を作成します。$ 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-rhel8/osp-director-operator-bundle@sha256:c19099ac3340d364307a43e0ae2be949a588fefe8fcb17663049342e7587f055" $ INDEX_IMG="quay.io/<account>/osp-director-operator-index:x.y.z-a" $ opm index add --bundles ${BUNDLE_IMG} --tag ${INDEX_IMG} -u podman --pull-tool podman
インデックスイメージをレジストリーにプッシュします。
$ podman push ${INDEX_IMG}
osp-director-operator.yaml
という名前のファイルを作成し、3 つのリソースを設定して director Operator をインストールするように設定するための以下の YAML コンテンツを追加します。apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: osp-director-operator-index namespace: openstack spec: sourceType: grpc image: quay.io/<account>/osp-director-operator-index:x.y.z-a 1 --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: "osp-director-operator-group" namespace: openstack spec: targetNamespaces: - openstack --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: osp-director-operator-subscription namespace: openstack spec: config: env: - name: WATCH_NAMESPACE value: openstack,openshift-machine-api,openshift-sriov-network-operator source: osp-director-operator-index sourceNamespace: openstack name: osp-director-operator
- 1
- Operator デプロイメントがイメージをプルできるように Quay 認証を適用する方法の詳細は、プライベートレジストリーから Operator のイメージにアクセスする を参照してください。
openstack
namespace 内に 3 つの新規リソースを作成します。$ oc apply -f osp-director-operator.yaml
検証
director Operator が正常にインストールされていることを確認します。
$ oc get operators NAME AGE osp-director-operator.openstack 5m
1.3. director Operator のカスタムリソース定義
director Operator には、オーバークラウドのリソース管理に使用できるカスタムリソース定義 (CRD) のセットが含まれます。CRD には、ハードウェアプロビジョニングとソフトウェア設定という 2 つのタイプがあります。
ハードウェアプロビジョニング CRD
openstacknetattachment
(internal)- ネットワークを仮想マシンに接続するために使用される NodeNetworkConfigurationPolicy および NodeSriovConfigurationPolicy を管理します
openstacknetconfig
- openstacknetattachments と openstacknets を指定して完全なネットワーク設定を記述する高レベル CRD。ノードごとに予約済みの IP/MAC アドレスのセットがステータスに反映されます。
openstackbaremetalset
- 特定の TripleO ロール (Compute、Storageなど) 用のベアメタルホストのセットを作成します。
openstackcontrolplane
- OpenStack コントロールプレーンを作成し、関連する openstackvmsets を管理するために使用される CRD
openstacknet
(internal)- 以下の vmset および baremetalset リソースに IP を割り当てるために使用されるネットワークを作成します。
openstackipset
(internal)- 特定のネットワークとロールの一連の IP が含まれています。内部で IP アドレスを管理するために使用されます。
openstackprovisionservers
- Metal3 でベアメタルプロビジョニング用のカスタムイメージを提供するために使用されます
openstackvmset
- 特定の TripleO ロール (Controller、Database、NetworkController など) 用に OpenShift Virtualization を使用して一連の VM を作成します。
ソフトウェア設定 CRD
openstackconfiggenerator
- デプロイ用のカスタム ConfigMap をスケールアップまたは変更するときに、デプロイ用の Ansible Playbook を自動的に生成します
openstackconfigversion
- 実行可能な Ansible Playbook のセットを表します
openstackdeploy
- Ansible Playbook のセットを実行します (openstackconfigversion)
openstackclient
- TripleO デプロイコマンドの実行に使用される Pod を作成します
director Operator CRD の表示
oc get crd
コマンドを使用してこれらの CRD のリストを表示します。$ oc get crd | grep "^openstack"
oc describe crd
コマンドを使用して、特定の CRD の定義を表示します。$ oc describe crd openstackbaremetalset Name: openstackbaremetalsets.osp-director.openstack.org Namespace: Labels: operators.coreos.com/osp-director-operator.openstack= Annotations: cert-manager.io/inject-ca-from: $(CERTIFICATE_NAMESPACE)/$(CERTIFICATE_NAME) controller-gen.kubebuilder.io/version: v0.3.0 API Version: apiextensions.k8s.io/v1 Kind: CustomResourceDefinition ...
CRD の命名規則
各 CRD には spec.names
セクションに複数の名前が含まれます。アクションのコンテキストに応じて、これらの名前を使用します。
リソースのマニフェストを作成して操作する場合は
kind
を使用します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBaremetalSet ....
リソースマニフェストの
kind
名は、それぞれの CRD のkind
名に相関します。複数のリソースを操作する場合は
plural
を使用します。$ oc get openstackbaremetalsets
単一リソースを操作する場合は、
singular
を使用します。$ oc describe openstackbaremetalset/compute
CLI での操作には
shortName
を使用します。$ oc get osbmset
関連情報
1.4. director Operator でサポートされていない機能
- ファイバーチャネルバックエンド
-
ファイバーチャネルを使用するバックエンドについては、Block Storage (cinder) のイメージからボリュームへの転送はサポートされません。Red Hat OpenShift Virtualization は、N_Port ID Virtualization (NPIV) をサポートしていません。したがって、デフォルトで
cinder-volume
が実行される、ストレージバックエンドからコントローラーに LUN をマッピングする必要がある Block Storage ドライバーは機能しません。cinder-volume
専用のロールを作成し、そのロールを仮想化コントローラーに含めるのではなく、そのロールを使用して物理ノードを作成する必要があります。詳しい情報は、Composable Services and Custom Roles を参照してください。
1.5. director Operator を使用したオーバークラウドデプロイメントのワークフロー
Red Hat OpenStack Platform director Operator のインストール後に、director Operator に固有のリソースを使用してオーバークラウドインフラストラクチャーのプロビジョニング、オーバークラウドの設定の生成、オーバークラウドの作成を行うことができます。
以下のワークフローで、オーバークラウド作成の一般的なプロセスを概説します。
-
openstacknetconfig
CRD を使用して、コントロールプレーンと分離されたネットワークを含むオーバークラウドネットワークを作成します。 - ConfigMap を作成して、オーバークラウド用のカスタム heat テンプレートおよび環境ファイルを保存します。
- コントローラーノード用の 3 つの仮想マシンと、クライアント操作を実行するための Pod を含むコントロールプレーンを作成します。
- ベアメタルの Compute ノードを作成します。
-
オーバークラウド設定用の Ansible Playbook をレンダリングするための
openstackconfiggenerator
を作成します。 -
openstackdeploy
を使用して、Ansible Playbook 設定をオーバークラウドノードに適用します。
第2章 director Operator を使用したオーバークラウドのデプロイメントの準備
director Operator を使用してオーバークラウドをデプロイする前に、ベースオペレーティングシステム用のデータボリュームを作成し、リモート git リポジトリーの認証情報を追加する必要があります。また、ノードに root パスワードを設定することもできます。root パスワードを設定していない場合でも、osp-controlplane-ssh-keys
シークレットで定義した SSH 鍵を使用してノードにログインすることができます。
2.1. ベースオペレーティングシステムのデータボリュームの作成
コントローラー仮想マシンのベースオペレーティングシステムのイメージを保存するには、OpenShift Container Platform (OCP) クラスターでデータボリュームを作成する必要があります。
前提条件
- Red Hat Enterprise Linux 8.4 QCOW2 イメージをワークステーションにダウンロードします。このイメージは、Red Hat カスタマーポータルの 製品ダウンロード セクションからダウンロードできます。
virtctl
クライアントツールをワークステーションにインストールします。以下のコマンドを実行して、このツールを Red Hat Enterprise Linux ワークステーションにインストールできます。$ sudo subscription-manager repos --enable=cnv-4.10-for-rhel-8-x86_64-rpms $ sudo dnf install -y kubevirt-virtctl
virt-customize
クライアントツールをワークステーションにインストールします。このツールは、以下のコマンドを使用して Red Hat Enterprise Linux ワークステーションにインストールできます。$ dnf install -y libguestfs-tools-c
手順
access.redhat.com からダウンロードしたデフォルトの QCOW2 イメージでは、biosdev の予測可能なネットワークインターフェイス名は使用されません。biosdev の予測可能なネットワークインターフェイス名を使用するように、
virt-customize
でイメージを変更します。$ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(kernelopts=.*\)net.ifnames=0 \(.*\)/\1\2/" /boot/grub2/grubenv' $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(GRUB_CMDLINE_LINUX=.*\)net.ifnames=0 \(.*\)/\1\2/" /etc/default/grub' --truncate /etc/machine-id
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
です。
-
OpenStackControlPlane リソースおよび個別の OpenStackVmSet リソースの作成時に、
baseImageVolumeName
パラメーターをデータボリューム名に設定します。... spec: ... baseImageVolumeName: openstack-base-img ...
2.2. リモート Git リポジトリーの認証情報の追加
director Operator はレンダリングされた Ansible Playbook をリモート Git リポジトリーに保管し、このリポジトリーを使用してオーバークラウドの設定に対する変更を追跡します。SSH 認証をサポートする Git リポジトリーであれば、どのリポジトリーでも使用できます。git-secret
という名前の OpenShift Secret リソースとして Git リポジトリーの詳細を指定する必要があります。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - director オペレーターのリモート Git リポジトリーを作成して、オーバークラウド向けに生成された設定を保存します。
-
SSH キーペアを準備します。公開鍵を Git リポジトリーにアップロードし、秘密鍵を利用できる状態にして、
git-secret
Secret リソースに追加します。
手順
Secret リソースを作成します。
$ oc create secret generic git-secret -n openstack --from-file=git_ssh_identity=<path_to_private_SSH_key> --from-literal=git_url=<git_server_URL>
git-secret
Secret リソースには、2 つのキーと値のペアが含まれます。git_ssh_identity
-
Git リポジトリーにアクセスするための秘密鍵
--from-file
オプションは、SSH 秘密鍵ファイルの内容を保存します。 git_url
-
設定を保存する git リポジトリーの SSH URL。
--from-literal
オプションは、このキーに入力した URL を保存します。
検証
Secret リソースを表示します。
$ oc get secret/git-secret -n openstack
関連情報
2.3. ノードの root パスワードの設定
各ノードのパスワードを使用して root
ユーザーにアクセスするには、userpassword
という名前の Secret リソースに root
パスワードを設定します。
ノードの root パスワードの設定はオプションです。root
パスワードを設定ていない場合には、osp-controlplane-ssh-keys
シークレットで定義した SSH 鍵を使用してノードにログインすることができます。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
選択したパスワードを base64 値に変換します。
$ echo -n "p@ssw0rd!" | base64 cEBzc3cwcmQh
注記-n
オプションは、echo 出力から末尾の改行を削除します。ワークステーションに
openstack-userpassword.yaml
という名前のファイルを作成します。ファイルに、Secret の以下のリソース仕様を追加します。apiVersion: v1 kind: Secret metadata: name: userpassword namespace: openstack data: NodeRootPassword: "cEBzc3cwcmQh"
NodeRootPassword
パラメーターを base64 でエンコードされたパスワードに設定します。userpassword
シークレットを作成します。$ oc create -f openstack-userpassword.yaml -n openstack
OpenStackControlPlane
または OpenStackBaremetalSet
を作成するときに、passwordSecret
に userpassword
Secret を入力します。
apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud namespace: openstack spec: passwordSecret: <userpassword>
-
<userpassword>
をuserpassword
Secret に置き換えます。
関連情報
第3章 director Operator を使用したネットワークの作成
OpenStackNetConfig リソースを使用して OpenShift Virtualization ワーカーノードでネットワークおよびブリッジを作成し、仮想マシンをこれらのネットワークに接続します。コンポーザブルネットワークのネットワーク分離を実装するには、オーバークラウドおよび追加のネットワーク用にコントロールプレーンネットワークを 1 つ作成する必要があります。
3.1. OpenStackNet での仮想マシンのブリッジについて
OpenStackVMSet リソースで仮想マシンを作成する場合には、これらの仮想マシンを関連する Red Hat OpenStack Platform (RHOSP) ネットワークに接続する必要があります。OpenStackNetConfig リソースには、nodeNetworkConfigurationPolicy
のハッシュである attachConfigurations
オプションが含まれています。OpenStackNetConfig で指定されたそれぞれの attachConfiguration
は、OpenStackNet Attachment を作成し、ネットワークインターフェイスデータを OpenShift の NodeNetworkConfigurationPolicy リソースに渡します。NodeNetworkConfigurationPolicy リソースは nmstate
API を使用して、各 OCP ワーカーノードでネットワーク設定の最終状態を設定します。OpenStackNetConfig で設定された各ネットワークは、attachConfigurations
の 1 つを参照します。仮想マシン内には、ネットワークごとに 1 つのインターフェイスがあります。この方法により、OCP ワーカーノード上に必要なブリッジを作成し、コントローラー仮想マシンを RHOSP ネットワークに接続できます。
たとえば、br-osp attachConfiguration
を作成し、nodeNetworkConfigurationPolicy
オプションを設定して Linux ブリッジを作成し、各ワーカーの NIC にブリッジに接続する場合は、NodeNetworkConfigurationPolicy リソースは、この必要な終了状態になるように、それぞれの OCP ワーカーノードを設定します。
apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 description: Linux bridge with enp6s0 as a port name: br-osp state: up type: linux-bridge mtu: 1500 … networks: - name: Control nameLower: ctlplane subnets: - name: ctlplane ipv4: allocationEnd: 192.168.25.250 allocationStart: 192.168.25.100 cidr: 192.168.25.0/24 gateway: 192.168.25.1 attachConfiguration: br-osp
この設定を適用すると、各ワーカーに br-osp
という名前の新規ブリッジが追加され、各ホストの enp6s0
NIC に接続されます。RHOSP をデプロイするには、専用の NIC が必要です。すべての RHOSP コントローラー仮想マシンは、コントロールプレーンのネットワークトラフィックの br-osp
ブリッジに接続できます。
VLAN 20 を介して内部 API ネットワークを指定する場合は、attachConfiguration
オプションを設定して、各 OCP ワーカーノードのネットワーク設定を変更し、VLAN を既存の br-osp
ブリッジに接続できます。
apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: … networks: … - isControlPlane: false mtu: 1500 name: InternalApi nameLower: internal_api subnets: - attachConfiguration: br-osp ipv4: allocationEnd: 172.17.0.250 allocationStart: 172.17.0.10 cidr: 172.17.0.0/24 gateway: 172.17.0.1 routes: - destination: 172.17.1.0/24 nexthop: 172.17.0.1 - destination: 172.17.2.0/24 nexthop: 172.17.0.1 name: internal_api vlan: 20
br-osp
はすでに存在し、各ホストの enp6s0
NIC に接続されているので、ブリッジ自体に変更は加えられません。ただし、OpenStackNet は VLAN 20 をこのネットワークに関連付けます。つまり、RHOSP コントローラーの仮想マシンは、内部 API ネットワークトラフィック用の br-osp
ブリッジ上の VLAN 20 に接続できます。
OpenStackVMSet リソースで仮想マシンを作成すると、仮想マシンは、各ネットワークに接続された複数の Virtio デバイスを使用します。OpenShift Virtualization は、default
ネットワーク (常に最初にくるインターフェイス) を除き、ネットワーク名をアルファベット順に並べ替えます。
たとえば、OpenStackNetConfig を使用してデフォルトの RHOSP ネットワークを作成する場合、コントローラー仮想マシンのインターフェイス設定は次の例のようになります。
interfaces: - masquerade: {} model: virtio name: default - bridge: {} model: virtio name: ctlplane - bridge: {} model: virtio name: external - bridge: {} model: virtio name: internalapi - bridge: {} model: virtio name: storage - bridge: {} model: virtio name: storagemgmt - bridge: {} model: virtio name: tenant
この設定により、コントローラーノードの以下のネットワークとインターフェイスのマッピングが作成されます。
表3.1 デフォルトのネットワークからインターフェイスへのマッピング
Network | インターフェイス |
---|---|
default | nic1 |
ctlplane | nic2 |
external | nic3 |
internalapi | nic4 |
storage | nic5 |
storagemgmt | nic6 |
tenant | nic7 |
OpenStackVMSet で使用されるロール NIC テンプレートは自動生成されます。これは、nic-template.role.j2 ファイルを tarball ファイルに追加することで上書きできます。tarball ファイルのバイナリーコンテンツを OpenShift ConfigMap 名 tripleo-tarball-config
に含めます。
関連情報
3.2. OpenStackNetConfig を使用したオーバークラウドのコントロールプレーンネットワークの作成
OpenStackNetConfig で、オーバークラウド用に少なくとも 1 つのコントロールプレーンネットワークを定義する必要があります。IP アドレスの割り当てに加えて、ネットワーク定義には OpenStackNetAttachment のマッピング情報が含まれます。OpenShift Virtualization はこの情報を使用して、仮想マシンをネットワークに接続します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
ワークステーション上に
osnetconfig.yaml
という名前のファイルを作成します。ctlplane
という名前のコントロールプレーンネットワークのリソース仕様を含めます。たとえば、各ワーカーノードのenp6s0
イーサネットデバイスに接続された Linux ブリッジを使用するコントロールプレーンの仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 description: Linux bridge with enp6s0 as a port name: br-osp state: up type: linux-bridge mtu: 1500 # optional DnsServers list dnsServers: - 192.168.25.1 # optional DnsSearchDomains list dnsSearchDomains: - osptest.test.metalkube.org - some.other.domain # DomainName of the OSP environment domainName: osptest.test.metalkube.org networks: - name: Control nameLower: ctlplane subnets: - name: ctlplane ipv4: allocationEnd: 172.22.0.250 allocationStart: 172.22.0.100 cidr: 172.22.0.0/24 gateway: 172.22.0.1 attachConfiguration: br-osp # optional: configure static mapping for the networks per nodes. If there is none, a random gets created reservations: controller-0: ipReservations: ctlplane: 172.22.0.120 compute-0: ipReservations: ctlplane: 172.22.0.140
ネットワーク仕様で次の値を設定します。
name
- コントロールプレーンネットワークの名 (Control) を設定します。
nameLower
- コントロールプレーンネットワークの下位の名前 (ctlplane) を設定します。
subnets
- サブネットの仕様を設定します。
subnets.name
- コントロールプレーンサブネットの名前 (ctlplane) を設定します。
subnets.attachConfiguration
- どのアタッチ設定を使用するかの参照を設定します。
subnets.ipv4
- allocationStart、allocationEnd、cidr、ゲートウェイ、オプションのルートリスト (宛先と nexthop を含む) を含む ipv4 サブネットの詳細
このセクションで使用できる値の詳細は、
openstacknetconfig
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstacknetconfig
ネットワーク仕様の設定が完了したら、ファイルを保存します。
コントロールプレーンネットワークを作成します。
$ oc create -f osnetconfig.yaml -n openstack
検証
コントロールプレーンネットワークのリソースを表示します。
$ oc get openstacknetconfig/openstacknetconfig
3.3. OpenStackNetConfig を使用したネットワーク分離用の VLAN ネットワークの作成
コンポーザブルネットワークのネットワーク分離を実装するには、追加のネットワークを作成する必要があります。このネットワーク分離を実現するには、コンポーザブルネットワークを個別の VLAN ネットワークに配置できます。OpenStackNetConfig リソースには、IP アドレスの割り当てに加えて、OpenShift Virtualization が仮想マシンを VLAN ネットワークにアタッチするために使用するネットワーク設定ポリシーを定義する情報が含まれます。
デフォルトの Red Hat OpenStack Platform ネットワークを使用するには、各ネットワークを定義する OpenStackNetConfig リソースを作成する必要があります。
表3.2 デフォルトの Red Hat OpenStack Platform ネットワーク
Network | VLAN | CIDR | 割り当て |
---|---|---|---|
External | 10 | 10.0.0.0/24 | 10.0.0.10 - 10.0.0.250 |
InternalApi | 20 | 172.17.0.0/24 | 172.17.0.10 - 172.17.0.250 |
Storage | 30 | 172.18.0.0/24 | 172.18.0.10 - 172.18.0.250 |
StorageMgmt | 40 | 172.19.0.0/24 | 172.19.0.10 - 172.19..250 |
テナント | 50 | 172.20.0.0/24 | 172.20.0.10 - 172.20.0.250 |
各ネットワークごとに異なるネットワークの詳細を使用するには、カスタム network_data.yaml
ファイルを作成する必要があります。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
ネットワーク設定用のファイルを作成します。VLAN ネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの
enp6s0
およびenp7s0
イーサネットデバイスに接続された Linux ブリッジbr-ex
およびbr-osp
を介して VLAN タグ付きトラフィックを管理する内部 API、ストレージ、ストレージ管理、テナント、および外部ネットワークの仕様は次のとおりです。:kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp7s0 description: Linux bridge with enp7s0 as a port name: br-osp state: up type: linux-bridge mtu: 1500 br-ex: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 description: Linux bridge with enp6s0 as a port name: br-ex state: up type: linux-bridge mtu: 1500 # optional DnsServers list dnsServers: - 172.22.0.1 # optional DnsSearchDomains list dnsSearchDomains: - osptest.test.metalkube.org - some.other.domain # DomainName of the OSP environment domainName: osptest.test.metalkube.org networks: - name: Control nameLower: ctlplane subnets: - name: ctlplane ipv4: allocationEnd: 172.22.0.250 allocationStart: 172.22.0.10 cidr: 172.22.0.0/24 gateway: 172.22.0.1 attachConfiguration: br-osp - name: InternalApi nameLower: internal_api mtu: 1350 subnets: - name: internal_api attachConfiguration: br-osp vlan: 20 ipv4: allocationEnd: 172.17.0.250 allocationStart: 172.17.0.10 cidr: 172.17.0.0/24 - name: External nameLower: external subnets: - name: external ipv4: allocationEnd: 10.0.0.250 allocationStart: 10.0.0.10 cidr: 10.0.0.0/24 gateway: 10.0.0.1 attachConfiguration: br-ex - name: Storage nameLower: storage mtu: 1500 subnets: - name: storage ipv4: allocationEnd: 172.18.0.250 allocationStart: 172.18.0.10 cidr: 172.18.0.0/24 vlan: 30 attachConfiguration: br-osp - name: StorageMgmt nameLower: storage_mgmt mtu: 1500 subnets: - name: storage_mgmt ipv4: allocationEnd: 172.19.0.250 allocationStart: 172.19.0.10 cidr: 172.19.0.0/24 vlan: 40 attachConfiguration: br-osp - name: Tenant nameLower: tenant vip: False mtu: 1500 subnets: - name: tenant ipv4: allocationEnd: 172.20.0.250 allocationStart: 172.20.0.10 cidr: 172.20.0.0/24 vlan: 50 attachConfiguration: br-osp
linux-bridge
でネットワーク分離に VLAN を使用する場合に、以下のような処理が行われます。-
director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、
nmstate
を使用してワーカーノードにブリッジを設定します。 -
director Operator は、Multus CNI プラグイン設定を定義するネットワークごとにネットワーク接続定義を作成します。ネットワーク接続定義で VLAN ID を指定する場合には、Multus CNI プラグインはブリッジで
vlan-filtering
を有効にします。 -
director Operator は、仮想マシン上の各ネットワーク専用のインターフェイスを割り当てます。これは、
OpenStackVMSet
のネットワークテンプレートがマルチ NIC ネットワークテンプレートであることを意味します。
リソース仕様に以下の値を設定します。
metadata.name
- OpenStackNetConfig の名前に設定します。
spec
ネットワークを接続するためのネットワーク設定とネットワークの詳細を設定します。このセクションで使用できる値の詳細は、
openstacknetconfig
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstacknetconfig
ネットワーク仕様の設定が完了したら、ファイルを保存します。
-
director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、
ネットワーク設定を作成します。
$ oc apply -f openstacknetconfig.yaml -n openstack
検証
OpenStackNetConfig API と作成された子リソースを表示します。
$ oc get openstacknetconfig/openstacknetconfig -n openstack $ oc get openstacknetattachment -n openstack $ oc get openstacknet -n openstack
エラーが表示された場合は、基礎となる
network-attach-definition
とノードのネットワーク設定ポリシーを確認してください。$ oc get network-attachment-definitions -n openstack $ oc get nncp
3.4. OpenStackNetConfig を使用したジャンボフレームの設定
ブリッジに Jumbo Frames を使用するには、デバイスの設定を作成して、正しい MTU を設定します。
apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp7s0 description: Linux bridge with enp7s0 as a port name: br-osp state: up type: linux-bridge mtu: 9000 - name: enp7s0 description: Configuring enp7s0 on workers type: ethernet state: up mtu: 9000
3.5. OpenStackNetConfig による静的 IP 予約
OpenStackNetConfig
仕様の予約パラメーターを使用して、ホストおよびネットワークごとに静的 IP アドレスを予約できます。そこに提供される予約は、`OpenStackNet` 仕様の予約まで取り込まれ、自動生成された IP よりも優先されます。以下の例は、3 つのコントローラーと 2 つの Compute ノードを持つオーバークラウドを示しています。controller-2
と compute-1
を除くすべてのノードには静的予約があります。
spec: … reservations: compute-0: ipReservations: ctlplane: 172.22.0.140 internal_api: 172.17.0.40 storage: 172.18.0.40 tenant: 172.20.0.40 macReservations: {} controller-0: ipReservations: ctlplane: 172.22.0.120 external: 10.0.0.20 internal_api: 172.17.0.20 storage: 172.18.0.20 storage_mgmt: 172.19.0.20 tenant: 172.20.0.20 macReservations: {} controller-1: ipReservations: ctlplane: 172.22.0.130 external: 10.0.0.30 internal_api: 172.17.0.30 storage: 172.18.0.30 storage_mgmt: 172.19.0.30 tenant: 172.20.0.30 macReservations: {} controlplane: ipReservations: ctlplane: 172.22.0.110 external: 10.0.0.10 internal_api: 172.17.0.10 storage: 172.18.0.10 storage_mgmt: 172.19.0.10 macReservations: {} openstackclient-0: ipReservations: ctlplane: 172.22.0.251 external: 10.0.0.251 internal_api: 172.17.0.251 macReservations: {}
第4章 director Operator を使用した heat テンプレートおよび環境ファイルの追加
オーバークラウドをカスタマイズしたり、特定の機能を有効にする場合には、希望するカスタマイズ似合わせて heat テンプレートおよび環境ファイルを作成する必要があります。デプロイメントにカスタムのテンプレートおよび環境ファイルを追加して、オーバークラウドを設定できます。director Operator のコンテキストでは、オーバークラウドのデプロイメントを実行する前にこれらのファイルを ConfigMap リソースに保存します。
4.1. director Operator を使用したカスタムテンプレートの使用方法について
director Operator は、各ノードで Red Hat OpenStack Platform ソフトウェアを設定する準備が整うと、テンプレートのコアセットをプロビジョニングノードに適用する Ansible Playbook に変換します。
独自のカスタム heat テンプレートおよびカスタムロールファイルをオーバークラウドデプロイメントに追加するには、テンプレートファイルを tarball ファイルにアーカイブし、tarball ファイルのバイナリーコンテンツを tripleo-tarball-config
という名前の OpenShift ConfigMap に含める必要があります。この tarball ファイルには、テンプレートのコアセットを拡張するための複雑なディレクトリー構造を含めることができます。director Operator は、tarball ファイルから、heat テンプレートのコアセットと同じディレクトリーにファイルとディレクトリーをデプロイメントします。カスタムテンプレートのいずれかがコアコレクションのテンプレートと名前が同じ場合には、カスタムテンプレートはコアテンプレートを上書きします。
環境ファイル内のすべての参照は、tarball が抽出される TripleO Heat テンプレートに関連している必要があります。
たとえば、tarball ファイルに以下の YAML ファイルが含まれる場合があります。
$ tar -tf custom-config.tar.gz custom-template.yaml net-config-static-bridge.yaml net-config-static.yaml roles_data.yaml
custom-template.yaml
ファイルは、新しいファイルで、既存のテンプレートを上書きしません。ただし、net-config-static-bridge.yaml
ファイルおよび net-config-static.yaml
ファイルは、事前にプロビジョニングされたノードネットワーク設定のデフォルトの heat テンプレートを、roles_data.yaml
ファイルはデフォルトのロール設定を上書きします。
関連情報
4.2. オーバークラウド設定へのカスタムテンプレートの追加
カスタムテンプレートを tarball ファイルにアーカイブし、これらのテンプレートをオーバークラウドデプロイメントの一部として追加できるようにします。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - プロビジョニングしたノードに適用するカスタムテンプレートを作成します。
手順
カスタムテンプレートの場所に移動します。
$ cd ~/custom_templates
テンプレートを tarball にアーカイブします。
$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
ConfigMap を作成し、tarball をデータとして使用します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
検証
ConfigMap を表示します。
$ oc get configmap/tripleo-tarball-config -n openstack
4.3. director Operator を使用したカスタム環境ファイルの使用方法について
オーバークラウドに機能またはパラメーターを設定するには、デプロイメントの実行に環境ファイルを追加する必要があります。director Operator は heat-env-config
という名前の ConfigMap を使用して環境ファイルを保存し、取得します。heat-env-config
ConfigMap のデータには、以下の構文を使用します。
... data: <environment_file_name>: |+ <environment_file_contents>
たとえば、heat-env-config
ConfigMap には 2 つの環境ファイルが含まれる可能性があります。
... data: network_environment.yaml: |+ resource_registry: OS::TripleO::Compute::Net::SoftwareConfig: net-config-static-bridge-compute.yaml cloud_name.yaml: |+ parameter_defaults: CloudDomain: ocp4.example.com CloudName: overcloud.ocp4.example.com CloudNameInternal: overcloud.internalapi.ocp4.example.com CloudNameStorage: overcloud.storage.ocp4.example.com CloudNameStorageManagement: overcloud.storagemgmt.ocp4.example.com CloudNameCtlplane: overcloud.ctlplane.ocp4.example.com
-
最初の環境ファイルは
network_environment.yaml
という名前で、このファイルにはネットワークインターフェイス設定を適切な heat テンプレートにマッピングするresource_registry
セクションが含まれています。 -
2 番目の環境ファイルは
cloud_name.yaml
という名前で、オーバークラウドのホスト名に関連するパラメーターを設定するparameter_defaults
セクションが含まれます。 -
director Operator がオーバークラウドをデプロイする時に、Operator には
heat-env-config
ConfigMap からの両方のファイルがデプロイメントで追加されます。
関連情報
4.4. オーバークラウド設定へのカスタム環境ファイルの追加
ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap にカスタム環境ファイルのセットをアップロードします。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - オーバークラウドデプロイメント用のカスタム環境ファイルを作成します。
手順
heat-env-config
ConfigMap を作成し、環境ファイルが含まれるディレクトリーをデータとして使用します。$ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -
検証
ConfigMap を表示します。
$ oc get configmap/heat-env-config -n openstack
関連情報
第5章 director Operator を使用したオーバークラウドノードの作成
Red Hat OpenStack Platform オーバークラウドは、コントロールプレーンサービスを提供するコントロールノードや、コンピュートリソースを提供する Compute ノードなど、複数のノードで設定されます。高可用性に対応したオーバークラウドには、3 つのコントローラーノードと少なくとも 1 つの Compute ノードが必要です。OpenStackBaremetalSet リソースで Compute ノードを、OpenStackControlPlane リソースでコントローラーノードを作成することができます。
デフォルトでは、自動検出はなく、仮想マシンがホストされている OpenShift ワーカーノードで動作します。OpenShift ワーカーノードの問題を自動検出する方法の詳細は、マシンのヘルスチェックのデプロイ を参照してください。
5.1. OpenStackControlPlane でのコントロールプレーンの作成
オーバークラウドのコントロールプレーンには、オーバークラウドの機能を管理するメインの Red Hat OpenStack Platform サービスが含まれます。コントロールプレーンは、通常 3 つのコントローラーノードで設定されており、他のコントロールプレーンベースのコンポーザブルロールにスケーリングできます。コンポーザブルロールを使用する場合は、各サービスは 3 つの追加の専用ノードで実行される必要があり、Pacemaker のクォーラムを維持するために、コントロールプレーン内のノードの合計数を追加する必要があります。
OpenStackControlPlane カスタムリソースは、コントロールプレーンベースのノードを OpenShift Virtualization 内の仮想マシンとして作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。
手順
ワークステーションに
openstack-controller.yaml
という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。たとえば、3 つのコントローラーノードで設定されるコントロールプレーンの仕様は以下のとおりです。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud namespace: openstack spec: openStackClientNetworks: - ctlplane - internal_api - external openStackClientStorageClass: host-nfs-storageclass passwordSecret: userpassword virtualMachineRoles: Controller: roleName: Controller roleCount: 3 networks: - ctlplane - internal_api - external - tenant - storage - storage_mgmt cores: 12 memory: 64 rootDisk: diskSize: 100 baseImageVolumeName: openstack-base-img # storageClass must support RWX to be able to live migrate VMs storageClass: host-nfs-storageclass storageAccessMode: ReadWriteMany # When using OpenShift Virtualization with OpenShift Container Platform Container Storage, # specify RBD block mode persistent volume claims (PVCs) when creating virtual machine disks. # With virtual machine disks, RBD block mode volumes are more efficient and provide better # performance than Ceph FS or RBD filesystem-mode PVCs. # To specify RBD block mode PVCs, use the 'ocs-storagecluster-ceph-rbd' storage class and # VolumeMode: Block. storageVolumeMode: Filesystem # optional configure additional discs to be attached to the VMs, # need to be configured manually inside the VMs where to be used. additionalDisks: - name: datadisk diskSize: 500 storageClass: host-nfs-storageclass storageAccessMode: ReadWriteMany storageVolumeMode: Filesystem openStackRelease: "16.2"
リソース仕様に以下の値を設定します。
metadata.name
-
オーバークラウドコントロールプレーンの名前を
overcloud
に設定します。 metadata.namespace
-
director Operator namespace を
openstack
に設定します。 spec
コントロールプレーンの設定を指定します。このセクションで使用できる値の詳細は、
openstackcontrolplane
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackcontrolplane
コントロールプレーンの仕様の設定が完了したら、ファイルを保存します。
コントロールプレーンを作成します。
$ oc create -f openstack-controller.yaml -n openstack
OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。
director Operator は、OpenStackControlPlane リソースの一部として、リモートシェルからアクセスして RHOSP コマンドを実行できる OpenStackClient Pod も作成します。
検証
コントロールプレーンのリソースを表示します。
$ oc get openstackcontrolplane/overcloud -n openstack
OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。
$ oc get openstackvmsets -n openstack
仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。
$ oc get virtualmachines
openstackclient
リモートシェルにアクセスできるかをテストします。$ oc rsh -n openstack openstackclient
5.2. OpenStackProvisionServer を使用したプロビジョニングサーバーの作成 (オプション)
プロビジョニングサーバーは、Red Hat OpenStack Platform (RHOSP) の Compute ノードをプロビジョニングするための特定の Red Hat Enterprise Linux (RHEL) QCOW2 イメージを提供します。OpenStackProvisionServer
は、作成した OpenStackBaremetalSets
に対して自動的に作成されます。ただし、OpenStackProvisionServer
を手動で作成し、後でその名前を将来の OpenStackBaremetalSets
に提供することもできます。
OpenStackProvisionServer
は、特定の RHEL QCOW2 イメージ用に OpenShift Container Platform プロビジョニングネットワーク上に Apache サーバーを作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
ワークステーションに
openstack-provision.yaml
という名前のファイルを作成します。プロビジョニングサーバーのリソース仕様を含めます。たとえば、特定の RHEL 8.4 QCOW2 イメージを使用する Provisioing サーバーの仕様は次のとおりです。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackProvisionServer metadata: name: openstack-provision-server namespace: openstack spec: baseImageUrl: http://<source_host>/rhel-guest-image-8.4-992.x86_64.qcow2 port: 8080
リソース仕様に以下の値を設定します。
metadata.name
- OpenStackProvisionServer を識別する名前を設定します。
metadata.namespace
-
director Operator namespace を
openstack
に設定します。 spec
baseImageURL
- Provisioing サーバーの RHEL QCOW2 イメージの初期ソースを設定します。イメージは、サーバーの作成時にこのリモートソースからダウンロードされます。
port
- デフォルトでは、8080 に設定されています。特定のポート設定に合わせて変更できます。
このセクションで使用できる値の詳細は、
OpenStackProvisionServer
CRD のカスタムリソース定義の仕様スキーマを参照してください。$ oc describe crd openstackprovisionserver
Provisioning サーバー仕様の設定が完了したら、ファイルを保存します。
Provisioning サーバーを作成します。
$ oc create -f openstack-provision-server.yaml -n openstack
検証
Provisioning サーバーのリソースを表示します。
$ oc get openstackprovisionserver/openstack-provision-server -n openstack
5.3. OpenStackBaremetalSet を使用した Compute ノードの作成
Compute ノードは Red Hat OpenStack Platform 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後に Compute ノードの数をスケーリングできます。
OpenStackBaremetalSet カスタムリソースは、OpenShift Container Platform が管理するベアメタルマシンから Compute ノードを作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。
手順
ワークステーションに
openstack-compute.yaml
という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。たとえば、Compute ノード 1 つの仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBaremetalSet metadata: name: compute namespace: openstack spec: count: 1 baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2 deploymentSSHSecret: osp-controlplane-ssh-keys # If you manually created an OpenStackProvisionServer, you can use it here, # otherwise the director Operator will create one for you (with `baseImageUrl` as the image that it server) # to use with this OpenStackBaremetalSet # provisionServerName: openstack-provision-server ctlplaneInterface: enp2s0 networks: - ctlplane - internal_api - tenant - storage roleName: Compute passwordSecret: userpassword
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前を
overcloud
に設定します。 metadata.namespace
-
director Operator namespace を
openstack
に設定します。 spec
Compute ノードの設定を定義します。このセクションで使用できる値の詳細は、
openstackbaremetalset
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackbaremetalset
Compute ノードの仕様の設定が完了したら、ファイルを保存します。
Compute ノードを作成します。
$ oc create -f openstack-compute.yaml -n openstack
検証
Compute ノードのリソースを表示します。
$ oc get openstackbaremetalset/compute -n openstack
OpenShift が管理するベアメタルマシンを表示し、Compute ノードの作成を確認します。
$ oc get baremetalhosts -n openshift-machine-api
第6章 director Operator を使用したオーバークラウドソフトウェアの設定
オーバークラウドの仮想ノードおよびベアメタルノードをプロビジョニングしたら、オーバークラウドを設定できます。OpenStackConfigGenerator
リソースを作成して Ansible Playbook を生成し、ノードを Red Hat Customer Portal または Red Hat Satellite に登録してから、OpenStackDeploy
リソースを作成して設定をノードに適用する必要があります。
6.1. OpenStackConfigGenerator を使用したオーバークラウド設定用の Ansible Playbook の作成
オーバークラウドのインフラストラクチャーをプロビジョニングした後に、オーバークラウドノード上に Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する Ansible Playbook のセットを作成する必要があります。これらの Playbook を OpenStackPlaybookGenerator リソースで作成し、RHOSP director の config-download
機能を使用して heat 設定を Playbook に変換します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - 必要に応じて作成される OpenStackControlPlane および OpenStackBarementalSets。
-
リモート Git リポジトリーの認証情報が含まれる
git-secret
シークレットを設定します。 -
カスタム heat テンプレートが含まれる
tripleo-tarball-config
ConfigMap を設定します。 -
カスタム環境ファイルが含まれる
heat-env-config
ConfigMap を設定します。
手順
ワークステーションに
openstack-config-generator.yaml
という名前のファイルを作成します。リソース仕様を追加して Ansible Playbook を生成します。たとえば、Playbook を生成する仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: default namespace: openstack spec: enableFencing: true gitSecret: git-secret imageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2 heatEnvConfigMap: heat-env-config # List of heat environment files to include from tripleo-heat-templates/environments heatEnvs: - ssl/tls-endpoints-public-dns.yaml - ssl/enable-tls.yaml tarballConfigMap: tripleo-tarball-config
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前に設定します。デフォルトは
default
です。 metadata.namespace
-
director の Operator の namespace (デフォルトでは
openstack
) に設定します。 spec.enableFencing
- フェンシングを有効にするために必要な heat 環境ファイルの自動作成を有効にします。
注記本番 OSP 環境では、フェンシングを有効にする必要があります。pacemaker を実行する仮想マシンには、
fence-agents-kubevirt
パッケージが必要です。spec.gitSecret
-
Git 認証の認証情報を含む ConfigMap に設定します (デフォルトでは
git-secret
)。 spec.heatEnvs
- Playbook の生成に使用されるデフォルトの Tripleo 環境ファイルのリスト。
spec.heatEnvConfigMap
-
カスタム環境ファイルを含む ConfigMap に設定します (デフォルトは
heat-env-config
)。 spec.tarballConfigMap
-
カスタムの heat テンプレートを使用して tarball が含まれる ConfigMap (
tripleo-tarball-config
) に設定します。
spec
セクションで使用できる値の詳細は、openstackconfiggenerator
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackconfiggenerator
Ansible 設定ジェネレーター仕様の設定が完了したら、ファイルを保存します。
Ansible 設定ジェネレーターを作成します。
$ oc create -f openstack-config-generator.yaml -n openstack
検証
設定ジェネレーターのリソースを表示します。
$ oc get openstackconfiggenerator/default -n openstack
6.2. 一時 heat コンテナーイメージのソースパラメーター
エフェメラル heat サービスを作成するには、OpenStackPlaybookGenerator リソースに registry.redhat.io からの固有のコンテナーイメージが 4 つ必要です。
-
openstack-heat-api
-
openstack-heat-engine
-
openstack-mariadb
-
openstack-rabbitmq
これらのイメージのソースの場所は、spec.ephemeralHeatSettings
パラメーターで変更できます。たとえば、これらのイメージまたは Red Hat Satellite Server をホストする場合には、これらのイメージのソースとして Red Hat Satellite Server を使用するように、spec.ephemeralHeatSettings
パラメーターおよびサブパラメーターを変更できます。
apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: default namespace: openstack spec: … ephemeralHeatSettings: heatAPIImageURL: <heat_api_image_location> heatEngineImageURL: <heat_engine_image_location> mariadbImageURL: <mariadb_image_location> rabbitImageURL: <rabbitmq_image-location>
リソース仕様に以下の値を設定します。
spec.ephemeralHeatSettings.heatAPIImageURL
- heat API のイメージの場所。
spec.ephemeralHeatSettings.heatEngineImageURL
- heat エンジンのイメージの場所。
spec.ephemeralHeatSettings.mariadbImageURL
- MariaDB のイメージの場所。
spec.ephemeralHeatSettings.rabbitImageURL
- RabbitMQ のイメージの場所。
6.3. 生成インタラクティブモードの設定
設定生成操作をデバッグするには、OpenStackConfigGenerator リソースを対話モードを使用するように設定できます。
apiVersion: osp-director.openstack.org/v1beta1
kind: OpenStackConfigGenerator
metadata:
name: default
namespace: openstack
spec:
…
interactive: true
このモードでは、OpenStackConfigGenerator リソースは、Playbook のレンダリングを開始する環境を作成しますが、Playbook は自動的にレンダリングされません。接頭辞が generate-config
の OpenStackConfigGenerator Pod が起動したら、Pod に rsh
し、ファイルと Playbook のレンダリングを検査できます。
$ oc rsh $(oc get pod -o name -l job-name=generate-config-default) $ ls -la /home/cloud-admin/ ... config 1 config-custom 2 config-passwords 3 create-playbooks.sh 4 process-heat-environment.py 5 tht-tars 6
- 1
- director オペレーターによって自動レンダリングされたファイルを格納するディレクトリー
- 2
- heatEnvConfigMap 経由で提供される環境ファイルを格納するディレクトリー
- 3
- director オペレーターによって作成されたオーバークラウドサービスのパスワードを格納するディレクトリー
- 4
- Ansible Playbook をレンダリングするスクリプト
- 5
create-playbooks
で使用される内部スクリプト。文書化されていない heat クライアントのマップパラメーターのマージを複製します。- 6
tarballConfigMap
からの tarball を格納するディレクトリー
6.4. tripleo-heat-templates/environments からの heat 環境の使用
TripleO は、パブリックエンドポイント用の TLS など、さまざまなデプロイメントシナリオ用の heat 環境ファイルと共に提供されます。heatEnvs
パラメーターリストを使用して、heat 環境ファイルを Playbook 生成に含めることができます。
apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: default namespace: openstack spec: … heatEnvs: - ssl/tls-endpoints-public-dns.yaml - ssl/enable-tls.yaml
6.5. オーバークラウドのオペレーティングシステムの登録
director Operator がノードにオーバークラウドソフトウェアを設定する前に、全ノードのオペレーティングシステムを Red Hat カスタマーポータルまたは Red Hat Satellite Server のいずれかに登録して、ノードのリポジトリーを有効にする必要があります。
OpenStackControlPlane リソースの一部として、director Operator はリモートシェル経由でアクセスする OpenStackClient Pod を作成し、Red Hat OpenStack Platform (RHOSP) コマンドを実行します。この Pod には、/home/cloud-admin/ctlplane-ansible-inventory
という名前の ansible インベントリースクリプトも含まれています。
ノードを登録するには、redhat_subscription
Ansible モジュールを OpentackClient Pod のインベントリースクリプトと共に使用できます。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
- OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
手順
openstackclient
のリモートシェルにアクセスします。$ 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-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.9-for-rhel-8-x86_64-rpms - openstack-16.2-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms tasks: - name: Register system redhat_subscription: username: myusername password: p@55w0rd! org_id: 1234567 release: 8.4 pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd - name: Disable all repos command: "subscription-manager repos --disable *" - name: Enable Controller node repos command: "subscription-manager repos --enable {{ item }}" with_items: "{{ repos }}"
このプレイには、以下の 3 つのタスクが含まれます。
- ノードを登録します。
- 自動的に有効化されるリポジトリーをすべて無効にする。
-
コントローラーノードに関連するリポジトリーだけを有効にする。リポジトリーは
repos
変数でリストされます。
必要なリポジトリーにオーバークラウドノードを登録します。
ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ./rhsm.yaml
6.6. 最新の OpenStackConfigVersion を取得する
さまざまなバージョンの Ansible Playbook が git リポジトリーに保存されています。バージョンごとに、git の hash/digest
を参照する OpenStackConfigVersion オブジェクトが存在します。
手順
最新の OpenStackConfigVersion の
hash/digest
を選択します。$ oc get -n openstack --sort-by {.metadata.creationTimestamp} osconfigversions -o json
OpenStackConfigVersion オブジェクトには、Ansible Playbook のバージョン間の変更を簡単に比較するために使用できる git diff
属性もあります。
6.7. director Operator を使用したオーバークラウドの設定の適用
コントロールプレーンを作成してベアメタルの Compute ノードをプロビジョニングし、各ノードにソフトウェアを設定する Ansible Playbook を生成してからしか、director Operator でオーバークラウドを設定できません。OpenStackDeploy リソースを作成すると、director Operator は ansible Playbook を実行してオーバークラウドを設定するジョブを作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
- OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
- OpentackConfigGenerator を使用して、オーバークラウドの Ansible Playbook 設定を作成します。
- OpenenstackConfigVersion を使用して、オーバークラウドの設定に使用する ansible Playbook のハッシュ/ダイジェストを選択します。
手順
ワークステーションに
openstack-deployment.yaml
という名前のファイルを作成します。リソース仕様を Ansible Playbook に含めます。以下に例を示します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: default spec: configVersion: n5fch96h548h75hf4hbdhb8hfdh676h57bh96h5c5h59hf4h88h… configGenerator: default
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前を設定します。デフォルトは
default
です。 metadata.namespace
-
デフォルトの
openstack
で、diretor Operator namespace に設定します。 spec.configVersion
- デプロイする Playbook の設定バージョン/git ハッシュ。
spec.configGenerator
- configGenerator の名前。
spec セクションで使用できる値の詳細は、
openstackdeploy
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackdeploy
OpenStackDeploy 仕様の設定が完了したら、ファイルを保存します。
OpenStackDeploy リソースを作成します。
$ oc create -f openstack-deployment.yaml -n openstack
デプロイメントが実行すると、Ansible Playbook を実行するための Kubernetes ジョブが作成されます。ジョブのログを追跡して、実行中の Ansible Playbook を確認できます。
$ oc logs -f jobs/deploy-openstack-default
さらに、
openstackclient
Pod にログインすることで、実行された Ansible Playbook に手動でアクセスできます。/home/cloud-admin/work/directory
には、現在のデプロイメントの ansible Playbook とansible.log
ファイルがあります。
第7章 director operator のデプロイメントシナリオ: ハイパーコンバージドインフラストラクチャー (HCI) が含まれるオーバークラウド
director Operator を使用して、ハイパーコンバージドインフラストラクチャー (HCI) を設定してオーバークラウドをデプロイできます。このシナリオでは、Compute サービスと Ceph Storage OSD サービスの両方を同じノードにインストールします。
前提条件
- お使いの Compute HCI ノードに OSD として使用する追加のディスクが必要である。
7.1. ベースオペレーティングシステムのデータボリュームの作成
コントローラー仮想マシンのベースオペレーティングシステムのイメージを保存するには、OpenShift Container Platform (OCP) クラスターでデータボリュームを作成する必要があります。
前提条件
- Red Hat Enterprise Linux 8.4 QCOW2 イメージをワークステーションにダウンロードします。このイメージは、Red Hat カスタマーポータルの 製品ダウンロード セクションからダウンロードできます。
virtctl
クライアントツールをワークステーションにインストールします。以下のコマンドを実行して、このツールを Red Hat Enterprise Linux ワークステーションにインストールできます。$ sudo subscription-manager repos --enable=cnv-4.10-for-rhel-8-x86_64-rpms $ sudo dnf install -y kubevirt-virtctl
virt-customize
クライアントツールをワークステーションにインストールします。このツールは、以下のコマンドを使用して Red Hat Enterprise Linux ワークステーションにインストールできます。$ dnf install -y libguestfs-tools-c
手順
access.redhat.com からダウンロードしたデフォルトの QCOW2 イメージでは、biosdev の予測可能なネットワークインターフェイス名は使用されません。biosdev の予測可能なネットワークインターフェイス名を使用するように、
virt-customize
でイメージを変更します。$ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(kernelopts=.*\)net.ifnames=0 \(.*\)/\1\2/" /boot/grub2/grubenv' $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(GRUB_CMDLINE_LINUX=.*\)net.ifnames=0 \(.*\)/\1\2/" /etc/default/grub' --truncate /etc/machine-id
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
です。
-
OpenStackControlPlane リソースおよび個別の OpenStackVmSet リソースの作成時に、
baseImageVolumeName
パラメーターをデータボリューム名に設定します。... spec: ... baseImageVolumeName: openstack-base-img ...
7.2. リモート Git リポジトリーの認証情報の追加
director Operator はレンダリングされた Ansible Playbook をリモート Git リポジトリーに保管し、このリポジトリーを使用してオーバークラウドの設定に対する変更を追跡します。SSH 認証をサポートする Git リポジトリーであれば、どのリポジトリーでも使用できます。git-secret
という名前の OpenShift Secret リソースとして Git リポジトリーの詳細を指定する必要があります。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - director オペレーターのリモート Git リポジトリーを作成して、オーバークラウド向けに生成された設定を保存します。
-
SSH キーペアを準備します。公開鍵を Git リポジトリーにアップロードし、秘密鍵を利用できる状態にして、
git-secret
Secret リソースに追加します。
手順
Secret リソースを作成します。
$ oc create secret generic git-secret -n openstack --from-file=git_ssh_identity=<path_to_private_SSH_key> --from-literal=git_url=<git_server_URL>
git-secret
Secret リソースには、2 つのキーと値のペアが含まれます。git_ssh_identity
-
Git リポジトリーにアクセスするための秘密鍵
--from-file
オプションは、SSH 秘密鍵ファイルの内容を保存します。 git_url
-
設定を保存する git リポジトリーの SSH URL。
--from-literal
オプションは、このキーに入力した URL を保存します。
検証
Secret リソースを表示します。
$ oc get secret/git-secret -n openstack
関連情報
7.3. ノードの root パスワードの設定
各ノードのパスワードを使用して root
ユーザーにアクセスするには、userpassword
という名前の Secret リソースに root
パスワードを設定します。
ノードの root パスワードの設定はオプションです。root
パスワードを設定ていない場合には、osp-controlplane-ssh-keys
シークレットで定義した SSH 鍵を使用してノードにログインすることができます。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
選択したパスワードを base64 値に変換します。
$ echo -n "p@ssw0rd!" | base64 cEBzc3cwcmQh
注記-n
オプションは、echo 出力から末尾の改行を削除します。ワークステーションに
openstack-userpassword.yaml
という名前のファイルを作成します。ファイルに、Secret の以下のリソース仕様を追加します。apiVersion: v1 kind: Secret metadata: name: userpassword namespace: openstack data: NodeRootPassword: "cEBzc3cwcmQh"
NodeRootPassword
パラメーターを base64 でエンコードされたパスワードに設定します。userpassword
シークレットを作成します。$ oc create -f openstack-userpassword.yaml -n openstack
OpenStackControlPlane
または OpenStackBaremetalSet
を作成するときに、passwordSecret
に userpassword
Secret を入力します。
apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud namespace: openstack spec: passwordSecret: <userpassword>
-
<userpassword>
をuserpassword
Secret に置き換えます。
関連情報
7.4. OpenStackNetConfig を使用したオーバークラウドのコントロールプレーンネットワークの作成
OpenStackNetConfig で、オーバークラウド用に少なくとも 1 つのコントロールプレーンネットワークを定義する必要があります。IP アドレスの割り当てに加えて、ネットワーク定義には OpenStackNetAttachment のマッピング情報が含まれます。OpenShift Virtualization はこの情報を使用して、仮想マシンをネットワークに接続します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
ワークステーション上に
osnetconfig.yaml
という名前のファイルを作成します。ctlplane
という名前のコントロールプレーンネットワークのリソース仕様を含めます。たとえば、各ワーカーノードのenp6s0
イーサネットデバイスに接続された Linux ブリッジを使用するコントロールプレーンの仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 description: Linux bridge with enp6s0 as a port name: br-osp state: up type: linux-bridge mtu: 1500 # optional DnsServers list dnsServers: - 192.168.25.1 # optional DnsSearchDomains list dnsSearchDomains: - osptest.test.metalkube.org - some.other.domain # DomainName of the OSP environment domainName: osptest.test.metalkube.org networks: - name: Control nameLower: ctlplane subnets: - name: ctlplane ipv4: allocationEnd: 172.22.0.250 allocationStart: 172.22.0.100 cidr: 172.22.0.0/24 gateway: 172.22.0.1 attachConfiguration: br-osp # optional: configure static mapping for the networks per nodes. If there is none, a random gets created reservations: controller-0: ipReservations: ctlplane: 172.22.0.120 compute-0: ipReservations: ctlplane: 172.22.0.140
ネットワーク仕様で次の値を設定します。
name
- コントロールプレーンネットワークの名 (Control) を設定します。
nameLower
- コントロールプレーンネットワークの下位の名前 (ctlplane) を設定します。
subnets
- サブネットの仕様を設定します。
subnets.name
- コントロールプレーンサブネットの名前 (ctlplane) を設定します。
subnets.attachConfiguration
- どのアタッチ設定を使用するかの参照を設定します。
subnets.ipv4
- allocationStart、allocationEnd、cidr、ゲートウェイ、オプションのルートリスト (宛先と nexthop を含む) を含む ipv4 サブネットの詳細
このセクションで使用できる値の詳細は、
openstacknetconfig
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstacknetconfig
ネットワーク仕様の設定が完了したら、ファイルを保存します。
コントロールプレーンネットワークを作成します。
$ oc create -f osnetconfig.yaml -n openstack
検証
コントロールプレーンネットワークのリソースを表示します。
$ oc get openstacknetconfig/openstacknetconfig
7.5. OpenStackNetConfig を使用したネットワーク分離用の VLAN ネットワークの作成
コンポーザブルネットワークのネットワーク分離を実装するには、追加のネットワークを作成する必要があります。このネットワーク分離を実現するには、コンポーザブルネットワークを個別の VLAN ネットワークに配置できます。OpenStackNetConfig リソースには、IP アドレスの割り当てに加えて、OpenShift Virtualization が仮想マシンを VLAN ネットワークにアタッチするために使用するネットワーク設定ポリシーを定義する情報が含まれます。
デフォルトの Red Hat OpenStack Platform ネットワークを使用するには、各ネットワークを定義する OpenStackNetConfig リソースを作成する必要があります。
表7.1 デフォルトの Red Hat OpenStack Platform ネットワーク
Network | VLAN | CIDR | 割り当て |
---|---|---|---|
External | 10 | 10.0.0.0/24 | 10.0.0.10 - 10.0.0.250 |
InternalApi | 20 | 172.17.0.0/24 | 172.17.0.10 - 172.17.0.250 |
Storage | 30 | 172.18.0.0/24 | 172.18.0.10 - 172.18.0.250 |
StorageMgmt | 40 | 172.19.0.0/24 | 172.19.0.10 - 172.19..250 |
テナント | 50 | 172.20.0.0/24 | 172.20.0.10 - 172.20.0.250 |
各ネットワークごとに異なるネットワークの詳細を使用するには、カスタム network_data.yaml
ファイルを作成する必要があります。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
ネットワーク設定用のファイルを作成します。VLAN ネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの
enp6s0
およびenp7s0
イーサネットデバイスに接続された Linux ブリッジbr-ex
およびbr-osp
を介して VLAN タグ付きトラフィックを管理する内部 API、ストレージ、ストレージ管理、テナント、および外部ネットワークの仕様は次のとおりです。:kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp7s0 description: Linux bridge with enp7s0 as a port name: br-osp state: up type: linux-bridge mtu: 1500 br-ex: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 description: Linux bridge with enp6s0 as a port name: br-ex state: up type: linux-bridge mtu: 1500 # optional DnsServers list dnsServers: - 172.22.0.1 # optional DnsSearchDomains list dnsSearchDomains: - osptest.test.metalkube.org - some.other.domain # DomainName of the OSP environment domainName: osptest.test.metalkube.org networks: - name: Control nameLower: ctlplane subnets: - name: ctlplane ipv4: allocationEnd: 172.22.0.250 allocationStart: 172.22.0.10 cidr: 172.22.0.0/24 gateway: 172.22.0.1 attachConfiguration: br-osp - name: InternalApi nameLower: internal_api mtu: 1350 subnets: - name: internal_api attachConfiguration: br-osp vlan: 20 ipv4: allocationEnd: 172.17.0.250 allocationStart: 172.17.0.10 cidr: 172.17.0.0/24 - name: External nameLower: external subnets: - name: external ipv4: allocationEnd: 10.0.0.250 allocationStart: 10.0.0.10 cidr: 10.0.0.0/24 gateway: 10.0.0.1 attachConfiguration: br-ex - name: Storage nameLower: storage mtu: 1500 subnets: - name: storage ipv4: allocationEnd: 172.18.0.250 allocationStart: 172.18.0.10 cidr: 172.18.0.0/24 vlan: 30 attachConfiguration: br-osp - name: StorageMgmt nameLower: storage_mgmt mtu: 1500 subnets: - name: storage_mgmt ipv4: allocationEnd: 172.19.0.250 allocationStart: 172.19.0.10 cidr: 172.19.0.0/24 vlan: 40 attachConfiguration: br-osp - name: Tenant nameLower: tenant vip: False mtu: 1500 subnets: - name: tenant ipv4: allocationEnd: 172.20.0.250 allocationStart: 172.20.0.10 cidr: 172.20.0.0/24 vlan: 50 attachConfiguration: br-osp
linux-bridge
でネットワーク分離に VLAN を使用する場合に、以下のような処理が行われます。-
director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、
nmstate
を使用してワーカーノードにブリッジを設定します。 -
director Operator は、Multus CNI プラグイン設定を定義するネットワークごとにネットワーク接続定義を作成します。ネットワーク接続定義で VLAN ID を指定する場合には、Multus CNI プラグインはブリッジで
vlan-filtering
を有効にします。 -
director Operator は、仮想マシン上の各ネットワーク専用のインターフェイスを割り当てます。これは、
OpenStackVMSet
のネットワークテンプレートがマルチ NIC ネットワークテンプレートであることを意味します。
リソース仕様に以下の値を設定します。
metadata.name
- OpenStackNetConfig の名前に設定します。
spec
ネットワークを接続するためのネットワーク設定とネットワークの詳細を設定します。このセクションで使用できる値の詳細は、
openstacknetconfig
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstacknetconfig
ネットワーク仕様の設定が完了したら、ファイルを保存します。
-
director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、
ネットワーク設定を作成します。
$ oc apply -f openstacknetconfig.yaml -n openstack
検証
OpenStackNetConfig API と作成された子リソースを表示します。
$ oc get openstacknetconfig/openstacknetconfig -n openstack $ oc get openstacknetattachment -n openstack $ oc get openstacknet -n openstack
エラーが表示された場合は、基礎となる
network-attach-definition
とノードのネットワーク設定ポリシーを確認してください。$ oc get network-attachment-definitions -n openstack $ oc get nncp
7.6. OpenStackControlPlane でのコントロールプレーンの作成
オーバークラウドのコントロールプレーンには、オーバークラウドの機能を管理するメインの Red Hat OpenStack Platform サービスが含まれます。コントロールプレーンは、通常 3 つのコントローラーノードで設定されており、他のコントロールプレーンベースのコンポーザブルロールにスケーリングできます。コンポーザブルロールを使用する場合は、各サービスは 3 つの追加の専用ノードで実行される必要があり、Pacemaker のクォーラムを維持するために、コントロールプレーン内のノードの合計数を追加する必要があります。
OpenStackControlPlane カスタムリソースは、コントロールプレーンベースのノードを OpenShift Virtualization 内の仮想マシンとして作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。
手順
ワークステーションに
openstack-controller.yaml
という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。たとえば、3 つのコントローラーノードで設定されるコントロールプレーンの仕様は以下のとおりです。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud namespace: openstack spec: openStackClientNetworks: - ctlplane - internal_api - external openStackClientStorageClass: host-nfs-storageclass passwordSecret: userpassword virtualMachineRoles: Controller: roleName: Controller roleCount: 3 networks: - ctlplane - internal_api - external - tenant - storage - storage_mgmt cores: 12 memory: 64 rootDisk: diskSize: 100 baseImageVolumeName: openstack-base-img # storageClass must support RWX to be able to live migrate VMs storageClass: host-nfs-storageclass storageAccessMode: ReadWriteMany # When using OpenShift Virtualization with OpenShift Container Platform Container Storage, # specify RBD block mode persistent volume claims (PVCs) when creating virtual machine disks. # With virtual machine disks, RBD block mode volumes are more efficient and provide better # performance than Ceph FS or RBD filesystem-mode PVCs. # To specify RBD block mode PVCs, use the 'ocs-storagecluster-ceph-rbd' storage class and # VolumeMode: Block. storageVolumeMode: Filesystem # optional configure additional discs to be attached to the VMs, # need to be configured manually inside the VMs where to be used. additionalDisks: - name: datadisk diskSize: 500 storageClass: host-nfs-storageclass storageAccessMode: ReadWriteMany storageVolumeMode: Filesystem openStackRelease: "16.2"
リソース仕様に以下の値を設定します。
metadata.name
-
オーバークラウドコントロールプレーンの名前を
overcloud
に設定します。 metadata.namespace
-
director Operator namespace を
openstack
に設定します。 spec
コントロールプレーンの設定を指定します。このセクションで使用できる値の詳細は、
openstackcontrolplane
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackcontrolplane
コントロールプレーンの仕様の設定が完了したら、ファイルを保存します。
コントロールプレーンを作成します。
$ oc create -f openstack-controller.yaml -n openstack
OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。
director Operator は、OpenStackControlPlane リソースの一部として、リモートシェルからアクセスして RHOSP コマンドを実行できる OpenStackClient Pod も作成します。
検証
コントロールプレーンのリソースを表示します。
$ oc get openstackcontrolplane/overcloud -n openstack
OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。
$ oc get openstackvmsets -n openstack
仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。
$ oc get virtualmachines
openstackclient
リモートシェルにアクセスできるかをテストします。$ oc rsh -n openstack openstackclient
7.7. テンプレートおよび環境ファイル用のディレクトリーの作成
ワークステーションにディレクトリーを作成し、カスタムテンプレートおよび環境ファイルを保管します。このファイルは、OpenShift Container Platform (OCP) の ConfigMap にアップロードします。
手順
カスタムテンプレートのディレクトリーを作成します。
$ mkdir custom_templates
カスタム環境ファイルのディレクトリーを作成します。
$ mkdir custom_environment_files
7.8. HCI Compute ノード用のカスタム NIC heat テンプレート
以下は、HCI Compute ノードの NIC 設定が含まれる heat テンプレート例です。
heat_template_version: rocky description: > Software Config to drive os-net-config to configure VLANs for the Compute role. parameters: ControlPlaneIp: default: '' description: IP address/subnet on the ctlplane network type: string ControlPlaneSubnetCidr: default: '' description: > The subnet CIDR of the control plane network. (The parameter is automatically resolved from the ctlplane subnet's cidr attribute.) type: string ControlPlaneDefaultRoute: default: '' description: The default route of the control plane network. (The parameter is automatically resolved from the ctlplane subnet's gateway_ip attribute.) type: string ControlPlaneStaticRoutes: default: [] description: > Routes for the ctlplane network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ControlPlaneMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the network. (The parameter is automatically resolved from the ctlplane network's mtu attribute.) type: number StorageIpSubnet: default: '' description: IP address/subnet on the storage network type: string StorageNetworkVlanID: default: 30 description: Vlan ID for the storage network traffic. type: number StorageMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the Storage network. type: number StorageInterfaceRoutes: default: [] description: > Routes for the storage network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json StorageMgmtIpSubnet: default: '' description: IP address/subnet on the storage_mgmt network type: string StorageMgmtNetworkVlanID: default: 40 description: Vlan ID for the storage_mgmt network traffic. type: number StorageMgmtMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the StorageMgmt network. type: number StorageMgmtInterfaceRoutes: default: [] description: > Routes for the storage_mgmt network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json InternalApiIpSubnet: default: '' description: IP address/subnet on the internal_api network type: string InternalApiNetworkVlanID: default: 20 description: Vlan ID for the internal_api network traffic. type: number InternalApiMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the InternalApi network. type: number InternalApiInterfaceRoutes: default: [] description: > Routes for the internal_api network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json TenantIpSubnet: default: '' description: IP address/subnet on the tenant network type: string TenantNetworkVlanID: default: 50 description: Vlan ID for the tenant network traffic. type: number TenantMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the Tenant network. type: number TenantInterfaceRoutes: default: [] description: > Routes for the tenant network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ExternalMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the External network. type: number DnsServers: # Override this via parameter_defaults default: [] description: > DNS servers to use for the Overcloud (2 max for some implementations). If not set the nameservers configured in the ctlplane subnet's dns_nameservers attribute will be used. type: comma_delimited_list DnsSearchDomains: # Override this via parameter_defaults default: [] description: A list of DNS search domains to be added (in order) to resolv.conf. type: comma_delimited_list resources: MinViableMtu: # This resource resolves the minimum viable MTU for interfaces, bonds and # bridges that carry multiple VLANs. Each VLAN may have different MTU. The # bridge, bond or interface must have an MTU to allow the VLAN with the # largest MTU. type: OS::Heat::Value properties: type: number value: yaql: expression: $.data.max() data: - {get_param: ControlPlaneMtu} - {get_param: StorageMtu} - {get_param: StorageMgmtMtu} - {get_param: InternalApiMtu} - {get_param: TenantMtu} - {get_param: ExternalMtu} OsNetConfigImpl: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh params: $network_config: network_config: - type: interface name: nic4 mtu: get_attr: [MinViableMtu, value] use_dhcp: false dns_servers: get_param: DnsServers domain: get_param: DnsSearchDomains addresses: - ip_netmask: list_join: - / - - get_param: ControlPlaneIp - get_param: ControlPlaneSubnetCidr routes: list_concat_unique: - get_param: ControlPlaneStaticRoutes - - default: true next_hop: get_param: ControlPlaneDefaultRoute - type: vlan mtu: get_param: StorageMtu device: nic4 vlan_id: get_param: StorageNetworkVlanID addresses: - ip_netmask: get_param: StorageIpSubnet routes: list_concat_unique: - get_param: StorageInterfaceRoutes - type: vlan mtu: get_param: InternalApiMtu device: nic4 vlan_id: get_param: InternalApiNetworkVlanID addresses: - ip_netmask: get_param: InternalApiIpSubnet routes: list_concat_unique: - get_param: InternalApiInterfaceRoutes - type: ovs_bridge # This will default to br-ex, anything else requires specific # bridge mapping entries for it to be used. name: bridge_name mtu: get_param: ExternalMtu use_dhcp: false members: - type: interface name: nic3 mtu: get_param: ExternalMtu use_dhcp: false primary: true - type: vlan mtu: get_param: TenantMtu vlan_id: get_param: TenantNetworkVlanID addresses: - ip_netmask: get_param: TenantIpSubnet routes: list_concat_unique: - get_param: TenantInterfaceRoutes outputs: OS::stack_id: description: The OsNetConfigImpl resource. value: get_resource: OsNetConfigImpl
この設定により、ネットワークが以下のブリッジおよびインターフェイスにマッピングされます。
Networks | ブリッジ | interface |
---|---|---|
コントロールプレーン、ストレージ、内部 API | 該当なし |
|
外部、テナント |
|
|
この設定は、ベアメタルノードの NIC 設定に合わせて変更できます。
デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_templates
ディレクトリーの net-config-two-nic-vlan-computehci.yaml
にコピーします。
7.9. director Operator の Compute HCI ロールを使用した roles_data.yaml ファイルの作成
オーバークラウドに Compute HCI ロールの設定を追加するには、オーバークラウドのデプロイメントに含める roles_data.yaml
ファイルに Compute HCI ロールを追加する必要があります。
roles_data.yaml
をファイル名として使用するようにしてください。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
手順
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 Controller ComputeHCI > roles_data.yaml
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.10. オーバークラウド設定へのカスタムテンプレートの追加
カスタムテンプレートを tarball ファイルにアーカイブし、これらのテンプレートをオーバークラウドデプロイメントの一部として追加できるようにします。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - プロビジョニングしたノードに適用するカスタムテンプレートを作成します。
手順
カスタムテンプレートの場所に移動します。
$ cd ~/custom_templates
テンプレートを tarball にアーカイブします。
$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
ConfigMap を作成し、tarball をデータとして使用します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
検証
ConfigMap を表示します。
$ oc get configmap/tripleo-tarball-config -n openstack
7.11. director Operator での HCI ネットワークを設定するためのカスタム環境ファイル
以下の例は、ネットワークソフトウェア設定リソースをオーバークラウドの NIC テンプレートにマッピングする環境ファイルです。
resource_registry: OS::TripleO::ComputeHCI::Net::SoftwareConfig: net-config-two-nic-vlan-computehci.yaml
parameter_defaults
セクションに別のネットワーク設定を追加します。
デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_environment_files
ディレクトリーの network-environment.yaml
にコピーします。
7.12. director Operator でのハイパーコンバージドインフラストラクチャー (HCI) ストレージを設定するためのカスタム環境ファイル
以下の例は、Compute HCI ノード用の Ceph Storage 設定が含まれる環境ファイルです。
resource_registry: OS::TripleO::Services::CephMgr: deployment/ceph-ansible/ceph-mgr.yaml OS::TripleO::Services::CephMon: deployment/ceph-ansible/ceph-mon.yaml OS::TripleO::Services::CephOSD: deployment/ceph-ansible/ceph-osd.yaml OS::TripleO::Services::CephClient: deployment/ceph-ansible/ceph-client.yaml parameter_defaults: # needed for now because of the repo used to create tripleo-deploy image CephAnsibleRepo: "rhelosp-ceph-4-tools" CephAnsiblePlaybookVerbosity: 3 CinderEnableIscsiBackend: false CinderEnableRbdBackend: true CinderBackupBackend: ceph CinderEnableNfsBackend: false NovaEnableRbdBackend: true GlanceBackend: rbd CinderRbdPoolName: "volumes" NovaRbdPoolName: "vms" GlanceRbdPoolName: "images" CephPoolDefaultPgNum: 32 CephPoolDefaultSize: 2 CephAnsibleDisksConfig: devices: - '/dev/sdb' - '/dev/sdc' - '/dev/sdd' osd_scenario: lvm osd_objectstore: bluestore CephAnsibleExtraConfig: is_hci: true CephConfigOverrides: rgw_swift_enforce_content_length: true rgw_swift_versioning_enabled: true
この設定により、OSD ノードを sdb
、sdc
、sdd
デバイスにマッピングし、is_hci
オプションで HCI を有効にします。
この設定は、ベアメタルノードのストレージ設定に合わせて変更できます。CephPoolDefaultPgNum
パラメーターの値を確認するには、Ceph Placement Groups (PG) per Pool Calculator を使用します。
デプロイメントでこのテンプレートを使用するには、サンプルの内容を、ワークステーションの custom_environment_files
ディレクトリーの compute-hci.yaml
にコピーします。
7.13. オーバークラウド設定へのカスタム環境ファイルの追加
ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap にカスタム環境ファイルのセットをアップロードします。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - オーバークラウドデプロイメント用のカスタム環境ファイルを作成します。
手順
heat-env-config
ConfigMap を作成し、環境ファイルが含まれるディレクトリーをデータとして使用します。$ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -
検証
ConfigMap を表示します。
$ oc get configmap/heat-env-config -n openstack
関連情報
7.14. OpenStackBaremetalSet を使用した HCI Compute ノードの作成
Compute ノードは Red Hat OpenStack Platform 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後に Compute ノードの数をスケーリングできます。
OpenStackBaremetalSet カスタムリソースは、OpenShift Container Platform が管理するベアメタルマシンから Compute ノードを作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。
手順
ワークステーションに
openstack-hcicompute.yaml
という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。たとえば、Compute ノード 1 つの仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBaremetalSet metadata: name: computehci namespace: openstack spec: count: 3 baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2 deploymentSSHSecret: osp-controlplane-ssh-keys ctlplaneInterface: enp8s0 networks: - ctlplane - internal_api - tenant - storage - storage_mgmt roleName: ComputeHCI passwordSecret: userpassword
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前を
overcloud
に設定します。 metadata.namespace
-
director Operator namespace を
openstack
に設定します。 spec
Compute ノードの設定を定義します。このセクションで使用できる値の詳細は、
openstackbaremetalset
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackbaremetalset
Compute ノードの仕様の設定が完了したら、ファイルを保存します。
Compute ノードを作成します。
$ oc create -f openstack-hcicompute.yaml -n openstack
検証
コンピュート HCI ノードのリソースを表示します。
$ oc get openstackbaremetalset/computehci -n openstack
OpenShift が管理するベアメタルマシンを表示して、コンピュート HCI ノードの作成を確認します。
$ oc get baremetalhosts -n openshift-machine-api
7.15. OpenStackConfigGenerator を使用したオーバークラウド設定用の Ansible Playbook の作成
オーバークラウドのインフラストラクチャーをプロビジョニングした後に、オーバークラウドノード上に Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する Ansible Playbook のセットを作成する必要があります。これらの Playbook を OpenStackPlaybookGenerator リソースで作成し、RHOSP director の config-download
機能を使用して heat 設定を Playbook に変換します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - 必要に応じて作成される OpenStackControlPlane および OpenStackBarementalSets。
-
リモート Git リポジトリーの認証情報が含まれる
git-secret
シークレットを設定します。 -
カスタム heat テンプレートが含まれる
tripleo-tarball-config
ConfigMap を設定します。 -
カスタム環境ファイルが含まれる
heat-env-config
ConfigMap を設定します。
手順
ワークステーションに
openstack-config-generator.yaml
という名前のファイルを作成します。リソース仕様を追加して Ansible Playbook を生成します。たとえば、Playbook を生成する仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: default namespace: openstack spec: enableFencing: true gitSecret: git-secret imageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2 heatEnvConfigMap: heat-env-config # List of heat environment files to include from tripleo-heat-templates/environments heatEnvs: - ssl/tls-endpoints-public-dns.yaml - ssl/enable-tls.yaml tarballConfigMap: tripleo-tarball-config
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前に設定します。デフォルトは
default
です。 metadata.namespace
-
director の Operator の namespace (デフォルトでは
openstack
) に設定します。 spec.enableFencing
- フェンシングを有効にするために必要な heat 環境ファイルの自動作成を有効にします。
注記本番 OSP 環境では、フェンシングを有効にする必要があります。pacemaker を実行する仮想マシンには、
fence-agents-kubevirt
パッケージが必要です。spec.gitSecret
-
Git 認証の認証情報を含む ConfigMap に設定します (デフォルトでは
git-secret
)。 spec.heatEnvs
- Playbook の生成に使用されるデフォルトの Tripleo 環境ファイルのリスト。
spec.heatEnvConfigMap
-
カスタム環境ファイルを含む ConfigMap に設定します (デフォルトは
heat-env-config
)。 spec.tarballConfigMap
-
カスタムの heat テンプレートを使用して tarball が含まれる ConfigMap (
tripleo-tarball-config
) に設定します。
spec
セクションで使用できる値の詳細は、openstackconfiggenerator
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackconfiggenerator
Ansible 設定ジェネレーター仕様の設定が完了したら、ファイルを保存します。
Ansible 設定ジェネレーターを作成します。
$ oc create -f openstack-config-generator.yaml -n openstack
検証
設定ジェネレーターのリソースを表示します。
$ oc get openstackconfiggenerator/default -n openstack
7.16. オーバークラウドのオペレーティングシステムの登録
director Operator がノードにオーバークラウドソフトウェアを設定する前に、全ノードのオペレーティングシステムを Red Hat カスタマーポータルまたは Red Hat Satellite Server のいずれかに登録して、ノードのリポジトリーを有効にする必要があります。
OpenStackControlPlane リソースの一部として、director Operator はリモートシェル経由でアクセスする OpenStackClient Pod を作成し、Red Hat OpenStack Platform (RHOSP) コマンドを実行します。この Pod には、/home/cloud-admin/ctlplane-ansible-inventory
という名前の ansible インベントリースクリプトも含まれています。
ノードを登録するには、redhat_subscription
Ansible モジュールを OpentackClient Pod のインベントリースクリプトと共に使用できます。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
- OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
手順
openstackclient
のリモートシェルにアクセスします。$ 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-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.9-for-rhel-8-x86_64-rpms - openstack-16.2-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms tasks: - name: Register system redhat_subscription: username: myusername password: p@55w0rd! org_id: 1234567 release: 8.4 pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd - name: Disable all repos command: "subscription-manager repos --disable *" - name: Enable Controller node repos command: "subscription-manager repos --enable {{ item }}" with_items: "{{ repos }}"
このプレイには、以下の 3 つのタスクが含まれます。
- ノードを登録します。
- 自動的に有効化されるリポジトリーをすべて無効にする。
-
コントローラーノードに関連するリポジトリーだけを有効にする。リポジトリーは
repos
変数でリストされます。
必要なリポジトリーにオーバークラウドノードを登録します。
ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ./rhsm.yaml
7.17. director Operator を使用したオーバークラウドの設定の適用
コントロールプレーンを作成してベアメタルの Compute ノードをプロビジョニングし、各ノードにソフトウェアを設定する Ansible Playbook を生成してからしか、director Operator でオーバークラウドを設定できません。OpenStackDeploy リソースを作成すると、director Operator は ansible Playbook を実行してオーバークラウドを設定するジョブを作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
- OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
- OpentackConfigGenerator を使用して、オーバークラウドの Ansible Playbook 設定を作成します。
- OpenenstackConfigVersion を使用して、オーバークラウドの設定に使用する ansible Playbook のハッシュ/ダイジェストを選択します。
手順
ワークステーションに
openstack-deployment.yaml
という名前のファイルを作成します。リソース仕様を Ansible Playbook に含めます。以下に例を示します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: default spec: configVersion: n5fch96h548h75hf4hbdhb8hfdh676h57bh96h5c5h59hf4h88h… configGenerator: default
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前を設定します。デフォルトは
default
です。 metadata.namespace
-
デフォルトの
openstack
で、diretor Operator namespace に設定します。 spec.configVersion
- デプロイする Playbook の設定バージョン/git ハッシュ。
spec.configGenerator
- configGenerator の名前。
spec セクションで使用できる値の詳細は、
openstackdeploy
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackdeploy
OpenStackDeploy 仕様の設定が完了したら、ファイルを保存します。
OpenStackDeploy リソースを作成します。
$ oc create -f openstack-deployment.yaml -n openstack
デプロイメントが実行すると、Ansible Playbook を実行するための Kubernetes ジョブが作成されます。ジョブのログを追跡して、実行中の Ansible Playbook を確認できます。
$ oc logs -f jobs/deploy-openstack-default
さらに、
openstackclient
Pod にログインすることで、実行された Ansible Playbook に手動でアクセスできます。/home/cloud-admin/work/directory
には、現在のデプロイメントの ansible Playbook とansible.log
ファイルがあります。
第8章 director operator のデプロイメントシナリオ: 外部の Ceph Storage を使用するオーバークラウド
director Operator を使用して、外部の Red Hat Ceph Storage クラスターに接続するオーバークラウドをデプロイできます。
前提条件
- 外部の Red Hat Ceph Storage クラスター
8.1. ベースオペレーティングシステムのデータボリュームの作成
コントローラー仮想マシンのベースオペレーティングシステムのイメージを保存するには、OpenShift Container Platform (OCP) クラスターでデータボリュームを作成する必要があります。
前提条件
- Red Hat Enterprise Linux 8.4 QCOW2 イメージをワークステーションにダウンロードします。このイメージは、Red Hat カスタマーポータルの 製品ダウンロード セクションからダウンロードできます。
virtctl
クライアントツールをワークステーションにインストールします。以下のコマンドを実行して、このツールを Red Hat Enterprise Linux ワークステーションにインストールできます。$ sudo subscription-manager repos --enable=cnv-4.10-for-rhel-8-x86_64-rpms $ sudo dnf install -y kubevirt-virtctl
virt-customize
クライアントツールをワークステーションにインストールします。このツールは、以下のコマンドを使用して Red Hat Enterprise Linux ワークステーションにインストールできます。$ dnf install -y libguestfs-tools-c
手順
access.redhat.com からダウンロードしたデフォルトの QCOW2 イメージでは、biosdev の予測可能なネットワークインターフェイス名は使用されません。biosdev の予測可能なネットワークインターフェイス名を使用するように、
virt-customize
でイメージを変更します。$ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(kernelopts=.*\)net.ifnames=0 \(.*\)/\1\2/" /boot/grub2/grubenv' $ sudo virt-customize -a <local path to image> --run-command 'sed -i -e "s/^\(GRUB_CMDLINE_LINUX=.*\)net.ifnames=0 \(.*\)/\1\2/" /etc/default/grub' --truncate /etc/machine-id
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
です。
-
OpenStackControlPlane リソースおよび個別の OpenStackVmSet リソースの作成時に、
baseImageVolumeName
パラメーターをデータボリューム名に設定します。... spec: ... baseImageVolumeName: openstack-base-img ...
8.2. リモート Git リポジトリーの認証情報の追加
director Operator はレンダリングされた Ansible Playbook をリモート Git リポジトリーに保管し、このリポジトリーを使用してオーバークラウドの設定に対する変更を追跡します。SSH 認証をサポートする Git リポジトリーであれば、どのリポジトリーでも使用できます。git-secret
という名前の OpenShift Secret リソースとして Git リポジトリーの詳細を指定する必要があります。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - director オペレーターのリモート Git リポジトリーを作成して、オーバークラウド向けに生成された設定を保存します。
-
SSH キーペアを準備します。公開鍵を Git リポジトリーにアップロードし、秘密鍵を利用できる状態にして、
git-secret
Secret リソースに追加します。
手順
Secret リソースを作成します。
$ oc create secret generic git-secret -n openstack --from-file=git_ssh_identity=<path_to_private_SSH_key> --from-literal=git_url=<git_server_URL>
git-secret
Secret リソースには、2 つのキーと値のペアが含まれます。git_ssh_identity
-
Git リポジトリーにアクセスするための秘密鍵
--from-file
オプションは、SSH 秘密鍵ファイルの内容を保存します。 git_url
-
設定を保存する git リポジトリーの SSH URL。
--from-literal
オプションは、このキーに入力した URL を保存します。
検証
Secret リソースを表示します。
$ oc get secret/git-secret -n openstack
関連情報
8.3. ノードの root パスワードの設定
各ノードのパスワードを使用して root
ユーザーにアクセスするには、userpassword
という名前の Secret リソースに root
パスワードを設定します。
ノードの root パスワードの設定はオプションです。root
パスワードを設定ていない場合には、osp-controlplane-ssh-keys
シークレットで定義した SSH 鍵を使用してノードにログインすることができます。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
選択したパスワードを base64 値に変換します。
$ echo -n "p@ssw0rd!" | base64 cEBzc3cwcmQh
注記-n
オプションは、echo 出力から末尾の改行を削除します。ワークステーションに
openstack-userpassword.yaml
という名前のファイルを作成します。ファイルに、Secret の以下のリソース仕様を追加します。apiVersion: v1 kind: Secret metadata: name: userpassword namespace: openstack data: NodeRootPassword: "cEBzc3cwcmQh"
NodeRootPassword
パラメーターを base64 でエンコードされたパスワードに設定します。userpassword
シークレットを作成します。$ oc create -f openstack-userpassword.yaml -n openstack
OpenStackControlPlane
または OpenStackBaremetalSet
を作成するときに、passwordSecret
に userpassword
Secret を入力します。
apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud namespace: openstack spec: passwordSecret: <userpassword>
-
<userpassword>
をuserpassword
Secret に置き換えます。
関連情報
8.4. OpenStackNetConfig を使用したオーバークラウドのコントロールプレーンネットワークの作成
OpenStackNetConfig で、オーバークラウド用に少なくとも 1 つのコントロールプレーンネットワークを定義する必要があります。IP アドレスの割り当てに加えて、ネットワーク定義には OpenStackNetAttachment のマッピング情報が含まれます。OpenShift Virtualization はこの情報を使用して、仮想マシンをネットワークに接続します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
ワークステーション上に
osnetconfig.yaml
という名前のファイルを作成します。ctlplane
という名前のコントロールプレーンネットワークのリソース仕様を含めます。たとえば、各ワーカーノードのenp6s0
イーサネットデバイスに接続された Linux ブリッジを使用するコントロールプレーンの仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 description: Linux bridge with enp6s0 as a port name: br-osp state: up type: linux-bridge mtu: 1500 # optional DnsServers list dnsServers: - 192.168.25.1 # optional DnsSearchDomains list dnsSearchDomains: - osptest.test.metalkube.org - some.other.domain # DomainName of the OSP environment domainName: osptest.test.metalkube.org networks: - name: Control nameLower: ctlplane subnets: - name: ctlplane ipv4: allocationEnd: 172.22.0.250 allocationStart: 172.22.0.100 cidr: 172.22.0.0/24 gateway: 172.22.0.1 attachConfiguration: br-osp # optional: configure static mapping for the networks per nodes. If there is none, a random gets created reservations: controller-0: ipReservations: ctlplane: 172.22.0.120 compute-0: ipReservations: ctlplane: 172.22.0.140
ネットワーク仕様で次の値を設定します。
name
- コントロールプレーンネットワークの名 (Control) を設定します。
nameLower
- コントロールプレーンネットワークの下位の名前 (ctlplane) を設定します。
subnets
- サブネットの仕様を設定します。
subnets.name
- コントロールプレーンサブネットの名前 (ctlplane) を設定します。
subnets.attachConfiguration
- どのアタッチ設定を使用するかの参照を設定します。
subnets.ipv4
- allocationStart、allocationEnd、cidr、ゲートウェイ、オプションのルートリスト (宛先と nexthop を含む) を含む ipv4 サブネットの詳細
このセクションで使用できる値の詳細は、
openstacknetconfig
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstacknetconfig
ネットワーク仕様の設定が完了したら、ファイルを保存します。
コントロールプレーンネットワークを作成します。
$ oc create -f osnetconfig.yaml -n openstack
検証
コントロールプレーンネットワークのリソースを表示します。
$ oc get openstacknetconfig/openstacknetconfig
8.5. OpenStackNetConfig を使用したネットワーク分離用の VLAN ネットワークの作成
コンポーザブルネットワークのネットワーク分離を実装するには、追加のネットワークを作成する必要があります。このネットワーク分離を実現するには、コンポーザブルネットワークを個別の VLAN ネットワークに配置できます。OpenStackNetConfig リソースには、IP アドレスの割り当てに加えて、OpenShift Virtualization が仮想マシンを VLAN ネットワークにアタッチするために使用するネットワーク設定ポリシーを定義する情報が含まれます。
デフォルトの Red Hat OpenStack Platform ネットワークを使用するには、各ネットワークを定義する OpenStackNetConfig リソースを作成する必要があります。
表8.1 デフォルトの Red Hat OpenStack Platform ネットワーク
Network | VLAN | CIDR | 割り当て |
---|---|---|---|
External | 10 | 10.0.0.0/24 | 10.0.0.10 - 10.0.0.250 |
InternalApi | 20 | 172.17.0.0/24 | 172.17.0.10 - 172.17.0.250 |
Storage | 30 | 172.18.0.0/24 | 172.18.0.10 - 172.18.0.250 |
StorageMgmt | 40 | 172.19.0.0/24 | 172.19.0.10 - 172.19..250 |
テナント | 50 | 172.20.0.0/24 | 172.20.0.10 - 172.20.0.250 |
各ネットワークごとに異なるネットワークの詳細を使用するには、カスタム network_data.yaml
ファイルを作成する必要があります。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
ネットワーク設定用のファイルを作成します。VLAN ネットワークのリソース仕様を含めます。たとえば、各ワーカーノードの
enp6s0
およびenp7s0
イーサネットデバイスに接続された Linux ブリッジbr-ex
およびbr-osp
を介して VLAN タグ付きトラフィックを管理する内部 API、ストレージ、ストレージ管理、テナント、および外部ネットワークの仕様は次のとおりです。:kind: OpenStackNetConfig metadata: name: openstacknetconfig spec: attachConfigurations: br-osp: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp7s0 description: Linux bridge with enp7s0 as a port name: br-osp state: up type: linux-bridge mtu: 1500 br-ex: nodeNetworkConfigurationPolicy: nodeSelector: node-role.kubernetes.io/worker: "" desiredState: interfaces: - bridge: options: stp: enabled: false port: - name: enp6s0 description: Linux bridge with enp6s0 as a port name: br-ex state: up type: linux-bridge mtu: 1500 # optional DnsServers list dnsServers: - 172.22.0.1 # optional DnsSearchDomains list dnsSearchDomains: - osptest.test.metalkube.org - some.other.domain # DomainName of the OSP environment domainName: osptest.test.metalkube.org networks: - name: Control nameLower: ctlplane subnets: - name: ctlplane ipv4: allocationEnd: 172.22.0.250 allocationStart: 172.22.0.10 cidr: 172.22.0.0/24 gateway: 172.22.0.1 attachConfiguration: br-osp - name: InternalApi nameLower: internal_api mtu: 1350 subnets: - name: internal_api attachConfiguration: br-osp vlan: 20 ipv4: allocationEnd: 172.17.0.250 allocationStart: 172.17.0.10 cidr: 172.17.0.0/24 - name: External nameLower: external subnets: - name: external ipv4: allocationEnd: 10.0.0.250 allocationStart: 10.0.0.10 cidr: 10.0.0.0/24 gateway: 10.0.0.1 attachConfiguration: br-ex - name: Storage nameLower: storage mtu: 1500 subnets: - name: storage ipv4: allocationEnd: 172.18.0.250 allocationStart: 172.18.0.10 cidr: 172.18.0.0/24 vlan: 30 attachConfiguration: br-osp - name: StorageMgmt nameLower: storage_mgmt mtu: 1500 subnets: - name: storage_mgmt ipv4: allocationEnd: 172.19.0.250 allocationStart: 172.19.0.10 cidr: 172.19.0.0/24 vlan: 40 attachConfiguration: br-osp - name: Tenant nameLower: tenant vip: False mtu: 1500 subnets: - name: tenant ipv4: allocationEnd: 172.20.0.250 allocationStart: 172.20.0.10 cidr: 172.20.0.0/24 vlan: 50 attachConfiguration: br-osp
linux-bridge
でネットワーク分離に VLAN を使用する場合に、以下のような処理が行われます。-
director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、
nmstate
を使用してワーカーノードにブリッジを設定します。 -
director Operator は、Multus CNI プラグイン設定を定義するネットワークごとにネットワーク接続定義を作成します。ネットワーク接続定義で VLAN ID を指定する場合には、Multus CNI プラグインはブリッジで
vlan-filtering
を有効にします。 -
director Operator は、仮想マシン上の各ネットワーク専用のインターフェイスを割り当てます。これは、
OpenStackVMSet
のネットワークテンプレートがマルチ NIC ネットワークテンプレートであることを意味します。
リソース仕様に以下の値を設定します。
metadata.name
- OpenStackNetConfig の名前に設定します。
spec
ネットワークを接続するためのネットワーク設定とネットワークの詳細を設定します。このセクションで使用できる値の詳細は、
openstacknetconfig
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstacknetconfig
ネットワーク仕様の設定が完了したら、ファイルを保存します。
-
director Operator は、リソースに指定されたブリッジインターフェイスの Node Network Configuration Policy を作成します。このポリシーは、
ネットワーク設定を作成します。
$ oc apply -f openstacknetconfig.yaml -n openstack
検証
OpenStackNetConfig API と作成された子リソースを表示します。
$ oc get openstacknetconfig/openstacknetconfig -n openstack $ oc get openstacknetattachment -n openstack $ oc get openstacknet -n openstack
エラーが表示された場合は、基礎となる
network-attach-definition
とノードのネットワーク設定ポリシーを確認してください。$ oc get network-attachment-definitions -n openstack $ oc get nncp
8.6. OpenStackControlPlane でのコントロールプレーンの作成
オーバークラウドのコントロールプレーンには、オーバークラウドの機能を管理するメインの Red Hat OpenStack Platform サービスが含まれます。コントロールプレーンは、通常 3 つのコントローラーノードで設定されており、他のコントロールプレーンベースのコンポーザブルロールにスケーリングできます。コンポーザブルロールを使用する場合は、各サービスは 3 つの追加の専用ノードで実行される必要があり、Pacemaker のクォーラムを維持するために、コントロールプレーン内のノードの合計数を追加する必要があります。
OpenStackControlPlane カスタムリソースは、コントロールプレーンベースのノードを OpenShift Virtualization 内の仮想マシンとして作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。
手順
ワークステーションに
openstack-controller.yaml
という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。たとえば、3 つのコントローラーノードで設定されるコントロールプレーンの仕様は以下のとおりです。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud namespace: openstack spec: openStackClientNetworks: - ctlplane - internal_api - external openStackClientStorageClass: host-nfs-storageclass passwordSecret: userpassword virtualMachineRoles: Controller: roleName: Controller roleCount: 3 networks: - ctlplane - internal_api - external - tenant - storage - storage_mgmt cores: 12 memory: 64 rootDisk: diskSize: 100 baseImageVolumeName: openstack-base-img # storageClass must support RWX to be able to live migrate VMs storageClass: host-nfs-storageclass storageAccessMode: ReadWriteMany # When using OpenShift Virtualization with OpenShift Container Platform Container Storage, # specify RBD block mode persistent volume claims (PVCs) when creating virtual machine disks. # With virtual machine disks, RBD block mode volumes are more efficient and provide better # performance than Ceph FS or RBD filesystem-mode PVCs. # To specify RBD block mode PVCs, use the 'ocs-storagecluster-ceph-rbd' storage class and # VolumeMode: Block. storageVolumeMode: Filesystem # optional configure additional discs to be attached to the VMs, # need to be configured manually inside the VMs where to be used. additionalDisks: - name: datadisk diskSize: 500 storageClass: host-nfs-storageclass storageAccessMode: ReadWriteMany storageVolumeMode: Filesystem openStackRelease: "16.2"
リソース仕様に以下の値を設定します。
metadata.name
-
オーバークラウドコントロールプレーンの名前を
overcloud
に設定します。 metadata.namespace
-
director Operator namespace を
openstack
に設定します。 spec
コントロールプレーンの設定を指定します。このセクションで使用できる値の詳細は、
openstackcontrolplane
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackcontrolplane
コントロールプレーンの仕様の設定が完了したら、ファイルを保存します。
コントロールプレーンを作成します。
$ oc create -f openstack-controller.yaml -n openstack
OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。
director Operator は、OpenStackControlPlane リソースの一部として、リモートシェルからアクセスして RHOSP コマンドを実行できる OpenStackClient Pod も作成します。
検証
コントロールプレーンのリソースを表示します。
$ oc get openstackcontrolplane/overcloud -n openstack
OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。
$ oc get openstackvmsets -n openstack
仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。
$ oc get virtualmachines
openstackclient
リモートシェルにアクセスできるかをテストします。$ oc rsh -n openstack openstackclient
8.7. テンプレートおよび環境ファイル用のディレクトリーの作成
ワークステーションにディレクトリーを作成し、カスタムテンプレートおよび環境ファイルを保管します。このファイルは、OpenShift Container Platform (OCP) の ConfigMap にアップロードします。
手順
カスタムテンプレートのディレクトリーを作成します。
$ mkdir custom_templates
カスタム環境ファイルのディレクトリーを作成します。
$ mkdir custom_environment_files
8.8. Compute ノード用のカスタム NIC heat テンプレート
以下は、Compute ノードの NIC 設定が含まれる heat テンプレート例です。
heat_template_version: rocky description: > Software Config to drive os-net-config to configure VLANs for the Compute role. parameters: ControlPlaneIp: default: '' description: IP address/subnet on the ctlplane network type: string ControlPlaneSubnetCidr: default: '' description: > The subnet CIDR of the control plane network. (The parameter is automatically resolved from the ctlplane subnet's cidr attribute.) type: string ControlPlaneDefaultRoute: default: '' description: The default route of the control plane network. (The parameter is automatically resolved from the ctlplane subnet's gateway_ip attribute.) type: string ControlPlaneStaticRoutes: default: [] description: > Routes for the ctlplane network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ControlPlaneMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the network. (The parameter is automatically resolved from the ctlplane network's mtu attribute.) type: number StorageIpSubnet: default: '' description: IP address/subnet on the storage network type: string StorageNetworkVlanID: default: 30 description: Vlan ID for the storage network traffic. type: number StorageMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the Storage network. type: number StorageInterfaceRoutes: default: [] description: > Routes for the storage network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json InternalApiIpSubnet: default: '' description: IP address/subnet on the internal_api network type: string InternalApiNetworkVlanID: default: 20 description: Vlan ID for the internal_api network traffic. type: number InternalApiMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the InternalApi network. type: number InternalApiInterfaceRoutes: default: [] description: > Routes for the internal_api network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json TenantIpSubnet: default: '' description: IP address/subnet on the tenant network type: string TenantNetworkVlanID: default: 50 description: Vlan ID for the tenant network traffic. type: number TenantMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the Tenant network. type: number TenantInterfaceRoutes: default: [] description: > Routes for the tenant network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ExternalMtu: default: 1500 description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the segments in the External network. type: number DnsServers: # Override this via parameter_defaults default: [] description: > DNS servers to use for the Overcloud (2 max for some implementations). If not set the nameservers configured in the ctlplane subnet's dns_nameservers attribute will be used. type: comma_delimited_list DnsSearchDomains: # Override this via parameter_defaults default: [] description: A list of DNS search domains to be added (in order) to resolv.conf. type: comma_delimited_list resources: MinViableMtu: # This resource resolves the minimum viable MTU for interfaces, bonds and # bridges that carry multiple VLANs. Each VLAN may have different MTU. The # bridge, bond or interface must have an MTU to allow the VLAN with the # largest MTU. type: OS::Heat::Value properties: type: number value: yaql: expression: $.data.max() data: - {get_param: ControlPlaneMtu} - {get_param: StorageMtu} - {get_param: InternalApiMtu} - {get_param: TenantMtu} - {get_param: ExternalMtu} OsNetConfigImpl: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh params: $network_config: network_config: - type: interface name: nic4 mtu: get_attr: [MinViableMtu, value] use_dhcp: false dns_servers: get_param: DnsServers domain: get_param: DnsSearchDomains addresses: - ip_netmask: list_join: - / - - get_param: ControlPlaneIp - get_param: ControlPlaneSubnetCidr routes: list_concat_unique: - get_param: ControlPlaneStaticRoutes - - default: true next_hop: get_param: ControlPlaneDefaultRoute - type: vlan mtu: get_param: StorageMtu device: nic4 vlan_id: get_param: StorageNetworkVlanID addresses: - ip_netmask: get_param: StorageIpSubnet routes: list_concat_unique: - get_param: StorageInterfaceRoutes - type: vlan mtu: get_param: InternalApiMtu device: nic4 vlan_id: get_param: InternalApiNetworkVlanID addresses: - ip_netmask: get_param: InternalApiIpSubnet routes: list_concat_unique: - get_param: InternalApiInterfaceRoutes - type: ovs_bridge # This will default to br-ex, anything else requires specific # bridge mapping entries for it to be used. name: bridge_name mtu: get_param: ExternalMtu use_dhcp: false members: - type: interface name: nic3 mtu: get_param: ExternalMtu use_dhcp: false primary: true - type: vlan mtu: get_param: TenantMtu vlan_id: get_param: TenantNetworkVlanID addresses: - ip_netmask: get_param: TenantIpSubnet routes: list_concat_unique: - get_param: TenantInterfaceRoutes outputs: OS::stack_id: description: The OsNetConfigImpl resource. value: get_resource: OsNetConfigImpl
この設定により、ネットワークが以下のブリッジおよびインターフェイスにマッピングされます。
Networks | ブリッジ | interface |
---|---|---|
コントロールプレーン、ストレージ、内部 API | 該当なし |
|
外部、テナント |
|
|
この設定は、ベアメタルノードの NIC 設定に合わせて変更できます。
デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_templates
ディレクトリーの net-config-two-nic-vlan-compute.yaml
にコピーします。
8.9. オーバークラウド設定へのカスタムテンプレートの追加
カスタムテンプレートを tarball ファイルにアーカイブし、これらのテンプレートをオーバークラウドデプロイメントの一部として追加できるようにします。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - プロビジョニングしたノードに適用するカスタムテンプレートを作成します。
手順
カスタムテンプレートの場所に移動します。
$ cd ~/custom_templates
テンプレートを tarball にアーカイブします。
$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
ConfigMap を作成し、tarball をデータとして使用します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
検証
ConfigMap を表示します。
$ oc get configmap/tripleo-tarball-config -n openstack
8.10. director Operator でネットワークを設定するためのカスタム環境ファイル
以下の例は、ネットワークソフトウェア設定リソースをオーバークラウドの NIC テンプレートにマッピングする環境ファイルです。
resource_registry: OS::TripleO::Compute::Net::SoftwareConfig: net-config-two-nic-vlan-compute.yaml
parameter_defaults
セクションに別のネットワーク設定を追加します。
デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_environment_files
ディレクトリーの network-environment.yaml
にコピーします。
8.11. director Operator で外部の Ceph Storage の使用状況を設定するためのカスタム環境ファイル
外部の Ceph Storage クラスターと統合するには、次の例に示すようなパラメーターと値を持つ環境ファイルを含めます。
resource_registry: OS::TripleO::Services::CephExternal: deployment/ceph-ansible/ceph-external.yaml parameter_defaults: # needed for now because of the repo used to create tripleo-deploy image CephAnsibleRepo: "rhelosp-ceph-4-tools" CephAnsiblePlaybookVerbosity: 3 NovaEnableRbdBackend: true GlanceBackend: rbd CinderEnableRbdBackend: true CinderBackupBackend: ceph CinderEnableIscsiBackend: false # Change the following values for your external ceph cluster NovaRbdPoolName: vms CinderRbdPoolName: volumes CinderBackupRbdPoolName: backups GlanceRbdPoolName: images CephClientUserName: openstack CephClientKey: AQDLOh1VgEp6FRAAFzT7Zw+Y9V6JJExQAsRnRQ== CephClusterFSID: 4b5c8c0a-ff60-454b-a1b4-9747aa737d19 CephExternalMonHost: 172.16.1.7, 172.16.1.8, 172.16.1.9 # Change the ContainerImageRegistryCredentials to a registry service account # OR remove ContainerImageRegistryCredentials and set ContainerCephDaemonImage # to a local registry not requiring authentication. ContainerCephDaemonImage: registry.redhat.io/rhceph/rhceph-4-rhel8:latest ContainerImageRegistryCredentials: registry.redhat.io: my_username: my_password
この設定には、ノード上で CephExternal
サービスおよび CephClient
サービスを有効にし、異なる RHOSP サービスのプールを設定するためのパラメーターが含まれており、以下のパラメーターを使用して外部 Ceph Storage クラスターを統合します。
- CephClientKey
- 外部の Ceph Storage クラスターの Ceph クライアントキー。
- CephClusterFSID
- 外部の Ceph Storage クラスターのファイルシステム ID。
- CephExternalMonHost
- 外部 Ceph Storage クラスターの全 MON ホストの IP をコンマ区切りにしたリスト。
この設定は、ストレージ設定に合わせて変更できます。
Ceph クライアントを設定するには、ceph-ansible
クライアントロールで Ceph コンテナーが必要です。ContainerCephDaemonImage
パラメーターを設定する必要があります。registry.redhat.io
でホストされる Ceph コンテナーには認証が必要です。ContainerImageRegistryLogin
パラメーターの詳細については、コンテナー化された サービスへの移行 を参照してください。
デプロイメントでこのテンプレートを使用するには、サンプルの内容をワークステーションの custom_environment_files
ディレクトリーの ceph-ansible-external.yaml
にコピーします。
8.12. オーバークラウド設定へのカスタム環境ファイルの追加
ディレクトリーからオーバークラウドデプロイメントの一部として追加する ConfigMap にカスタム環境ファイルのセットをアップロードします。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - オーバークラウドデプロイメント用のカスタム環境ファイルを作成します。
手順
heat-env-config
ConfigMap を作成し、環境ファイルが含まれるディレクトリーをデータとして使用します。$ oc create configmap -n openstack heat-env-config --from-file=~/custom_environment_files/ --dry-run=client -o yaml | oc apply -f -
検証
ConfigMap を表示します。
$ oc get configmap/heat-env-config -n openstack
関連情報
8.13. OpenStackBaremetalSet を使用した Compute ノードの作成
Compute ノードは Red Hat OpenStack Platform 環境にコンピュートリソースを提供します。オーバークラウドには Compute ノードが少なくとも 1 台必要で、デプロイメント後に Compute ノードの数をスケーリングできます。
OpenStackBaremetalSet カスタムリソースは、OpenShift Container Platform が管理するベアメタルマシンから Compute ノードを作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークおよび追加の分離ネットワークを作成します。
手順
ワークステーションに
openstack-compute.yaml
という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。たとえば、Compute ノード 1 つの仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBaremetalSet metadata: name: compute namespace: openstack spec: count: 1 baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2 deploymentSSHSecret: osp-controlplane-ssh-keys # If you manually created an OpenStackProvisionServer, you can use it here, # otherwise the director Operator will create one for you (with `baseImageUrl` as the image that it server) # to use with this OpenStackBaremetalSet # provisionServerName: openstack-provision-server ctlplaneInterface: enp2s0 networks: - ctlplane - internal_api - tenant - storage roleName: Compute passwordSecret: userpassword
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前を
overcloud
に設定します。 metadata.namespace
-
director Operator namespace を
openstack
に設定します。 spec
Compute ノードの設定を定義します。このセクションで使用できる値の詳細は、
openstackbaremetalset
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackbaremetalset
Compute ノードの仕様の設定が完了したら、ファイルを保存します。
Compute ノードを作成します。
$ oc create -f openstack-compute.yaml -n openstack
検証
Compute ノードのリソースを表示します。
$ oc get openstackbaremetalset/compute -n openstack
OpenShift が管理するベアメタルマシンを表示し、Compute ノードの作成を確認します。
$ oc get baremetalhosts -n openshift-machine-api
8.14. OpenStackConfigGenerator を使用したオーバークラウド設定用の Ansible Playbook の作成
オーバークラウドのインフラストラクチャーをプロビジョニングした後に、オーバークラウドノード上に Red Hat OpenStack Platform (RHOSP) ソフトウェアを設定する Ansible Playbook のセットを作成する必要があります。これらの Playbook を OpenStackPlaybookGenerator リソースで作成し、RHOSP director の config-download
機能を使用して heat 設定を Playbook に変換します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - 必要に応じて作成される OpenStackControlPlane および OpenStackBarementalSets。
-
リモート Git リポジトリーの認証情報が含まれる
git-secret
シークレットを設定します。 -
カスタム heat テンプレートが含まれる
tripleo-tarball-config
ConfigMap を設定します。 -
カスタム環境ファイルが含まれる
heat-env-config
ConfigMap を設定します。
手順
ワークステーションに
openstack-config-generator.yaml
という名前のファイルを作成します。リソース仕様を追加して Ansible Playbook を生成します。たとえば、Playbook を生成する仕様は以下のようになります。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: default namespace: openstack spec: enableFencing: true gitSecret: git-secret imageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2 heatEnvConfigMap: heat-env-config # List of heat environment files to include from tripleo-heat-templates/environments heatEnvs: - ssl/tls-endpoints-public-dns.yaml - ssl/enable-tls.yaml tarballConfigMap: tripleo-tarball-config
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前に設定します。デフォルトは
default
です。 metadata.namespace
-
director の Operator の namespace (デフォルトでは
openstack
) に設定します。 spec.enableFencing
- フェンシングを有効にするために必要な heat 環境ファイルの自動作成を有効にします。
注記本番 OSP 環境では、フェンシングを有効にする必要があります。pacemaker を実行する仮想マシンには、
fence-agents-kubevirt
パッケージが必要です。spec.gitSecret
-
Git 認証の認証情報を含む ConfigMap に設定します (デフォルトでは
git-secret
)。 spec.heatEnvs
- Playbook の生成に使用されるデフォルトの Tripleo 環境ファイルのリスト。
spec.heatEnvConfigMap
-
カスタム環境ファイルを含む ConfigMap に設定します (デフォルトは
heat-env-config
)。 spec.tarballConfigMap
-
カスタムの heat テンプレートを使用して tarball が含まれる ConfigMap (
tripleo-tarball-config
) に設定します。
spec
セクションで使用できる値の詳細は、openstackconfiggenerator
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackconfiggenerator
Ansible 設定ジェネレーター仕様の設定が完了したら、ファイルを保存します。
Ansible 設定ジェネレーターを作成します。
$ oc create -f openstack-config-generator.yaml -n openstack
検証
設定ジェネレーターのリソースを表示します。
$ oc get openstackconfiggenerator/default -n openstack
8.15. オーバークラウドのオペレーティングシステムの登録
director Operator がノードにオーバークラウドソフトウェアを設定する前に、全ノードのオペレーティングシステムを Red Hat カスタマーポータルまたは Red Hat Satellite Server のいずれかに登録して、ノードのリポジトリーを有効にする必要があります。
OpenStackControlPlane リソースの一部として、director Operator はリモートシェル経由でアクセスする OpenStackClient Pod を作成し、Red Hat OpenStack Platform (RHOSP) コマンドを実行します。この Pod には、/home/cloud-admin/ctlplane-ansible-inventory
という名前の ansible インベントリースクリプトも含まれています。
ノードを登録するには、redhat_subscription
Ansible モジュールを OpentackClient Pod のインベントリースクリプトと共に使用できます。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
- OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
手順
openstackclient
のリモートシェルにアクセスします。$ 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-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.9-for-rhel-8-x86_64-rpms - openstack-16.2-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms tasks: - name: Register system redhat_subscription: username: myusername password: p@55w0rd! org_id: 1234567 release: 8.4 pool_ids: 1a85f9223e3d5e43013e3d6e8ff506fd - name: Disable all repos command: "subscription-manager repos --disable *" - name: Enable Controller node repos command: "subscription-manager repos --enable {{ item }}" with_items: "{{ repos }}"
このプレイには、以下の 3 つのタスクが含まれます。
- ノードを登録します。
- 自動的に有効化されるリポジトリーをすべて無効にする。
-
コントローラーノードに関連するリポジトリーだけを有効にする。リポジトリーは
repos
変数でリストされます。
必要なリポジトリーにオーバークラウドノードを登録します。
ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ./rhsm.yaml
8.16. director Operator を使用したオーバークラウドの設定の適用
コントロールプレーンを作成してベアメタルの Compute ノードをプロビジョニングし、各ノードにソフトウェアを設定する Ansible Playbook を生成してからしか、director Operator でオーバークラウドを設定できません。OpenStackDeploy リソースを作成すると、director Operator は ansible Playbook を実行してオーバークラウドを設定するジョブを作成します。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 - OpenStackControlPlane リソースを使用してコントロールプレーンを作成します。
- OpenStackBareMetalSet リソースを使用して、ベアメタルの Compute ノードを作成します。
- OpentackConfigGenerator を使用して、オーバークラウドの Ansible Playbook 設定を作成します。
- OpenenstackConfigVersion を使用して、オーバークラウドの設定に使用する ansible Playbook のハッシュ/ダイジェストを選択します。
手順
ワークステーションに
openstack-deployment.yaml
という名前のファイルを作成します。リソース仕様を Ansible Playbook に含めます。以下に例を示します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: default spec: configVersion: n5fch96h548h75hf4hbdhb8hfdh676h57bh96h5c5h59hf4h88h… configGenerator: default
リソース仕様に以下の値を設定します。
metadata.name
-
Compute ノードのベアメタルセットの名前を設定します。デフォルトは
default
です。 metadata.namespace
-
デフォルトの
openstack
で、diretor Operator namespace に設定します。 spec.configVersion
- デプロイする Playbook の設定バージョン/git ハッシュ。
spec.configGenerator
- configGenerator の名前。
spec セクションで使用できる値の詳細は、
openstackdeploy
CRD のカスタムリソース定義の仕様スキーマを確認します。$ oc describe crd openstackdeploy
OpenStackDeploy 仕様の設定が完了したら、ファイルを保存します。
OpenStackDeploy リソースを作成します。
$ oc create -f openstack-deployment.yaml -n openstack
デプロイメントが実行すると、Ansible Playbook を実行するための Kubernetes ジョブが作成されます。ジョブのログを追跡して、実行中の Ansible Playbook を確認できます。
$ oc logs -f jobs/deploy-openstack-default
さらに、
openstackclient
Pod にログインすることで、実行された Ansible Playbook に手動でアクセスできます。/home/cloud-admin/work/directory
には、現在のデプロイメントの ansible Playbook とansible.log
ファイルがあります。
第9章 director Operator を使用してデプロイされたオーバークラウドへのアクセス
director Operator を使用してオーバークラウドをデプロイした後に、openstack
クライアントツールを使用してそのオーバークラウドにアクセスし、コマンドを実行できます。オーバークラウドのメインアクセスポイントは、OpenStackClient Pod で、director Operator を使用して、作成する OpenStackControlPlane リソースの一部として この Pod をデプロイします。
9.1. OpenStackClient Pod へのアクセス
OpenStackClient Pod は、オーバークラウドに対してコマンドを実行する主なアクセスポイントです。この Pod には、オーバークラウドに対してアクションを実行するのに必要なクライアントツールおよび認証情報が含まれます。ワークステーションから Pod にアクセスするには、ワークステーションで oc
コマンドを使用して、Pod のリモートシェルに接続する必要があります。
director Operator なしでデプロイするオーバークラウドにアクセスする場合には、通常、source ~/overcloudrc
コマンドを実行して、オーバークラウドにアクセスする環境変数を設定します。この手順は、director Operator を使用してデプロイするオーバークラウドでは、必要ありません。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
- OCP クラスターで実行されるオーバークラウドをデプロイして設定する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
openstackclient
のリモートシェルにアクセスします。$ oc rsh -n openstack openstackclient
cloud-admin
ホームディレクトリーに移動します。$ cd /home/cloud-admin
openstack
コマンドを実行します。たとえば、以下のコマンドを使用してdefault
ネットワークを作成できます。$ openstack network create default
9.2. オーバークラウドのダッシュボードへのアクセス
標準のオーバークラウドと同じ手法を使用して、director Operator でデプロイするオーバークラウドのダッシュボードにアクセスします。Web ブラウザーを使用して、オーバークラウドホスト名またはパブリック仮想 IP アドレス (この IP アドレスは、通常 PublicVirtualFixedIPs
heat パラメーターで設定) にアクセスし、ユーザー名およびパスワードでオーバークラウドのダッシュボードにログインします。
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
- OCP クラスターで実行されるオーバークラウドをデプロイして設定する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。
手順
オプション:
admin
ユーザーとしてログインするには、tripleo-passwords
シークレットにあるAdminPassword
パラメーターから admin パスワードを取得します。$ oc get secret tripleo-passwords -o jsonpath='{.data.tripleo-overcloud-passwords\.yaml}' | base64 -d
- Web ブラウザーを開きます。
- URL フィールドに、オーバークラウドダッシュボードのホスト名またはパブリック仮想 IP を入力します。
- 選択したユーザー名とパスワードを使用して Dashboard にログインします。
第10章 director Operator を使用した Compute ノードのスケーリング
必要なオーバークラウドのコンピュートリソース数が多い場合も少ない場合も、要件に応じて Compute ノード数をスケーリングできます。
10.1. director Operator を使用したオーバークラウドの Compute ノードの追加
Compute ノードにさらにオーバークラウドを追加するには、コンピュート
の OpenStackBaremetalSet リソースのノード数を増やす必要があります。新しいノードがプロビジョニングされると、新しい OpenStackConfigGenerator リソースが作成され、Ansible Playbook の新しいセットが生成されます。OpenStackConfig バージョンを使用して OpenStackDeploy オブジェクトを作成または更新し、Ansible 設定をオーバークラウドに再適用します
前提条件
- OpenShift Container Platform クラスターが稼働し、director Operator が正しくインストールされていることを確認する。
- OCP クラスターで実行されるオーバークラウドをデプロイして設定する。
-
oc
コマンドラインツールがワークステーションにインストールされていることを確認する。 -
openshift-machine-api
namespace の準備ができている状態にあるホストが十分に存在することを確認する。oc get baremetalhosts -n openshift-machine-api
コマンドを実行して、利用可能なホストを確認します。ベアメタルホストの管理の詳細は、ベアメタルホストの管理 を参照してください。
手順
Compute
OpenStackBaremetalSet の YAML 設定を変更し、リソースのcount
パラメーターを増やします。$ oc patch osbms 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 ノードに移行されました。詳しくは、Migrating virtual machine instances between Compute nodes を参照してください。
手順
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
ユーザーとして Compute ノードにログインし、ベアメタルノードをシャットダウンします。[root@compute-0 ~]# shutdown -h now
Compute ノードにアクセスできない場合は、次の手順を実行します。
-
コントローラーノードに
root
ユーザーとしてログインします。 インスタンス HA が有効になっている場合は、Compute ノードの 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 は、ノードの
OpenStackIPSet
およびOpenStackNetConfig
から対応する IP 予約を削除します。 director Operator は、
OpenStackNet
リソースの IP 予約エントリーを削除済みとしてフラグします。$ oc get osnet ctlplane -o json -n openstack | jq .status.reservations { "compute-0": { "deleted": true, "ip": "172.22.0.140" }, "compute-1": { "deleted": false, "ip": "172.22.0.100" }, "controller-0": { "deleted": false, "ip": "172.22.0.120" }, "controlplane": { "deleted": false, "ip": "172.22.0.110" }, "openstackclient-0": { "deleted": false, "ip": "172.22.0.251" }
-
director Operator は、ノードの
-
オプション: 削除された
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 のオーバークラウドの更新
openstackclient
Pod を更新した後、オーバークラウドとコンテナーイメージの準備デプロイメントを実行し、ノードを更新し、オーバークラウド更新収束デプロイメントを実行して、オーバークラウドを更新します。マイナー更新中は、コントロールプレーン API が利用可能です。
11.1. マイナー更新用の director オペレーターの準備
Red Hat OpenStack Platform (RHOSP) マイナー更新プロセスのワークフロー:
- RHOSP マイナー更新向けの環境を準備します。
-
openstackclient
Pod イメージを最新の OpenStack 16.2.z バージョンに更新します。 - オーバークラウドを最新の Open Stack16.2.z バージョンに更新します。
- すべての Red Hat Ceph Storage サービスを更新します。
- コンバージェンスデプロイメントを実行して、オーバークラウドスタックを更新します。
11.1.1. 環境の Red Hat Enterprise Linux リリースへのロック
Red Hat OpenStack Platform (RHOSP) 16.2 は Red Hat Enterprise Linux 8.4 (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
パラメーターが存在しない場合は、追加して8.4
に設定します。parameter_defaults: RhsmVars: … rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567" rhsm_pool_ids: "1a85f9223e3d5e43013e3d6e8ff506fd" rhsm_method: "portal" rhsm_release: "8.4"
- オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
すべてのノードでオペレーティングシステムのバージョンを RHEL8.4 にロックするタスクを含めて、Playbook を作成します。
$ cat > ~/set_release.yaml <<'EOF' - hosts: all gather_facts: false tasks: - name: set release to 8.4 command: subscription-manager release --set=8.4 become: true EOF
openstackclient
Pod で ansible Playbook を実行します。$ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/set_release.yaml --limit Controller,Compute
--limit
オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。Red Hat Ceph Storage ノードに対してこの Playbook を実行しないでください。これらのノードには別のサブスクリプションを使用している可能性があります。
手動でノードを特定のバージョンにロックするには、ノードにログインして subscription-manager release
コマンドを実行します。
$ sudo subscription-manager release --set=8.4
11.1.2. Extended Update Support (EUS) リポジトリーへの変更
Red Hat OpenStack Platform (RHOSP) サブスクリプションには、Red Hat Enterprise Linux (RHEL) 8.4 Extended Update Support (EUS) のリポジトリーが含まれます。EUS リポジトリーには、RHEL8.4 の最新のセキュリティーパッチとバグ修正が含まれています。更新を実行する前に、次のリポジトリーに切り替えてください。
表11.1 RHEL8.4 用の EUS リポジトリー
標準のリポジトリー | EUS リポジトリー |
---|---|
rhel-8-for-x86_64-baseos-rpms | rhel-8-for-x86_64-baseos-eus-rpms |
rhel-8-for-x86_64-appstream-rpms | rhel-8-for-x86_64-appstream-eus-rpms |
rhel-8-for-x86_64-highavailability-rpms | rhel-8-for-x86_64-highavailability-eus-rpms |
特定バージョンの Podman との互換性を維持するには、EUS リポジトリーを使用する必要があります。それ以降のバージョンの Podman は RHOSP 16.2 でテストされておらず、予期しない結果を引き起こす可能性があります。
前提条件
-
openstackclient
Pod のrhsm.yaml
ファイルを/home/cloud-admin
ディレクトリーにコピーします。
手順
openstackclient
Pod でリモートシェルを開きます。$ oc rsh openstackclient
rhsm.yaml
ファイルを開き、Subscription Management 設定でrhsm_repos
パラメーターを確認します。このパラメーターに EUS リポジトリーが含まれていない場合は、該当するリポジトリーを EUS バージョンに変更します。parameter_defaults: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.9-for-rhel-8-x86_64-rpms - openstack-16.2-for-rhel-8-x86_64-rpms - rhceph-4-tools-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms
- オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
すべてのノードで、リポジトリーを
RHEL 8.4 EUS
に設定するタスクが含まれる Playbook を作成します。$ cat > ~/change_eus.yaml <<'EOF' - hosts: all gather_facts: false tasks: - name: change to eus repos command: subscription-manager repos --disable=rhel-8-for-x86_64-baseos-rpms --disable=rhel-8-for-x86_64-appstream-rpms --disable=rhel-8-for-x86_64-highavailability-rpms --enable=rhel-8-for-x86_64-baseos-eus-rpms --enable=rhel-8-for-x86_64-appstream-eus-rpms --enable=rhel-8-for-x86_64-highavailability-eus-rpms become: true EOF
change_eus.yaml
Playbook を実行します。$ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/change_eus.yaml --limit Controller,Compute
--limit
オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。Red Hat Ceph Storage ノードは通常異なるサブスクリプションを使用するため、この Playbook を Ceph Storage ノードに対して実行しないでください。
11.1.3. Red Hat Openstack Platform および Ansible リポジトリーの更新
Red Hat OpenStack Platform (RHOSP) 16.2 パッケージおよび Ansible 2.9 パッケージを使用するようにリポジトリーを更新します。詳細は、オーバークラウドのリポジトリー を参照してください。
前提条件
-
openstackclient
Pod のrhsm.yaml
ファイルを/home/cloud-admin
ディレクトリーにコピーしました。
手順
openstackclient
Pod でリモートシェルを開きます。$ oc rsh openstackclient
rhsm.yaml
ファイルを開き、Subscription Management 設定でrhsm_repos
パラメーターを確認します。rhsm_repos
パラメーターが RHOSP 16.1 および Ansible 2.8 リポジトリーを使用している場合は、リポジトリーを正しいバージョンに変更します。parameter_defaults: RhsmVars: rhsm_repos: - rhel-8-for-x86_64-baseos-eus-rpms - rhel-8-for-x86_64-appstream-eus-rpms - rhel-8-for-x86_64-highavailability-eus-rpms - ansible-2.9-for-rhel-8-x86_64-rpms - openstack-16.2-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms
- オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
すべての RHOSP ノードでリポジトリーを
RHOSP {osp_curr_ver}
に設定するタスクを含む Playbook を作成します。$ cat > ~/update_rhosp_repos.yaml <<'EOF' - hosts: all gather_facts: false tasks: - name: change osp repos command: subscription-manager repos --disable=openstack-16.1-for-rhel-8-x86_64-rpms --enable=openstack-16.2-for-rhel-8-x86_64-rpms --disable=ansible-2.8-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms become: true EOF
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 {osp_curr_ver}
に設定するタスクを含む Playbook を作成します。$ cat > ~/update_ceph_repos.yaml <<'EOF' - hosts: all gather_facts: false tasks: - name: change ceph repos command: subscription-manager repos --disable=openstack-16-deployment-tools-for-rhel-8-x86_64-rpms --enable=openstack-16.2-deployment-tools-for-rhel-8-x86_64-rpms --disable=ansible-2.8-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms become: true EOF
update_ceph_repos.yaml
Playbook を実行します。$ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory /home/cloud-admin/update_ceph_repos.yaml --limit CephStorage
--limit
オプションを使用して、コンテンツを Red Hat Ceph Storage ノードに適用します。
11.1.4. container-tools のバージョンの設定
container-tools
モジュールをバージョン2.0
に設定して、すべてのノードで正しいパッケージバージョンを使用するようにします。
手順
openstackclient
Pod でリモートシェルを開きます。$ oc rsh openstackclient
すべてのノードで
container-tools
モジュールをバージョン3.0
に設定するタスクが含まれる Playbook を作成します。$ cat > ~/container-tools.yaml <<'EOF' - hosts: all gather_facts: false tasks: - name: disable default dnf module for container-tools command: dnf module reset container-tools become: true - name: set dnf module for container-tools:3.0 command: dnf module enable -y container-tools:3.0 become: true - name: disable dnf module for virt:8.2 command: dnf module disable -y virt:8.2 become: true - name: set dnf module for virt:rhel command: dnf module enable -y virt:rhel become: true EOF
すべてのノードに対して
container-tools.yaml
Playbook を実行します。$ ansible-playbook -i /home/cloud-admin/ctlplane-ansible-inventory ~/container-tools.yaml
11.1.5. コンテナーイメージ準備ファイルの更新
コンテナー準備ファイルは、ContainerImagePrepare
パラメーターが含まれるファイルです。このファイルを使用して、オーバークラウドのコンテナーイメージを取得するためのルールを定義します。
環境を更新する前に、ファイルを確認して正しいイメージバージョンを取得するようにしてください。
手順
-
コンテナー準備ファイルを編集します。通常、このファイルのデフォルト名は
containers-prepare-parameter.yaml
です。 それぞれのルールセットについて、
tag
パラメーターが16.2
に設定されていることを確認します。parameter_defaults: ContainerImagePrepare: - push_destination: true set: ... tag: '16.2' tag_from_label: '{version}-{release}'
注記更新に特定のタグ (
16.2
や16.2.2
等) を使用しない場合は、tag
キーと値のペアを削除し、tag_from_label
のみを指定します。これにより、更新プロセスの一部として使用するタグの値を決定する際に、インストールされた Red Hat OpenStack Platform バージョンが使用されます。- このファイルを保存します。
11.1.6. オーバークラウドでのフェンシングの無効化
オーバークラウドを更新する前に、フェンシングが無効になっていることを確認します。
コントローラーノードの更新プロセス中にフェンシングが環境にデプロイされると、オーバークラウドは特定ノードが無効であることを検出し、フェンシング操作を試みる場合があります。これにより、意図しない結果が生じる可能性があります。
オーバークラウドでフェンシングを有効にしている場合には、意図しない結果を防ぐために、更新期間中フェンシングを一時的に無効にする必要があります。
手順
openstackclient
Pod でリモートシェルを開きます。$ oc rsh openstackclient
コントローラーノードにログインし、Pacemaker コマンドを実行してフェンシングを無効にします。
ssh <controller-0.ctlplane> "sudo pcs property set stonith-enabled=false"
-
<controller-0.ctlplane>
をコントローラーノードの名前に置き換えます。
-
-
fencing.yaml
環境ファイルで、EnableFencing
パラメーターをfalse
に設定し、更新プロセス中にフェンシングが無効のままとなるようにします。
11.2. director Operator のオーバークラウド更新準備を実行する
更新プロセスのためにオーバークラウドを準備するには、更新準備設定を生成します。これにより、更新された ansible Playbook が作成され、ノードが更新のために準備されます。
手順
fencing.yaml
という heat パラメーター ConfigMap を変更して、更新中にフェンシングを無効にします。parameter_defaults: EnableFencing: false
osconfiggenerator-update-prepare.yaml
という OpenStackConfigGenerator リソースを作成します。$ cat <<EOF > osconfiggenerator-update-prepare.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackConfigGenerator metadata: name: "update" namespace: openstack spec: gitSecret: git-secret heatEnvs: - lifecycle/update-prepare.yaml heatEnvConfigMap: heat-env-config-update tarballConfigMap: tripleo-tarball-config-update EOF
設定を適用します。
$ oc apply -f osconfiggenerator-update-prepare.yaml
- 更新の準備プロセスが完了するまで待ちます。
11.3. director Operator のコンテナーイメージ準備の実行
オーバークラウドを更新する前に、環境に必要なすべてのコンテナーイメージ設定を準備する必要があります。
コンテナーイメージの準備を完了するには、container_image_prepare
タグを持つタスクに対してオーバークラウドのデプロイメントを実行する必要があります。
手順
osdeploy-container-image-prepare.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-container-image-prepare.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: container_image_prepare spec: configVersion: <config_version> configGenerator: update mode: external-update advancedSettings: tags: - container_image_prepare EOF
設定を適用します。
$ oc apply -f osdeploy-container-image-prepare.yaml
11.4. オプション: すべてのオーバークラウドサーバーでの ovn-controller コンテナーの更新
Modular Layer 2 Open Virtual Network メカニズムドライバー (ML2/OVN) を使用してオーバークラウドをデプロイした場合は、ovn-controller コンテナーを最新の RHOSP16.2 バージョンに更新します。更新は、ovn-controller コンテナーを実行するすべてのオーバークラウドサーバーで行われます。
次の手順では、コントローラーのロールが割り当てられているサーバーの ovn-northd サービスを更新する前に、コンピュートのロールが割り当てられているサーバーの ovn-controller コンテナーを更新します。
この手順を実行する前に誤って ovn-northd サービスを更新した場合、仮想マシンにアクセスしたり、新しい仮想マシンや仮想ネットワークを作成したりできない可能性があります。次の手順で接続を復元します。
手順
osdeploy-ovn-update.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-ovn-update.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: ovn-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: tags: - ovn EOF
設定を適用します。
$ oc apply -f osdeploy-ovn-update.yaml
- ovn-controller コンテナーの更新が完了するまで待ちます。
11.5. director Operator 上のすべてのコントローラーノードを更新する
すべてのコントローラーノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。
BZ#1872404 が解決されるまで、コンポーザブルロールに基づくノードについては、先ず Database
ロールを更新してから、Controller
、Messaging
、Compute
、Ceph
、およびその他のロールを更新する必要があります。
手順
osdeploy-controller-update.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-controller-update.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: controller-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: Controller EOF
設定を適用します。
$ oc apply -f osdeploy-controller-update.yaml
- コントローラーノードの更新が完了するまで待ちます。
11.6. director Operator 上のすべての Compute ノードを更新する
すべての Compute ノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。Compute ノードを更新するには、limit: Compute
オプションを指定してデプロイを実行し、操作を Compute ノードのみに制限します。
手順
osdeploy-compute-update.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-compute-update.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: compute-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: Compute EOF
設定を適用します。
$ oc apply -f osdeploy-compute-update.yaml
- Compute ノードの更新が完了するまで待ちます。
11.7. director Operator 上のすべての HCI Compute ノードの更新
ハイパーコンバージドインフラストラクチャー (HCI) Compute ノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。HCI Compute ノードを更新するには、limit: ComputeHCI
オプションを指定してデプロイを実行し、操作を HCI ノードのみに制限します。コンテナー化された Red Hat Ceph Storage 4 クラスターへの更新を実行するには、mode: external-update
および tags: ["ceph"]
オプションを使用してデプロイメントを実行する必要もあります。
手順
osdeploy-computehci-update.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-computehci-update.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: computehci-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: ComputeHCI EOF
設定を適用します。
$ oc apply -f osdeploy-computehci-update.yaml
- ComputeHCI ノードの更新が完了するまで待ちます。
osdeploy-ceph-update.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-ceph-update.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: ceph-update spec: configVersion: <config_version> configGenerator: update mode: external-update advancedSettings: tags: - ceph EOF
設定を適用します。
$ oc apply -f osdeploy-ceph-update.yaml
- Red Hat Ceph Storage ノードの更新が完了するまで待ちます。
11.8. director Operator 上のすべての Red Hat Ceph Storage ノードの更新
Red Hat Ceph Storage ノードを最新の Red Hat OpenStack Platform (RHOSP) 16.2 バージョンに更新します。
RHOSP 16.2 は RHEL 8.4 でサポートされています。ただし、Ceph Storage ロールにマップされているホストは、最新のメジャー RHEL リリースに更新されます。詳細は、Red Hat Ceph Storage: サポートされる設定 を参照してください。
手順
osdeploy-cephstorage-update.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-cephstorage-update.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: cephstorage-update spec: configVersion: <config_version> configGenerator: update mode: update advancedSettings: limit: CephStorage EOF
設定を適用します。
$ oc apply -f osdeploy-cephstorage-update.yaml
- Red Hat Ceph Storage ノードの更新が完了するまで待ちます。
osdeploy-ceph-update.yaml
というosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-ceph-update.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: ceph-update spec: configVersion: <config_version> configGenerator: update mode: external-update advancedSettings: tags: - ceph EOF
設定を適用します。
$ oc apply -f osdeploy-ceph-update.yaml
- Red Hat Ceph Storage ノードの更新が完了するまで待ちます。
11.9. director オペレーターでのオンラインデータベース更新の実行
一部のオーバークラウドコンポーネントでは、データベーステーブルのオンライン更新 (または移行) が必要です。
データベースのオンライン更新は、次のコンポーネントに適用されます。
- OpenStack Block Storage (cinder)
- OpenStack Compute (nova)
手順
osdeploy-online-migration.yaml
という名前のosdeploy
ジョブを作成します。$ cat <<EOF > osdeploy-online-migration.yaml apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackDeploy metadata: name: online-migration spec: configVersion: <config_version> configGenerator: update mode: external-update advancedSettings: tags: - online_upgrade EOF
設定を適用します。
$ oc apply -f osdeploy-online-migration.yaml
11.10. 更新の最終処理
最新の Red Hat OpenStack Platform 16.2 バージョンへの更新を完了するには、オーバークラウドで生成された設定を更新する必要があります。これにより、スタックリソース構造が OSP 16.2 の通常のデプロイメントと一致し、将来的に標準のオーバークラウドデプロイメントを実行できるようになります。
手順
fencing.yaml
環境ファイルでフェンシングを再度有効にします。parameter_defaults: EnableFencing: true
-
デフォルト設定を再生成して、
lifecycle/update-prepare.yaml が
heatEnvs に含まれていないことを確認します。詳細は、director Operator を使用したオーバークラウドソフトウェアの設定 を参照してください。 OpenStackConfigGenerator、ConfigVersion、および設定デプロイメントリソースを削除します。
$ oc delete <type> <name>
- <type> を、削除するリソースのタイプに置き換えます。
- <name> を、削除するリソースの名前に置き換えます。
- 更新の最終処理が完了するまで待ちます。
第12章 director Operator を使用してパブリックエンドポイントに TLS をデプロイする
TLS を使用してオーバークラウドをデプロイし、RHOSP Director Operator のパブリックエンドポイント IP または DNS 名を作成します。
前提条件
- OpenShift Container Platform クラスターが機能しています。
- director Operator を正しくインストールしました。
-
ワークステーションに
oc
コマンドラインツールをインストールしました。
12.1. パブリックエンドポイント IP アドレスの TLS
パブリックエンドポイントの IP アドレスを参照するには、openstackclient
Pod に証明書を追加します。
前提条件
- オーバークラウドのパブリックエンドポイントで SSL/TLS を有効にする の手順を使用して、認証局、キー、および証明書を作成します。
手順
CA 証明書を格納するための
ConfigMap
を作成します。ConfigMap
は、OpenStackControlPlane オブジェクトを使用して CA 証明書をopenstackclient
Pod に追加するために使用されるインターフェイスです。apiVersion: v1 kind: ConfigMap metadata: name: cacerts namespace: openstack data: local_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE----- another_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE-----
OpenStackControlPlane を作成し、
ConfigMap
を参照します。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: <overcloud> namespace: openstack spec: caConfigMap: cacerts
-
<overcloud>
をスタックの名前に置き換えます。
-
~/custom_environment_files
ディレクトリーで、SSLCertificate
、SSLIntermediateCertificate
、SSLKey
、およびCAMap
パラメーターを使用して、デプロイ用に生成された証明書を含むtls-certs.yaml
というファイルを作成します。注記証明書ファイルの作成の詳細は、SSL/TLS の有効化 を参照してください。
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 と新しい OpenStackConfigVersion が作成され、OpenStackDeploy リソースを使用してオーバークラウドに対して Ansible Playbook を実行します。
12.2. パブリックエンドポイント DNS 名の TLS
パブリックエンドポイントの DNS 名を参照するには、openstackclient
Pod に証明書を追加します。
前提条件
- オーバークラウドのパブリックエンドポイントでの SSL/TLS の有効化 の手順に従って、認証局、キー、および証明書を作成します。
手順
CA 証明書を格納するための
ConfigMap
を作成します。ConfigMap
は、OpenStackControlPlane オブジェクトを使用して、追加の CA 証明書をopenstackclient
Pod に追加するために使用されるインターフェイスです。apiVersion: v1 kind: ConfigMap metadata: name: cacerts namespace: openstack data: local_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE----- another_CA: | -----BEGIN CERTIFICATE----- … -----END CERTIFICATE-----
OpenStackControlPlane を作成し、
ConfigMap
を参照します。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: <overcloud> namespace: openstack spec: caConfigMap: cacerts
-
<overcloud>
をスタックの名前に置き換えます。
-
~/custom_environment_files
ディレクトリーで、SSLCertificate
、SSLIntermediateCertificate
、SSLKey
、およびCAMap
パラメーターを使用して、デプロイ用に生成された証明書を含むtls-certs.yaml
というファイルを作成します。注記証明書ファイルの作成の詳細は、SSL/TLS の有効化 を参照してください。
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 と新しい OpenStackConfigVersion が作成され、OpenStackDeploy リソースを使用してオーバークラウドに対して Ansible Playbook を実行します。
第13章 Director Operator を使用してサービスアカウントのパスワードを変更する
Red Hat OpenStack Platform (RHOSP) サービスとそれらが使用するデータベースは、Identity サービス (keystone) の認証情報によって認証されます。Identity サービスは、RHOSP の初回デプロイプロセスを実行する間に RHOSP パスワードを生成します。脅威の軽減やセキュリティーコンプライアンスのために、パスワードを定期的に更新する必要がある場合もあります。director Operator (OSPdO) ネイティブのツールを使用して、RHOSP 環境をデプロイした後に多くの生成済みパスワードを変更できます。
13.1. director Operator を使用してオーバークラウドサービスアカウントのパスワードをローテーションする
director Operator (OSPdO) がデプロイされた Red Hat OpenStack Platform (RHOSP) 環境で使用されるオーバークラウドのサービスアカウントパスワードをローテーションできます。
手順
現在の
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 カスタムリソースを定義し、オーバークラウドネットワークのサブネットを指定します。次に、Director Operator は設定をレンダリングし、ネットワークトポロジーを作成または更新します。
前提条件
- OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
-
ワークステーションに
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
設定ファイルを更新し、ConfigMap を作成します。
ファイル名として roles_data.yaml
を使用する必要があります。
前提条件
- OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
-
ワークステーションに
oc
コマンドラインツールをインストールしました。
手順
roles_data.yaml
ファイルを更新します。... ############################################################################### # Role: ComputeLeaf1 # ############################################################################### - name: ComputeLeaf1 description: | Basic ComputeLeaf1 Node role # Create external Neutron bridge (unset if using ML2/OVS without DVR) tags: - external_bridge networks: InternalApi: subnet: internal_api_leaf1 Tenant: subnet: tenant_leaf1 Storage: subnet: storage_leaf1 HostnameFormatDefault: '%stackname%-novacompute-leaf1-%index%' ... ############################################################################### # Role: ComputeLeaf2 # ############################################################################### - name: ComputeLeaf2 description: | Basic ComputeLeaf1 Node role # Create external Neutron bridge (unset if using ML2/OVS without DVR) tags: - external_bridge networks: InternalApi: subnet: internal_api_leaf2 Tenant: subnet: tenant_leaf2 Storage: subnet: storage_leaf2 HostnameFormatDefault: '%stackname%-novacompute-leaf2-%index%' ...
~/custom_environment_files
ディレクトリーで、テンプレートを tarball にアーカイブします。$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
ConfigMap を作成します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
14.3. 新しいロールの NIC テンプレートの作成
Red Hat OpenStack Platform (RHOSP) 16.2 では、トリプル NIC テンプレートにデフォルトで InterfaceRoutes パラメーターが含まれています。通常は、Networking サービス (neutron) ネットワークの host_routes
プロパティーで、environments/network-environment.yaml
設定ファイルでレンダリングした routes パラメーターを設定します。次に、それを InterfaceRoutes パラメーターに追加します。
director Operator には Networking サービス (neutron) が存在しません。新しいロールの新しい NIC テンプレートを作成するには、特定のネットワークのルートを NIC テンプレートに追加し、リストを連結する必要があります。
14.3.1. デフォルトのネットワークルートの作成
ネットワークルートを NIC テンプレートに追加してデフォルトのネットワークルートを作成し、リストを連結します。
手順
- NIC テンプレートを開きます。
テンプレートにネットワークルートを追加し、リストを連結します。
parameters: ... {{ $net.Name }}Routes: default: [] description: > Routes for the storage network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ... - type: interface ... routes: list_concat_unique: - get_param: {{ $net.Name }}Routes - get_param: {{ $net.Name }}InterfaceRoutes
14.3.2. サブネットルート
Routes サブネット情報は、Ansible Playbook で使用される tripleo 環境ファイル environment/network-environment.yaml
に自動レンダリングされます。NIC テンプレートでは、Routes_<subnet_name>
パラメーターを使用して、ホストに正しいルーティングを設定します (例: StorageRoutes_storage_leaf1
)。
14.3.3. スパインリーフネットワーキング用の NIC テンプレートの変更
スパインリーフネットワークを設定するには、ロールごとに NIC テンプレートを変更し、ConfigMap を再作成します。
前提条件
- OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
-
ワークステーションに
oc
コマンドラインツールをインストールしました。
手順
各コンピュートロールの NIC テンプレートを作成します。
... StorageRoutes_storage_leaf1: default: [] description: > Routes for the storage network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ... InternalApiRoutes_internal_api_leaf1: default: [] description: > Routes for the internal_api network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ... TenantRoutes_tenant_leaf1: default: [] description: > Routes for the internal_api network traffic. JSON route e.g. [{'destination':'10.0.0.0/16', 'nexthop':'10.0.0.1'}] Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute. type: json ... get_param: StorageIpSubnet routes: list_concat_unique: - get_param: StorageRoutes_storage_leaf1 - type: vlan ... get_param: InternalApiIpSubnet routes: list_concat_unique: - get_param: InternalApiRoutes_internal_api_leaf1 ... get_param: TenantIpSubnet routes: list_concat_unique: - get_param: TenantRoutes_tenant_leaf1 - type: ovs_bridge ...
~/custom_environment_files
ディレクトリーで、テンプレートを tarball にアーカイブします。$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
ConfigMap を作成します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
14.3.4. NIC テンプレートを登録するための環境ファイルの作成または更新
環境ファイルを作成または更新するには、新しいノードの NIC テンプレートをリソースレジストリーに追加し、ConfigMap を再作成します。
前提条件
- OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
-
ワークステーションに
oc
コマンドラインツールをインストールしました。 -
tripleo-tarball-config
ConfigMap が、ロールに必要なroles_data.yaml
と NIC テンプレートで更新されました。
手順
新しいノードの NIC テンプレートを、環境ファイルの resource_registry セクションに追加します。
resource_registry: OS::TripleO::Compute::Net::SoftwareConfig: net-config-two-nic-vlan-compute.yaml OS::TripleO::ComputeLeaf1::Net::SoftwareConfig: net-config-two-nic-vlan-compute_leaf1.yaml OS::TripleO::ComputeLeaf2::Net::SoftwareConfig: net-config-two-nic-vlan-compute_leaf2.yaml
~/custom_environment_files
ディレクトリーで、テンプレートを tarball にアーカイブします。$ tar -cvzf custom-config.tar.gz *.yaml
tripleo-tarball-config
ConfigMap を作成します。$ oc create configmap tripleo-tarball-config --from-file=custom-config.tar.gz -n openstack
14.4. 複数のルーティングされたネットワークを使用したオーバークラウドのデプロイ
複数のルーティングされたネットワーキングのセットを使用してオーバークラウドをデプロイするには、制御プレーンとスパインリーフネットワーキング用の Compute ノードを作成してから、Ansible Playbook をレンダリングして適用します。
14.4.1. コントロールプレーンの作成
コントロールプレーンを作成するには、コントローラーノードのリソースを指定します。director オペレーターは、リモートシェルアクセス用の openstackclient
Pod を作成します。
前提条件
- OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
-
ワークステーションに
oc
コマンドラインツールをインストールしました。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークと追加のネットワークリソースを作成しました。
手順
ワークステーションに
openstack-controller.yaml
という名前のファイルを作成します。コントローラーノードのリソース仕様を含めます。次の例は、3 つのコントローラーノードで設定されるコントロールプレーンの仕様を示しています。apiVersion: osp-director.openstack.org/v1beta2 kind: OpenStackControlPlane metadata: name: overcloud namespace: openstack spec: gitSecret: git-secret openStackClientImageURL: registry.redhat.io/rhosp-rhel8/openstack-tripleoclient:16.2 openStackClientNetworks: - ctlplane - external - internal_api - internal_api_leaf1 # optionally the openstackclient can also be connected to subnets openStackClientStorageClass: host-nfs-storageclass passwordSecret: userpassword domainName: ostest.test.metalkube.org virtualMachineRoles: Controller: roleName: Controller roleCount: 1 networks: - ctlplane - internal_api - external - tenant - storage - storage_mgmt cores: 6 memory: 20 rootDisk: diskSize: 50 baseImageVolumeName: openstack-base-img storageClass: host-nfs-storageclass storageAccessMode: ReadWriteMany storageVolumeMode: Filesystem enableFencing: False
コントロールプレーンを作成します。
$ oc create -f openstack-controller.yaml -n openstack
OCP が OpenStackControlPlane リソースに関連するリソースを作成するまで待機します。
director Operator は、Red Hat OpenStack Platform (RHOSP) コマンドを実行するためのリモートシェルアクセスを提供する
openstackclient
Pod も作成します。
検証
コントロールプレーンのリソースを表示します。
$ oc get openstackcontrolplane/overcloud -n openstack
OpenStackVMSet リソースを表示して、コントロールプレーンの仮想マシンセットの作成を確認します。
$ oc get openstackvmsets -n openstack
仮想マシンリソースを表示し、OpenShift Virtualization でのコントロールプレーンの仮想マシンの作成を確認します。
$ oc get virtualmachines
openstackclient
Pod リモートシェルへのアクセスをテストします。$ oc rsh -n openstack openstackclient
14.4.2. リーフの Compute ノードの作成
ベアメタルマシンから Compute ノードを作成するには、OpenStackBaremetalSet カスタムリソースにリソース仕様を含めます。
前提条件
- OpenShift Container Platform クラスターが稼働しており、director Operator が正しくインストールされています。
-
ワークステーションに
oc
コマンドラインツールをインストールしました。 - OpenStackNetConfig リソースを使用して、コントロールプレーンネットワークと追加のネットワークリソースを作成しました。
手順
ワークステーションに
openstack-computeleaf1.yaml
という名前のファイルを作成します。Compute ノードのリソース仕様を含めます。次の例は、1 つの Compute リーフノードの仕様を示しています。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBaremetalSet metadata: name: computeleaf1 namespace: openstack spec: # How many nodes to provision count: 1 # The image to install on the provisioned nodes baseImageUrl: http://host/images/rhel-image-8.4.x86_64.qcow2 # The secret containing the SSH pub key to place on the provisioned nodes deploymentSSHSecret: osp-controlplane-ssh-keys # The interface on the nodes that will be assigned an IP from the mgmtCidr ctlplaneInterface: enp7s0 # Networks to associate with this host networks: - ctlplane - internal_api_leaf1 - external - tenant_leaf1 - storage_leaf1 roleName: ComputeLeaf1 passwordSecret: userpassword
Compute ノードを作成します。
$ oc create -f openstack-computeleaf1.yaml -n openstack
検証
Compute ノードのリソースを表示します。
$ oc get openstackbaremetalset/computeleaf1 -n openstack
OpenShift によって管理されているベアメタルマシンを表示して、Compute ノードの作成を確認します。
$ oc get baremetalhosts -n openshift-machine-api
14.5. Playbook をレンダリングして適用する
オーバークラウドを設定できるようになりました。詳細は、director Operator を使用したオーバークラウドソフトウェアの設定 を参照してください。
第15章 director オペレーターのバックアップと復元
Red Hat OpenStack Platform (RHOSP) Director Operator を使用して、現在の CR、ConfigMap、および Secret 設定のバックアップを作成および復元します。API は、2 つの CustomResourceDefinition (CRD) で設定されています。
- OpenStackBackupRequest
- OpenStackBackup
15.1. Director オペレーター CustomResourceDefinition (CRD)
OpenStackBackupRequest CRD を使用して、バックアップの作成または復元を開始します。OpenStackBackup CRD を使用して、特定の名前空間の CR、ConfigMap、および Secret データを保存します。これらの CRD は、次の機能を提供します。
- CRD は単一の OpenStackBackup CR にバックアップを保存するため、複数の設定を手動でエクスポートおよびインポートする必要はありません。
- Director Operator は、すべてのリソースの状態を認識しているため、不完全またはエラー状態の設定をバックアップしません。
- Director Operator は、完全なバックアップを作成するために必要な CR、ConfigMap、およびシークレットを認識しています。
15.2. Director Operator のバックアップ
バックアップを作成するために、director Operator は現在の namespace の内容と、additionalConfigMaps
および additionalSecrets
リストで宣言されたものを含めます。手動で作成した ConfigMap とシークレットを追加の仕様に含めることができます。
手順
OpenStackBackupRequest CRD を作成し、
mode
をsave
に設定してバックアップをリクエストします。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBackupRequest metadata: name: openstackbackupsave namespace: openstack spec: mode: save additionalConfigMaps: [] additionalSecrets: []
-
オプション:
additionalConfigMaps
およびadditionalSecrets
仕様を使用して、手動で作成した ConfigMaps またはシークレットを含めます。 OpenStackBackupRequest のステータスをモニターします。
$ oc get -n openstack osbackuprequest openstackbackupsave NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackupsave save Quiescing
注記Quiescing
状態は、director Operator が CR が終了状態に達するのを待っていることを示します。バックアップが完了するまでの時間は、CR の数によって異なります。director Operator ログを調査して、進行状況を確認できます。
$ oc logs <operator_pod> -c manager -f 2022-01-11T18:26:15.180Z INFO controllers.OpenStackBackupRequest Quiesce for save for OpenStackBackupRequest openstackbackupsave is waiting for: [OpenStackBaremetalSet: compute, OpenStackControlPlane: overcloud, OpenStackVMSet: controller]
-
<operator_pod> を
Operator Pod の名前に置き換えます。
-
検証
OpenStackBackupRequest を表示して、STATUS が
Saved
であることを確認します。$ oc get -n openstack osbackuprequest NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackupsave save Saved 2022-01-11T19:12:58Z
OpenStackBackupRequest が
Error
状態になった場合は、リクエストの内容を確認してエラーを見つけます。$ oc get -n openstack openstackbackuprequest <request_name> -o yaml
-
<request_name>
をバックアップ要求の名前に置き換えます。
-
OpenStackBackup を表示して、存在することを確認します。
$ oc get -n openstack osbackup NAME AGE openstackbackupsave-1641928378 6m7s
15.3. バックアップからの director Operator の復元
director Operator にバックアップの復元を要求すると、director Operator は restoreSource
OpenStackBackup の内容を取得し、namespace 内に存在するすべての既存の CR、ConfigMap、およびシークレットリソースにそれらを適用しようとします。Director operator は、namespace 内の既存の director Operator リソースを上書きし、namespace 内に見つからないリソースに対して新しいリソースを作成します。
手順
利用可能なバックアップを一覧表示します。
$ oc get osbackup
注記特定のバックアップの詳細を調べるには:
$ oc get backup <name> -o yaml
-
<name>
を検査するバックアップの名前に置き換えます。
-
OpenStackBackupRequest CRD を作成し、
mode
をrestore
に設定します。以下に例を示します。apiVersion: osp-director.openstack.org/v1beta1 kind: OpenStackBackupRequest metadata: name: openstackbackupsave namespace: openstack spec: mode: <mode> restoreSource: <restore_source>
<mode>
を次のいずれかのオプションに置き換えます。-
restore
- 既存の OpenStackBackup からの復元をリクエストします。 -
cleanRestore
- 復元を試みる前に、namespace 内の既存の director Operator リソースを完全に消去します。
-
-
<restore_source>
を復元する OpenStackBackup の ID に置き換えます (例:openstackbackupsave-1641928378
)。
OpenStackBackupRequest のステータスをモニターします。
$ oc get -n openstack osbackuprequest openstackbackuprestore NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackuprestore restore openstackbackupsave-1641928378 Loading
すべてのリソースがロードされた後、director Operator は調整を開始します。
$ oc get -n openstack osbackuprequest openstackbackuprestore NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackuprestore restore openstackbackupsave-1641928378 Reconciling
注記OpenStackBackupRequest がエラー状態になった場合は、リクエストの内容を表示してエラーを見つけます。
$ oc get -n openstack openstackbackuprequest <name> -o yaml
検証
OpenStackBackupRequest を表示して、STATUS が
Restored
であることを確認します。$ oc get -n openstack osbackuprequest NAME OPERATION SOURCE STATUS COMPLETION TIMESTAMP openstackbackuprestore restore openstackbackupsave-1641928378 Restored 2022-01-12T13:48:57Z
第16章 director Operator を使用して仮想マシンのリソースを変更する
OpenStackVMSet の CPU、RAM、およびディスクリソースを変更するには、OpenStackControlPlane を使用します。
16.1. OpenStackVMSet の CPU または RAM を変更する
OpenStackControlPlane を使用して、OpenStackVMSet の CPU または RAM を変更できます。
手順
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 にディスクを追加する
additionalDisks
プロパティーを編集することで、OpenStackControlPlane を使用して仮想マシンにディスクを追加できます。
手順
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. エアギャップ環境の設定
エアギャップ環境を設定するには、registry.redhat.io
とエアギャップ環境のレジストリーの両方にアクセスできる必要があります。両方のレジストリーにアクセスする方法の詳細は、エアギャップレジストリーへのカタログコンテンツのミラーリング を参照してください。
前提条件
- Openshift Container Platform LTS リリース (OCP) 4.10 以降のクラスターがインストールされており、ベアメタルクラスターオペレーターが有効になっていて、ネットワークのプロビジョニングが行われている。
- Kubevirt-Hyperconvered (OCP 仮想化オペレーター) と SR-IOV オペレーターをクラスターにインストールしました。
- docker v2 スキーマに準拠する切断されたレジストリーがあります。詳細は、切断されたインストールのイメージのミラーリング を参照してください。
- オーバークラウドノードの登録とパッケージのインストールに使用される Satellite Server またはその他のリポジトリーにアクセスできます。
- ローカルの git リポジトリーにアクセスして、デプロイアーティファクトを保存できます。
-
ワークステーションに
oc
コマンドラインツールをインストールしました。 -
ワークステーションに
podman
およびskopeo
コマンドラインツールをインストールしました。
手順
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 applycreate -f osp-director-operator.yaml
必要なオーバークラウドのイメージをリポジトリーにコピーします。
$ for i in $(podman search --limit 1000 "registry.redhat.io/rhosp-rhel8/openstack" --format="{{ .Name }}" | awk '{print $1 ":" "16.2.4"}' | awk -F "/" '{print $2 "/" $3}'); do skopeo copy --all docker://registry.redhat.io/$i docker://your.registry.local/$i;done
注記Red Hat Satellite がローカルレジストリーとして使用されている場合は、コンテナーイメージ用の Satellite Server の準備 を参照できます。
- これで、director Operator を使用したオーバークラウドデプロイメントの準備 に進むことができます。
検証
director Operator が正常にインストールされていることを確認します。
$ oc get operators NAME AGE osp-director-operator.openstack 5m