Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

第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 およびコンテナーランタイムを含む)。
  • それらのノードをサービスに返します。
重要

自動化されたアップグレード 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 状態で、予想される開始バージョンを実行していることが確認され、診断エラーまたは警告がないことを確認できます。

自動アップグレードを準備するには、以下を実行します。

  1. RHSM から最新のサブスクリプションデータをプルします。

    # subscription-manager refresh
  2. OpenShift Container Platform 3.7 から 3.9 にアップグレードしている場合は、以下を実行します。

    1. 手動で 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
    2. 以前のバージョンの OpenShift Container Platform では、インストーラーがデフォルトでマスターホストにスケジュール対象外 (Unschedulable) のマークを付けました。これにより、Pod をこれらのホストに配置できませんでした。しかし、OpenShift Container Platform 3.9 より、マスターにはスケジュール対象 (Schedulable) のマークを付ける必要があります。これはアップグレード時に自動的に実行されます。

      この要件により、デフォルトのノードセレクターもデフォルトで設定されることが必要になりました。これも、設定されていない場合はアップグレード時に自動的に設定されますが、アップグレード時に設定されない場合は設定されないままになります。どちらのシナリオの場合でも、マスターには master ノードロールのラベルが自動的に付けられ、マスターおよびインフラストラクチャー以外のノードには compute ノードロールのラベルが付けられます。

      この重要な技術上の変更については、『OpenShift Container Platform 3.9 Release Notes』を参照し、これらのクラスターに及ぼす影響について確認してください。

    3. OpenShift Container Platform 3.9 にアップグレードする前に、swap メモリーをクラスターで無効にしている必要があります。そうしない場合、アップグレードは失敗します。swap メモリーが Ansible インベントリーファイルの openshift_disable_swap=false を使用して有効にされているか、またはホストごとに手動で有効にされているかどうかについては、『クラスター管理ガイド』の「swap メモリーの無効化」を確認し、各ホストで無効にしてください。
  3. アップグレードパスについては、各 RHEL 7 システムにある atomic-openshift-utils パッケージが最新バージョンであることを常に確認してください。これにより openshift-ansible-* パッケージも更新されます。

    # yum update atomic-openshift-utils
  4. (初期インストールまたは最近のクラスターのアップグレードなどで) 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 リリースにアップグレードするには、以下を実行します。

  1. 自動化アップグレードの準備」のステップを満たしていることを確認した上で、最新のアップグレード Playbook を使用していることを確認します。
  2. インベントリーファイルの openshift_deployment_type パラメーターが openshift-enterprise に設定されていることを確認します。
  3. OpenShift Container Platform 3.9 より、アップグレード時に OpenShift Container Platform の Web コンソールがアップグレード時にマスターの Pod としてデプロイされ、openshift_web_console_prefix がカスタマイズされたイメージのプレフィックスを使用して Web コンソールをデプロイできるように導入されています。template_service_broker_prefix は他のコンポーネントに一致するように更新されています。インストールのカスタマイズされた docker-registryregistry.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-
  4. ホストのローリングおよび完全なシステムの再起動を実行する必要がある場合は、インベントリーファイルの openshift_rolling_restart_mode パラメーターを system に設定できます。これを設定しないと、デフォルト値の services が HA マスターのローリングサービスの再起動を実行しますが、システムの再起動は実行しません。詳細については、「クラスター変数の設定」を参照してください。
  5. この時点で、アップグレードを単一フェーズで実行するか、または複数フェーズで実行するかを選択できます。各フェーズでアップグレードされるコンポーネントについての詳細は、「コントールプレーンとノードの別フェーズでのアップグレード」を参照してください。

    インベントリーファイルがデフォルトの /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: 別々のフェーズでコントロールプレーンおよびノードをアップグレードします。

      1. コントロールプレーンのみを実行するには、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
      2. ノードのみを実行するには、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 の起動を継続します。

  6. すべてのマスターおよびノードのアップグレードの完了後に、すべてのホストを再起動します。再起動後に追加の機能が有効にされていない場合は、アップグレードの検証 を実行できます。追加機能が有効にされている場合には、次の手順は以前に有効にした追加機能の内容によって変わります。

    機能次の手順

    集計されたロギング

    EFK ロギングスタックのアップグレード。

    クラスターメトリクス

    クラスターメトリクスのアップグレード。

2.4. EFK ロギングスタックのアップグレード

