Migrazione da Zookeeper a Raft (KRaft) dell' Apache Kafka e per Kafka online

KRaft sostituisce Zookeeper. Kafka I pod diventano broker, mentre i pod Zookeeper diventano controller. Kafka funziona in modalità duale durante la migrazione.

Prerequisiti

Per eseguire il bootstrap da un cluster attivo, procedere come segue:

Assicurati che tutti i pod degli operatori e dei datastore siano in esecuzione prima di avviare la migrazione.

kubectl get all -n instana-kafka
 

Passi di migrazione

  1. È necessario abilitare il pool di nodi per supportare sia il broker che il controller.

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

    kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="disabled" --overwrite
     
  3. Crea un file ` YAML ` per il broker. Ad esempio, kafka-broker.yaml per quanto riguarda la configurazione del broker.

    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. Eseguire il deployment di Broker.

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

    Compaiono i gruppi di broker.

  5. Crea un file ` YAML ` per il controller. Ad esempio, kafka-controller.yaml per quanto riguarda la configurazione del controller.

    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. Distribuire il controller.

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

    È possibile utilizzare questo comando per verificare lo stato dei pool di nodi.

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

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

    Vengono avviati i pod del controller e i pod del broker si riavviano per connettersi al controller.

  8. Verifica lo stato della migrazione.

    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
     
  9. I campi relativi alla replica e all'archiviazione nel file ` kafka.yaml ` vengono ora ignorati. È possibile rimuovere questi campi dal file.

    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. Imposta lo stato di KRaft su "abilitato" quando lo stato è " 'KRaftPostMigration' ".

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

    I pod dei broker e dei controller vengono riavviati. Kafka e i pod Zookeeper vengono chiusi.

  11. Verifica nuovamente lo stato della migrazione.
    kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'
     

    Lo Stato deve dare prova di forza adesso.

  12. Verificare l'implementazione.
kubectl get all -n instana-kafka
 

Il risultato potrebbe essere simile a quello dell'esempio seguente.

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