Migration de Zookeeper vers Apache Kafka Raft (KRaft) pour Kafka en ligne

KRaft remplace Zookeeper. Kafka Les pods deviennent des courtiers, et les pods Zookeeper deviennent des contrôleurs. Kafka fonctionne en mode double pendant la migration.

Prérequis

Pour démarrer à partir d'un cluster actif, procédez comme suit :

Assurez-vous que tous les pods opérateur et datastore sont en cours d'exécution avant de commencer la migration.

kubectl get all -n instana-kafka
 

Etapes de migration

  1. Vous devez activer node-pool pour prendre en charge à la fois le courtier et le contrôleur.

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

    kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="disabled" --overwrite
     
  3. Créez un fichier « YAML » pour le courtier. Par exemple, kafka-broker.yaml avec la configuration du courtier.

    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. Déployer Broker.

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

    Des pods de courtier apparaissent.

  5. Créez un fichier « YAML » pour le contrôleur. Par exemple, kafka-controller.yaml avec la configuration du contrôleur.

    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. Déployer le contrôleur.

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

    Vous pouvez utiliser cette commande pour vérifier l'état des pools de nœuds.

    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaNodePools}'
     
  7. Activer la migration.

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

    Les pods contrôleurs apparaissent et les pods courtiers redémarrent pour se connecter au contrôleur.

  8. Vérifiez l'état de la migration.

    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
     
  9. Les champs « Replica » et « Storage » de l' kafka.yaml e sont désormais ignorés. Vous pouvez supprimer ces champs du fichier.

    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. Définissez le statut KRaft sur « activer » lorsque l'état est « 'KRaftPostMigration' ».

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

    Les modules Broker et Controller sont redémarrés. Kafka et les pods Zookeeper sont terminés.

  11. Vérifiez à nouveau l'état de la migration.
    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
     

    L'État doit maintenant montrer KRaft.

  12. Vérifiez le déploiement.
kubectl get all -n instana-kafka
 

Le résultat pourrait ressembler à l'exemple suivant.

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