既存の EFK ロギングスタックデプロイメントをアップグレードするには、提供されている /usr/share/ansible/openshift-ansible/playbooks/openshift-logging/config.yml Ansible Playbook を使用する必要があります。これは既存のクラスターでロギングを最初にデプロイする際に使用する Playbook ですが、既存のロギングデプロイメントをアップグレードする場合にも使用されます。

  1. これをまだ実行していない場合は、「コンテナーログの集計」のトピックの「ロギング Ansible 変数の指定」を参照し、Ansible インベントリーファイルを更新して少なくとも [OSEv3:vars] セクション内に以下の必要な変数を設定します。

    [OSEv3:vars]
    
    openshift_logging_install_logging=true 1
    openshift_logging_image_version=<tag> 2
    1
    ロギングスタックをアップグレードする機能を有効にします。
    2
    <tag> を最新バージョンの v3.9.31 に置き換えます。
  2. ロギング Ansible 変数の指定」で説明されているように、デフォルトを上書きするために指定する必要のあるその他の openshift_logging_* 変数を追加します。
  3. インベントリーファイルの更新が終了したら、「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 ですが、既存のメトリクスデプロイメントをアップグレードする場合にも使用されます。

  1. これをまだ実行していない場合は、「クラスターメトリクスの有効化」のトピックの「メトリクス 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
    1
    メトリクスデプロイメントをアップグレードする機能を有効にします。
    2
    <tag> を最新バージョンの v3.9.31 に置き換えます。
    3
    Hawkular Metrics ルートに使用されます。完全修飾ドメイン名に対応している必要があります。
    4
    以前のデプロイメントと一貫性のあるタイプを選択します。
  2. メトリクス Ansible 変数の指定」で説明されているように、デフォルトを上書きするために指定する必要のあるその他の openshift_metrics_* 変数を追加します。
  3. インベントリーファイルの更新が終了したら、「メトリクスコンポーネントのデプロイ」の説明に従って 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 が自動修復操作のすべてを完了するのに必要な時間が確保される保証はありません。そのため、クラスターの状態が正常でなくなるか、または不明な状態になる可能性があります。したがって、以下の手順を実行することをお勧めします。

  1. コントロールプレーンをアップグレードします (マスターノードおよび etcd ノード)。
  2. 標準 infra ノード (ルーター、レジストリー、ロギング、およびメトリクス) をアップグレードします。

    注記

    これらのグループのノードのいずれかが GlusterFS を実行している場合、この手順のステップ 4 を同時に実行します。GlusterFS ノードは (appinfra などの) クラス内の他のノードと共に 一度に 1 つずつアップグレードする必要があります。

  3. アプリケーションコンテナーを実行する標準ノードをアップグレードします。

    注記

    これらのグループのノードのいずれかが GlusterFS を実行している場合、この手順のステップ 4 を同時に実行します。GlusterFS ノードは (appinfra などの) クラス内の他のノードと共に 一度に 1 つずつアップグレードする必要があります。

  4. GlusterFS を実行する OpenShift Container Platform ノードを一度に 1 つずつアップグレードします。

    1. oc get daemonset を実行して NODE-SELECTOR にあるラベルを検証します。デフォルト値は storagenode=glusterfs です。
    2. daemonset ラベルをノードから削除します。

      $ oc label node <node_name> <daemonset_label>-

      これにより、GlusterFS Pod がこのノード上で終了します。

    3. 追加のラベル (type=upgrade など) をアップグレードする必要のあるノードに追加します。
    4. アップグレード Playbook を GlusterFS を終了した単一ノードで実行するには、-e openshift_upgrade_nodes_label="type=upgrade" を使用します。
    5. アップグレードの完了時に、deamonset セレクターでノードのラベルを変更します。

      $ oc label node <node_name> <daemonset_label>
    6. GlusterFS Pod が再生成され、表示されるまで待機します。
    7. 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 entries0 の場合に自動修正済みとみなされます。

    8. アップグレードラベル (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 を実行してもエラーが生じない。

    アップグレードを検証するには、以下を確認します。
    1. すべてのノードに 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
    2. 予想されるバージョンの 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>",
    3. マスター上で診断ツールを使用し、一般的な問題を検索します。

      # oc adm diagnostics
      ...
      [Note] Summary of diagnostics execution:
      [Note] Completed with no errors or warnings seen.