En este tema se describe cómo implementar la extensión TKG v1.3.1 para Fluent Bit. Fluent Bit es un reenviador y procesador de registros rápido y ligero que le permite recopilar registros y datos de aplicaciones de diferentes orígenes, así como unificarlos y enviarlos a varios destinos. Implemente la extensión TKG para que Fluent Bit recopile y reenvíe registros de clústeres de Tanzu Kubernetes al destino de su elección.

Requisitos previos de la extensión

Cumpla los siguientes requisitos antes de implementar la extensión TKG v1.3.1 para Fluent Bit.

Implementar la extensión Fluent Bit

La extensión TKG para Fluent Bit instala un contenedor de Fluent Bit en el clúster. Para obtener más información sobre este contenedor, consulte https://fluentbit.io/.
Contenedor Tipo de recurso Réplicas Descripción
Fluent Bit DaemonSet 6 Recopilador de registros, agregador, reenviador
La extensión está configurada para extraer los contenedores del registro público de VMware en https://projects.registry.vmware.com/. Si utiliza un registro privado, cambie la URL del endpoint en los valores de datos y los archivos de las configuraciones de extensión para que coincidan. Consulte Configurar la extensión Fluent Bit para ver una descripción de los campos y las opciones.
  1. Compruebe que completó cada uno de los requisitos previos de extensión. Consulte Requisitos previos de la extensión.
  2. Cambie el directorio a la extensión Fluent Bit.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
  3. Cree el espacio de nombres tanzu-system-logging, así como los objetos de función y la cuenta de servicio de Fluent Bit.
    kubectl apply -f namespace-role.yaml
  4. Decida qué destino de registro utilizará para Fluent Bit. Entre los resultados admitidos se incluyen Elasticsearch, HTTP, Kafka, Splunk y Syslog. Consulte https://docs.fluentbit.io/manual/pipeline/outputs para obtener más información.
  5. Cree un archivo de valores de datos de Fluent Bit para el destino de registro elegido copiando uno de los archivos <LOG_BACKEND>/fluent-bit-data-values.example.yaml.
    Hay un archivo de valores de datos de ejemplo para cada destino de registro compatible. El ejemplo proporciona la configuración mínima para ese destino de registro.
    cp elasticsearch/fluent-bit-data-values.yaml.example elasticsearch/fluent-bit-data-values.yaml
    cp http/fluent-bit-data-values.yaml.example http/fluent-bit-data-values.yaml
    cp kafka/fluent-bit-data-values.yaml.example kafka/fluent-bit-data-values.yaml
    cp splunk/fluent-bit-data-values.yaml.example splunk/fluent-bit-data-values.yaml
    cp syslog/fluent-bit-data-values.yaml.example syslog/fluent-bit-data-values.yaml
  6. Configure la extensión Fluent Bit. Para ello, rellene <LOG_BACKEND>/fluent-bit-data-values.yaml. Consulte Configurar la extensión Fluent Bit para ver una descripción de los campos y las opciones.
    Por ejemplo, la configuración de syslog de Fluent Bit requiere los siguientes valores:
    logging:
      image:
        repository: projects.registry.vmware.com/tkg # Public registry
    tkg:
      instance_name: "<TKG_INSTANCE_NAME>" #mandatory but arbitrary; appears in logs
      cluster_name: "<CLUSTER_NAME>" #name of the target tkgs cluster
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "<SYSLOG_HOST>"
        port: "<SYSLOG_PORT>"
        mode: "<SYSLOG_MODE>"
        format: "<SYSLOG_FORMAT>"
    Un archivo de valores de datos rellenado para syslog de Fluent Bit podría tener la siguiente configuración:
    logging:
      image:
        repository: projects.registry.vmware.com/tkg
    tkg:
      instance_name: "tkgs-cluster-1"
      cluster_name: "tkgs-cluster-1"
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "10.192.175.59"
        port: "514"
        mode: "tcp"
        format: "rfc5424"
  7. Cree un secreto de Fluent Bit con valores de datos para el destino de registro.
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=elasticsearch/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=kafka/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=splunk/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=http/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=syslog/fluent-bit-data-values.yaml -n tanzu-system-logging
    secret/fluent-bit-data-values se crea en el espacio de nombres tanzu-system-logging. Verifique con el siguiente comando:
    kubectl get secrets -n tanzu-system-logging
  8. Implemente la aplicación Fluent Bit.
    kubectl apply -f fluent-bit-extension.yaml

    Si todo es correcto, debería ver app.kappctrl.k14s.io/fluent-bit created.

  9. Compruebe el estado de la aplicación Fluent Bit.
    kubectl get app fluent-bit -n tanzu-system-logging
    Si es correcto, el estado debe cambiar de Reconciling a Reconcile succeeded. Si el estado es Reconcile failed, consulte Solucionar problemas generados en la implementación de Fluent Bit.
  10. Vea el estado detallado de la aplicación.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  11. Compruebe el DaemonSet de Fluent Bit.
    kubectl get daemonsets -n tanzu-system-logging
    Si es correcto, debería ver lo siguiente:
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    fluent-bit   6         6         6       6            6           <none>          105s

