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
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" --overwriteDésactivez KRaft.
kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="disabled" --overwriteCréez un fichier « YAML » pour le courtier. Par exemple,
kafka-broker.yamlavec 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: 500MiDéployer Broker.
kubectl apply -f kafka-broker.yaml -n instana-kafkaDes pods de courtier apparaissent.
Créez un fichier « YAML » pour le contrôleur. Par exemple,
kafka-controller.yamlavec 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: 500MiDéployer le contrôleur.
kubectl apply -f kafka-controller.yaml -n instana-kafkaVous 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}'Activer la migration.
kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="migration" --overwriteLes pods contrôleurs apparaissent et les pods courtiers redémarrent pour se connecter au contrôleur.
Vérifiez l'état de la migration.
kubectl get kafka instana -n instana-kafka -o jsonpath='{.status.kafkaMetadataState}'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 ...Définissez le statut KRaft sur « activer » lorsque l'état est « 'KRaftPostMigration' ».
kubectl annotate kafka instana -n instana-kafka strimzi.io/kraft="enabled" --overwriteLes modules Broker et Controller sont redémarrés. Kafka et les pods Zookeeper sont terminés.
- 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.
- 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