Instalación de un cluster Kafka utilizando Kafka Operator

Indice:

  1. Introducción

    • Importancia de la orquestación de servicios

    • Beneficios de usar Kafka Operator

  2. 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

  3. 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

  4. 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.

0
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.