Kafka オンライン向けZookeeperから Apache Kafka Raft(KRaft)への移行

KRaftはZookeeperに取って代わります。 Kafka ポッドはブローカーとなり、Zookeeperポッドはコントローラーとなる。 Kafka 移行中はデュアルモードで動作する。

前提条件

ライブクラスターからブートストラップするには、次の手順を完了してください:

移行を開始する前に、すべてのオペレーターおよびデータストアポッドが稼働していることを確認してください。

kubectl get all -n instana-kafka

マイグレーション・ステップ

  1. ブローカーとコントローラーの両方をサポートするには、ノードプールを有効にする必要があります。

    kubectl annotate kafka instana -n instana-kafka strimzi.io/node-pools="enabled" --overwrite
    
  2. KRaftを無効化します。

    kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="disabled" --overwrite
    
  3. ブローカー用に YAML ファイルを作成します。 例えば、 kafka-broker.yaml ブローカー設定では。

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaNodePool
    metadata:
      name: kafka
      labels:
        strimzi.io/cluster: instana
    spec:
      replicas: 3
      roles:
         - broker
      storage:
        type: jbod
        volumes:
          - id: 0
            type: persistent-claim
            size: 50Gi
            deleteClaim: true
      template:
        pod:
          tmpDirSizeLimit: 500Mi
    
  4. ブローカーを展開する。

    kubectl apply -f kafka-broker.yaml -n instana-kafka
    

    ブローカーポッドが表示される。

  5. コントローラー用に YAML ファイルを作成します。 例えば、コントローラー kafka-controller.yaml の設定では。

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaNodePool
    metadata:
      name: controller
      labels:
        strimzi.io/cluster: instana
    spec:
      replicas: 3
      roles:
        - controller
      storage:
        type: persistent-claim
        size: 50Gi
        deleteClaim: true
      template:
        pod:
          tmpDirSizeLimit: 500Mi
    
  6. コントローラーを展開する。

    kubectl apply -f kafka-controller.yaml -n instana-kafka
    

    このコマンドを使用してノードプールの状態を確認できます。

    kubectl get kafka kafka -n instana-kafka -o jsonpath='{.status.kafkaNodePools}'
    
  7. 移行を有効にする。

    kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="migration" --overwrite
    

    コントローラーポッドが出現し、ブローカーポッドが再起動してコントローラーと接続します。

  8. 移行ステータスを確認する。

    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
    
  9. kafka.yaml 内のレプリカおよびストレージフィールドは、現在無視されます。 これらのフィールドをファイルから削除できます。

    apiVersion: kafka.strimzi.io/v1beta2
    kind: Kafka
    metadata:
      ...
      spec:
         kafka:
           ...
           #  replicas: 3
           ...
         #    storage:
         #      type: jbod
         #      volumes:
         #        - id: 0
         #          type: persistent-claim
         #          size: 50Gi
         #          deleteClaim: true
         #  zookeeper:
         #    replicas: 3
         #    storage:
         #      type: persistent-claim
         #      size: 5Gi
         #      deleteClaim: true
         ...
    
  10. 状態が 'KRaftPostMigration' のときにKRaftステータスを有効に設定する。

    kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="enabled" --overwrite
    

    ブローカーおよびコントローラーポッドが再起動されます。 Kafka そしてZookeeperポッドは終了します。

  11. 移行ステータスを再度確認してください。
    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
    

    州は今すぐクラフトを提示しなければならない。

  12. デプロイメントを検査します。
kubectl get all -n instana-kafka

出力は、以下の例のようなものになるかもしれません。

NAME                                           READY   STATUS    RESTARTS   AGE
pod/instana-entity-operator-8564975588-mrz2f   3/3     Running   0          15m
pod/instana-kafka-0                            1/1     Running   0          16m
pod/instana-kafka-1                            1/1     Running   0          16m
pod/instana-kafka-2                            1/1     Running   0          16m
pod/instana-controller-0                       1/1     Running   0          17m
pod/instana-controller-1                       1/1     Running   0          17m
pod/instana-controller-2                       1/1     Running   0          17m
pod/strimzi-cluster-operator-cf49c75d8-qm8jq   1/1     Running   0          34m

NAME                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
service/instana-kafka-bootstrap    ClusterIP   192.168.1.239   <none>        9091/TCP,9092/TCP            16m
service/instana-kafka-brokers      ClusterIP   None            <none>        9090/TCP,9091/TCP,9092/TCP   16m

NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/instana-entity-operator    1/1     1            1           15m
deployment.apps/strimzi-cluster-operator   1/1     1            1           34m

NAME                                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/instana-entity-operator-8564975588   1         1         1       15m
replicaset.apps/strimzi-cluster-operator-cf49c75d8   1         1         1       34m