Solucionar problemas generados en la implementación de Fluent Bit

Si se produce un error en la implementación o la reconciliación, ejecute kubectl get pods -A para ver el estado del pod. Los pods de fluent-bit deben tener el estado Running. Si el estado de un pod es ImagePullBackOff o ImageCrashLoopBackOff, no se podrá extraer la imagen del contenedor. Compruebe la URL del registro en los valores de datos y los archivos YAML de extensión, y asegúrese de que sean precisos.

Compruebe los registros del contenedor, donde name-XXXX es el nombre único del pod que puede ver cuando ejecuta kubectl get pods -A:
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging

Actualizar la extensión de Fluent Bit

Actualice la extensión de Fluent Bit que está implementada en el clúster de Tanzu Kubernetes.

  1. Obtenga los valores de datos de Fluent Bit del secreto.
    kubectl get secret fluent-bit-data-values -n tanzu-system-logging -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > fluent-bit-data-values.yaml
    
  2. Actualice los valores de datos de Fluent Bit en fluent-bit-data-values.yaml. Consulte Configurar la extensión Fluent Bit.
  3. Actualice el secreto de los valores de datos de Fluent Bit.
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=fluent-bit-data-values.yaml -n tanzu-system-logging -o yaml --dry-run | kubectl replace -f-
    
    La extensión de Fluent Bit se conciliará de nuevo con los valores de datos anteriores.
    Nota: De forma predeterminada, kapp-controller sincronizará las aplicaciones cada 5 minutos. La actualización debería tener efecto en 5 minutos o menos. Si desea que la actualización se aplique inmediatamente, cambie los valores de syncPeriod en fluent-bit-extension.yaml a un valor menor y aplique la extensión de Fluent Bit mediante kubectl apply -f fluent-bit-extension.yaml.
  4. Compruebe el estado de la extensión.
    kubectl get app fluent-bit -n tanzu-system-logging
  5. Vea el estado detallado y solucione los problemas.
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  6. Solucione los problemas en caso necesario. Consulte Solucionar problemas generados en la implementación de Fluent Bit.

Eliminar la extensión Fluent Bit

Elimine la extensión Fluent Bit de un clúster de Tanzu Kubernetes.
Nota: Complete los pasos en orden. No elimine el espacio de nombres, la cuenta de servicio ni los objetos de función antes de eliminar totalmente la aplicación Fluent Bit. De lo contrario, podría provocar errores en el sistema.
  1. Cambie el directorio a la extensión Fluent Bit.
    cd extensions/logging/fluent-bit/
  2. Elimine la aplicación Fluent Bit.
    kubectl delete app fluent-bit -n tanzu-system-logging

    Resultado esperado: app.kappctrl.k14s.io "fluent-bit" deleted.

  3. Compruebe que el aplicación Fluent Bit se haya eliminado.
    kubectl get app fluent-bit -n tanzu-system-logging

    Resultado esperado: apps.kappctrl.k14s.io "fluent-bit" not found.

  4. Elimine el espacio de nombres tanzu-system-logging, así como los objetos de función y la cuenta de servicio de la extensión Fluent Bit.
    kubectl delete -f namespace-role.yaml

Actualizar la extensión de Fluent Bit

Si tiene una extensión de Fluent Bit existente implementada, puede actualizarla a la versión más reciente.
  1. Exporte el mapa de configuración de Fluent Bit.
    kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
    
  2. Elimine la implementación existente de Fluent Bit. Consulte Eliminar la extensión Fluent Bit.
  3. Implemente la última extensión Fluent Bit. Consulte Implementar la extensión Fluent Bit.

Configurar la extensión Fluent Bit

