31.5. Cluster Operator のアップグレード
Cluster Operator をアップグレードするには、最初のデプロイ方法と同じ方法を使用します。
31.5.1. インストールファイルを使用した Cluster Operator のアップグレード リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Streams for Apache Kafka 2.9 を使用するように Cluster Operator デプロイメントをアップグレードする方法を説明します。
install/cluster-operator/ ディレクトリー内のインストール YAML ファイルを使用して Cluster Operator をデプロイした場合は、この手順に従ってください。この手順には、Cluster Operator が複数またはすべての namespace を監視する場合に必要な設定の変更が含まれています。
Cluster Operator によって管理される Kafka クラスターの可用性は、アップグレード操作による影響を受けません。
特定バージョンの Streams for Apache Kafka をサポートするドキュメントを参照して、そのバージョンにアップグレードする方法を確認してください。
前提条件
- 既存の Cluster Operator デプロイメントを利用できる。
- Streams for Apache Kafka 2.9 のリリースアーティファクトをダウンロード した。
-
CustomResourceDefinitionおよび RBAC (ClusterRoleおよびRoleBinding) リソースを作成および管理する権限を持つアカウント。
手順
以前の Cluster Operator のインストール時に行われた設定の変更をメモします。
すべての変更は、新しいバージョンの Cluster Operator によって 上書き されます。
- カスタムリソースを更新して、Streams for Apache Kafka バージョン 2.9 で使用できるサポート対象の設定オプションを反映します。
Cluster Operator が動作している namespace を反映するように、新しい Cluster Operator バージョンのインストールファイルを変更します。
Linux の場合は、以下を使用します。
sed -i 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
sed -i 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow MacOS の場合は、以下を使用します。
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Deployment設定で環境変数を変更した場合は、その環境変数を使用するように060-Deployment-strimzi-cluster-operator.yamlファイルを編集します。-
Cluster Operator が複数の namespace を監視している場合は、namespace のリストを
STRIMZI_NAMESPACE環境変数に追加します。 -
Cluster Operator がすべての namespace を監視している場合は、
STRIMZI_NAMESPACE環境変数にvalue: "*"を指定します。
-
Cluster Operator が複数の namespace を監視している場合は、namespace のリストを
Cluster Operator が複数の namespace を監視している場合は、ロールバインディングを更新します。
複数の namespace を監視する場合は、
RoleBindingインストールファイル内のnamespaceを実際の namespace 名に置き換え、それぞれ の namespace のロールバインディングを作成します。namespace のロールバインディングの作成
oc create -f install/cluster-operator/020-RoleBinding-strimzi-cluster-operator.yaml -n <watched_namespace> oc create -f install/cluster-operator/023-RoleBinding-strimzi-cluster-operator.yaml -n <watched_namespace> oc create -f install/cluster-operator/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml -n <watched_namespace>
oc create -f install/cluster-operator/020-RoleBinding-strimzi-cluster-operator.yaml -n <watched_namespace> oc create -f install/cluster-operator/023-RoleBinding-strimzi-cluster-operator.yaml -n <watched_namespace> oc create -f install/cluster-operator/031-RoleBinding-strimzi-cluster-operator-entity-operator-delegation.yaml -n <watched_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、Cluster Operator が 3 つの namespace を監視している場合は、
<watched_namespace>を各 namespace の名前に置き換えて、3 セットのロールバインディングを作成します。すべての namespace を監視する場合は、クラスター全体のアクセスを許可するクラスターロールバインディングを再作成します (必要な場合)。
ロールバインディングを使用してクラスター全体のアクセスを許可する
oc create clusterrolebinding strimzi-cluster-operator-namespaced --clusterrole=strimzi-cluster-operator-namespaced --serviceaccount my-cluster-operator-namespace:strimzi-cluster-operator oc create clusterrolebinding strimzi-cluster-operator-watched --clusterrole=strimzi-cluster-operator-watched --serviceaccount my-cluster-operator-namespace:strimzi-cluster-operator oc create clusterrolebinding strimzi-cluster-operator-entity-operator-delegation --clusterrole=strimzi-entity-operator --serviceaccount my-cluster-operator-namespace:strimzi-cluster-operator
oc create clusterrolebinding strimzi-cluster-operator-namespaced --clusterrole=strimzi-cluster-operator-namespaced --serviceaccount my-cluster-operator-namespace:strimzi-cluster-operator oc create clusterrolebinding strimzi-cluster-operator-watched --clusterrole=strimzi-cluster-operator-watched --serviceaccount my-cluster-operator-namespace:strimzi-cluster-operator oc create clusterrolebinding strimzi-cluster-operator-entity-operator-delegation --clusterrole=strimzi-entity-operator --serviceaccount my-cluster-operator-namespace:strimzi-cluster-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow
設定を更新したら、残りのインストールリソースとともにデプロイします。
oc replace -f install/cluster-operator
oc replace -f install/cluster-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow ローリング更新が完了するのを待ちます。
新しい Operator バージョンが、アップグレード元の Kafka バージョンをサポートしなくなった場合は、エラーメッセージが返されます。
これを解決するには、サポートされている Kafka バージョンにアップグレードします。
-
Kafkaカスタムリソースを編集します。 -
spec kafka.versionプロパティーをサポートされる Kafka バージョンに変更します。
エラーメッセージが返されない場合は、次のステップに進み、後で Kafka バージョンをアップグレードできます。
-
Kafka Pod のイメージを取得して、アップグレードが正常に完了したことを確認します。
oc get pods my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'oc get pods my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow イメージタグに、新しい Streams for Apache Kafka バージョンと Kafka バージョンが表示されます。
registry.redhat.io/amq-streams/strimzi-kafka-39-rhel9:2.9.3
registry.redhat.io/amq-streams/strimzi-kafka-39-rhel9:2.9.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Cluster Operator はバージョン 2.9 にアップグレードされましたが、管理するクラスターで稼働している Kafka のバージョンは変更されていません。
31.5.2. OperatorHub を使用した Cluster Operator のアップグレード リンクのコピーリンクがクリップボードにコピーされました!
OperatorHub から Streams for Apache Kafka をデプロイした場合、Operator Lifecycle Manager (OLM) を使用して、Streams for Apache Kafka Operator の更新チャネルを新しい Streams for Apache Kafka バージョンに変更します。
チャネルを更新すると、選択したアップグレード戦略に応じて、次のタイプのアップグレードのいずれかが開始されます。
- 自動アップグレード
- インストール開始前に承認が必要な手動アップグレード
安定した チャンネルに登録すると、チャンネルを変更せずに自動更新を取得できます。ただし、インストール前のアップグレード手順が失われる可能性があるため、自動更新を有効にすることは推奨しません。バージョン固有のチャネルでのみ自動アップグレードを使用します。
OperatorHub を使用して Operator をアップグレードする方法の詳細は、インストール済み Operator の更新 (Openshift Operator ガイド参照) を参照してください。
31.5.3. OperatorHub を使用した Streams for Apache Kafka 1.7 以前からのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
OperatorHub を使用して Streams for Apache Kafka 1.7 以前からアップグレードする場合に必要な操作
Streams for Apache Kafka Operator をバージョン 2.9 にアップグレードする前に、次の変更を行う必要があります。
-
カスタムリソースおよび CRD を
v1beta2に変換します。 -
ControlPlaneListenerフィーチャーゲートが無効な Streams for Apache Kafka のバージョンにアップグレードします。
これらの要件は、「1.7 より前のバージョンの Streams for Apache Kafka からアップグレードする」 を参照してください。
Streams for Apache Kafka 1.7 以前からアップグレードする場合は、次の手順を実行します。
- Streams for Apache Kafka 1.7 にアップグレードします。
- Streams for Apache Kafka 1.8 に付属する Red Hat Streams for Apache Kafka API 変換ツール を、Streams for Apache Kafka ソフトウェアダウンロードページ からダウンロードします。
カスタムリソースおよび CRD を
v1beta2に変換します。詳細は、Streams for Apache Kafka 1.7 のアップグレードドキュメント を参照してください。
- OperatorHub で、Streams for Apache Kafka Operator のバージョン 1.7 を削除します。
Streams for Apache Kafka Operator のバージョン 2.9 も存在する場合は削除します。
存在しない場合は、次のステップに進みます。
Streams for Apache Kafka Operator の Approval Strategy が Automatic に設定されている場合、Operator のバージョン 2.9 がクラスター内にすでに存在している可能性があります。リリース前にカスタムリソースおよび CRD を
v1beta2API バージョンに 変換しなかった 場合、Operator が管理するカスタムリソースおよび CRD は古い API バージョンを使用します。その結果、2.9 Operator は Pending 状態のままになります。このような場合、Streams for Apache Kafka Operator のバージョン 1.7 だけでなくバージョン 2.9 も削除する必要があります。両方の Operator を削除すると、新しい Operator バージョンがインストールされるまで、調整は一時停止されます。カスタムリソースへの変更が遅延しないように、次の手順を直ちに実行します。
OperatorHub で、次のいずれかを実行します。
-
Streams for Apache Kafka Operator のバージョン 1.8 (
ControlPlaneListenerフィーチャーゲートがデフォルトで無効) にアップグレードします。 -
ControlPlaneListenerフィーチャーゲートを無効にして、Streams for Apache Kafka Operator のバージョン 2.0 または 2.2 (ControlPlaneListenerフィーチャーゲートがデフォルトで有効) にアップグレードします。
-
Streams for Apache Kafka Operator のバージョン 1.8 (
速やかに Streams for Apache Kafka Operator のバージョン 2.9 にアップグレードしてください。
インストールされた 2.9 Operator はクラスターの監視を開始し、ローリング更新を実行します。このプロセス中に、クラスターのパフォーマンスが一時的に低下する場合があります。
31.5.4. 双方向 Topic Operator を使用する Streams for Apache Kafka バージョンからのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
Topic Operator をデプロイしてトピックを管理する場合、Cluster Operator は一方向のトピック管理を有効にします。つまり、Topic Operator は KafkaTopic リソースに関連付けられた Kafka トピックのみを管理し、Kafka クラスター内で個別に管理されるトピックには干渉しません。
以前は、Topic Operator は双方向モードで動作していたため、Kafka クラスター内のトピックに対しても操作を実行できました。双方向 Topic Operator を使用する Streams for Apache Kafka のバージョンから切り替える場合は、Cluster Operator をアップグレードした後、Operator によって使用されていた次の内部トピックに対してクリーンアップタスクを実行します。
-
strimzi-store-topic -
strimzi-topic-operator -
consumer-offsets -
transaction-state
strimzi-store-topic および strimzi-topic-operator トピックでは、これらのトピックを管理するために使用されたリソースを削除します。
Operator によって使用される内部トピックの削除
oc delete $(oc get kt -n <namespace> -o name | grep strimzi-store-topic) \ && oc delete $(oc get kt -n <namespace> -o name | grep strimzi-topic-operator)
oc delete $(oc get kt -n <namespace> -o name | grep strimzi-store-topic) \
&& oc delete $(oc get kt -n <namespace> -o name | grep strimzi-topic-operator)
コンシューマーオフセットとトランザクション状態を格納するための内部トピック (consumer-offsets と transaction-state) では、Kafka 内に保持しますが、Topic Operator での管理は推奨されません。
リソースを削除する前に管理を中止します。KafkaTopic リソースに strimzi.io/managed="false" のアノテーションを指定して、Topic Operator がそれらのトピックを管理しないことを指示します。
内部トピックの管理の中止
oc annotate $(oc get kt -n <namespace> -o name | grep consumer-offsets) strimzi.io/managed="false" \ && oc annotate $(oc get kt -n <namespace> -o name | grep transaction-state) strimzi.io/managed="false"
oc annotate $(oc get kt -n <namespace> -o name | grep consumer-offsets) strimzi.io/managed="false" \
&& oc annotate $(oc get kt -n <namespace> -o name | grep transaction-state) strimzi.io/managed="false"
KafkaTopic リソースのステータスをチェックして、調整が成功し、トピックの管理を停止する手順 に示されているようにトピックが管理されなくなったことを確認します。
管理を中止したら、KafkaTopic リソースを削除します。
内部トピックを管理するためのリソースの削除
oc delete $(oc get kt -n <namespace> -o name | grep consumer-offsets) \ && oc delete $(oc get kt -n <namespace> -o name | grep transaction-state)
oc delete $(oc get kt -n <namespace> -o name | grep consumer-offsets) \
&& oc delete $(oc get kt -n <namespace> -o name | grep transaction-state)
管理を中止しても、Kafka では削除されなくなります。
31.5.5. Cluster Operator をアップグレードすると Kafka バージョンエラーが返される リンクのコピーリンクがクリップボードにコピーされました!
Cluster Operator を、使用している Kafka の現在のバージョンをサポートしていないバージョンにアップグレードすると、サポートされていない Kafka バージョン エラーが発生します。このエラーはすべてのインストール方法に適用され、Kafka をサポートされている Kafka バージョンにアップグレードする必要があることを意味します。Kafka リソースの spec.kafka.version をサポートされているバージョンに変更します。
oc を使用して、Kafka リソースの ステータス でこのようなエラーメッセージを確認できます。
エラーの Kafka ステータスの確認
oc get kafka <kafka_cluster_name> -n <namespace> -o jsonpath='{.status.conditions}'
oc get kafka <kafka_cluster_name> -n <namespace> -o jsonpath='{.status.conditions}'
<kafka_cluster_name> は、Kafka クラスターの名前に、<namespace> は、Pod を実行している OpenShift namespace に置き換えます。