Red Hat OpenStack Platform 15 から 16.1 へのアップグレード
Red Hat OpenStack Platform 15 から 16.1 へのインプレースアップグレード
OpenStack Documentation Team
rhos-docs@redhat.com
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ を参照してください。
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに対するご意見をお聞かせください。改善点などがあれば、ぜひお知らせください。
ドキュメント直接フィードバック (DDF) 機能の使用 (英語版のみ)
特定の文章、段落、またはコードブロックに対して直接コメントを送付するには、DDF の Add Feedback 機能を使用してください。なお、この機能は英語版のドキュメントでのみご利用いただけます。
- Multi-page HTML 形式でドキュメントを表示します。
- ドキュメントの右上隅に Feedback ボタンが表示されていることを確認してください。
- コメントするテキスト部分をハイライト表示します。
- Add Feedback をクリックします。
- Add Feedback フィールドにコメントを入力します。
- (オプション) ご自身のメールアドレスを追加してください。ドキュメントチームが問題の詳細を確認するために連絡を取ることがあります。
- Submit をクリックします。
第1章 OpenStack Platform 15 から 16.1 へのアップグレードの概要
本書では、お使いの Red Hat OpenStack Platform 15 を 16.1 にアップグレードし、環境を最新のパッケージおよびコンテナーで更新するのに役立つワークフローについて説明します。
本ガイドは、以下のバージョンのアップグレードパスを提供します。
現在の OpenStack バージョン | 新しい OpenStack バージョン |
---|---|
Red Hat OpenStack Platform 15.0 | Red Hat OpenStack Platform 16.1 |
1.1. ワークフローの概要
以下の表には、アップグレードのプロセスに必要なタスクの概要をまとめています。
タスク | 説明 |
---|---|
アップグレードに向けた環境の準備 | アップグレードに必要なリポジトリー、モジュール、およびコンテナーの準備および設定を行います。 |
アンダークラウドのアップグレード | アンダークラウドを最新の OpenStack Platform 16.1 バージョンにアップグレードします。 |
オーバークラウドのアップグレード | オーバークラウドを最新の OpenStack Platform 16.1 バージョンにアップグレードします。すべての Controller、Compute、および Ceph Storage サービスをアップグレードします。コンバージェンスのコマンドを実行して、オーバークラウドスタックをリフレッシュします。 |
オーバークラウドのリブート | オーバークラウドをリブートします。 |
1.2. アップグレードを妨げる可能性のある既知の問題
OpenStack Platform 15 から 16.1 へのアップグレードに影響を及ぼす可能性がある、以下に示す既知の問題の一覧を確認してください。
- BZ#1895220: OVN プロバイダーネットワークを使用するインスタンスのネットワーク通信の問題
-
以前のバージョン (16.0.x または 16.1.x) から 16.1.3 に更新すると、Open Virtual Network (OVN) とのデータベースの問題が原因でネットワークの中断が生じる場合があります。マイナーバージョンの更新を実施する場合、通常コンピュートノードの前にコントローラーノードを更新します。コントローラーノードを更新する際、director は
ovndb-north
データベーススキーマを最新バージョンに更新します。コンピュートノード上のovn-controller
サービスは、新しいバージョンのovndb-north
データベーススキーマを解釈できず、インスタンス用の正しいネットワークフローを取得できません。ネットワークの中断を最小限に抑えるための回避策として、openstack overcloud update run
コマンドを実行する前、およびopenstack overcloud update prepare
コマンドを実行した後に、コンピュートノードのovn_controller
サービスを更新する必要があります。詳細は、ナレッジベースのアーティクル OVN update in 16.1 causes network loss in dataplane を参照してください。Red Hat は、16.1 の次回マイナーリリースの更新でこの問題を解決することを目指しています。 - BZ#1872404: クォーラムを維持してノードを並行して再起動すると、予期せぬノードのシャットダウンが生じる
-
この問題が解決されるまで、コンポーザブルロールに基づくノードについては、先ず
Database
ロールを更新してから、Controller
、Messaging
、Compute
、Ceph
、およびその他のロールを更新する必要があります。
第2章 アップグレードに向けた環境の準備
環境を Red Hat OpenStack Platform 15 から Red Hat OpenStack Platform 16.1 にアップグレードするには、アンダークラウドのツールセットおよびコア Heat テンプレートコレクションをアップグレードする前に、正しいリポジトリー、モジュール、およびパラメーターを設定する必要があります。
アップグレードに向けてアンダークラウドおよびオーバークラウドノードの準備を行うには、以下の準備タスクを実施します。
2.1. 環境の Red Hat Enterprise Linux リリースへのロック
Red Hat OpenStack Platform 16.1 は Red Hat Enterprise Linux 8.2 でサポートされています。アップグレードを実施する前に、オペレーティングシステムをより新しいマイナーリリースにアップグレードしないように、アンダークラウドおよびオーバークラウドのリポジトリーを Red Hat Enterprise Linux 8.2 リリースにロックします。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。$ source ~/stackrc
-
RhsmVars
パラメーターが含まれるオーバークラウドのサブスクリプション管理用環境ファイルを編集します。通常、このファイルのデフォルト名はrhsm.yml
です。 サブスクリプション管理の設定で
rhsm_release
パラメーターを確認します。このパラメーターが設定されていない場合は、このパラメーターを追加してパラメーターを 8.2 に設定します。parameter_defaults: RhsmVars: … rhsm_username: "myusername" rhsm_password: "p@55w0rd!" rhsm_org_id: "1234567" rhsm_pool_ids: "1a85f9223e3d5e43013e3d6e8ff506fd" rhsm_method: "portal" rhsm_release: "8.2"
- オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
オーバークラウドの静的なインベントリーファイルを作成します。
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
デフォルトのオーバークラウド名
overcloud
以外のオーバークラウド名を使用する場合は、--plan
オプションを使用して実際のオーバークラウドの名前を設定します。すべてのノードで、オペレーティングシステムのバージョンを Red Hat Enterprise Linux 8.2 にロックするタスクが含まれる Playbook を作成します。
$ cat > ~/set_release.yaml <<'EOF' - hosts: all gather_facts: false tasks: - name: set release to 8.2 command: subscription-manager release --set=8.2 become: true EOF
set_release.yaml
Playbook を実行します。$ ansible-playbook -i ~/inventory.yaml -f 25 ~/set_release.yaml --limit <undercloud>,<Controller>,<Compute>
-
--limit
オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。<undercloud>
、<Controller>
、<Compute>
を、それらのノードを含む環境内の Ansible グループに置き換えます。 - これらのノードに別のサブスクリプションを使用している場合は、Ceph Storage ノードに対してこの Playbook を実行することはできません。
-
手動でノードを特定のバージョンにロックするには、ノードにログインして subscription-manager release
コマンドを実行します。
$ sudo subscription-manager release --set=8.2
2.2. Extended Update Support (EUS) リポジトリーへの変更
Red Hat OpenStack Platform サブスクリプションには、Red Hat Enterprise Linux 8.2 Extended Update Support (EUS) のリポジトリーが含まれます。EUS リポジトリーには、Red Hat Enterprise Linux 8.2 の最新のセキュリティーパッチおよびバグ修正が含まれています。アップグレードを実行する前に、以下のリポジトリーに切り替えます。
標準のリポジトリー | 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 は Red Hat OpenStack Platform の本リリースに対してテストされておらず、予期せぬ結果を招く可能性があります。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。$ source ~/stackrc
-
RhsmVars
パラメーターが含まれるオーバークラウドのサブスクリプション管理用環境ファイルを編集します。通常、このファイルのデフォルト名はrhsm.yml
です。 サブスクリプション管理の設定で
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 - advanced-virt-for-rhel-8-x86_64-rpms - openstack-16.1-for-rhel-8-x86_64-rpms - rhceph-4-tools-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms
- オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
オーバークラウドの静的なインベントリーファイルを作成します。
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
デフォルトのオーバークラウド名
overcloud
以外のオーバークラウド名を使用する場合は、--plan
オプションを使用して実際のオーバークラウドの名前を設定します。すべてのノードで、リポジトリーを Red Hat Enterprise Linux 8.2 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 ~/inventory.yaml -f 25 ~/change_eus.yaml --limit <undercloud>,<Controller>,<Compute>
-
すべての Red Hat OpenStack Platform ノードにコンテンツを適用するには、
--limit
オプションを使用します。<undercloud>
、<Controller>
、<Compute>
を、それらのノードを含む環境内の Ansible グループに置き換えます。 - これらのノードに別のサブスクリプションを使用している場合は、Ceph Storage ノードに対してこの Playbook を実行することはできません。
-
すべての Red Hat OpenStack Platform ノードにコンテンツを適用するには、
2.3. Red Hat Openstack Platform および Ansible リポジトリーの更新
Red Hat OpenStack Platform 16.1 パッケージおよび Ansible 2.9 パッケージを使用するようにリポジトリーを更新します。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。$ source ~/stackrc
-
RhsmVars
パラメーターが含まれるオーバークラウドのサブスクリプション管理用環境ファイルを編集します。通常、このファイルのデフォルト名はrhsm.yml
です。 サブスクリプション管理の設定で
rhsm_repos
パラメーターを確認します。rhsm_repos
パラメーターで Red Hat OpenStack Platform 13 リポジトリーおよび 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 - advanced-virt-for-rhel-8-x86_64-rpms - openstack-16.1-for-rhel-8-x86_64-rpms - fast-datapath-for-rhel-8-x86_64-rpms
- オーバークラウドのサブスクリプション管理用環境ファイルを保存します。
オーバークラウドの静的なインベントリーファイルを作成します。
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
デフォルトのオーバークラウド名
overcloud
以外のオーバークラウド名を使用する場合は、--plan
オプションを使用して実際のオーバークラウドの名前を設定します。すべてのノードで、リポジトリーを Red Hat OpenStack Platform 16.1 に設定するタスクが含まれる Playbook を作成します。
$ cat > ~/update_rhosp_repos.yaml <<'EOF' - hosts: all gather_facts: false tasks: - name: change osp repos command: subscription-manager repos --disable=openstack-16-for-rhel-8-x86_64-rpms --enable=openstack-16.1-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 ~/inventory.yaml -f 25 ~/update_rhosp_repos.yaml --limit <undercloud>,<Controller>,<Compute>
-
--limit
オプションを使用して、コンテンツをすべての RHOSP ノードに適用します。<undercloud>
、<Controller>
、<Compute>
を、それらのノードを含む環境内の Ansible グループに置き換えます。 - これらのノードに別のサブスクリプションを使用している場合は、Ceph Storage ノードに対してこの Playbook を実行することはできません。
-
すべてのノードで、リポジトリーを Red Hat OpenStack Platform 16.1 に設定するタスクが含まれる 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.1-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 ~/inventory.yaml -f 25 ~/update_ceph_repos.yaml --limit CephStorage
--limit
オプションを使用して、コンテンツを Ceph Storage ノードに適用します。
2.4. container-tools のバージョンの設定
container-tools
モジュールをバージョン2.0
に設定して、すべてのノードで正しいパッケージバージョンを使用するようにします。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。$ source ~/stackrc
オーバークラウドの静的なインベントリーファイルを作成します。
$ tripleo-ansible-inventory --ansible_ssh_user heat-admin --static-yaml-inventory ~/inventory.yaml
デフォルトのオーバークラウド名
overcloud
以外のオーバークラウド名を使用する場合は、--plan
オプションを使用して実際のオーバークラウドの名前を設定します。すべてのノードで
container-tools
モジュールをバージョン2.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 -y container-tools become: true - name: set dnf module for container-tools:2.0 command: dnf module enable -y container-tools:2.0 become: true EOF
すべてのノードに対して
container-tools.yaml
Playbook を実行します。$ ansible-playbook -i ~/inventory.yaml -f 25 ~/container-tools.yaml
2.5. コンテナーイメージ準備ファイルの更新
コンテナー準備ファイルは、ContainerImagePrepare
パラメーターが含まれるファイルです。このファイルを使用して、アンダークラウドおよびオーバークラウドのコンテナーイメージを取得する際のルールを定義します。環境をアップグレードする前に、ファイルを確認して正しいイメージバージョンを取得するようにしてください。
手順
-
コンテナー準備ファイルを編集します。通常、このファイルのデフォルト名は
containers-prepare-parameter.yaml
です。 tag
パラメーターを16.1
に設定し、namespace
パラメーターをregistry.redhat.io/rhosp-rhel8
に更新します。parameter_defaults: ContainerImagePrepare: - push_destination: true set: namespace: registry.redhat.io/rhosp-rhel8 … tag: '16.1' tag_from_label: '{version}-{release}'
更新に特定のタグ (16.1
や 16.1.2
等) を使用しない場合は、tag
キーと値のペアを削除し、tag_from_label
のみを指定します。これにより、更新プロセスの一部として使用するタグの値を決定する際に、インストールされた Red Hat OpenStack Platform バージョンが使用されます。
- このファイルを保存します。
2.6. オーバークラウドでのフェンシングの無効化
オーバークラウドをアップグレードする前に、フェンシングが無効になっていることを確認します。
コントローラーノードのアップグレードプロセス中にフェンシングが環境にデプロイされると、オーバークラウドは特定ノードが無効であることを検出し、フェンシング操作を試みる場合があります。これにより、意図しない結果が生じる可能性があります。
オーバークラウドでフェンシングを有効にしている場合には、意図しない結果を防ぐために、アップグレード期間中フェンシングを一時的に無効にする必要があります。
オーバークラウドのフェンシングを再度有効にするには、openstack overcloud upgrade prepare
コマンドの実行時に fencing.yaml
環境ファイルを追加します。director は、新しいコントローラーノードクラスターを作成する際に、オーバークラウドのフェンシングを有効にします。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 source コマンドで
stackrc
ファイルを読み込みます。$ source ~/stackrc
コントローラーノードにログインし、Pacemaker コマンドを実行してフェンシングを無効にします。
$ ssh heat-admin@CONTROLLER_IP "sudo pcs property set stonith-enabled=false"
-
fencing.yaml
環境ファイルで、EnableFencing
パラメーターをfalse
に設定し、アップグレードプロセス中にフェンシングが無効のままとなるようにします。
第3章 アンダークラウドの OpenStack Platform バージョン 15 から 16.1 へのアップグレード
アンダークラウドを OpenStack Platform バージョン 15 から 16.1 にアップグレードするには、コンテナー化されたアンダークラウドのマイナー更新に使用される手順を実施する必要があります。この手順により、アンダークラウドのツールセット、コア Heat テンプレートコレクション、およびアンダークラウド環境が更新されます。
3.1. コンテナー化されたアンダークラウドのマイナー更新の実施
director では、アンダークラウドノード上の主要なパッケージを更新するのに使用できるコマンドが提供されています。これにより、OpenStack Platform バージョン 15 環境をバージョン 16.1 にアップグレードすることができます。
手順
-
director に
stack
ユーザーとしてログインします。 dnf
コマンドを実行して、director の主要なパッケージをアップグレードします。$ sudo dnf update -y python3-tripleoclient* tripleo-ansible ansible
director は
openstack undercloud upgrade
コマンドを使用して、アンダークラウドの環境を更新します。以下のコマンドを実行します。$ openstack undercloud upgrade
- アンダークラウドのアップグレードプロセスが完了するまで待ちます。
アンダークラウドをリブートして、オペレーティングシステムのカーネルとその他のシステムパッケージを更新します。
$ sudo reboot
- ノードがブートするまで待ちます。
3.2. アンダークラウドアップグレード後の注意事項
-
stack
ユーザーのホームディレクトリーでコアテンプレートのローカルセットを使用している場合には、Advanced Overcloud Customizationの Using Customized Core Heat Templates に記載の推奨ワークフローを使用して、テンプレートを更新するようにしてください。オーバークラウドをアップグレードする前に、ローカルコピーを更新する必要があります。
3.3. 次のステップ
アンダークラウドのアップグレードが完了しました。これでオーバークラウドをアップグレードできるようになりました。
第4章 オーバークラウドの OpenStack Platform バージョン 15 から 16.1 へのアップグレード
オーバークラウドをアップグレードするには、オーバークラウドプランを更新し、アップグレードに向けてノードの準備を行い、環境に適用されるすべてのコンテナーイメージ設定の準備を行い、ノードをアップグレードする必要があります。
BZ#1872404 が解決されるまで、コンポーザブルロールに基づくノードについては、先ず Database
ロールを更新してから、Controller
、Messaging
、Compute
、Ceph
、およびその他のロールを更新する必要があります。
前提条件
- アンダークラウドノードを OpenStack Platform バージョン 15 から 16.1 にアップグレードしている。
オーバークラウドをアップグレードするには、以下のタスクを実施します。
4.1. HA サービスのローリングアップグレードに向けたコンテナーイメージの準備
HA サービスが使用するコンテナーイメージの namespace
、name_prefix
、または name_suffix
が変更された場合、Pacemaker は自動的にコントロールプレーンでこのサービスのインスタンスをすべて再起動し、新たに設定されたコンテナーイメージ名でコンテナーを再作成します。
Red Hat OpenStack 15 と 16.1 では異なる name_prefix
の値が使用されるので、クラスターの最初のノードが更新された後、残りのノードはローカルに存在するはずの新しいコンテナーイメージを使用して起動します。
HA コンテナーイメージ名のローリング更新を行うことができるように、Red Hat OpenStack 16.1 では ClusterCommonTag
heat パラメーターが実装され、固定の name_prefix
(cluster.common.tag
) および固定の name_suffix
(pcmklatest
) が設定された中間イメージ名を使用するように HA サービスが設定されます。director がノードに新しいコンテナーイメージをプルするたびに、中間イメージタグが新たにプルしたイメージをポイントするようにタグが更新されます。
OpenStack 16.1 の中間コンテナーイメージ命名スキームに移行するには、コントローラーノード上にある各 HA コンテナーイメージ用に初期コンテナータグを手動で作成する必要があります。新しい cluster.common.tag/rhosp16-openstack-*
コンテナータグは、元の registry/rhosp15-openstack-*:pcmklatest
タグによって参照される同じコンテナーイメージ ID を指します。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。$ source ~/stackrc
オーバークラウドの静的なインベントリーファイルを作成します。
$ tripleo-ansible-inventory --static-yaml-inventory ~/inventory.yaml
既存のイメージを新しい名前にタグ付けするスクリプトを作成します。
cat > pcmkr_common_tag.sh <<'EOF' #!/bin/sh # Due to a change in internal CI repo, we need to adjust # the HA relate containers before running the update. # See bz#1846042/PIDONE OLD_PREFIX=${1:-"openstack-"} NEW_PREFIX=${2:-"openstack-"} TRANSFORM=s%${OLD_PREFIX}%${NEW_PREFIX}%p # Get all images used by HA containers (disregards images with cluster common tag in their name) IMAGES=$(sudo podman images | awk '$1 !~ /cluster.common.tag/ && $2 ~ /pcmklatest/ {print $1}') if [ -n "$IMAGES" ]; then echo "Creating cluster common tags and linking them to current HA images" fi # i: 192.168.24.1:8787/rhosp15-rhel8/openstack-mariadb # image: openstack-mariadb # transformed: openstack-mariadb # full_i: 192.168.24.1:8787/rhosp15-rhel8/openstack-mariadb:pcmklatest # full_icommon: cluster.common.tag/openstack-mariadb:pcmklatest for i in $IMAGES; do image=$(echo "$i" | sed 's%.*/%%') transformed=$(echo $image | sed -n $TRANSFORM) full_i=$i:pcmklatest full_icommon=cluster.common.tag/${transformed}:pcmklatest # echo $i - $TRANSFORM "=>" $image - $transformed # original image points to a image hash, create a new tag # with cluster.common.tag and make it point to the same image hash echo $full_i "-->" $full_icommon sudo podman tag $full_i $full_icommon done EOF
スクリプトを実行して既存のイメージを新しい名前にタグ付けします。
$ ansible -i inventory.yaml 'overcloud' -m script -a './pcmkr_common_tag.sh'
4.2. オーバークラウドの更新準備タスクの実施
更新プロセスに向けてオーバークラウドを準備するには、openstack overcloud update prepare
のコマンドを実行して、以下のタスクを実施します。
- オーバークラウドのプランを OpenStack Platform 16.1 に更新する。
- 更新に向けてノードを準備する
前提条件
-
Ceph のサブスクリプションを使用し、Ceph ストレージノード用に
overcloud-minimal
イメージを使用するように director を設定している場合、roles_data.yaml
ロール定義ファイルでrhsm_enforce
パラメーターがFalse
に設定されていることを確認する必要があります。 -
カスタム NIC テンプレートをレンダリングした場合は、オーバークラウドのバージョンとの非互換性を回避するために、
openstack-tripleo-heat-templates
コレクションの更新バージョンでテンプレートを再生成する必要があります。カスタム NIC テンプレートの詳細は、オーバークラウドの高度なカスタマイズ ガイドの カスタマイズのためのデフォルトのネットワークインターフェイステンプレートのレンダリング を参照してください。
手順
stackrc
ファイルを取得します。$ source ~/stackrc
更新準備コマンドを実行します。
$ openstack overcloud update prepare \ --templates \ --stack <stack_name> \ -r <roles_data_file> \ -n <network_data_file> \ -e <environment_file> \ -e <environment_file> \ …
以下のオプションの中で、お使いの環境に適切なオプションを追加します。
-
オーバークラウドスタックの名前がデフォルトの名前
overcloud
とは異なる場合は、更新の準備コマンドに--stack
オプションを追加し、<stack_name>
を実際のスタック名に置き換えます。 -
専用のカスタムロールを使用する場合は、カスタムロール (
<roles_data>) ファイル
を追加します (-r
)。 -
カスタムネットワークを使用する場合は、コンポーザブルネットワーク (
_<network_data>) ファイル _
を追加します (-n
)。 -
高可用性クラスターをデプロイする場合は、更新の準備コマンドに
--ntp-server
オプションを追加するか、または環境ファイルにNtpServer
パラメーターおよび値を追加します。 -
すべてのカスタム設定環境ファイル (
-e
)
-
オーバークラウドスタックの名前がデフォルトの名前
- 更新の準備が完了するまで待ちます。
4.3. コンテナーイメージ準備タスクの実行
オーバークラウドの更新を実行するには、最新の OpenStack Platform 16.1 のコンテナーイメージが必要です。そのためには、container_image_prepare
外部更新プロセスを実行します。このプロセスを実行するには、container_image_prepare
にタグ付けされたタスクに対して openstack overcloud external-update run
コマンドを実行します。これらのタスクにより以下のアクションが実施されます。
- お使いの環境に該当するすべてのコンテナーイメージ設定を自動的に準備する。
- 事前にこのオプションを無効にしていない限り、該当するコンテナーイメージをアンダークラウドにプルする。
デフォルトのスタック名 (overcloud
) を使用していない場合は、--stack <stack_name>
オプションでスタック名を設定します。<stack_name>
は実際のスタック名に置き換えます。
手順
stackrc
ファイルを取得します。$ source ~/stackrc
container_image_prepare
にタグ付けされたタスクに対してopenstack overcloud external-update run
コマンドを実行します。$ openstack overcloud external-update run --stack <stack_name> --tags container_image_prepare
4.4. すべてのコントローラーノードの更新
以下の手順では、すべてのコントローラーノードを最新バージョンの OpenStack Platform 16.1 に更新します。このプロセスでは、--limit Controllerer
オプションを指定して openstack overcloud update run
コマンドを実行し、操作をコントローラーノードだけに制限します。コントロールプレーン API は、マイナー更新中もすべて利用できます。
BZ#1872404 が解決されるまで、コンポーザブルロールに基づくノードについては、先ず Database
ロールを更新してから、Controller
、Messaging
、Compute
、Ceph
、およびその他のロールを更新する必要があります。
デフォルトのスタック名 (overcloud
) を使用していない場合は、--stack <stack_name>
オプションでスタック名を設定します。<stack_name>
は実際のスタック名に置き換えます。
手順
stackrc
ファイルを取得します。$ source ~/stackrc
更新コマンドを実行します。
$ openstack overcloud update run --stack <stack_name> --limit Controller
- コントローラーノードの更新が完了するまで待ちます。
4.5. すべてのコンピュートノードの更新
以下の手順では、すべてのコンピュートノードを最新バージョンの OpenStack Platform 16.1 に更新します。このプロセスは、openstack overcloud update run
コマンドに --limit Compute
オプションを指定して、操作をコンピュートノードのみに制限して実行する必要があります。
- 並列処理に関する考慮事項
多数のコンピュートノードをアップグレードする場合は、パフォーマンスを向上させるために、
--limit Compute
オプションを指定してopenstack overcloud upgrade run
コマンドを実行し、20 ノードのバッチを並行して処理することができます。たとえば、デプロイメントに 80 のコンピュートノードがある場合、次のコマンドを実行して、コンピュートノードを並行して更新できます。$ openstack overcloud update run -y --limit 'Compute[0:19]' > update-compute-0-19.log 2>&1 & $ openstack overcloud update run -y --limit 'Compute[20:39]' > update-compute-20-39.log 2>&1 & $ openstack overcloud update run -y --limit 'Compute[40:59]' > update-compute-40-59.log 2>&1 & $ openstack overcloud update run -y --limit 'Compute[60:79]' > update-compute-60-79.log 2>&1 &
'Compute[0:19]'
、'Compute[20:39]'
、'Compute[40:59]'
、および'Compute[60:79]'
のノード領域分割方法はランダムで、更新されるノードを制御することはできません。特定のコンピュートノードを更新するには、バッチで更新するノードをコンマ区切りリストで指定します。
$ openstack overcloud update run --limit <Compute0>,<Compute1>,<Compute2>,<Compute3>
デフォルトのスタック名 (overcloud
) を使用していない場合は、--stack <stack_name>
オプションでスタック名を設定します。<stack_name>
は実際のスタック名に置き換えます。
手順
stackrc
ファイルを取得します。$ source ~/stackrc
更新コマンドを実行します。
$ openstack overcloud update run --stack <stack_name> --limit Compute
- コンピュートノードの更新が完了するまで待ちます。
4.6. 全 HCI コンピュートノードの更新
以下の手順では、ハイパーコンバージドインフラストラクチャー (HCI) コンピュートノードを更新します。このプロセスでは、以下の操作を行います。
-
openstack overcloud update run
コマンドに--limit ComputeHCI
オプションを指定して、操作を HCI ノードのみに制限して実行する -
openstack overcloud external-update run --tags ceph
コマンドを実行し、コンテナー化された Red Hat Ceph Storage 4 クラスターへの更新を実施する
デフォルトのスタック名 (overcloud
) を使用していない場合は、--stack <stack_name>
オプションでスタック名を設定します。<stack_name>
は実際のスタック名に置き換えます。
前提条件
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードで、Red Hat Ceph Storage クラスターのステータスが正常であり、pg ステータスがactive+clean
であることを確認する。$ sudo podman exec -it ceph-mon-controller-0 ceph -s
Ceph クラスターが正常な場合、
HEALTH_OK
のステータスを返す。Ceph クラスターのステータスが異常な場合、
HEALTH_WARN
またはHEALTH_ERR
のステータスを返す。トラブルシューティングのガイダンスについては、Red Hat Ceph Storage 4 トラブルシューティングガイドを 参照してください。
手順
stackrc
ファイルを取得します。$ source ~/stackrc
更新コマンドを実行します。
$ openstack overcloud update run --stack <stack_name> --limit ComputeHCI
- ノードの更新が完了するまで待ちます。
Ceph Storage の更新コマンドを実行します。以下に例を示します。
$ openstack overcloud external-update run --stack <stack_name> --tags ceph
- コンピュート HCI ノードの更新が完了するまで待ちます。
4.7. すべての Ceph Storage ノードの更新
以下の手順では、Ceph Storage ノードを更新します。このプロセスでは、以下の操作を行います。
-
openstack overcloud update run
コマンドに--limit CephStorage
オプションを指定して、操作を Ceph Storage ノードのみに制限して実行する -
openstack overcloud external-update run
コマンドを実行して外部プロセスとしてceph-ansible
を実行し、Red Hat Ceph Storage 3 コンテナーを更新する。
RHOSP 16.1 は RHEL 8.2 でサポートされています。ただし、Ceph Storage ロールにマップされているホストは、最新のメジャー RHEL リリースに更新されます。詳細は、Red Hat Ceph Storage: サポートされる設定 を参照してください。
デフォルトのスタック名 (overcloud
) を使用していない場合は、--stack <stack_name>
オプションでスタック名を設定します。<stack_name>
は実際のスタック名に置き換えます。
前提条件
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードで、Red Hat Ceph Storage クラスターのステータスが正常であり、pg ステータスがactive+clean
であることを確認する。$ sudo podman exec -it ceph-mon-controller-0 ceph -s
Ceph クラスターが正常な場合、
HEALTH_OK
のステータスを返す。Ceph クラスターのステータスが異常な場合、
HEALTH_WARN
またはHEALTH_ERR
のステータスを返す。トラブルシューティングのガイダンスについては、Red Hat Ceph Storage 4 トラブルシューティングガイドを 参照してください。
手順
stackrc
ファイルを取得します。$ source ~/stackrc
グループノードを更新します。
グループ内のすべてのノードを更新するには、以下のコマンドを実行します。
$ openstack overcloud update run --limit <GROUP_NAME>
グループ内の単一ノードを更新するには、以下のコマンドを実行します。
$ openstack overcloud update run --limit <GROUP_NAME> [NODE_INDEX]
注記ノードを個別に更新する場合は、必ずすべてのノードを更新してください。
グループ内の最初のノードのインデックスはゼロ (0) です。たとえば、
CephStorage
という名前のグループの最初のノードを更新するには、以下のコマンドを実行します。openstack overcloud update run --limit CephStorage[0]
- ノードの更新が完了するまで待ちます。
Ceph Storage コンテナーの更新コマンドを実行します。
$ openstack overcloud external-update run --tags ceph
- Ceph Storage コンテナーの更新が完了するまで待ちます。
4.8. データベースのオンライン更新の実施
一部のオーバークラウドコンポーネントでは、データベーステーブルのオンラインアップグレード (または移行) が必要です。そのためには、online_upgrade
外部更新プロセスを実行します。このプロセスを実行するには、online_upgrade
にタグ付けされたタスクに対して openstack overcloud external-update run
コマンドを実行します。これにより、以下のコンポーネントに対してデータベースのオンライン更新が実行されます。
- OpenStack Block Storage (cinder)
- OpenStack Compute (nova)
手順
stackrc
ファイルを取得します。$ source ~/stackrc
online_upgrade
のタグを使用するタスクに対してopenstack overcloud external-update run
コマンドを実行します。$ openstack overcloud external-update run --tags online_upgrade
4.9. 更新の最終処理
更新には、オーバークラウドスタックを更新する最終ステップが必要です。これにより、スタックのリソース構造が OpenStackPlatform 16.1 の標準のデプロイメントと一致し、今後、通常の openstack overcloud deploy
の機能を実行できるようになります。
手順
stackrc
ファイルを取得します。$ source ~/stackrc
-
オーバークラウドでフェンシングを再度有効にするには、
fencing.yaml
環境ファイルで、EnableFencing
パラメーターをtrue
に設定します。 更新の最終処理のコマンドを実行します。
$ openstack overcloud update converge \ --templates \ --stack <stack_name> \ -r <roles_data_file> \ -n <network_data_file> \ -e <environment_file> \ -e <environment_file> \ ... ...
以下のオプションの中で、お使いの環境に適切なオプションを追加します。
-
EnableFencing
パラメーターがtrue
に設定されたfencing.yaml
環境ファイル。 -
オーバークラウドスタックの名前がデフォルトの名前
overcloud
とは異なる場合は、更新の準備コマンドに--stack
オプションを追加し、<stack_name>
を実際のスタック名に置き換えます。 -
専用のカスタムロールを使用する場合は、カスタムロール (
<roles_data>
) のファイルを追加します (-r
) -
カスタムネットワークを使用する場合は、コンポーザブルネットワーク (
<network_data>
) のファイルを追加します (-n
) -
すべてのカスタム設定環境ファイル (
-e
)
-
- 更新の最終処理が完了するまで待ちます。
第5章 アップグレード後のオーバークラウドのリブート
Red Hat OpenStack 環境をバージョン 15 から 16.1 にアップグレードしたら、オーバークラウドをリブートする必要があります。リブートにより、関連付けられたカーネル、システムレベル、およびコンテナーコンポーネントの更新と共にノードがリフレッシュされ、これによりパフォーマンスおよびセキュリティーが向上します。
ダウンタイムを計画して、以下のリブート手順を実施します。
オーバークラウドをリブートするには、以下のタスクを実施します。
5.1. コントローラーノードおよびコンポーザブルノードのリブート
コントローラーノードおよびコンポーザブルロールに基づくスタンドアロンのノードをリブートするには、以下の手順を実施します。ただし、これにはコンピュートノードおよび Ceph Storage ノードは含まれません。
手順
- リブートするノードにログインします。
オプション: ノードが Pacemaker リソースを使用している場合は、クラスターを停止します。
[heat-admin@overcloud-controller-0 ~]$ sudo pcs cluster stop
ノードをリブートします。
[heat-admin@overcloud-controller-0 ~]$ sudo reboot
- ノードがブートするまで待ちます。
サービスを確認します。以下に例を示します。
ノードが Pacemaker サービスを使用している場合には、ノードがクラスターに再度加わったかどうかを確認します。
[heat-admin@overcloud-controller-0 ~]$ sudo pcs status
ノードが Systemd サービスを使用している場合には、すべてのサービスが有効化されていることを確認します。
[heat-admin@overcloud-controller-0 ~]$ sudo systemctl status
ノードがコンテナー化されたサービスを使用している場合には、ノード上の全コンテナーがアクティブであることを確認します。
[heat-admin@overcloud-controller-0 ~]$ sudo podman ps
5.2. Ceph Storage (OSD) クラスターのリブート
Ceph Storage (OSD) ノードのクラスターをリブートするには、以下の手順を実施します。
前提条件
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードで、Red Hat Ceph Storage クラスターのステータスが正常であり、pg ステータスがactive+clean
であることを確認する。$ sudo podman exec -it ceph-mon-controller-0 ceph -s
Ceph クラスターが正常な場合、
HEALTH_OK
のステータスを返す。Ceph クラスターのステータスが異常な場合、
HEALTH_WARN
またはHEALTH_ERR
のステータスを返す。トラブルシューティングのガイダンスについては、Red Hat Ceph Storage 4 トラブルシューティングガイドを 参照してください。
手順
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードにログインし、Ceph Storage クラスターのリバランスを一時的に無効にします。$ sudo podman exec -it ceph-mon-controller-0 ceph osd set noout $ sudo podman exec -it ceph-mon-controller-0 ceph osd set norebalance
注記マルチスタックまたは分散計算ノード (DCN) アーキテクチャーを使用している場合は、
noout
フラグとnorebalance
フラグの設定時にクラスター名を指定する必要があります。例:sudo podman exec -it ceph-mon-controller-0 ceph osd set noout --cluster <cluster_name>
- リブートする最初の Ceph Storage ノードを選択し、そのノードにログインします。
ノードをリブートします。
$ sudo reboot
- ノードがブートするまで待ちます。
ノードにログインして、クラスターのステータスを確認します。
$ sudo podman exec -it ceph-mon-controller-0 ceph status
pgmap
により、すべてのpgs
が正常な状態 (active+clean
) として報告されることを確認します。- ノードからログアウトして、次のノードをリブートし、ステータスを確認します。全 Ceph Storage ノードがリブートされるまで、このプロセスを繰り返します。
完了したら、
ceph-mon
サービスを実行している Ceph Monitor または Controller ノードにログインし、クラスターの再調整を再度有効にします。$ sudo podman exec -it ceph-mon-controller-0 ceph osd unset noout $ sudo podman exec -it ceph-mon-controller-0 ceph osd unset norebalance
注記マルチスタックまたは分散計算ノード (DCN) アーキテクチャーを使用している場合は、
noout
フラグとnorebalance
フラグの設定解除時にクラスター名を指定する必要があります。例:sudo podman exec -it ceph-mon-controller-0 ceph osd set noout --cluster <cluster_name>
最終のステータスチェックを実行して、クラスターが
HEALTH_OK
を報告していることを確認します。$ sudo podman exec -it ceph-mon-controller-0 ceph status
5.3. コンピュートノードのリブート
コンピュートノードをリブートするには、以下の手順を実施します。Red Hat OpenStack Platform 環境内のインスタンスのダウンタイムを最小限に抑えるために、この手順には、リブートするコンピュートノードからインスタンスを移行するステップも含まれています。これは、以下のワークフローを伴います。
- コンピュートノードをリブートする前に、インスタンスを別のノードに移行するかどうかを決定する。
- リブートするコンピュートノードを選択して無効にし、新規インスタンスをプロビジョニングしないようにする。
- インスタンスを別のコンピュートノードに移行する。
- 空のコンピュートノードをリブートする。
- 空のコンピュートノードを有効にする。
前提条件
コンピュートノードをリブートする前に、ノードをリブートする間インスタンスを別のコンピュートノードに移行するかどうかを決定する必要があります。
コンピュートノード間で仮想マシンインスタンスを移行する際に受ける可能性のある移行の制約の一覧を確認してください。詳細は、Configuring the Compute Service for Instance Creation の Migration constraints を参照してください。
インスタンスを移行することができない場合は、以下のコアテンプレートパラメーターを設定して、コンピュートノードリブート後のインスタンスの状態を制御することができます。
NovaResumeGuestsStateOnHostBoot
-
リブート後のコンピュートノードで、インスタンスを同じ状態に戻すかどうかを定義します。
False
に設定すると、インスタンスは停止した状態を維持し、手動で起動する必要があります。デフォルト値はFalse
です。 NovaResumeGuestsShutdownTimeout
-
リブートする前に、インスタンスのシャットダウンを待つ秒数。この値を
0
に設定することは推奨されません。デフォルト値は 300 です。
オーバークラウドパラメーターおよびその使用方法についての詳細は、オーバークラウドのパラメーター を参照してください。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 全コンピュートノードとその UUID を一覧表示します。
$ source ~/stackrc (undercloud) $ openstack server list --name compute
リブートするコンピュートノードの UUID を特定します。
アンダークラウドから、コンピュートノードを選択します。そのノードを無効にします。
$ source ~/overcloudrc (overcloud) $ openstack compute service list (overcloud) $ openstack compute service set <hostname> nova-compute --disable
コンピュートノード上の全インスタンスを一覧表示します。
(overcloud) $ openstack server list --host <hostname> --all-projects
- インスタンスを移行しない場合は、このステップ に進みます。
インスタンスを別のコンピュートノードに移行する場合には、以下のコマンドのいずれかを使用します。
インスタンスを別のホストに移行する。
(overcloud) $ openstack server migrate <instance_id> --live <target_host> --wait
nova-scheduler
により対象のホストが自動的に選択されるようにする。(overcloud) $ nova live-migration <instance_id>
一度にすべてのインスタンスのライブマイグレーションを行う。
$ nova host-evacuate-live <hostname>
注記nova
コマンドで非推奨の警告が表示される可能性がありますが、無視して問題ありません。
- 移行が完了するまで待ちます。
移行が正常に完了したことを確認します。
(overcloud) $ openstack server list --host <hostname> --all-projects
- 選択したコンピュートノードのインスタンスがなくなるまで、移行を続けます。
コンピュートノードにログインして、ノードをリブートします。
[heat-admin@overcloud-compute-0 ~]$ sudo reboot
- ノードがブートするまで待ちます。
コンピュートノードを再度有効にします。
$ source ~/overcloudrc (overcloud) $ openstack compute service set <hostname> nova-compute --enable
コンピュートノードが有効であることを確認します。
(overcloud) $ openstack compute service list