Los valores de configuración se establecen en extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml.
Tabla 1. Configuraciones de extensión de Fluent Bit
Parámetro Descripción Tipo Predeterminado
logging.namespace Espacio de nombres en el que se implementará Fluent Bit string tanzu-system-logging
logging.service_account_name Nombre de la cuenta del servicio Fluent Bit string fluent-bit
logging.cluster_role_name Nombre de la función de clúster que otorga permisos para obtener, ver y enumerar Fluent Bit string fluent-bit-read
logging.image.name Nombre de la imagen de Fluent Bit string fluent-bit
logging.image.tag Etiqueta de la imagen de Fluent Bit. Es posible que este valor tenga que actualizarse si va a actualizar la versión. string v1.6.9_vmware.1
logging.image.repository Ubicación del repositorio con la imagen de Fluent Bit. El valor predeterminado es el registro de VMware público. Cambie este valor si utiliza un repositorio privado (p. ej., un entorno aislado). string projects.registry.vmware.com/tkg
logging.image.pullPolicy Directiva de extracción de imágenes de Fluent Bit string IfNotPresent
logging.update_strategy Estrategia de actualización que se utilizará al actualizar DaemonSet string RollingUpdate
tkg.cluster_name Nombre del clúster de Tanzu Kubernetes string Nulo (parámetro obligatorio)
tkg.instance_name Nombre definido por el usuario de la instancia de TKG compartida por el clúster supervisor y todos los clústeres de Tanzu Kubernetes en una implementación. Puede utilizar cualquier nombre relacionado con la instalación. string Nulo (parámetro obligatorio)
Nota: Este campo es obligatorio pero arbitrario. Es un nombre que aparece en los registros.
fluent_bit.log_level Nivel de registro que se utilizará para Fluent Bit string info
fluent_bit.output_plugin Establezca el back-end en el que Fluent Bit debería vaciar la información que recopila string Nulo (parámetro obligatorio)
fluent_bit.elasticsearch.host Dirección IP o nombre de host de la instancia Elasticsearch de destino string Nulo (parámetro obligatorio cuando output_plugin es una búsqueda elástica)
fluent_bit.elasticsearch.port Puerto TCP de la instancia Elasticsearch de destino entero Nulo (parámetro obligatorio cuando output_plugin es una búsqueda elástica)
fluent_bit.elasticsearch.buffer_size Especifique el tamaño de búfer utilizado para leer la respuesta del servicio Elasticsearch. Se establece en ilimitado si es False string False
fluent_bit.elasticsearch.tls Especifique la configuración predeterminada de TLS para Elasticsearch string Desactivado
fluent_bit.kafka.broker_service_name Lista única o múltiple de Kafka Brokers; por ejemplo, 192.168.1.3:9092 string Nulo (parámetro obligatorio cuando output_plugin es kafka)
fluent_bit.kafka.topic_name Entrada única o lista de temas separados por (,) que Fluent Bit usará para enviar mensajes a Kafka string Nulo (parámetro obligatorio cuando output_plugin es kafka)
fluent_bit.splunk.host Dirección IP o nombre de host del servidor Splunk de destino string Nulo (parámetro obligatorio cuando output_plugin es splunk)
fluent_bit.splunk.port Puerto TCP del servidor Splunk de destino entero Nulo (parámetro obligatorio cuando output_plugin es splunk)
fluent_bit.splunk.token Especifica el token de autenticación de la interfaz del recopilador de eventos HTTP string Nulo (parámetro obligatorio cuando output_plugin es splunk)
fluent_bit.http.host Dirección IP o nombre de host del servidor HTTP de destino string Nulo (parámetro obligatorio cuando output_plugin es http)
fluent_bit.http.port Puerto TCP del servidor HTTP de destino entero Nulo (parámetro obligatorio cuando output_plugin es http)
fluent_bit.http.mode Especificar un URI HTTP para el servidor web de destino string Nulo (parámetro obligatorio cuando output_plugin es http)
fluent_bit.http.header_key_value Par clave/valor de encabezado HTTP. Se pueden establecer varios encabezados string Nulo (parámetro obligatorio cuando output_plugin es http)
fluent_bit.http.format Especifica el formato de datos que se utilizará en el cuerpo de la solicitud HTTP string Nulo (parámetro obligatorio cuando output_plugin es http)
fluent_bit.syslog.host Dominio o dirección IP del servidor Syslog remoto string Nulo (parámetro obligatorio cuando output_plugin es syslog)
fluent_bit.syslog.port Puerto TCP o UDP del servidor Syslog remoto entero Nulo (parámetro obligatorio cuando output_plugin es syslog)
fluent_bit.syslog.mode Especifique el tipo de transporte de TCP, UDP y TLS string Nulo (parámetro obligatorio cuando output_plugin es syslog)
fluent_bit.syslog.format Especifica el formato de datos que se utilizará en el cuerpo de la solicitud HTTP string Nulo (parámetro obligatorio cuando output_plugin es syslog)
host_path.volume_1 Ruta de directorio desde el sistema de archivos del nodo host hacia el pod, para el volumen 1 string /var/log
host_path.volume_2 Ruta de directorio desde el sistema de archivos del nodo host hacia el pod, para el volumen 2 string /var/lib/docker/containers
host_path.volume_3 Ruta de directorio desde el sistema de archivos del nodo host hacia el pod, para el volumen 3 string /run/log
systemd.path Ruta de acceso al directorio de diario Systemd string /var/log/journal