Instalación de un cluster Kafka utilizando Kafka Operator


Indice:
Introducción
Importancia de la orquestación de servicios
Beneficios de usar Kafka Operator
Etapa 1: Instalar Kafka Operator
Paso 1: Instalar Operator Lifecycle Manager
Paso 2: Instalar el Strimzi Kafka Operator
Paso 3: Verificar la instalación del operador
Etapa 2: Creación del Cluster de Kafka y sus Recursos
Paso 1: Crear un Namespace, Cluster Kafka y un Usuario
Paso 2: Creación de Tópicos para Aplicaciones
Paso 3: Obtener la clave del usuario kafkauser
Paso 4: Despliegue de Kafka Frontend
Conclusión
- Resumen de beneficios y preparación para el futuro tecnológico
Introducción
Importancia de la orquestación de servicios
En el mundo moderno de la tecnología, la orquestación de servicios se ha convertido en un elemento fundamental para garantizar la eficiencia y la escalabilidad de las infraestructuras. La orquestación permite automatizar tareas complejas, coordinando de manera inteligente los diferentes componentes de un sistema distribuido. Esto resulta esencial para gestionar aplicaciones de gran envergadura y para asegurar que cada servicio opere en sintonía con los demás.
En este tutorial, exploraremos cómo instalar un cluster Kafka utilizando el Kafka Operator, una herramienta que no solo automatiza el despliegue y la gestión del cluster, sino que también se integra de forma nativa con Kubernetes. A través de este enfoque, podrás aprovechar al máximo las ventajas de la orquestación de servicios, facilitando la administración, el escalado y la resiliencia de tu entorno de mensajería en tiempo real.
Beneficios de usar Kafka Operator
Automatización Total: Kafka Operator se encarga de gestionar el ciclo de vida completo del cluster Kafka, desde su despliegue inicial hasta las actualizaciones y escalado, lo que reduce errores manuales y ahorra tiempo.
Integración Nativa con Kubernetes: Al integrarse de manera nativa con Kubernetes, Kafka Operator facilita la administración de recursos, el manejo de namespaces y la orquestación de servicios, optimizando la infraestructura de manera coherente y eficiente.
Facilidad de Mantenimiento y Escalabilidad: Permite escalar de forma sencilla los brokers, asegurando alta disponibilidad y resiliencia ante fallos, mientras simplifica la configuración y monitorización del entorno.
Mejoras Continuas y Comunidad Activa: Gracias a su comunidad en constante crecimiento, Kafka Operator recibe actualizaciones y nuevas funcionalidades que permiten enfrentar los desafíos tecnológicos del futuro con una solución robusta y en evolución.
Dividiremos este tutorial en dos etapas: en la primera, abordaremos el procedimiento para instalar el operador de Kafka; en la segunda, exploraremos los pasos necesarios para crear el cluster de Kafka y configurar sus recursos.
Nota: Asegúrate de tener instalado curl
, de que el contexto de Kubernetes esté configurado correctamente y de contar con los permisos necesarios para ejecutar scripts en tu entorno.
Etapa 1: Instalar Kafka operator
Paso 1: Instalar Operator Lifecycle Manager
Una de las formas de obtener el Kafka Operator es instalando el Operator Lifecycle Manager (OLM), el cual nos permite gestionar de manera automatizada la instalación, actualización y eliminación de operadores en nuestro clúster de Kubernetes.
El OLM se encarga de abstraer y simplificar la complejidad inherente a la gestión de operadores, permitiéndonos concentrarnos en el despliegue y operación de nuestros servicios en lugar de en tareas manuales y repetitivas. Gracias a esta herramienta, no solo agilizamos la implementación del Kafka Operator, sino que también garantizamos que este se mantenga actualizado y compatible con la versión de Kubernetes en uso.
Además, el OLM ofrece una interfaz centralizada para administrar múltiples operadores, lo que resulta especialmente valioso en entornos de producción con arquitecturas complejas. Con esta unificación, la gestión de la infraestructura se vuelve más predecible y escalable, liberando a los equipos de DevOps para que puedan enfocarse en la innovación y en la optimización de procesos críticos.
En resumen, instalar el OLM es fundamental para aprovechar al máximo el potencial del Kafka Operator, asegurando una gestión eficiente y escalable de nuestro entorno de mensajería en tiempo real.
Descargamos el script de instalación del Operator Lifecycle Manager (OLM) versión 0.30.0 desde GitHub y luego lo ejecutamos utilizando bash
:
curl -sL https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.30.0/install.sh | bash -s v0.30.0
Paso 2: Instalar el Strimzi Kafka Operator
Strimzi es una de las implementaciones más populares para gestionar Kafka en Kubernetes. Con este operador, el despliegue y la administración del cluster de Kafka se vuelven simples. Ejecuta el siguiente comando para instalarlo desde el repositorio oficial:
kubectl create -f https://operatorhub.io/install/strimzi-kafka-operator.yaml
Paso 3: Verificar la instalación del operador
La verificación es clave en cualquier proceso de instalación, pues asegura que todos los componentes están en su lugar. Utiliza el siguiente comando para comprobar que el operador se haya instalado correctamente y se encuentre en funcionamiento:
kubectl get csv -n operators
Si todo está en orden, verás una lista de “ClusterServiceVersions” en el namespace operators.
¡Excelente trabajo! Acabas de avanzar hacia el despliegue de un cluster Kafka totalmente automatizado.
Etapa 2: Creación del Cluster de Kafka y sus Recursos
Una vez instalado el operador, el siguiente paso es desplegar el cluster de Kafka y todos los recursos asociados, tales como namespaces, usuarios y tópicos.
Paso 1: Crear un Namespace, Cluster Kafka y un Usuario
Primero, vamos a crear un espacio de nombres (namespace) dedicado para Kafka. Luego, definiremos el cluster de Kafka, configuraremos los tópicos y crearemos un usuario para la autenticación. Ejecuta los siguientes comandos:
kubectl create ns kafka
kubectl apply -f kafka-cluster.yaml
kubectl apply -f kafka-user.yaml
• kafka-cluster.yaml: Contiene la definición del cluster Kafka, aprovechando las ventajas del operador..
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: cluster-example
namespace: kafka
spec:
kafka:
authorization:
type: simple
config:
default.replication.factor: 3
inter.broker.protocol.version: '3.9'
min.insync.replicas: 2
offsets.topic.replication.factor: 3
transaction.state.log.min.isr: 2
transaction.state.log.replication.factor: 3
version: 3.9.0
replicas: 3
storage:
type: persistent-claim
size: 150Gi
class: gp2
deleteClaim: false
listeners:
- name: sasl
port: 9092
type: internal
tls: false
authentication:
type: scram-sha-512
zookeeper:
replicas: 1
storage:
type: persistent-claim
size: 20Gi
class: gp2
deleteClaim: false
entityOperator:
topicOperator: {}
userOperator: {}
Nota: Este ejemplo básico, no se han definido límites de recursos para los brokers ni para Zookeeper, tampoco se utilizan mecanismos de autenticación avanzados ni cifrado.
• kafka-user.yaml: Especifica el usuario que se creará para conectarse al cluster, cuya información se almacenará en un Secret.
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaUser
metadata:
name: userkafka
labels:
strimzi.io/cluster: cluster-example
namespace: kafka
spec:
authentication:
type: scram-sha-512
authorization:
type: simple
acls:
- resource:
type: cluster
name: '*'
patternType: literal
operations:
- "*"
host: "*"
- resource:
type: topic
name: '*'
patternType: literal
operations:
- "*"
host: "*"
- resource:
type: group
name: '*'
patternType: literal
operations:
- "*"
host: "*"
Nota: Este es un usuario simple que cuenta con permisos completos. Revisar la documentación para ver los niveles de permisos que se pueden asignar a cada usuario
Paso 2: Creación de Tópicos para Aplicaciones
Con el cluster y el usuario ya configurados, es momento de crear los tópicos necesarios para la comunicación entre aplicaciones. Utiliza el archivo kafka-topic-core.yaml, que contiene la definición de estos tópicos, con el siguiente comando:
kubectl apply -f kafka-topic-core.yaml
Dato Curioso: La creación de tópicos es fundamental para segmentar y organizar el flujo de datos.
• kafka-topics.yaml: Ejemplo simple de un tópico con 3 réplicas y 6 particiones.
kind: KafkaTopic
apiVersion: kafka.strimzi.io/v1beta2
metadata:
name: topic-example-n1
labels:
strimzi.io/cluster: cluster-example
namespace: kafka
spec:
partitions: 6
replicas: 3
Nota: En la documentación oficial tenemos mas información sobre las configuraciones de tópicos
Paso 3: Obtener la clave del usuario kafkauser
Para avanzar, necesitas obtener la contraseña del usuario que configuraste anteriormente. Ejecuta el siguiente comando para extraerla:
kubectl get secret USER -n NAMESPACE -o jsonpath="{.data.password}" | base64 --decode
Reemplaza USER y NAMESPACE por los valores correspondientes a tu configuración.
Paso 4: Despliegue de Kafka Frontend
Para facilitar la interacción con nuestro cluster, desplegaremos un frontend de Kafka que simplifique la administración y visualización de datos. Utiliza los siguientes archivos de configuración:
Ejecuta los comandos correspondientes:
kubectl apply -f kafka-ui.yaml
kubectl apply -f kafka-service.yaml
kubectl apply -f kafka-ingress.yaml
• kafka-ui.yaml: Define el frontend de Kafka.
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-ui
namespace: kafka
labels:
app: kafka-ui
spec:
replicas: 1
selector:
matchLabels:
app: kafka-ui
template:
metadata:
labels:
app: kafka-ui
spec:
containers:
- name: kafka-ui
image: provectuslabs/kafka-ui:latest
ports:
- containerPort: 8080
env:
- name: KAFKA_USERNAME
value: kafkauser
- name: KAFKA_PASSWORD
value: PASSWORD #Obtenido en el paso 3
## Kafka cluster variables -----------------------
- name: KAFKA_CLUSTERS_0_NAME
value: cluster-example #Nombre definido en kafka-cluster.yaml
- name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
value: kafka:9092 #Es el nombre del servicio kubernetes
- name: KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL
value: SASL
- name: KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM
value: SCRAM-SHA-512
- name: KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG
value: org.apache.kafka.common.security.scram.ScramLoginModule required username="kafkauser" password="PASSWORD";
Nota: Ejemplo muy básico, es recomendable almacenar los datos sensibles en un secreto de kubernetes. Ver la documentación oficial Kubernetes
• kafka-ui-service.yaml: Configura el servicio que expondrá el frontend.
apiVersion: v1
kind: Service
metadata:
name: kafka-ui
namespace: kafka
labels:
app: kafka-ui
spec:
ports:
- protocol: TCP
port: 8080
targetPort: 8080
selector:
app: kafka-ui
type: ClusterIP
Nota: Para mas detalles, revisar la documentación de Kubernetes
• kafka-ui-ingress.yaml: Gestiona el ingreso (ingress) para que el frontend sea accesible externamente.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kafka-ui-ing
namespace: kafka
spec:
ingressClassName: nginx
rules:
- host: kafka-ui.example.com
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: kafka-ui
port:
number: 8080
Nota: Ingress muy simple, sin TLS. Para obtener mas información, revisar la documentación de Kubernetes
Conclusión
La instalación y configuración de Kafka utilizando el Kafka Operator es un proceso que no solo simplifica la gestión de clusters, sino que también nos prepara para enfrentar los retos del futuro tecnológico. Con una implementación organizada, segura y escalable, estarás listo para manejar flujos de datos en tiempo real, optimizar la comunicación entre servicios y, por supuesto, mantener el ritmo en un entorno cada vez más automatizado y conectado.
Únete en este recorrido paso a paso para transformar tu infraestructura, garantizando que cada componente se comunique de manera efectiva y que tu cluster Kafka esté preparado para afrontar los desafíos del futuro tecnológico.
Subscribe to my newsletter
Read articles from Maximiliano Baez directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Maximiliano Baez
Maximiliano Baez
Con más de 15 años impulsando la innovación tecnológica, me destaco por mi proactividad y dedicación al aprendizaje continuo, lo que me permite adaptarme a diversos desafíos. Valoro el equilibrio entre lo profesional y lo personal: viajar, explorar culturas y compartir con familia y amigos nutren mi visión creativa y colaborativa.