Criação de um repositório de dados do Kafka no Linux on IBM Z and LinuxONE

Instale o operador do Kafka e configure o armazenamento de dados

Antes de iniciar

Certifique-se de ter preparado seu host on-line e off-line para extrair imagens do repositório externo. Além disso, assegure-se de que o repositório Helm correto seja incluído.

Para obter mais informações, consulte “Preparação para a instalação do armazenamento de dados ”.

A partir da versão Strimzi 0.46.0, o suporte às versões Kafka 3.8.0 e 3.8.1, aos clusters ZooKeeper-based Apache Kafka e à migração para o KRaft foi descontinuado. Se você usa o Strimzi 0.45.0 ou uma versão anterior, é necessário migrar para o KRaft antes de atualizar para o Strimzi 0.46.0.

Para obter mais informações sobre a migração de dados de um cluster baseado em Zookeeper para um cluster KRaft, consulte o artigo “Migração do Zookeeper para o KRaft” no site Kafka.

Kafka Versões do operador e tags de imagem para implantação

As imagens a seguir são necessárias para o gráfico Helm fixado ou versões do operador.

Tabela 1. Versões do operador e tags de imagem
Plataforma Versões do operador Versão do gráfico do Helm Imagem com tag
Linux® on IBM Z® and LinuxONE 0.51.0 0.51.0

artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi: 0.51.0_v0.32.0

artifact-public.instana.io/self-hosted-images/3rd-party/datastore/kafka: 0.51.0-kafka-4.1.1_v0.32.0

Instalando o Kafka online

Conclua estas etapas para instalar o armazenamento de dados do Kafka

  1. Crie o namespace instana-kafka :

    kubectl create namespace instana-kafka
     
  2. Crie segredos de extração de imagem para o namespace do instana-kafka . Atualize o valor < download_key> com sua própria chave do agente.

    kubectl create secret docker-registry instana-registry --namespace instana-kafka \
      --docker-username=_ \
      --docker-password=<download_key> \
      --docker-server=artifact-public.instana.io
     
  3. Crie custom_values.yaml e especifique a tolerância e a afinidade. Pule esta etapa se o arquivo já tiver sido criado.

    tolerations:
    - key: node.instana.io/monitor
      operator: Equal
      effect: NoSchedule
      value: "true"
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
            - matchExpressions:
                - key: node-role.kubernetes.io/monitor
                  operator: In
                  values:
                  - "true"
     
  4. Instale o operador Strimzi.

    helm install strimzi instana/strimzi-kafka-operator --version 0.51.0 -n instana-kafka --set image.registry=artifact-public.instana.io --set image.repository=self-hosted-images/3rd-party/operator --set image.name=strimzi --set image.tag=0.51.0_v0.32.0 --set image.imagePullSecrets[0].name="instana-registry" --set kafka.image.registry=artifact-public.instana.io --set kafka.image.repository=self-hosted-images/3rd-party/datastore --set kafka.image.name=kafka --set kafka.image.tag=0.51.0-kafka-4.1.1_v0.32.0 -f custom_values.yaml
     
  5. Crie um arquivo ` YAML ` para o broker. Por exemplo, kafka-broker.yaml na configuração do broker.

    apiVersion: kafka.strimzi.io/v1
    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
          tolerations:
            - key: node.instana.io/monitor
              operator: Equal
              effect: NoSchedule
              value: "true"
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
                - matchExpressions:
                    - key: node-role.kubernetes.io/monitor
                      operator: In
                      values:
                      - "true"
     
  6. Implantar o Broker.

    kubectl apply -f kafka-broker.yaml -n instana-kafka
     
  7. Crie um arquivo ` YAML ` para o controlador. Por exemplo, kafka-controller.yaml na configuração do controlador.

    apiVersion: kafka.strimzi.io/v1
    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
          tolerations:
            - key: node.instana.io/monitor
              operator: Equal
              effect: NoSchedule
              value: "true"
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
                - matchExpressions:
                    - key: node-role.kubernetes.io/monitor
                      operator: In
                      values:
                      - "true"
     
  8. Implantar o controlador.

    kubectl apply -f kafka-controller.yaml -n instana-kafka
     
  9. Crie um arquivo YAML. Por exemplo, kafka.yaml com a configuração Kafka.

    apiVersion: kafka.strimzi.io/v1
    kind: Kafka
    metadata:
      name: instana
      labels:
        strimzi.io/cluster: instana
      annotations:
        strimzi.io/node-pools: enabled
        strimzi.io/kraft:  enabled
    spec:
      kafka:
        version: 4.1.1
        listeners:
          - name: scram
            port: 9092
            type: internal
            tls: false
            authentication:
              type: scram-sha-512
            configuration:
              useServiceDnsDomain: true
        authorization:
          type: simple
          superUsers:
            - strimzi-kafka-user
        config:
          offsets.topic.replication.factor: 3
          transaction.state.log.replication.factor: 3
          transaction.state.log.min.isr: 2
          default.replication.factor: 3
          min.insync.replicas: 2
          max.message.bytes: 52428800
          replica.fetch.max.bytes: 52428800
        template:
          pod:
            tmpDirSizeLimit: 100Mi
        template:
          pod:
            tolerations:
             - key: node.instana.io/monitor
               operator: Equal
               effect: NoSchedule
               value: "true"
            affinity:
              nodeAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  nodeSelectorTerms:
                    - matchExpressions:
                        - key: node-role.kubernetes.io/monitor
                          operator: In
                          values:
                          - "true"
      entityOperator:
        template:
          pod:
            tolerations:
             - key: node.instana.io/monitor
               operator: Equal
               effect: NoSchedule
               value: "true"
            affinity:
              nodeAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  nodeSelectorTerms:
                    - matchExpressions:
                        - key: node-role.kubernetes.io/monitor
                          operator: In
                          values:
                          - "true"
            tmpDirSizeLimit: 100Mi
            # Add the following securityContext snippet for Kubernetes offerings other than OCP.
            # securityContext:
            #   runAsUser: 1000
            #   fsGroup: 1000
        userOperator:
          image: artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi:0.51.0_v0.32.0
                   
  10. Conclua as etapas em Implementando e verificando o Kafka (online e offline).

