Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

第3章 director ベースの環境: メジャーバージョンへのアップグレードの実行

警告

最新のメジャーバージョンにアップグレードする前に、アンダークラウドとオーバークラウドが最新のマイナーバージョンに更新されていることを確認してください。これには、OpenStack Platform サービスとベースオペレーティングシステムの両方が含まれます。マイナーバージョンを更新するプロセスについては、Red Hat OpenStack Platform 7『director のインストールと使用方法』「環境の更新」の章を参照してください。先にマイナーバージョンを更新せずに、メジャーバージョンをアップグレードすると、アップグレードプロセスが失敗してしまう可能性があります。

警告

インスタンスの高可用性を実装している場合には、アップグレードやスケールアップはできないので (『コンピュートインスタンスの高可用性』で説明しています)、操作を試みても失敗してしまいます。

また、インスタンスの高可用性を有効にすると、将来、director を使用したアップグレードはできなくなります。これは、メジャーアップグレードとマイナーアップグレードの両方に該当します。詳しくは、https://access.redhat.com/ja/solutions/2898841 を参照してください。

本章では、環境のアップグレードの方法を考察します。これには、アンダークラウドとオーバークラウドの両方の機能の更新が含まれます。このアップグレードプロセスでは、次のメジャーバージョンに移行する手段を提供します。今回は、Red Hat OpenStack Platform 7 から Red Hat OpenStack Platform 8 へのアップグレードです。

いずれの場合の手順でも、以下のワークフローを実行していきます。

  1. Red Hat OpenStack Platform director パッケージの更新
  2. Red Hat OpenStack Platform director でのオーバークラウドイメージの更新
  3. Red Hat OpenStack Platform director を使用したオーバークラウドスタックとパッケージの更新
重要

バージョンのアップグレードを行う前に、「アップグレード前の重要な注記」の情報を必ず一読してください。

3.1. アップグレード前の重要な注記

環境をアップグレードする前に、以下の注記を必ず一読してください。

  • Red Hat OpenStack Platform director でのアップグレードは、ライブの実稼働環境で実行する前に、その環境固有の設定で全面的にテストする必要があります。Red Hat では、director を使用する場合の標準のオプションとして提供されているユースケースの大半とそれらの組み合わせを検証済みですが、可能な組み合わせの数が多いため、それらを完全に網羅することはできません。さらに、標準デプロイメントの設定が変更された場合には、手動または設定後のフックを使用して、実稼働用以外の環境でアップグレード機能をテストすることが極めて重要です。そのため、以下を実行することを推奨します。

    • アンダークラウドノードのバックアップを実行してから、アップグレードの手順のステップを開始します。バックアップの手順は、 『Red Hat OpenStack Platform のバックアップと復元』ガイドを参照してください。
    • 実稼働環境で手順を実行する前に、すべての変更が加えられたテスト環境でアップグレードの手順を実行します。
    • このアップグレードの実行に関して何らかの懸念がある場合は、作業を開始する前に、Red Hat までご連絡いただき、アップグレードプロセスについてのアドバイスおよびサポートを依頼してください。
  • 本項で説明するアップグレードプロセスは、director を使ったカスタマイズにのみ対応しています。director 以外を使用してオーバークラウドの機能をカスタマイズした場合は、オーバークラウドをアップグレードして、アップグレードの完了後にその機能を再度有効化してください。つまり、カスタマイズした機能は、アップグレードがすべて完了するまで利用できないということになります。
  • Red Hat OpenStack Platform director 8 は、以前のバージョンのオーバークラウドを管理することができます。詳しい情報は、以下のサポートマトリックスを参照してください。.

    表3.1 Red Hat OpenStack Platform director 8 のサポートマトリックス

    バージョン

    オーバークラウドの更新

    オーバークラウドのデプロイ

    オーバークラウドのスケーリング

    Red Hat OpenStack Platform 7

    7.0.4 以降

    7.0.4 以降

    7.0.4 以降

    Red Hat OpenStack Platform 8

    すべてのバージョン

    すべてのバージョン

    すべてのバージョン

  • 旧バージョンのオーバークラウドを使用している場合には、以下の Heat テンプレートコレクションを使用してください。

    • Red Hat OpenStack Platform 7: /usr/share/openstack-tripleo-heat-templates/kilo/

      例を以下に示します。

      $ openstack overcloud deploy -templates /usr/share/openstack-tripleo-heat-templates/kilo/ [OTHER_OPTIONS]
  • Red Hat OpenStack Platform 7 のオーバークラウドを管理する場合には、/home/stack/tripleo-overcloud-passwords ファイルで、RabbitMQ のパスワードをバージョン 7 のデフォルトに設定します。

    OVERCLOUD_RABBITMQ_PASSWORD=guest
  • Satellite の登録に環境ファイルを使用する場合は、その環境ファイルで以下のパラメーターを更新するようにしてください。

    • rhel_reg_repos:オーバークラウドを有効化するためのリポジトリー ( Red Hat OpenStack Platform 8 のリポジトリーを含む)。有効化するリポジトリーについては、「リポジトリーの要件」を参照してください。
    • rhel_reg_activation_key: Red Hat OpenStack Platform 8 のリポジトリー用の新規アクティベーションキー
    • rhel_reg_sat_repo: katello-agent など、Red Hat Satellite 6 の管理ツールが含まれるリポジトリーを定義する新たなパラメーター。Red Hat Satellite 6 に登録する場合はこのパラメーターを追加するようにしてください。
  • Red Hat OpenStack Platform 8 のデフォルトのタイムゾーンは UTC です。Red Hat OpenStack Platform 7 までは EST でした。必要な場合には、タイムゾーンを指定する環境ファイルを追加してください。
  • 外部のロードバランサーを使用する場合には、ロードバランシングの設定を更新して、Red Hat OpenStack Platform 8 の新規サービスに対応します。サービスの全リストと設定例は、『オーバークラウド向けの外部のロードバランシング』 ガイドの「サービス設定のリファレンス」 を参照してください。
  • Red Hat OpenStack Platform 8 へのメジャーアップグレードを試みる前には、アンダークラウドとオーバークラウドを Red Hat OpenStack Platform 7 および Red Hat Enterprise Linux 7 の最新のマイナーリリースに必ずアップグレードしておいてください。Red Hat OpenStack Platform 7 『director のインストールと使用方法』「環境の更新」で、アンダークラウドとオーバークラウドにパッケージの更新を実行する手順を参照してください。カーネルが最新バージョンに更新された場合には、再起動して新規カーネルパラメーターを有効にしてください。

