25.4. 最小限のダウンタイムでの OpenShift のアップグレード
OpenShift をアップグレードする場合は、OpenShift アップグレードのドキュメントを参照して、アップグレードパスとノードを正しくアップグレードする手順を確認してください。OpenShift をアップグレードする前に、Streams for Apache Kafka のバージョンでサポートされているバージョン を確認してください。
アップグレードを実行するときは、次の手順に従って Kafka クラスターの可用性を確認してください。
- Pod の Disruption Budget を設定します。
次のいずれかの方法を使用して Pod をロールします。
- Streams for Apache Kafka Drain Cleaner を使用する (推奨)
- Pod にアノテーションを適用して手動で Pod をロールする
Kafka を稼働し続けるには、高可用性のためにトピックも複製する必要があります。これには、少なくとも 3 つのレプリケーション係数と、レプリケーション係数よりも 1 つ少ない In-Sync レプリカの最小数を指定するトピック設定が必要です。
高可用性のためにレプリケートされた Kafka トピック
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaTopic metadata: name: my-topic labels: strimzi.io/cluster: my-cluster spec: partitions: 1 replicas: 3 config: # ... min.insync.replicas: 2 # ...
高可用性環境では、Cluster Operator はアップグレードプロセス時にトピックの In-Sync レプリカの最小数を維持し、ダウンタイムが発生しないようにします。
25.4.1. Drain Cleaner を使用した Pod のローリング
Streams for Apache Kafka Drain Cleaner を使用して OpenShift のアップグレード中にノードを削除する場合、手動のローリング更新アノテーションを使用して Pod にアノテーションを付け、削除する必要がある Pod のローリング更新を実行し、アップグレード中の OpenShift ノードから移動するように Cluster Operator に通知します。
詳細は、23章Streams for Apache Kafka Drain Cleaner を使用した Pod のエビクト を参照してください。
25.4.2. Pod の手動によるローリング(Drain Cleaner の代わり)
Drain Cleaner を使用して Pod をロールする代わりに、Cluster Operator を通じて Pod の手動ローリング更新をトリガーできます。Pod
リソースを使用して、ローリング更新は新規 Pod でリソースの Pod を再起動します。トピックを利用可能な状態に保つことで Drain Cleaner の操作を複製するには、Pod Disruption Budget の maxUnavailable
値を 0 に設定する必要もあります。Pod の Disruption Budget をゼロに減らすと、OpenShift が Pod を自動的にエビクトできなくなります。
Pod の Disruption Budget の指定
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster namespace: myproject spec: kafka: # ... template: podDisruptionBudget: maxUnavailable: 0 # ...
ドレイン (解放) する必要のある Pod を監視する必要があります。次に Pod アノテーションを追加して更新を行います。
ここで、アノテーションは my-cluster-pool-a-1
という名前の Kafka Pod を更新します。
Kafka Pod での手動ローリング更新の実行
oc annotate pod my-cluster-pool-a-1 strimzi.io/manual-rolling-update="true"