Instalação offline do Operador do Kafka

Se você ainda não extrai as imagens do ClickHouse do registro externo quando se preparou para a instalação, será possível extrai-las agora, Execute os comandos a seguir no host bastion. Em seguida, copie as imagens para o seu servidor de armazenamento de imagens ( Instana ) localizado no seu ambiente isolado.

docker pull artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi:0.51.0
docker pull artifact-public.instana.io/self-hosted-images/3rd-party/datastore/kafka:0.51.0_v0.32.0
         

Siga as etapas a seguir no seu servidor do Instana.

  1. Remarque as imagens para o seu registro de imagem interno

    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/operator/strimzi:0.51.0 <internal-image-registry>/operator/strimzi:0.51.0
    docker tag artifact-public.instana.io/self-hosted-images/3rd-party/datastore/kafka:0.51.0_v0.32.0 <internal-image-registry>/datastore/kafka:0.51.0_v0.32.0
                   
  2. Envie por push as imagens para seu registro de imagem interno no host bastion.

    docker push <internal-image-registry>/operator/strimzi:0.51.0
    docker push <internal-image-registry>/datastore/kafka:0.51.0_v0.32.0
                   
  3. Crie o namespace instana-kafka :

    kubectl create namespace instana-kafka
     
  4. Opcional: Crie um segredo de image pull se o seu registro de imagem interno precisar de autenticação.

    kubectl create secret docker-registry <secret_name> --namespace instana-kafka \
    --docker-username=<registry_username> \
    --docker-password=<registry_password> \
    --docker-server=<internal-image-registry>:<internal-image-registry-port> \
    --docker-email=<registry_email>
     
  5. Crie custom_values.yaml e especifique a tolerância e a afinidade. Pule esta etapa se o arquivo já tiver sido criado.

    tolerations:
    - key: node.instana.io/monitor
      operator: Equal
      effect: NoSchedule
      value: "true"
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
            - matchExpressions:
                - key: node-role.kubernetes.io/monitor
                  operator: In
                  values:
                  - "true"
     
  6. Instale o operador Strimzi. Se você criou um segredo de pull de imagem na etapa anterior, adicione --set image.imagePullSecrets[0].name="<internal-image-registry-pull-secret>" ao comando a seguir:

    helm install strimzi strimzi-kafka-operator-helm-3-chart-0.51.0.tgz --version 0.51.0 -n instana-kafka --set image.registry=<internal-image-registry> --set image.repository=operator/strimzi --set image.name=strimzi --set image.tag=0.51.0_v0.32.0 --set kafka.image.registry=<internal-image-registry> --set kafka.image.repository=datastore/kafka --set kafka.image.name=kafka --set kafka.image.tag=0.51.0-kafka-4.1.1_v0.32.0 -f custom_values.yaml
     
  7. Crie um arquivo ` YAML ` para o broker. Por exemplo, kafka-broker.yaml na configuração do broker.

    apiVersion: kafka.strimzi.io/v1
    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
          tolerations:
            - key: node.instana.io/monitor
              operator: Equal
              effect: NoSchedule
              value: "true"
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
                - matchExpressions:
                    - key: node-role.kubernetes.io/monitor
                      operator: In
                      values:
                      - "true"
     
  8. Implantar o Broker.

    kubectl apply -f kafka-broker.yaml -n instana-kafka
     
  9. Crie um arquivo ` YAML ` para o controlador. Por exemplo, kafka-controller.yaml na configuração do controlador.

    apiVersion: kafka.strimzi.io/v1
    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
          tolerations:
            - key: node.instana.io/monitor
              operator: Equal
              effect: NoSchedule
              value: "true"
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              nodeSelectorTerms:
                - matchExpressions:
                    - key: node-role.kubernetes.io/monitor
                      operator: In
                      values:
                      - "true"
     
  10. Implantar o controlador.

    kubectl apply -f kafka-controller.yaml -n instana-kafka
     
  11. Crie um arquivo ` YAML `, por exemplo kafka.yaml, com a configuração ` Kafka `.
    apiVersion: kafka.strimzi.io/v1
    kind: Kafka
    metadata:
      name: instana
      labels:
        strimzi.io/cluster: instana
      annotations:
        strimzi.io/node-pools: enabled
        strimzi.io/kraft:  enabled
    spec:
      kafka:
        version: 4.1.1
        listeners:
          - name: scram
            port: 9092
            type: internal
            tls: false
            authentication:
              type: scram-sha-512
            configuration:
              useServiceDnsDomain: true
        authorization:
          type: simple
          superUsers:
            - strimzi-kafka-user
        template:
          pod:
            tolerations:
             - key: node.instana.io/monitor
               operator: Equal
               effect: NoSchedule
               value: "true"
            affinity:
              nodeAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  nodeSelectorTerms:
                    - matchExpressions:
                        - key: node-role.kubernetes.io/monitor
                          operator: In
                          values:
                          - "true"
        config:
          offsets.topic.replication.factor: 3
          transaction.state.log.replication.factor: 3
          transaction.state.log.min.isr: 2
          default.replication.factor: 3
          min.insync.replicas: 2
          max.message.bytes: 52428800
          replica.fetch.max.bytes: 52428800
        template:
          pod:
            tmpDirSizeLimit: 100Mi
      entityOperator:
        template:
          pod:
            tolerations:
             - key: node.instana.io/monitor
               operator: Equal
               effect: NoSchedule
               value: "true"
            affinity:
              nodeAffinity:
                requiredDuringSchedulingIgnoredDuringExecution:
                  nodeSelectorTerms:
                    - matchExpressions:
                        - key: node-role.kubernetes.io/monitor
                          operator: In
                          values:
                          - "true"
            tmpDirSizeLimit: 100Mi
            # Add the following securityContext snippet for Kubernetes offerings other than OCP.
            # securityContext:
            #   runAsUser: 1000
            #   fsGroup: 1000
        userOperator:
          image: <internal-image-registry>/operator/strimzi:0.51.0_v0.32.0
                   
  12. Conclua as etapas em Implementando e verificando o Kafka (online e offline).

Implantação e verificação do ` Kafka ` (online e offline)

Conclua estas etapas para implementar a instância do Kafka e criar o armazenamento de dados

  1. Implemente Kafka.

    kubectl apply -f kafka.yaml -n instana-kafka
    kubectl wait kafka/instana --for=condition=Ready --timeout=300s -n instana-kafka
     
  2. Crie um usuário Kafka que possa autenticar com um cluster Kafka usando SASL/SCRAM.

    1. Crie um arquivo ` YAML `, por exemplo strimzi-kafka-user.yaml, com a especificação de usuário ` Kafka `.

      apiVersion: kafka.strimzi.io/v1
      kind: KafkaUser
      metadata:
        name: strimzi-kafka-user
        labels:
          strimzi.io/cluster: instana
      spec:
        authentication:
          type: scram-sha-512
        authorization:
          type: simple
          acls:
            - resource:
                type: topic
                name: '*'
                patternType: literal
              operation: All
              host: "*"
            - resource:
                type: group
                name: '*'
                patternType: literal
              operation: All
              host: "*"
       
    2. Crie o usuário strimzi-kafka-user ..

      kubectl apply -f strimzi-kafka-user.yaml -n instana-kafka
      kubectl wait kafkauser/strimzi-kafka-user --for=condition=Ready --timeout=60s -n instana-kafka
       
    3. Recupere a senha do strimzi-kafka-user

      kubectl get secret strimzi-kafka-user -n instana-kafka --template='{{index .data.password | base64decode}}' && echo
       
    4. Armazene a senha recuperada no arquivo config.yaml Substitua o valor <RETRIEVED_FROM_SECRET> pela senha que você obtém na etapa anterior.

      datastoreConfigs:
        ...
        kafkaConfig:
          adminUser: strimzi-kafka-user
          adminPassword: <RETRIEVED_FROM_SECRET>
          consumerUser: strimzi-kafka-user
          consumerPassword: <RETRIEVED_FROM_SECRET>
          producerUser: strimzi-kafka-user
          producerPassword: <RETRIEVED_FROM_SECRET>
        ...
       
  3. Verifique a instalação do Instana Kafka.

    kubectl get all -n instana-kafka
     

    A saída pode ser como o exemplo a seguir:

    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-contoller-0                        1/1     Running   0          17m
    pod/instana-contoller-1                        1/1     Running   0          17m
    pod/instana-contoller-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
     
  4. Certifique-se de que os pods estejam agendados nos nós desejados.

    kubectl get pods -n instana-kafka -o wide
     

    O exemplo a seguir mostra um resultado de saída.

    instana-entity-operator-77c6bc665-74d9t     1/1     Running   1          22d   10.254.12.207   worker0.instana-odf5.cp.fyre.ibm.com   <none>           <none>
    instana-kafka-0                             1/1     Running   1          22d   10.254.12.206   worker1.instana-odf5.cp.fyre.ibm.com   <none>           <none>
    instana-kafka-1                             1/1     Running   0          22d   10.254.20.18    worker2.instana-odf5.cp.fyre.ibm.com   <none>           <none>
    instana-kafka-2                             1/1     Running   0          22d   10.254.12.204   worker3.instana-odf5.cp.fyre.ibm.com   <none>           <none>
    instana-contoller-0                         1/1     Running   1          22d   10.254.12.207   worker0.instana-odf5.cp.fyre.ibm.com   <none>           <none>
    instana-contoller-1                         1/1     Running   0          22d   10.254.12.206   worker1.instana-odf5.cp.fyre.ibm.com   <none>           <none>
    instana-contoller-2                         1/1     Running   0          22d   10.254.20.18    worker2.instana-odf5.cp.fyre.ibm.com   <none>           <none>
    strimzi-cluster-operator-5c9dfd89c6-dbr4d   1/1     Running   1          22d   10.254.12.204   worker3.instana-odf5.cp.fyre.ibm.com   <none>           <none>
     

Tarefas pós-instalação do ` Kafka ` (online e offline)

Depois de instalar com sucesso o operador Kafka , conclua as tarefas a seguir, se necessário:

(Opcional) Equilibrar o cluster usando o controle de velocidade

O controle de cruzeiro equilibra cargas de trabalho em um cluster Kafka . Para obter mais informações, consulte Balanceamento de cluster com o Cruise Control

Para usar o controle de cruzeiro na implementação do Kafka , conclua as etapas a seguir:

  1. Instale um relator de métricas nos brokers do cluster. Para obter mais informações, consulte Monitoramento Kafka.

  2. Crie uma implantação do servidor Cruise Control.

    1. Abra o recurso customizado do Kafka para edição

      kubectl edit kafkas.kafka.strimzi.io <your-kafka-cluster-name> -n instana-kafka
       
    2. Inclua a configuração a seguir em seu recurso customizado do Kafka

      apiVersion: kafka.strimzi.io/v1
      kind: Kafka
      metadata:
        name: instana
      spec:
        # ...
        cruiseControl: {}
       
  3. Aplicar a configuração.

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

    Ao aplicar a configuração, o Kafka usa todas as configurações padrão do Cruise Control para implementar o servidor Cruise Control. Se você incluir o Cruise Control em um cluster existente (em vez de iniciar um cluster novo), verá que todos os seus pods do broker do Kafka serão rolados para instalar o relator de métricas.

  4. Verifique se o Cruise Control está implementado em seu agrupamento.

    kubectl get pods -n instana-kafka
     

    A saída de comando mostra o pod de controle de cruzeiro conforme mostrado no exemplo a seguir:

    NAME                                          READY   STATUS    RESTARTS   AGE
    instana-cruise-control-6fcbd54b48-ndzrh       2/2     Running   0          8m48s
    instana-entity-operator-78d7995695-8tt2v      3/3     Running   0          12m
    instana-kafka-0                               2/2     Running   0          9m12s
    instana-kafka-1                               2/2     Running   0          10m
    instana-kafka-2                               2/2     Running   0          9m46s
    instana-contoller-0                           1/1     Running   0          13m
    instana-contoller-1                           1/1     Running   0          13m
    instana-contoller-2                           1/1     Running   0          13m
    strimzi-cluster-operator-54565f8c56-rmdb8     1/1     Running   0          14m
     

    Após o Cruise Control ser implementado, ele começa a extrair métricas dos tópicos criados pelos repórteres de métricas em cada broker.

Obter uma proposta de otimização

Depois que o Cruise Control é implementado, você pode gerar uma proposta de otimização. Para fazer isso, é necessário aplicar um recurso customizado do KafkaRebalance (a definição para isso é instalada ao instalar o Strimzi). Um KafkaRebalance básico é mostrado no exemplo a seguir:

apiVersion: kafka.strimzi.io/v1
kind: KafkaRebalance
metadata:
  name: my-rebalance
  labels:
    strimzi.io/cluster: instana
# no goals specified, using the default goals from the Cruise Control configuration
spec: {}
 

É possível implementar o recurso customizado KafkaRebalance como qualquer outro recurso.

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

Ao aplicar o recurso KafkaRebalance em seu cluster Kafka , o Operador de cluster emite as solicitações relevantes para o Cruise Control para buscar a proposta de otimização. O Cluster Operator armazena o status do KafkaRebalance e as atualizações de progresso do Cruise Control. É possível verificar as atualizações usando o comando a seguir:

kubectl describe kafkarebalance my-rebalance -n instana-kafka
 

O resultado pode ser como o seguinte exemplo:

Name:         my-rebalance
Namespace:    instana-kafka
Labels:       strimzi.io/cluster=instana
Annotations:  API Version:  kafka.strimzi.io/v1
Kind:         KafkaRebalance
Metadata:
# ...
Status:
  Conditions:
    Last Transition Time:  2023-04-04T11:13:35.749066535Z
    Status:                ProposalReady
    Type:                  State
  Observed Generation:     1
  Optimization Result:
    Data To Move MB:  0
    Excluded Brokers For Leadership:
    Excluded Brokers For Replica Move:
    Excluded Topics:
    Intra Broker Data To Move MB:         12
    Monitored Partitions Percentage:      100
    Num Intra Broker Replica Movements:   0
    Num Leader Movements:                 24
    Num Replica Movements:                55
                On Demand Balancedness Score After:   84.23162054159118
    On Demand Balancedness Score Before:  80.87946050436929
    Recent Windows:                       5
  Session Id:                             42f7cc24-b295-4406-80c9-c3c7a3625180
 

Os itens a seguir são as partes principais da solicitação KafkaRebalance :

  • O campo Status.Conditions.Status mostra o progresso de sua solicitação de rebalanceamento Se a proposta ainda não estiver pronta, você poderá ver ProposalPending como Status.

  • O Status.Optimization Result (quando a proposta estiver pronta) mostra um resumo da proposta de otimização. O significado de cada um desses valores é descrito na documentação do Strimzi

Iniciando um reequilíbrio do cluster

Se a proposta KafkaRebalance corresponder ao seu requisito, será possível aplicar uma anotação approve ao recurso KafkaRebalance para Cruise Control para iniciar a aplicação das mudanças:

kubectl annotate kafkarebalance my-rebalance strimzi.io/rebalance=approve -n instana-kafka
 

Ao aplicar uma anotação approve , o Cruise Control atualiza as mudanças da proposta KafkaRebalance . O Operador do cluster mantém o status do recurso do KafkaRebalance atualizado com o progresso do rebalanceamento enquanto ele está em andamento É possível verificar o progresso do rebalanceamento executando o comando a seguir:

kubectl describe kafkarebalance my-rebalance -n instana-kafka
 

Quando o rebalanceamento está em andamento, o Status mostra Rebalancing. Quando o rebalanceamento for concluído, o Status mostrará Ready

Consulte o seguinte exemplo:

Name:         my-rebalance
Namespace:    instana-kafka
Labels:       strimzi.io/cluster=instana
Annotations:  API Version:  kafka.strimzi.io/v1
Kind:         KafkaRebalance
Metadata:
# ...
Status:
  Conditions:
    Last Transition Time:  2023-04-04T11:16:06.230479824Z
    Status:                Rebalancing
    Type:                  State
# ...
 

Interromper o reequilíbrio de um cluster

Os rebalanceamentos podem levar muito tempo e podem impactar o desempenho do cluster. Portanto, talvez você queira parar um rebalanceamento se ele causar um problema. Para parar um rebalanceamento contínuo, é possível aplicar a anotação stop ao recurso KafkaRebalance a qualquer momento usando o comando a seguir:

kubectl annotate kafkarebalance my-rebalance strimzi.io/rebalance=stop -n instana-kafka