3.2. director のアップグレード

重要

以下の手順のステップを試す前に、「アップグレード前の重要な注記」の情報を必ず一読してください。

director に stack ユーザーとしてログインし、主要な OpenStack Platform サービスを停止します。

$ sudo systemctl stop 'openstack-*' 'neutron-*' httpd
注記

これにより、アンダークラウドで短時間のダウンタイムが生じます。アンダークラウドの更新中もオーバークラウドは引き続き機能します。

director パッケージを最新のメジャーバージョンに更新するには、OpenStack Platform のリポジトリーを以前のバージョンから新しいバージョンに変更してください。たとえば、以下のとおりです。

$ sudo subscription-manager repos --disable=rhel-7-server-openstack-7.0-rpms --disable=rhel-7-server-openstack-7.0-director-rpms
$ sudo subscription-manager repos --enable=rhel-7-server-openstack-8-rpms --enable=rhel-7-server-openstack-8-director-rpms

上記のコマンドは、yum が最新のリポジトリーを使用するように設定します。 yum で director を更新します。

$ sudo yum upgrade

yum update が完了する前に失敗してしまう OpenStack サービスもあります。これは予想される動作です。アンダークラウドのアップグレードのコマンドで、これらのサービスの設定が修正されます。

director は openstack undercloud upgradeコマンドを使用して、アンダークラウドの環境をアップグレードします。以下のようにアップグレードコマンドを実行します。

$ openstack undercloud upgrade

これにより、director の設定が更新され、バージョンの変更後に指定されていない設定内容が追加されます。このコマンドを実行しても、オーバークラウドのスタックデータや環境内の既存のノードにあるデータなど、保存されたデータは削除されません。

更新が完了したら、director の OpenStack サービスを確認してください。

$ sudo systemctl list-units openstack-*
注記

openstack-keystone は、機能しないサービスとして表示される場合があります。これは、このサービスは、WSGI アプリケーションとして httpd サービスで実行されているためです。openstack-keystone サービスは、director パッケージを更新して、openstack undercloud upgrade を実行した後に安全に無効化することができます。

オーバークラウドとそのノードの存在を確認して、更新を完了します。

$ source ~/stackrc
$ openstack server list
$ ironic node-list
$ heat stack-list

オーバークラウドを Red Hat OpenStack Platform 8 にアップグレードした後には以下の点に注意してください。

  • SSL を使用したアンダークラウドは、アップグレードの際に VIP へのアクセスがなくなる可能性があります。その場合は、アンダークラウドの keepalived サービスを再起動してください。

    $ systemctl restart keepalived
  • アンダークラウドの admin ユーザーは、Red Hat OpenStack Platform 8 に含まれていない追加のロール ( _member_) が必要な場合があります。このロールは、オーバークラウドの通信の際に重要です。このロールがあるかどうか確認します。

    $ keystone role-list

    このロールが存在しない場合は、作成します。

    $ keystone role-create --name _member_

    admin テナントで admin ユーザーにこのロールを追加します。

    $ keystone user-role-add --user admin --role _member_ --tenant admin
  • カスタマイズされたコアの Heat テンプレートを使用する場合には、更新されたコアの Heat テンプレートと現在の設定の相違点を確認するようにしてください。Red Hat では、今後のリリースで Heat テンプレートコレクションへの更新を提供します。変更されたテンプレートコレクションを使用すると、カスタムのコピーと /usr/share/openstack-tripleo-heat-templates にあるオリジナルのコピーとの間に相違が生じる可能性があります。以下のコマンドを実行して、カスタムの Heat テンプレートと更新されるオリジナルのバージョンとの差分を確認します。

    # diff -Nary /usr/share/openstack-tripleo-heat-templates/ ~/templates/my-overcloud/

    これらの更新をカスタムの Heat テンプレートコレクションに適用するか、/usr/share/openstack-tripleo-heat-templates/ でテンプレートの新しいコピーを作成して、カスタマイズを適用します。

3.3. director 上のオーバークラウドイメージのアップグレード

重要

以下の手順のステップを試す前に、「アップグレード前の重要な注記」の情報を必ず一読してください。

以下の手順では、ノードの検出とオーバークラウドのデプロイメントに向け最新のイメージが確保されるようにします。rhosp-director-images および rhosp-director-images-ipa のパッケージからの新規イメージは、アンダークラウドのアップグレードですでに更新されています。

stack ユーザーホームの images ディレクトリーから既存のイメージ (/home/stack/images) を削除して、新しいイメージアーカイブをコピーします。

