第3章 blue-green クラスターアップグレードの実行
このトピックでは、インプレースアップグレード方法に代わるノードホストのアップグレード方法について説明します。
Blue-Green デプロイメント のアップグレード方式はインプレース方式と同様のフローに基づいて実行されます。 この場合もマスターおよび etcd サーバーが最初にアップグレードされます。 ただし、インプレースアップグレードを実行する代わりに、新規ノードホストの並列環境が作成されます。
この方式では、管理者は新規デプロイメントの検証後、古いノードホストセット (例: Blueデプロイメント) から新規セット (例: Green デプロイメント) にトラフィックを切り換えることができます。問題が検出される場合も、古いデプロイメントへのロールバックを簡単かつすぐに実行できます。
Blue-Green はソフトウェアについての証明済みの有効なデプロイストラテジーであるものの、トレードオフも常にあります。すべての環境が Blue-Green デプロイメントの適切な実行に必要な同じアップタイム要件を満たす訳ではなく、必要なリソースがある訳でもありません。
OpenShift Container Platform 環境では、Blue-Green デプロイメントに最も適しているのはノードホストです。すべてのユーザープロセスはこれらのシステムで実行され、OpenShift Container Platform インフラストラクチャーの重要な部分もこれらのリソースで自己ホストされます。アップタイムはこれらのワークロードで最も重要であり、Blue-Green デプロイメントによって複雑性が増すとしてもこれを確保できる場合には問題になりません。
この方法の実際の実装は要件に応じて異なります。通常、主な課題は、この方法を容易に実行するための追加の容量を確保することにあります。
図3.1 Blue-Green デプロイメント
3.1. Blue-Green アップグレードの準備 リンクのコピーリンクがクリップボードにコピーされました!
インプレースアップグレード で説明されている方法を使用してマスターと etcd ホストをアップグレードした後に、以下のセクションを参照して残りのノードホストの Blue-Green アップグレードの環境を準備します。
3.1.1. ソフトウェアエンタイトルメントの共有 リンクのコピーリンクがクリップボードにコピーされました!
管理者は Blue-Green デプロイメント間で Red Hat ソフトウェアエンタイトルメントを一時的に共有するか、または Red Hat Satellite などのシステムでインストールコンテンツへのアクセスを提供する必要があります。これは、以前のノードホストからのコンシューマー ID を共有して実行できます。
アップグレードされるそれぞれの古いノードホストで、コンシューマー ID であるその
system identity
値を書き留めておいてください。subscription-manager identity | grep system
# subscription-manager identity | grep system system identity: 6699375b-06db-48c4-941e-689efd6ce3aa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 古いノードホストに置き換わるそれぞれの新規 RHEL 7 または RHEL Atomic Host 7 システムで、直前の手順のそれぞれのコンシューマー ID を使用して登録を行います。
subscription-manager register --consumerid=6699375b-06db-48c4-941e-689efd6ce3aa
# subscription-manager register --consumerid=6699375b-06db-48c4-941e-689efd6ce3aa
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.2. Blue ノードのラベリング リンクのコピーリンクがクリップボードにコピーされました!
実稼働環境の現在のノードホストに blue
または green
のいずれかのラベルが付けられていることを確認する必要があります。以下の例では、現在の実稼働環境は blue
となり、新規の環境は green
になります。
クラスターに認識されるノード名の現在の一覧を取得します。
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 現在の実稼働環境内にあるマスター以外のノードホスト (コンピュートノード) および専用のインフラストラクチャーノードに、
color=blue
のラベルを付けます。oc label node --selector=node-role.kubernetes.io/compute=true color=blue oc label node --selector=node-role.kubernetes.io/infra=true color=blue
$ oc label node --selector=node-role.kubernetes.io/compute=true color=blue $ oc label node --selector=node-role.kubernetes.io/infra=true color=blue
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドでは、
--selector
フラグを使用して、関連するノードラベルでクラスターのサブセットと一致させるように設定され、すべての一致項目にはcolor=blue
のラベルが付けられます。
3.1.3. Green ノードの作成およびラベリング リンクのコピーリンクがクリップボードにコピーされました!
等しい数の新規ノードホストを既存のクラスターに追加して Green 環境を作成します。
Adding Hosts to an Existing Cluster に説明されている手順を使用して、新規ノードホストを追加します。この手順にある
[new_nodes]
グループでインベントリーファイルを更新する際に、これらの変数が設定されていることを確認します。-
ノードが 健全 であるとみなされるまでワークロードのスケジューリングを遅らせるために (健全性については後の手順で検証します)、それぞれの新規ノードホストに
openshift_schedulable=false
変数を設定し、これらが初期の時点でスケジュール対象外となるようにします。
-
ノードが 健全 であるとみなされるまでワークロードのスケジューリングを遅らせるために (健全性については後の手順で検証します)、それぞれの新規ノードホストに
新規ノードをデプロイしてから、新規のノードごとに
color=green
ラベルを適用します。oc label node <node_name> color=green
$ oc label node <node_name> color=green
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.4. Green ノードの検証 リンクのコピーリンクがクリップボードにコピーされました!
新規 Green ノードが健全な状態にあることを確認します。
新規ノードがクラスター内で検出され、Ready,SchedulingDisabled 状態にあることを確認します。
oc get nodes
$ oc get nodes NAME STATUS ROLES AGE node4.example.com Ready,SchedulingDisabled compute 1d
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Green ノードに適切なラベルがあることを確認します。
oc get nodes --show-labels
$ oc get nodes --show-labels NAME STATUS ROLES AGE LABELS node4.example.com Ready,SchedulingDisabled compute 1d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,color=green,kubernetes.io/hostname=m01.example.com,node-role.kubernetes.io/compute=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターの診断チェックを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow