3.4. カナリアロールアウト更新の実行
ワーカーノードの更新をより制御された形で展開するには、カナリア更新を 使用できます。カナリアアップデートとは、ワーカーノードを一度にすべて更新するのではなく、個別の段階に分けて順次更新していく更新ストラテジーのことです。
このストラテジーは、次の場合に役立ちます。
- ワーカーノードのアップデートをより制御された形で展開することで、アップデートプロセスによってアプリケーションが一時的に停止した場合でも、ミッションクリティカルなアプリケーションがアップデート全体を通して利用可能であり続けるようにしたいと考えるでしょう。
- 少数のワーカーノードを更新し、一定期間にわたりクラスターとワークロードの健全性を評価してから、残りのノードを更新する必要がある。
- クラスター全体を一度に更新するために長いメンテナンス期間を取ることができない場合に、通常はホストの再起動が必要となるワーカーノードの更新を、より短い一定のメンテナンス期間内に収める必要がある。
これらのシナリオでは、複数のカスタムマシン設定プール (MCP) を作成して、クラスターを更新するときに特定のワーカーノードが更新されないようにすることができます。残りのクラスターが更新されたら、それらのワーカーノードをバッチで随時更新できます。
3.4.1. カナリア更新ストラテジーの例 リンクのコピーリンクがクリップボードにコピーされました!
カナリアリリースストラテジーがどのように機能するかをよりよく理解するために、このストラテジーを用いたアップデートの例を検討してみると良いでしょう。
次の例では、10% の余剰容量を備えた 100 ノードのクラスターのカナリア更新ストラテジーを説明します。メンテナンス期間は 4 時間未満にする必要があり、ワーカーのドレインと再起動は 8 分未満で完了することがわかっています。
前述の値は単なる例です。ノードのドレインにかかる時間は、ワークロードなどの要因によって異なる場合があります。
3.4.1.1. カスタムマシン設定プールの定義 リンクのコピーリンクがクリップボードにコピーされました!
ワーカーノードの更新を個別のステージに分割するには、まず以下のマシン設定プールを定義することから始めます。
- 10 個のノードを含む workerpool-canary
- 30 個のノードを含む workerpool-A
- 30 個のノードを含む workerpool-B
- 30 個のノードを含む workerpool-C
3.4.1.2. カナリアワーカープールの更新 リンクのコピーリンクがクリップボードにコピーされました!
最初のメンテナンス期間中に、workerpool-A、workerpool-B、workerpool-C のマシン設定プール (MCP) を一時停止し、その後クラスターの更新を開始します。これにより、OpenShift Container Platform 上で実行されるコンポーネントと、一時停止されていない workerpool-canary MCP に含まれる 10 個のノードが更新されます。他の 3 つの MCP は一時停止されているため、更新されません。
3.4.1.3. 残りの労働者プール更新を進めるかどうか リンクのコピーリンクがクリップボードにコピーされました!
何らかの理由で、クラスターまたはワークロードの健全性が workerpool-canary の更新によって悪影響を受けたと判断した場合は、問題を診断して解決するまで十分な容量を維持しながら、そのプール内のすべてのノードを遮断してドレインします。すべてが期待どおりに動作している場合は、クラスターとワークロードの健全性を評価してから、一時停止を解除し、別の各メンテナンス期間中に、workerpool-A、workerpool-B、および workerpool-C を順次更新します。
カスタムマシン設定プール (MCP) を使用してワーカーノードの更新を管理すると柔軟性が得られますが、複数のコマンドを実行する必要があり、時間のかかるプロセスになる可能性があります。この複雑さにより、クラスター全体に影響を及ぼす可能性のあるエラーが発生する可能性があります。開始する前に、組織のニーズを慎重に検討し、プロセスの実装を慎重に計画することを推奨します。
マシン設定プールを一時停止にすると、Machine Config Operator が関連付けられたノードに設定変更を適用できなくなります。MCP を一時停止することにより、kube-apiserver-to-kubelet-signer CA 証明書の自動 CA ローテーションを含め、自動的にローテーションされる証明書が関連付けられたノードにプッシュされないようにします。
kube-apiserver-to-kubelet-signer CA 証明書の有効期限が切れたときに MCP が一時停止され、MCO が証明書を自動的に更新しようとすると、MCO は新しくローテーションされた証明書をそれらのノードにプッシュできません。これにより、oc debug、oc logs、oc exec、oc attach などの複数の oc コマンドでエラーが発生します。証明書がローテーションされたときに MCP が一時停止された場合、OpenShift Container Platform コンソールのアラート UI でアラートを受け取ります。
MCP の一時停止は、kube-apiserver-to-kubelet-signer CA 証明書の有効期限を慎重に考慮して、短期間のみ行う必要があります。
MCP を異なる OpenShift Container Platform バージョンに更新することは推奨されません。たとえば、ある MCP を 4.y.10 から 4.y.11 に更新せず、もう 1 つの MCP を 4.y.12 に更新しないでください。このシナリオはテストされておらず、未定義のクラスターの状態になる可能性があります。