$ rm -rf ~/images/*
$ cp /usr/share/rhosp-director-images/overcloud-full-latest-8.0.tar ~/images/.
$ cp /usr/share/rhosp-director-images/ironic-python-agent-latest-8.0.tar ~/images/.

アーカイブを展開します。

$ cd ~/images
$ for tarfile in *.tar; do tar -xf $tarfile; done

最新のイメージを director にインポートして、ノードがこれらの新規イメージを使用するように設定します。

$ openstack overcloud image upload --update-existing --image-path ~/images/.
$ openstack baremetal configure boot

新規イメージの存在をチェックして、イメージの更新を最終確認します。

$ openstack image list
$ ls -l /httpboot

director は、最新のイメージを使用してアップグレードされました。

重要

オーバークラウドのイメージのバージョンがアンダークラウドのバージョンに対応していることを確認してください。

3.4. オーバークラウドのアップグレード

重要

以下の手順のステップを試す前に、「アップグレード前の重要な注記」の情報を必ず一読してください。

本項には、オーバークラウドのアップグレードに必要な手順を記載します。各セクションを順番に従って進み、お使いの環境に関連するセクションのみを適用します。

このプロセスでは、ステージごとに分けた手法を使用してアップグレードを行うには、元の openstack overcloud deploy コマンドを複数回実行する必要があります。コマンドを実行する度に、既存の環境ファイルに、別のアップグレードの環境ファイルが追加されます。これらの新しいアップグレード環境ファイルには、以下のようなファイルがあります。

  • major-upgrade-pacemaker-init.yaml: アップグレードの初期設定を行います。これには、オーバークラウドの各ノードにある Red Hat OpenStack Platform のリポジトリーの更新や、特定のノードへの特別なアップグレードスクリプトの提供などが含まれます。
  • major-upgrade-pacemaker.yaml: コントローラーノードをアップグレードします。
  • major-upgrade-pacemaker-converge.yaml: オーバークラウドのアップグレードの最終処理。これは、実行されるアップグレードが director の最新の Heat テンプレートコレクションの内容と一致するように合わせます。

これらのデプロイメントのコマンドの間に、さまざまなタイプのノードで upgrade-non-controller.sh スクリプトを実行します。このスクリプトにより、コントローラー以外のノードでパッケージが更新されます。

ワークフロー

オーバークラウドのアップグレードプロセスでは、以下のワークフローを使用します。

  1. major-upgrade-pacemaker-init.yaml 環境ファイルを指定してデプロイメントコマンドを実行します。
  2. 各 Object Storage ノードで upgrade-non-controller.sh を実行します。
  3. major-upgrade-pacemaker.yaml 環境ファイルを指定してデプロイメントコマンドを実行します。
  4. 各 Compute ノードで upgrade-non-controller.sh を実行します。
  5. 各 Ceph Storage ノードで upgrade-non-controller.sh を実行します。
  6. major-upgrade-pacemaker-converge.yaml 環境ファイルを指定してデプロイメントコマンドを実行します。

3.4.1. 管理ネットワークの追加

Red Hat OpenStack Platform 7 のカスタムの NIC テンプレートを使用している場合は、NIC テンプレートの parameters セクションに ManagementSubnetIp パラメーターを追加してください。

parameters:
  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
    default: ''
    description: IP address/subnet on the management network
    type: string

3.4.2. アップグレードスクリプトのインストール

このステップでは、コントローラー以外の各ノードにスクリプトをインストールします。これらのスクリプトは、メジャーバージョンのパッケージアップグレードおよび設定を実行します。各スクリプトは、ノードタイプによって異なります。たとえば、コンピュートノードにインストールされるアップグレードのスクリプトは、Ceph Storage ノードにインストールされるスクリプトとは異なります。

この初期化のステップにより、全オーバークラウド上で有効なリポジトリーの更新も行われるので、手動で古いリポジトリーを無効にして新しいリポジトリーを有効にする必要はありません。

アンダークラウドから major-upgrade-pacemaker-init.yaml の環境ファイルを指定して openstack overcloud deploy を実行します。ネットワークの分離やストレージなどお使いの環境に関連するカスタムの環境ファイルも含めるようにしてください。

以下は、openstack overcloud deploy コマンドで、ファイルも追加した例です。

$ openstack overcloud deploy --templates \
  --control-scale 3 \
  --compute-scale 3 \
  -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml  \
  -e /home/stack/templates/network_env.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/major-upgrade-pacemaker-init.yaml

新しい環境ファイルの設定でオーバークラウドが更新されるまで待ちます。

3.4.3. Object Storage ノードのアップグレード

director は upgrade-non-controller.sh コマンドを使用してアップグレードのスクリプトを実行します。このスクリプトは、major-upgrade-pacemaker-init.yaml 環境ファイルから、コントローラー以外の各ノードに渡されます。このステップでは、各 Object Storage ノードを以下のコマンドでアップグレードします。

$ for NODE in `nova list | grep swift | awk -F "|" '{ print $2 }'` ; do upgrade-non-controller.sh --upgrade $NODE ; done

各 Object Storage ノードのアップグレードが完了するまで待ちます。

3.4.4. コントローラーノードのアップグレード

コントローラーノードをアップグレードする際には、高可用性ツールを実行するコントローラーノードへの完全アップグレードを提供する別の環境ファイル (major-upgrade-pacemaker.yaml) を指定する必要があります。

アンダークラウドから major-upgrade-pacemaker.yaml の環境ファイルを指定して openstack overcloud deploy を実行します。ネットワークの分離やストレージなど環境に関連するカスタムの環境ファイルも指定するようにしてください。

以下は、openstack overcloud deploy コマンドで、ファイルも追加した例です。

$ openstack overcloud deploy --templates \
  --control-scale 3 \
  --compute-scale 3 \
  -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \
  -e network_env.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/major-upgrade-pacemaker.yaml

新しい環境ファイルの設定でオーバークラウドが更新されるまで待ちます。

重要

このステップは、コントローラーのアップグレードの際に Neutron サーバーおよび L3 エージェントを無効化します。これは、Floating IP アドレスがこのステップでは利用できないということを意味します。

重要

このステップでオーバークラウドのスタックが機能しなくなった場合は、コントローラーノードの 1 つにログインして、sudo pcs cluster start を実行してから director で openstack overcloud deploy を再度実行します。

3.4.5. コンピュートノードのアップグレード

director は upgrade-non-controller.sh コマンドを使用してアップグレードのスクリプトを実行します。このスクリプトは、major-upgrade-pacemaker-init.yaml 環境ファイルから、コントローラー以外の各ノードに渡されます。

Compute ノードとそれらの UUID の一覧を取得します。

$ nova list | grep "compute"

以下のタスクを各ノードで個別に実行して、ダウンタイムがゼロになるようにします。コンピュートノードを選択してアップグレードします。

  1. ワークロードを移行します。『Red Hat OpenStack Platform director のインストールと使用方法』「オーバークラウドのコンピュートノードからの仮想マシンの移行」を参照してください。
  2. 選択したノードの Compute サービスが無効化されていることを確認します。

    $ source ~/overcloudrc
    $ nova service-list
    $ nova service-disable [hostname] nova-compute
  3. 以下のコマンドで各コンピュートノードをアップグレードします。

    $ source ~/stackrc
    $ upgrade-non-controller.sh --upgrade NODE_UUID

    NODE_UUID は、選択したコンピュートノードの UUID に置き換えます。

  4. コンピュートノードがアップグレードを完了するまで待ちます。アップグレードが完了したら、以下のコマンドを使用してコンピュートノードが有効化されていることを確認します。

    $ source ~/overcloudrc
    $ nova service-list
    $ nova service-enable [hostname] nova-compute

各コンピュートノードでこれらのステップを繰り返します。

3.4.6. Ceph Storage ノードのアップグレード

director は upgrade-non-controller.sh コマンドを使用してアップグレードのスクリプトを実行します。このスクリプトは、major-upgrade-pacemaker-init.yaml 環境ファイルから、コントローラー以外の各ノードに渡されます。このステップでは、各 Ceph Storage ノードを以下のコマンドでアップグレードします。

各 Ceph Storage ノードをアップグレードします。

$ for NODE in `nova list | grep ceph | awk -F "|" '{ print $2 }'` ; do upgrade-non-controller.sh --upgrade $NODE ; done

3.4.7. アップグレードの最終処理

director には、アップグレードの最終処理を最後まで実行して、オーバークラウドスタックが現在の Heat テンプレートコレクションと確実に同期されるようにする必要があります。そのためには、openstack overcloud deploy コマンドで環境ファイル (major-upgrade-pacemaker-converge.yaml) を指定する必要があります。

アンダークラウドから major-upgrade-pacemaker-converge.yaml の環境ファイルを指定して openstack overcloud deploy を実行します。ネットワークの分離やストレージなどお使いの環境に関連するカスタムの環境ファイルも含めるようにしてください。

以下は、openstack overcloud deploy コマンドで、ファイルも追加した例です。

$ openstack overcloud deploy --templates \
  --control-scale 3 \
  --compute-scale 3 \
  -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \
  -e network_env.yaml \
  -e /usr/share/openstack-tripleo-heat-templates/environments/major-upgrade-pacemaker-converge.yaml

新しい環境ファイルの設定でオーバークラウドが更新されるまで待ちます。

これで、オーバークラウドのアップグレード手順が完了しました。

3.4.8. アップグレード後の注意事項

オーバークラウドを Red Hat OpenStack Platform 8 にアップグレードした後には以下の点に注意してください。

  • コンピュートノードが neutron-openvswitch-agent の問題をレポートする可能性があります。これが発生した場合には、各コンピュートノードにログインして、このサービスを再起動します。以下のようなコマンドを実行します。

    $ sudo systemctl restart neutron-openvswitch-agent
  • 更新プロセスを実行しても、オーバークラウド内のノードは自動的には再起動しません。必要な場合には、更新コマンドが完了した後に手動で再起動を実行してください。クラスターベースのノード (Ceph Storage ノードやコントローラーノード) を個別に再起動して、ノードがクラスターに再度参加するまで待ちます。Ceph Storage ノードの場合は、ceph health で確認して、クラスターのステータスが HEALTH OK であることを確認します。コントローラーノードの場合は、pcs resource で確認して、各ノードですべてのリソースが実行されていることを確認してください。
  • 状況によっては、コントローラーノードの再起動後に IPv6 環境で corosync サービスの起動に失敗する可能性があります。これは、コントローラーノードが静的な IPv6 アドレスを設定する前に Corosync が起動してしまうことが原因です。このような場合は、コントローラーノードで Corosync を手動で再起動してください。

    $ sudo systemctl restart corosync
  • コントローラーノードにフェンシングを設定している場合には、更新プロセスによってその設定が無効になる場合があります。更新プロセスの完了時には、コントローラーノードの 1 つで以下のコマンドを実行してフェンシングを再度有効にします。

    $ sudo pcs property set stonith-enabled=true
  • 次回に (openstack overcloud deploy コマンドを実行して) オーバークラウドのスタックを更新またはスケーリングする際には、オーバークラウドでのパッケージの更新をトリガーする ID をリセットする必要があります。環境ファイルに空の UpdateIdentifier パラメーターを追加して、openstack overcloud deploy コマンドの実行時にそのファイルを指定します。環境ファイルの内容の例を以下に示します。

    parameter_defaults:
      UpdateIdentifier: