Migrating to axual-kafka charts
Objective
As part of the preparation for the migration from Zookeeper to Kraft,
your Kafka cluster should be deployed using axual-kafka charts, which support Kraft deployment. See Axual Kafka.
Replace axual-streaming with axual-kafka charts
For this step, we are going to replace axual-streaming charts with axual-kafka charts, which support Kraft.
Your current Chart.yaml file is using axual-streaming charts version 1.2.2 or higher:
dependencies:
- name: "axual-streaming"
version: "1.2.2"
repository: "oci://registry.axual.io/axual-charts"
condition: "axual-streaming.enabled"
Update the dependencies as follows, using axual-kafka charts version 0.1.5:
dependencies:
- name: "axual-kafka"
version: "0.1.5"
repository: "oci://registry.axual.io/axual-charts"
condition: "axual-kafka.enabled"
|
If you are deploying other components (not Kafka) with |
Migrate cluster configs to axual-kafka charts
Set axual-kafka config
Add the following to axual-kafka values. This will enable Kafka deployment, add the kafkaNodePool config, and provide your Kafka cluster name from axual-streaming.kafka.fullnameOverride value:
axual-kafka:
enabled: true
kafkaNodePools:
kafka:
replicas: <axual-streaming.kafka.kafka.replicas>
resources:
limits:
memory: <axual-streaming.kafka.kafka.resources.limits.memory>
requests:
cpu: <axual-streaming.kafka.kafka.resources.requests.cpu>
memory: <axual-streaming.kafka.kafka.resources.requests.memory>
templ: <axual-kafka.kafka.templ>
roles:
- broker
storage:
type: <axual-streaming.kafka.kafka.storageType>
volumes:
<axual-streaming.kafka.kafka.volumes>
fullnameOverride: <axual-streaming.kafka.fullnameOverride>
|
If you are using affinity rules for broker scheduling, use the following labels for broker:
|
Set Zookeeper config
-
Copy
axual-streaming.kafka.zookeepertoaxual-kafka.zookeeper. -
Add
enabled: truetoaxual-kafka.zookeeper. -
Add
metrics: trueif you have Kafka metrics enabled (i.e., ifaxual-streaming.kafka.kafka.metricsistrue), as it is disabled by default. -
If you have
axual-streaming.kafka.zookeeper.externalLoggingEnabled, then replace it with the following:values.yamllogging: type: external externalConfig: |- <PLACE_YOUR_LOGGING_CONFIG_HERE> -
For the pod template, rename the key
axual-kafka.zookeeper.templatetoaxual-kafka.zookeeper.templ.
Set Kafka brokers config
-
Copy
axual-streaming.kafka.kafkatoaxual-kafka.kafka. -
Remove
axual-kafka.kafka.replicas,axual-kafka.kafka.resources, andaxual-kafka.kafka.volumes, since the number of replicas is coming fromKafkaNodePool. -
Add
kraft: "disabled"toaxual-kafka.kafka. -
If you have
axual-streaming.kafka.kafka.externalLoggingenabled, replace it with the following:values.yamllogging: type: external externalConfig: |- <PLACE_YOUR_LOGGING_CONFIG_HERE>If no external logging is defined, add the following default logging config to
axual-kafka.kafka:values.yamllogging: type: inline loggers: kafka.root.logger.level: "INFO" log4j.rootLogger: "INFO" log4j.logger.kafka.controller: "TRACE" log4j.logger.kafka.network.Processor: "FATAL" log4j.logger.kafka.network.RequestChannel$: "WARN" log4j.logger.kafka.request.logger: "WARN" log4j.logger.kafka.server.KafkaApis: "FATAL" log4j.logger.state.change.logger: "TRACE" -
If you have Kafka
internalListenerTlsEnabledconfig, remove it, as the new charts require you to provide internal listener config in the listeners part in the coming steps. -
If you have an internal listener (
internalListenerTlsEnabledistrue), provide internal listener config underaxual-kafka.kafka.listeners:values.yamlinternal: type: internal authentication: type: tls tls: true port: 9093 -
For the external listener with TLS, provide the config under
axual-kafka.kafka.listeners.external:values.yamlexternal: type: loadbalancer authentication: type: tls tls: true port: 9094 configuration: <copy-of_axual-kafka.kafka.externalListenerConfiguration> -
If you have any other listeners (
interClusterListener,scramsha512listener, andadditionalListeners), the listeners config will be as follows:values.yamlintcluster: type: loadbalancer authentication: type: tls tls: true port: 9096 configuration: <copy-of_axual-kafka.kafka.interClusterListener.listenerConfiguration> scramsha512: type: loadbalancer authentication: type: scram-sha-512 tls: true port: 9095 configuration: <copy-of_axual-kafka.kafka.scramsha512listener.listenerConfiguration> ## additional listener config <copy-of_axual-kafka.kafka.additionalListeners> -
Now, you can remove the old definition of the listeners from the values file:
axual-kafka.kafka.externalListenerType,axual-kafka.kafka.externalListenerConfiguration,interClusterListener,scramsha512listener, andadditionalListeners. -
For the pod template, rename the key
axual-kafka.kafka.templatetoaxual-kafka.kafka.templ. -
If you have Cruise Control enabled, move it from
axual-streaming.kafka.cruiseControltoaxual-kafka.kafka.cruiseControl.specand addenabled: true. -
For the security part of cluster and client CAs:
If you’re not setting up the
clientsCaandclusterCacertificates, you may skip this step, since their creation is disabled by default.-
Copy
axual-streaming.kafka.kafka.security.clientsCaCerttoaxual-kafka.clientsCaCert.cert.caCrt. -
Copy
axual-streaming.kafka.kafka.security.clientsCatoaxual-kafka.clientsCaCert.key.caKey. -
Copy
axual-streaming.kafka.kafka.security.clientsCaCertGenerationtoaxual-kafka.clientsCaCert.cert.generation. -
Copy
axual-streaming.kafka.kafka.security.clientsCaGenerationtoaxual-kafka.clientsCaCert.key.generation.Do the same steps for cluster CA as well. The CA section will look like the following:
values.yamlaxual-kafka: clientsCa: create: true cert: generation: <axual-streaming.kafka.kafka.security.clientsCaCertGeneration> caCrt: | <axual-streaming.kafka.kafka.security.clientsCaCert> extraCerts: <axual-streaming.kafka.kafka.security.extraCaCerts> key: generation: <axual-streaming.kafka.kafka.security.clientsCaGeneration> caKey: | <axual-streaming.kafka.kafka.security.clientsCa> clusterCa: create: true cert: generation: <axual-streaming.kafka.kafka.security.clusterCaCertGeneration> caCrt: | <axual-streaming.kafka.kafka.security.clusterCaCert> key: generation: <axual-streaming.kafka.kafka.security.clusterCaGeneration> caKey: | <axual-streaming.kafka.kafka.security.clusterCa>
-
-
Now, you can delete
axual-kafka.kafka.security. -
Copy
axual-streaming.kafka.kafka.generateCertificateAuthoritytoaxual-kafka.kafka.clientsCa.generateCertificateAuthorityandaxual-kafka.kafka.clusterCa.generateCertificateAuthority. -
Move
axual-kafka.kafka.podMonitortoaxual-kafka.podMonitor.kafkaand addenabled: trueunderaxual-kafka.podMonitor.kafka. -
Add the following configuration to
axual-kafka.kafka.kafkaExporter:values.yamlspec: logging: debug -
Before deploying your changes, you can expect the following diff:
-
The deployment labels will be updated to use new chart labels.
-
cc-metricsConfigMap added. -
kafka-metricsConfigMap updated with Kraft config. -
zk-metricsConfigMap added. -
If there is any Kafka config diff, update the config until there is no diff.
-
There will be some listener differences; make sure all the listener configurations are present.
-
|
You can use helm diff to check the diff between what you have changed in your config and what is actually deployed. |
|
If there is any additional diff, keep updating the config until it is resolved. |
Verification
While the Kafka brokers and Zookeeper are restarting:
-
Watch if the brokers are getting to the ready state.
-
Check if your client applications (producers/consumers) have any issues.
-
Verify that all the listeners are there using the
opensslcommand for all listeners.
openssl s_client -connect <listener_host>:<port>
Rollback
If the verification steps are not passed, you can roll back to the axual-streaming charts by updating the dependencies in the Chart.yaml file again, as follows:
dependencies:
- name: "axual-streaming"
version: "1.2.2"
repository: "oci://registry.axual.io/axual-charts"
condition: "axual-streaming.enabled"