第2章 クラスターの自動インプレースアップグレードの実行
2.1. 概要
通常インストール (advanced installation) を使用してインストールしていて、使用したインベントリーファイルが利用可能である場合、アップグレード Playbook を使用して OpenShift クラスターのアップグレードプロセスを自動化できます。
OpenShift Container Platform 3.9 リリースには、Kubernetes 1.8 および 1.9 のマージされた各種機能および修正が含まれます。そのため、OpenShift Container Platform 3.7 からのアップグレードプロセスにより、クラスターは OpenShift Container Platform 3.9 に完全にアップグレードされた状態になります (3.8 リリースは「省略」されているように見えます)。実際には、OpenShift Container Platform 3.7 クラスターはまず 3.8 バージョンのパッケージにアップグレードされますが、その直後に OpenShift Container Platform 3.9 へのアップグレードプロセスが自動的に継続されます。クラスターのパッケージのバージョンが 3.8 であるのは OpenShift Container Platform 3.9 へのアップグレードが正常に終了するまでの期間になります。
OpenShift Container Platform 3.9 の時点で、クイックインストール方式は非推奨になっています。今後のリリースではこれは完全に削除されます。また、クイックインストーラーを使用したバージョン 3.7 から 3.9 へのアップグレードはサポートされていません。
3.7 から 3.9 へのコントロールプレーンの自動アップグレードでは、以下の手順が実行されます。
- リカバリー用にすべての etcd データのバックアップを作成する。
- API およびコントローラーを 3.7 から 3.8 に更新する。
- 内部データ構造を 3.8 に更新する。
- リカバリー用にすべての etcd データの 2 度目のバックアップを実行する。
- API およびコントローラーを 3.8 から 3.9 に更新する。
- 内部データ構造を 3.9 に更新する。
- デフォルトルーター (ある場合) を 3.7 から 3.9 に更新する。
- デフォルトレジストリー (ある場合) を 3.7 から 3.9 に更新する。
- デフォルトイメージストリームおよび InstantApp テンプレートを更新する。
3.7 から 3.9 へのノードの自動アップグレードではノードのローリングアップデートを実行します。以下が実行されます。
- ノードのサブセットにスケジュール対象外 (unschedulable) のマークを付け、それらのノードを Pod からドレイン (解放) します。
- 3.7 から3.9 にノードコンポーネントを更新します (openvswitch およびコンテナーランタイムを含む)。
- それらのノードをサービスに返します。
- アップグレードに進む前に、すべての 前提条件を満たしていることを確認します。前提条件を満たしていないと、アップグレードが失敗する可能性があります。
- GlusterFS を使用している場合は、「コンテナー化された GlusterFS を使用する場合の特別な考慮事項」を参照してからアップグレードを行ってください。
- GCE 永続ディスク (gcePD) を使用している場合は、「gcePD を使用する場合の特別な考慮事項」を参照してからアップグレードを行ってください。
自動化されたアップグレード Playbook は、インベントリーファイルと共に ansible-playbook
コマンドを使用して Ansible で直接実行されます。これは通常インストール (advanced installation) 方式と同様です。以下のいずれのシナリオでも、同じ v3_9 アップグレード Playbook を使用することができます。
- 既存の OpenShift Container Platform 3.7 クラスターの 3.9 へのアップグレード
- 既存の OpenShift Container Platform 3.9 クラスターの最新の非同期エラータ更新へのアップグレード
2.2. 自動アップグレードの準備
アップグレード (クラスターの OpenShift Container Platform 3.9 へのアップグレード) の前に、クラスターは バージョン 3.7 の最新の非同期リリースにアップグレードされている必要があります。クラスターのバージョンが 3.7 よりも前の場合、徐々にアップグレードする必要があります (例: 3.5 から 3.6 にアップグレードしてから 3.6 から 3.7 にアップグレードする)。
アップグレードを試行する前に、「環境ヘルスチェック」のガイダンスに従い、クラスターの健全性を確認します。これにより、ノードが Ready 状態で、予想される開始バージョンを実行していることが確認され、診断エラーまたは警告がないことを確認できます。
自動アップグレードを準備するには、以下を実行します。
RHSM から最新のサブスクリプションデータをプルします。
# subscription-manager refresh
OpenShift Container Platform 3.7 から 3.9 にアップグレードしている場合は、以下を実行します。
手動で 3.7 リポジトリーを無効にし、各マスターおよびノードホストで 3.8 および 3.9 リポジトリーの 両方 を有効にします。また、rhel-7-server-ansible-2.4-rpms リポジトリーを有効にする必要もあります。これは OpenShift Container Platform 3.9 以降の新規の要件です。
# subscription-manager repos --disable="rhel-7-server-ose-3.7-rpms" \ --enable="rhel-7-server-ose-3.8-rpms" \ --enable="rhel-7-server-ose-3.9-rpms" \ --enable="rhel-7-server-rpms" \ --enable="rhel-7-server-extras-rpms" \ --enable="rhel-7-server-ansible-2.4-rpms" \ --enable="rhel-7-fast-datapath-rpms" # yum clean all
以前のバージョンの OpenShift Container Platform では、インストーラーがデフォルトでマスターホストにスケジュール対象外 (Unschedulable) のマークを付けました。これにより、Pod をこれらのホストに配置できませんでした。しかし、OpenShift Container Platform 3.9 より、マスターにはスケジュール対象 (Schedulable) のマークを付ける必要があります。これはアップグレード時に自動的に実行されます。
この要件により、デフォルトのノードセレクターもデフォルトで設定されることが必要になりました。これも、設定されていない場合はアップグレード時に自動的に設定されますが、アップグレード時に設定されない場合は設定されないままになります。どちらのシナリオの場合でも、マスターには
master
ノードロールのラベルが自動的に付けられ、マスターおよびインフラストラクチャー以外のノードにはcompute
ノードロールのラベルが付けられます。この重要な技術上の変更については、『OpenShift Container Platform 3.9 Release Notes』を参照し、これらのクラスターに及ぼす影響について確認してください。
- Masters Marked as Schedulable Nodes by Default (デフォルトでスケジュール対象ノードとマークされるマスター)
- Default Node Selector Set By Default and Automatic Node Labeling (デフォルトで設定されるデフォルトのノードセレクターおよび自動ノードラベリング)
-
OpenShift Container Platform 3.9 にアップグレードする前に、swap メモリーをクラスターで無効にしている必要があります。そうしない場合、アップグレードは失敗します。swap メモリーが Ansible インベントリーファイルの
openshift_disable_swap=false
を使用して有効にされているか、またはホストごとに手動で有効にされているかどうかについては、『クラスター管理ガイド』の「swap メモリーの無効化」を確認し、各ホストで無効にしてください。
アップグレードパスについては、各 RHEL 7 システムにある atomic-openshift-utils パッケージが最新バージョンであることを常に確認してください。これにより openshift-ansible-* パッケージも更新されます。
# yum update atomic-openshift-utils
(初期インストールまたは最近のクラスターのアップグレードなどで) Ansible Playbook を最後に実行した後にマスターまたはノード設定ファイルに設定変更を手動で加えた場合は、「Ansible インベントリーファイルの設定」を参照してください。手動で加えた変更に関連する変数については、アップグレードの実行前に同等の変更をインベントリーファイルに適用してください。これを実行しないと、手動による変更がアップグレード時にデフォルト値で上書きされ、Pod が適切に実行されなくなるか、または他のクラスターの安定性に問題が生じる可能性があります。
とくに、マスター設定ファイルの
admissionConfig
設定に変更を加えた場合は、「Ansible インベントリーファイルの設定」でopenshift_master_admission_plugin_config
変数を確認してください。これを確認しない場合、ClusterResourceOverride
設定を事前に手動で設定している場合には (「マスターでのオーバーコミットの設定」など)、Pod がPending
状態のままになる可能性があります。
上記を確認した後に、以下のセクションでアップグレードプロセスのしくみをさらに確認し、カスタマイズする場合はアップグレードの追加のカスタマイズオプションについて決定します。アップグレードを実行する準備が整ったら、最新の OpenShift Container Platform 3.9 リリースへのアップグレードに進んでください。
2.2.1. コントロールプレーンとノードの別フェーズでのアップグレード
OpenShift Container Platform クラスターは 1 つまたは複数のフェーズでアップグレードできます。単一の Ansible Playbook を実行してすべてのホストを 1 つのフェーズでアップグレードすることも、別々の Playbook を使用して コントロールプレーン (マスターコンポーネント) およびノードを複数のフェーズでアップグレードすることもできます。
完全なアップグレードプロセスおよびこれらの Playbook を呼び出すタイミングについては、「最新の OpenShift Container Platform 3.9 リリースへのアップグレード」に説明されています。
複数のフェーズでアップグレードする場合、コントロールプレーンのフェーズには、以下のアップグレードが含まれます。
- マスターコンポーネント
- マスターで実行されるノードサービス
- マスターで実行される Docker
- スタンドアロン etcd ホストで実行される Docker
ノードのみをアップグレードする場合、コントロールプレーンはすでにアップグレードされている必要があります。ノードのフェーズには、以下のアップグレードが含まれます。
- スタンドアロンノードで実行されるノードサービス
- スタンドアロンノードで実行される Docker
マスターコンポーネントを実行するノードは、ノードサービスや Docker が実行されている場合でもノードのアップグレードフェーズには含まれず、それらはコントロールプレーンのアップグレードフェーズの一環としてアップグレードされます。これは、マスターのノードサービスおよび Docker のアップグレードが 2 回 (1 回目はコントロールプレーンのフェーズ、2 回目はノードのフェーズ) 実行されないようにします。
2.2.2. ノードのアップグレードのカスタマイズ
アップグレードを単一または複数フェーズのいずれで実行する場合でも、-e
オプションを使って特定の Ansible 変数をアップグレード Playbook に渡すことで、アップグレードのノード部分の処理方法をカスタマイズできます。
完全なアップグレードプロセスおよびこれらの Playbook を呼び出すタイミングについては、「最新の OpenShift Container Platform 3.7 リリースへのアップグレード」に説明されています。
openshift_upgrade_nodes_serial
変数は整数またはパーセンテージに設定して同時にアップグレードできるノードホストの数を制御できます。デフォルトは 1
であり、この場合ノードは一度に 1 つずつアップグレードされます。
たとえば、1 度に検出されるノードの全体数の 20 パーセントをアップグレードするには、以下を実行します。
$ ansible-playbook -i <path/to/inventory/file> \ </path/to/upgrade/playbook> \ -e openshift_upgrade_nodes_serial="20%"
openshift_upgrade_nodes_label
変数を指定すると、特定のラベルを持つノードのみをアップグレードするように指定できます。これは openshift_upgrade_nodes_serial
変数と組み合わせて使用することもできます。
たとえば、group1 リージョンのノードのみを1 度に 2 つアップグレードするには、以下を実行します。
$ ansible-playbook -i <path/to/inventory/file> \ </path/to/upgrade/playbook> \ -e openshift_upgrade_nodes_serial="2" \ -e openshift_upgrade_nodes_label="region=group1"
ノードラベルについての詳細は、「ノードの管理」を参照してください。
openshift_upgrade_nodes_max_fail_percentage
変数を使用すると、各バッチで失敗するノードの数を指定できます。失敗のパーセンテージは Playbook がアップグレードを中止する前に指定した値を上回っている必要があります。
openshift_upgrade_nodes_drain_timeout
変数を使用すると、終了前の待機時間の長さを指定できます。
以下の例では、1 度に 10 ノードがアップグレードし、20 パーセントを超えるノードが失敗する場合にアップグレードが中止し、ノードをドレイン (解放) するまでに 600 秒の待機時間があります。
$ ansible-playbook -i <path/to/inventory/file> \ </path/to/upgrade/playbook> \ -e openshift_upgrade_nodes_serial=10 \ -e openshift_upgrade_nodes_max_fail_percentage=20 \ -e openshift_upgrade_nodes_drain_timeout=600
2.2.3. Ansible Hook を使用したアップグレードのカスタマイズ
OpenShift Container Platform のアップグレード時の特定の操作の実行中に、Hook というシステムでカスタムタスクを実行できます。Hook を使うと、管理者はアップグレード時の特定分野の前後に実行するタスクを定義するファイルを指定できます。これは、OpenShift Container Platform のアップグレード時にカスタムインフラストラクチャーを検証し、変更するのに非常に便利です。
Hook が失敗すると操作も失敗することに留意してください。つまり、Hook が適切であると複数回実行でき、同じ結果を出せます。適切な Hook にはべき等性があります。
2.2.3.1. 制限
- Hook には定義され、バージョン付けされたインターフェースがありません。Hook は内部の openshift-ansible 変数を使用できますが、それらの変数が今後のリリースでもそのまま残される保証はありません。また、Hook は今後バージョン付けされる可能性があります。これは Hook が最新の openshift-ansible と連動するように更新する必要があることを示す警告となります。
- Hook にはエラー処理機能がなく、Hook にエラーが生じると、アップグレードプロセスは中止します。その場合、問題に対応してからアップグレードを再実行する必要があります。
2.2.3.2. Hook の使用
Hook は ホスト インベントリーファイルの OSEv3:vars
セクションに定義されます。
各 Hook は Ansible タスクを定義する YAML ファイルをポイントする必要があります。このファイルは include として使用されます。つまり、このファイルは Playbook にすることはできず、タスクのセットである必要があります。あいまいさを避けるために Hook ファイルへの絶対パスを使用することがベストプラクティスとして推奨されます。
インベントリーファイルの Hook 定義の例
[OSEv3:vars] openshift_master_upgrade_pre_hook=/usr/share/custom/pre_master.yml openshift_master_upgrade_hook=/usr/share/custom/master.yml openshift_master_upgrade_post_hook=/usr/share/custom/post_master.yml
pre_master.yml タスクの例
--- # Trivial example forcing an operator to ack the start of an upgrade # file=/usr/share/custom/pre_master.yml - name: note the start of a master upgrade debug: msg: "Master upgrade of {{ inventory_hostname }} is about to start" - name: require an operator agree to start an upgrade pause: prompt: "Hit enter to start the master upgrade"
2.2.3.3. Available アップグレード Hook
openshift_master_upgrade_pre_hook
- 各マスターのアップグレード 前 に実行します。
- この Hook は 各マスター に対して連続して実行されます。
-
タスクが異なるホストに対して実行される必要がある場合、該当するタスクは
delegate_to
またはlocal_action
を使用する必要があります。
openshift_master_upgrade_hook
- 各マスターのアップグレード 後 に実行しますが、そのサービスまたはシステムの再起動 前 に実行します。
- この Hook は 各マスター に対して連続して実行されます。
-
タスクが異なるホストに対して実行される必要がある場合、該当するタスクは
delegate_to
またはlocal_action
を使用する必要があります。
openshift_master_upgrade_post_hook
- 各マスターをアップグレードし、そのサービスまたはシステムが再起動した 後 に実行します。
- この Hook は 各マスター に対して連続して実行されます。
-
タスクが異なるホストに対して実行される必要がある場合、該当するタスクは
delegate_to
またはlocal_action
を使用する必要があります。
2.3. 最新の OpenShift Container Platform 3.9 リリースへのアップグレード
既存の OpenShift Container Platform 3.7 または 3.9 クラスターを最新の 3.9 リリースにアップグレードするには、以下を実行します。
- 「自動化アップグレードの準備」のステップを満たしていることを確認した上で、最新のアップグレード Playbook を使用していることを確認します。
-
インベントリーファイルの
openshift_deployment_type
パラメーターがopenshift-enterprise
に設定されていることを確認します。 OpenShift Container Platform 3.9 より、アップグレード時に OpenShift Container Platform の Web コンソールがアップグレード時にマスターの Pod としてデプロイされ、
openshift_web_console_prefix
がカスタマイズされたイメージのプレフィックスを使用して Web コンソールをデプロイできるように導入されています。template_service_broker_prefix
は他のコンポーネントに一致するように更新されています。インストールのカスタマイズされた docker-registry を registry.access.redhat.com の代わりに使用する場合、openshift_web_console_prefix
およびtemplate_service_broker_prefix
をアップグレード時に適切なイメージのプレフィックスをポイントするように明示的に指定する必要があります。openshift_web_console_prefix=<registry_ip>:<port>/openshift3/ose- template_service_broker_prefix=<registry_ip>:<port>/openshift3/ose-
-
ホストのローリングおよび完全なシステムの再起動を実行する必要がある場合は、インベントリーファイルの
openshift_rolling_restart_mode
パラメーターをsystem
に設定できます。これを設定しないと、デフォルト値のservices
が HA マスターのローリングサービスの再起動を実行しますが、システムの再起動は実行しません。詳細については、「クラスター変数の設定」を参照してください。 この時点で、アップグレードを単一フェーズで実行するか、または複数フェーズで実行するかを選択できます。各フェーズでアップグレードされるコンポーネントについての詳細は、「コントールプレーンとノードの別フェーズでのアップグレード」を参照してください。
インベントリーファイルがデフォルトの /etc/ansible/hosts 以外の場所に置かれている場合、
-i
フラグを追加してその場所を指定します。以前にatomic-openshift-installer
コマンドを使用してインストールを実行したことがある場合は、必要に応じて ~/.config/openshift/hosts で最後に使用されたインベントリーファイルを確認できます。オプション A: 単一フェーズでコントロールプレーンおよびノードをアップグレードします。
upgrade.yml Playbook を実行し、1 つの Playbook を使用して単一フェーズでクラスターのアップグレードを実行します。ここでも、まずコントロールプレーンをアップグレードしてからノードのインプレースアップグレードが実行されます。
# ansible-playbook -i </path/to/inventory/file> \ /usr/share/ansible/openshift-ansible/playbooks/byo/openshift-cluster/upgrades/v3_9/upgrade.yml
オプション B: 別々のフェーズでコントロールプレーンおよびノードをアップグレードします。
コントロールプレーンのみを実行するには、upgrade_control_plane.yaml Playbook を実行します。
# ansible-playbook -i </path/to/inventory/file> \ /usr/share/ansible/openshift-ansible/playbooks/byo/openshift-cluster/upgrades/v3_9/upgrade_control_plane.yml
ノードのみを実行するには、upgrade_nodes.yaml Playbook を実行します。
# ansible-playbook -i </path/to/inventory/file> \ /usr/share/ansible/openshift-ansible/playbooks/byo/openshift-cluster/upgrades/v3_9/upgrade_nodes.yml \ [-e <customized_node_upgrade_variables>] 1
- 1
- 必要な
<customized_node_upgrade_variables>
については、「ノードのアップグレードのカスタマイズ」を参照してください。
「ノードのアップグレードのカスタマイズ」で説明されているようにノードをグループでアップグレードしている場合、すべてのノードが正常にアップグレードされるまで upgrade_nodes.yml Playbook の起動を継続します。
すべてのマスターおよびノードのアップグレードの完了後に、すべてのホストを再起動します。再起動後に追加の機能が有効にされていない場合は、アップグレードの検証 を実行できます。追加機能が有効にされている場合には、次の手順は以前に有効にした追加機能の内容によって変わります。
機能 次の手順 集計されたロギング
クラスターメトリクス
2.4. EFK ロギングスタックのアップグレード
既存の EFK ロギングスタックデプロイメントをアップグレードするには、提供されている /usr/share/ansible/openshift-ansible/playbooks/openshift-logging/config.yml Ansible Playbook を使用する必要があります。これは既存のクラスターでロギングを最初にデプロイする際に使用する Playbook ですが、既存のロギングデプロイメントをアップグレードする場合にも使用されます。
これをまだ実行していない場合は、「コンテナーログの集計」のトピックの「ロギング Ansible 変数の指定」を参照し、Ansible インベントリーファイルを更新して少なくとも
[OSEv3:vars]
セクション内に以下の必要な変数を設定します。[OSEv3:vars] openshift_logging_install_logging=true 1 openshift_logging_image_version=<tag> 2
-
「ロギング Ansible 変数の指定」で説明されているように、デフォルトを上書きするために指定する必要のあるその他の
openshift_logging_*
変数を追加します。 - インベントリーファイルの更新が終了したら、「EFK スタックのデプロイ」の説明に従って openshift-logging/config.yml Playbook を実行し、ロギングデプロイメントのアップグレードを完了します。
EFK コンポーネントの Fluentd DeploymentConfig および DaemonSet が次のように設定されている場合、以下に注意してください。
image: <image_name>:<vX.Y> imagePullPolicy: IfNotPresent
最新バージョンの <image_name> は、Pod が再デプロイされるノードに同じ <image_name:vX.Y> のイメージがローカルに保存されている場合にはプルされない可能性があります。その場合は、DeploymentConfig および DaemonSet を手動で imagePullPolicy: Always
に設定し、再度プルされるようにします。
2.5. クラスターメトリクスのアップグレード
既存のクラスターメトリクスのデプロイメントをアップグレードするには、提供されている /usr/share/ansible/openshift-ansible/playbooks/openshift-metrics/config.yml Ansible Playbook を使用する必要があります。これは、既存クラスターでメトリクスを最初にデプロイしている場合に使用する Playbook ですが、既存のメトリクスデプロイメントをアップグレードする場合にも使用されます。
これをまだ実行していない場合は、「クラスターメトリクスの有効化」のトピックの「メトリクス Ansible 変数の指定」を参照し、Ansible インベントリーファイルを更新して少なくとも
[OSEv3:vars]
セクション内で以下の必要な変数を設定します。[OSEv3:vars] openshift_metrics_install_metrics=true 1 openshift_metrics_image_version=<tag> 2 openshift_metrics_hawkular_hostname=<fqdn> 3 openshift_metrics_cassandra_storage_type=(emptydir|pv|dynamic) 4
-
「メトリクス Ansible 変数の指定」で説明されているように、デフォルトを上書きするために指定する必要のあるその他の
openshift_metrics_*
変数を追加します。 - インベントリーファイルの更新が終了したら、「メトリクスコンポーネントのデプロイ」の説明に従って openshift-metrics/config.yml Playbook を実行し、メトリクスデプロイメントのアップグレードを完了します。
2.6. 混在環境についての特別な考慮事項
混在環境のアップグレード (Red Hat Enterprise Linux および Red Hat Enterprise Linux Atomic Host を含む環境など) では、openshift_pkg_version
および openshift_image_tag
の両方を設定する必要があります。混在環境では、openshift_pkg_version
のみを指定する場合、その番号が Red Hat Enterprise Linux および Red Hat Enterprise Linux Atomic Host のイメージに使用されます。
2.7. コンテナー化された GlusterFS を使用する場合の特別な考慮事項
OpenShift Container Platform のアップグレード時に、GlusterFS Pod が実行されているノードのセットをアップグレードする必要があります。
drain
および unschedule
は daemonset の一部として実行されているために GlusterFS Pod を停止せず、退避しません。そのため、これらのノードをアップグレードする際には特別な考慮が必要になります。
また、複数のノードでアップグレードを同時に実行される可能性もあり、これにより複数のノードが GlusterFS Pod をホストしている場合にデータ可用性の問題が生じる可能性があります。
シリアルアップグレードが実行されている場合でも、次のノードの GlusterFS が終了する前に GlusterFS が自動修復操作のすべてを完了するのに必要な時間が確保される保証はありません。そのため、クラスターの状態が正常でなくなるか、または不明な状態になる可能性があります。したがって、以下の手順を実行することをお勧めします。
- コントロールプレーンをアップグレードします (マスターノードおよび etcd ノード)。
標準
infra
ノード (ルーター、レジストリー、ロギング、およびメトリクス) をアップグレードします。注記これらのグループのノードのいずれかが GlusterFS を実行している場合、この手順のステップ 4 を同時に実行します。GlusterFS ノードは (
app
やinfra
などの) クラス内の他のノードと共に 一度に 1 つずつアップグレードする必要があります。アプリケーションコンテナーを実行する標準ノードをアップグレードします。
注記これらのグループのノードのいずれかが GlusterFS を実行している場合、この手順のステップ 4 を同時に実行します。GlusterFS ノードは (
app
やinfra
などの) クラス内の他のノードと共に 一度に 1 つずつアップグレードする必要があります。GlusterFS を実行する OpenShift Container Platform ノードを一度に 1 つずつアップグレードします。
-
oc get daemonset
を実行してNODE-SELECTOR
にあるラベルを検証します。デフォルト値はstoragenode=glusterfs
です。 daemonset ラベルをノードから削除します。
$ oc label node <node_name> <daemonset_label>-
これにより、GlusterFS Pod がこのノード上で終了します。
-
追加のラベル (
type=upgrade
など) をアップグレードする必要のあるノードに追加します。 -
アップグレード Playbook を GlusterFS を終了した単一ノードで実行するには、
-e openshift_upgrade_nodes_label="type=upgrade"
を使用します。 アップグレードの完了時に、deamonset セレクターでノードのラベルを変更します。
$ oc label node <node_name> <daemonset_label>
- GlusterFS Pod が再生成され、表示されるまで待機します。
oc rsh
を Pod に実行し、すべてのボリュームが自動修復されていることを確認します。$ oc rsh <GlusterFS_pod_name> $ for vol in `gluster volume list`; do gluster volume heal $vol info; done
すべてのボリュームが自動修復され、未処理のタスクがないことを確認します。
heal info
コマンドは所定ボリュームの自動修復プロセスのすべての未処理エントリーを一覧表示します。ボリュームは、ボリュームのNumber of entries
が0
の場合に自動修正済みとみなされます。-
アップグレードラベル (
type=upgrade
など) を削除し、次の GlusterFS ノードに移動します。
-
2.8. gcePD を使用する場合の特別な考慮事項
デフォルトの gcePD ストレージプロバイダーは RWO (Read-Write Only) アクセスモードを使用するため、レジストリーでローリングアップグレードを実行したり、レジストリーを複数 Pod に拡張したりすることはできません。そのため、OpenShift Container Platform のアップグレード時に以下の環境変数を Ansible インベントリーファイルに指定する必要があります。
[OSEv3:vars] openshift_hosted_registry_storage_provider=gcs openshift_hosted_registry_storage_gcs_bucket=bucket01 openshift_hosted_registry_storage_gcs_keyfile=test.key openshift_hosted_registry_storage_gcs_rootdirectory=/registry
2.9. アップグレードの検証
以下を確認します。
- クラスターが正常である。
- サービス (マスター、ノードおよび etcd) が正常に実行されている。
-
OpenShift Container Platform、
docker-registry
、およびルーターバージョンが正しい。 - 元のアプリケーションが依存として利用可能な状態で、新規アプリケーションの作成が可能である。
oc adm diagnostics
を実行してもエラーが生じない。アップグレードを検証するには、以下を確認します。
すべてのノードに Ready のマークが付けられていることを確認する。
# oc get nodes NAME STATUS ROLES AGE VERSION master.example.com Ready master 7h v1.9.1+a0ce1bc657 node1.example.com Ready compute 7h v1.9.1+a0ce1bc657 node2.example.com Ready compute 7h v1.9.1+a0ce1bc657
予想されるバージョンの docker-registry および router イメージを実行していることを確認します (デプロイされている場合)。
<tag>
を最新バージョンのv3.9.31
に置き換えます。# oc get -n default dc/docker-registry -o json | grep \"image\" "image": "openshift3/ose-docker-registry:<tag>", # oc get -n default dc/router -o json | grep \"image\" "image": "openshift3/ose-haproxy-router:<tag>",
マスター上で診断ツールを使用し、一般的な問題を検索します。
# oc adm diagnostics ... [Note] Summary of diagnostics execution: [Note] Completed with no errors or warnings seen.