9.2. 最小限のダウンタイムでの OpenShift のアップグレード
OpenShift をアップグレードする場合は、OpenShift アップグレードのドキュメントを参照して、アップグレードパスとノードを正しくアップグレードする手順を確認してください。OpenShift をアップグレードする前に、お使いの AMQ Streams バージョンでサポートされるバージョン を確認してください。
アップグレードを実行する際に、Kafka クラスターを利用できるようにしておくことを推奨します。
以下のストラテジーのいずれかを使用できます。
- Pod の Disruption Budget (停止状態の予算) を設定します。
以下の方法の 1 つで Pod をローリングします。
- AMQ Streams Drain Cleaner の使用
- アノテーションを Pod に適用して手動で
Pod の Disruption Budget(停止状態の予算)を設定して 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 レプリカの最小数を維持し、ダウンタイムが発生しないようにします。
9.2.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 のみを指定時に利用できないようにします。
これを実行するには、maxUnavailable
を 0
(ゼロ) に設定します。Pod の Disruption Budget (停止状態の予算) の最大値をゼロに減らすと、自発的な中断が回避されるため、Pod を手動でエビクトする必要があります。
Pod の Disruption Budget (停止状態の予算) の指定
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster namespace: myproject spec: kafka: # ... template: podDisruptionBudget: maxUnavailable: 0 # ...