23.3. 最小限のダウンタイムでの OpenShift のアップグレード
OpenShift をアップグレードする場合は、OpenShift アップグレードのドキュメントを参照して、アップグレードパスとノードを正しくアップグレードする手順を確認してください。OpenShift をアップグレードする前に、お使いの AMQ Streams バージョンでサポートされるバージョン を確認してください。
アップグレードを実行する際に、Kafka クラスターを利用できるようにしておくことを推奨します。
以下のストラテジーのいずれかを使用できます。
- Pod の Disruption Budget を設定します。
以下の方法の 1 つで Pod をローリングします。
- AMQ Streams Drain Cleaner の使用
- Pod へのアノテーションの手動適用
いずれかの方法を使用して Pod をロールする場合は、maxUnavailable プロパティーを使用して Pod 中断バジェットをゼロに設定する必要があります。
StrimziPodSet カスタムリソースは、maxUnavailable 値を直接使用できないカスタムコントローラーを使用して Kafka および ZooKeeper Pod を管理します。代わりに、maxUnavailable 値は minAvailable 値に変換されます。ブローカー Pod が 3 つあり、maxUnavailable プロパティーが 0 (ゼロ) に設定されている場合、minAvailable 設定は 3 で、3 つのブローカー Pod すべてが使用可能である必要があり、使用できない Pod が存在しないことが許可されます。
Kafka を稼働し続けるには、高可用性のためにトピックも複製する必要があります。これには、少なくとも 3 つのレプリケーション係数と、レプリケーション係数よりも 1 つ少ない In-Sync レプリカの最小数を指定するトピック設定が必要です。
高可用性のためにレプリケートされた Kafka トピック
高可用性環境では、Cluster Operator はアップグレードプロセス時にトピックの In-Sync レプリカの最小数を維持し、ダウンタイムが発生しないようにします。
23.3.1. AMQ Streams Drain Cleaner を使用した Pod のローリング リンクのコピーリンクがクリップボードにコピーされました!
AMQ Streams Drain Cleaner を使用して、アップグレード時にノードをエビクトできます。AMQ Streams Drain Cleaner は、Pod のローリング更新アノテーションを Pod に付けます。これにより、Cluster Operator に、エビクトされた Pod のローリング更新を実行するように指示します。
Pod の Disruption Budget を使用すると、特定の時点で、指定された数の Pod だけが、利用できなくなります。Kafka ブローカー Pod の計画メンテナンス時に、Pod の Disruption Budget を使用して、Kafka が高可用性環境で引き続き実行されるようにします。
Kafka コンポーネントの template のカスタマイズを使用して、Pod の Disruption Budget を指定します。デフォルトでは、Pod の Disruption Budget は、単一の Pod のみを指定時に利用できないようにします。
Drain Cleaner を使用して Pod をロールには、maxUnavailable を 0 (ゼロ) に設定します。Pod 中断バジェットをゼロに減らすと自発的な中断が防止されるため、Pod を手動で削除する必要があります。
Pod の Disruption Budget の指定
23.3.2. トピックを利用可能な状態に維持しながらの手動での Pod のローリング リンクのコピーリンクがクリップボードにコピーされました!
アップグレード時に、Cluster Operator 経由で Pod の手動ローリング更新をトリガーできます。Pod リソースを使用して、ローリング更新は新規 Pod でリソースの Pod を再起動します。AMQ Streams Drain Cleaner を使用する場合と同様に、Pod の Disruption Budget の maxUnavailable の値をゼロに設定する必要があります。
ドレイン (解放) する必要のある Pod を監視する必要があります。次に Pod アノテーションを追加して更新を行います。
ここで、アノテーションは Kafka ブローカーを更新します。
Kafka ブローカー Pod での手動ローリング更新の実行
oc annotate pod <cluster_name>-kafka-<index> strimzi.io/manual-rolling-update=true
oc annotate pod <cluster_name>-kafka-<index> strimzi.io/manual-rolling-update=true
<cluster_name> は、クラスターの名前に置き換えます。Kafka ブローカー Pod の名前は <cluster-name>-kafka-<index> です。ここで、<index> はゼロで始まり、レプリカの合計数から 1 を引いた数で終了します。例: my-cluster-kafka-0