type
status
date
slug
summary
tags
category
icon
password
书籍
OpenShiftのアップグレード
目的
このセクションを終えると、OpenShiftのインスタンスをどのようにアップグレードするかを説明できるようになります。
OpenShiftのアップグレードについて
OpenShift Container Platformの新しいバージョンがリリースされると、既存のクラスターをアップグレードして、最新の機能強化やバグ修正を適用できます。これには、例えば、3.7から3.9へのアップグレードや、3.7.zのマイナーバージョンへの更新が含まれます。
重要な注意点
- OpenShift 3.9には、Kubernetes 1.8および1.9の機能や修正が統合されています。OpenShift 3.7からアップグレードする場合、クラスターは自動的に3.9にアップグレードされます。
- メジャーバージョン間でアーキテクチャが大きく変更されているため、OpenShift Enterprise 2からOpenShift 3にはアップグレードできません。この場合はクリーンインストールが必要です。
バージョン間の互換性
- 基本的に、ノードとマスターは1つのマイナーバージョン間で前方および後方互換性があります。ただし、バージョンが一致しない状態で長期間運用するのは避け、できるだけ早くクラスター全体をアップグレードすることが推奨されます。
アップグレード方法
OpenShiftのアップグレードには2つの方法があります。
- インプレースアップグレード
- クラスター内のすべてのホストでアップグレードを行う方法です。
- マスターが先にアップグレードされ、その後ノードがアップグレードされます。ポッドは他のノードに移動して、ダウンタイムを最小限に抑えます。
- 注意: クイックインストール方法は非推奨です。3.7から3.9へのアップグレードには使用できません。
- ブルーグリーンデプロイメント
- ダウンタイムを減らすために、2つの同一環境を稼働させ、1つを更新してテストします。
- アップグレード中、ノードの一部はスケジューリング不可にし、ポッドを他のノードに移動させます。アップグレードが成功した後、ノードは再びスケジューリング可能になります。
自動化されたクラスターアップグレード
Ansible Playbooksを使用して、OpenShiftクラスターのアップグレードを自動化できます。これにより、手動での作業を減らし、効率よくアップグレードできます。
- 自動アップグレードの内容:
- 設定変更を適用
- Etcdデータの保存
- APIのアップグレード(3.7 → 3.8 → 3.9)
- ルーターやレジストリのアップグレード
- デフォルトのイメージストリームとテンプレートの更新
- 重要な注意点:
- アップグレードを行う前に、すべての前提条件を満たしていることを確認してください。これを怠ると、アップグレードが失敗することがあります。
- GlusterFSを使用している場合:
- コンテナ化されたGlusterFSを使用している場合、ノードのポッドがDaemonSetとして実行されるため、ノードがポッドを排出しません。アップグレードの際は以下の手順を踏んでください:
- マスター、Etcd、インフラサービス(ルーター、レジストリ、ログ、メトリック)をアップグレード
- アプリケーションコンテナを実行しているノードをアップグレード
- GlusterFSを実行しているノードを1台ずつアップグレード
アップグレード前の準備
クラスターをOpenShift 3.9にアップグレードする前に、3.7の最新の非同期リリースにアップグレードしておく必要があります。これを怠ると、アップグレードが失敗する可能性があります。
- アップグレードは1つのマイナーバージョンを超えて行えない:
- 例えば、3.5 → 3.6 → 3.7というように、1バージョンずつ順番にアップグレードしなければなりません。
クラスターのインクリメンタルアップグレード
以前のバージョンからクラスターをインクリメンタルにアップグレードするには、次の場所にあるプレイブックを使用します:
/usr/share/ansible/openshift-ansible/playbooks/common/openshift-cluster/upgrades/
このディレクトリには以下の構造があります:
それぞれのリリースディレクトリには、マスターとノードを一度にアップグレードするためのファイルや、マスターとノードを別々にアップグレードするためのファイルが含まれています。この方法については「クラスターの複数段階でのアップグレード」で説明します。
注意
アップグレードを試みる前に、
oc adm diagnostics
コマンドでクラスターの健康状態を確認してください。これにより、ノードが「Ready」状態であることや、予期したバージョンが実行されていること、エラーや警告がないことを確認できます。オフラインインストールの場合は、--network-pod-image='REGISTRY URL/IMAGE'
パラメータで使用するイメージを指定します。自動化されたアップグレードの準備
次の手順で、環境を自動アップグレードのために準備します。アップグレードを実施する前に、Red Hatはインベントリファイルを確認し、手動で行った変更が反映されていることを確認することを推奨しています。反映されていない場合、変更内容はデフォルト値で上書きされる可能性があります。
- OpenShift Container Platform 3.7から3.9へのアップグレードの場合、各マスターおよびノードホストで3.7のリポジトリを無効にし、3.8および3.9のリポジトリを有効にします:
- 各Red Hat Enterprise Linux 7システムで、最新の
atomic-openshift-utils
パッケージをインストールして、openshift-ansible-*
パッケージも更新します:
- OpenShift 3.9では、マスターノードはデフォルトでスケジュール不可にはなっていません。アップグレードプロセス中に自動的にスケジュール可能に設定されます。
openshift_disable_swap=false
をインベントリファイルに追加した場合や、ノードで手動でスワップを設定した場合は、アップグレードを実行する前にスワップメモリを無効にしてください。
マスターおよびアプリケーションノードのアップグレード
前述の準備が完了した後、次の手順でOpenShiftクラスターのアップグレードを実施します。
- インベントリファイルで
openshift_deployment_type=openshift-enterprise
という変数を設定します。
- カスタムDockerレジストリを使用している場合は、
openshift_web_console_prefix
とtemplate_service_broker_prefix
の変数にレジストリのアドレスを明示的に指定する必要があります。これらの値はアップグレードプロセス中にAnsibleによって使用されます。
- サービスの再起動やノードの再起動を有効にしたい場合は、インベントリファイルで
openshift_rolling_restart_mode=system
を設定します。このオプションを設定しない場合、アップグレード中にサービスの再起動は行われますが、システムの再起動は行われません。
- 全ノードを一度にアップグレードする場合は、単一のAnsibleプレイブック(
upgrade.yml
)を実行します。複数段階でアップグレードを行う場合は、プレイブックを分けて実行します。この方法については「クラスターの複数段階でのアップグレード」に記載されています。
- すべてのホストを再起動します。再起動後、追加機能をデプロイしていなければ、アップグレードが正常に完了したことを確認できます。
クラスターの複数段階でのアップグレード
複数段階でアップグレードを行う場合、最初の段階では
upgrade_control_plane.yml
プレイブックを使用して、次のコンポーネントをアップグレードします:- マスターノード
- マスターノードで実行されているノードサービス
- マスターノードおよびスタンドアロンのEtcdホストで実行されているDockerサービス
次の段階では、
upgrade_nodes.yml
プレイブックを使用して、以下のコンポーネントをアップグレードします。最初の段階でマスターノードがアップグレードされている必要があります:- ノードサービス
- スタンドアロンノードで実行されているDockerサービス
このように、OpenShiftのアップグレードは段階的に進めることができ、環境の安定性を保ちながらスムーズにアップグレードを行うことができます。
2段階のアップグレードプロセス
2段階のアップグレードプロセスでは、カスタム変数を指定することで、アップグレードの実行方法をカスタマイズできます。例えば、ノードの50%をアップグレードする場合、以下のコマンドを実行します:
HAリージョンで2つのノードを同時にアップグレードする場合、以下のコマンドを実行します:
各アップデートバッチで失敗するノードの数を指定するには、
openshift_upgrade_nodes_max_fail_percentage
オプションを使用します。この値を超える失敗が発生した場合、Ansibleはアップグレードを中止します。openshift_upgrade_nodes_drain_timeout
オプションを使用して、プレイブックを中止する前に待機する時間を指定できます。次の例では、10ノードずつアップグレードし、ノードの20%(2ノード)が失敗した場合にプレイブックを中止します。また、
openshift_upgrade_nodes_drain_timeout
オプションでノードを排出するための待機時間を600秒に設定しています:Ansibleフックの使用
特定の操作を実行するためにカスタムタスクをフックで実行できます。フックを使用すると、アップグレードプロセス中の特定のポイントの前後でタスクを実行することができます。例えば、クラスターのアップグレード時にインフラコンポーネントを更新したり、検証を行うことができます。
重要
フックにはエラーハンドリング機構がないため、フック内でエラーが発生するとアップグレードプロセスが停止します。その場合は、フックを修正して再度アップグレードを実行する必要があります。
インベントリファイルの
[OSEv3:vars]
セクションでフックを定義します。各フックはAnsibleタスクを定義した.YAMLファイルを指し、そのファイルは include
ステートメントの一部として統合され、タスクのセットを定義します。Red Hatでは、曖昧さを避けるために絶対パスを使用することを推奨しています。以下のフックは、アップグレードプロセスをカスタマイズするために利用可能です:
- openshift_master_upgrade_pre_hook: 各マスターノードのアップグレード前に実行されるフック。
- openshift_master_upgrade_hook: 各マスターノードのアップグレード後、マスターサービスやノードが再起動する前に実行されるフック。
- openshift_master_upgrade_post_hook: 各マスターノードのアップグレード後、サービスやシステムの再起動が行われた後に実行されるフック。
以下の例では、インベントリファイルでフックを統合する方法を示します:
この例では、
pre_master.yml
ファイルに次のタスクが含まれています:アップグレードの確認
アップグレードが完了した後、アップグレードが正常に終了したかを確認するために、次の手順を実行します。
- すべてのノードが「Ready」状態になっていることを確認します:
docker-registry
とrouter
のイメージバージョンを確認します。タグは3.9のリリースと一致している必要があります:
- マスターノードで診断ツールを使用して、一般的な問題を確認します:
参考資料
さらに詳細な情報は、OpenShift Container Platformインストールガイドの「クラスターのアップグレード」章に記載されています。
以上が、アップグレードの確認とカスタマイズに関する説明です。
QUIZ: OpenShiftのアップグレード手順
OpenShiftクラスターを自動的にアップグレードするための手順です。手順を実行する順番を並べてください。
- まず、Red Hat Enterprise Linux 7の各システムに最新の
atomic-openshift-utils
パッケージがインストールされていることを確認します。
- もしカスタムDockerレジストリを使っている場合は、
openshift_web_console_prefix
とtemplate_service_broker_prefix
という設定にレジストリのアドレスを指定します。
- 次に、すべてのノードでスワップメモリを無効にします。
- すべてのホストを再起動し、再起動後にアップグレードが正しく行われたか確認します。
- 必要に応じて、インベントリファイルのノードセレクターを確認します。
- 各マスターおよびノードホストで、3.7リポジトリを無効にし、3.8および3.9リポジトリを有効にします。
- 適切なAnsible Playbookを使って、アップグレードを1フェーズまたは複数フェーズで実行します。
- 最後に、インベントリファイルに
openshift_deployment_type=openshift-enterprise
を設定します。
解答: OpenShiftのアップグレード手順
- 各マスターおよびノードホストで、3.7リポジトリを無効にし、3.8および3.9リポジトリを有効にします。
- まず、Red Hat Enterprise Linux 7の各システムに最新の
atomic-openshift-utils
パッケージがインストールされていることを確認します。
- 必要に応じて、インベントリファイルのノードセレクターを確認します。
- 次に、すべてのノードでスワップメモリを無効にします。
- インベントリファイルに
openshift_deployment_type=openshift-enterprise
を設定します。
- もしカスタムDockerレジストリを使っている場合は、
openshift_web_console_prefix
とtemplate_service_broker_prefix
という設定にレジストリのアドレスを指定します。
- 適切なAnsible Playbookを使用して、アップグレードを1フェーズまたは複数フェーズで実行します。
- すべてのホストを再起動し、再起動後にアップグレードを確認します。
これが正しい順番です。
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/1aad7ae8-88e2-80be-9207-eeb1b3cff6c6
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章