Migration von Zookeeper zu „ Apache Kafka Raft“ (KRaft) für „ Kafka “ online

KRaft ersetzt Zookeeper. Kafka Pods werden zu Brokern, und Zookeeper-Pods werden zu Controllern. Kafka läuft während der Migration im Dual-Modus.

Voraussetzungen

Um einen Live-Cluster zu starten, führen Sie die folgenden Schritte aus:

Stellen Sie sicher, dass alle Operator- und Datastore-Pods ausgeführt werden, bevor Sie mit der Migration beginnen.

kubectl get all -n instana-kafka
 

Migrationsschritte

  1. Sie müssen den Knotenpool aktivieren, damit sowohl der Broker als auch der Controller unterstützt werden.

    kubectl annotate kafka instana -n instana-kafka strimzi.io/node-pools="enabled" --overwrite
     
  2. KRaft deaktivieren.

    kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="disabled" --overwrite
     
  3. Erstellen Sie eine Datei namens „ YAML “ für den Broker. Zum Beispiel bei der kafka-broker.yaml Broker-Konfiguration.

    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. Broker bereitstellen.

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

    Broker-Pods werden angezeigt.

  5. Erstellen Sie eine Datei „ YAML “ für den Controller. Zum Beispiel bei der Konfiguration kafka-controller.yaml des Controllers.

    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. Controller bereitstellen.

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

    Mit diesem Befehl können Sie den Status von Knotenpools überprüfen.

    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaNodePools}'
     
  7. Migration aktivieren.

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

    Es werden Controller-Pods angezeigt, und die Broker-Pods werden neu gestartet, um eine Verbindung zum Controller herzustellen.

  8. Überprüfen Sie den Migrationsstatus.

    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
     
  9. Die Felder „Replica“ und „storage“ in der Datei „ kafka.yaml “ werden nun ignoriert. Sie können diese Felder aus der Datei entfernen.

    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. Setzen Sie den KRaft-Status auf „aktiviert“, wenn der Status „ 'KRaftPostMigration' “ lautet.

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

    Die Broker- und Controller-Pods werden neu gestartet. Kafka und die Zookeeper-Pods werden beendet.

  11. Überprüfen Sie den Migrationsstatus erneut.
    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
     

    Der Staat muss jetzt Stärke zeigen.

  12. Überprüfen Sie die Implementierung.
kubectl get all -n instana-kafka
 

Die Ausgabe könnte wie im folgenden Beispiel aussehen.

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