Saltar al contenido principal

Antes de comenzar

Antes de desplegar Midaz con Helm, asegúrese de tener lo siguiente en su lugar:
  • Kubernetes (v1.30+) – Necesitará un clúster en ejecución para desplegar.
  • Helm 3+ – Helm debe estar instalado y disponible. Ejecute helm version para confirmar.

Cómo desplegar Midaz

Para poner en funcionamiento Midaz con Helm, ejecute:
helm install midaz oci://registry-1.docker.io/lerianstudio/midaz-helm --version <version> -n midaz --create-namespace
Esto crea un namespace llamado midaz (si aún no existe) y despliega el chart. Para confirmar que el despliegue se realizó correctamente:
helm list -n midaz
ConsejoEncontrará el Helm chart usado en esta guía en nuestro repositorio de GitHub. Siéntase libre de hacer fork, ajustar valores o extender según sea necesario.

Configuración de ingress para diferentes controladores

Midaz soporta diferentes controladores ingress para exponer servicios como Transacción, Ledger y Console. Necesitará tener un controlador configurado en su clúster y configurarlo en el archivo values.yaml. A continuación se muestran ejemplos para las opciones más comunes:

Controlador ingress NGINX

ingress:
  enabled: true
  className: "nginx"
  annotations: {}
  hosts:
    - host: midaz.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: midaz-tls
      hosts:
        - midaz.example.com
ConsejoConsulte la documentación oficial de ingress-nginx para una referencia completa sobre anotaciones de Nginx.

AWS ALB (Application Load Balancer)

ingress:
  enabled: true
  className: "alb"
  annotations:
    alb.ingress.kubernetes.io/scheme: internal
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/group.name: "midaz"
    alb.ingress.kubernetes.io/healthcheck-path: "/healthz"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
  hosts:
    - host: midaz.example.com
      paths:
        - path: /
          pathType: Prefix
  tls: []

Controlador Ingress Traefik

ingress:
  enabled: true
  className: "traefik"
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: "web, websecure"
    traefik.ingress.kubernetes.io/router.tls: "true"
  hosts:
    - host: midaz.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: midaz-tls
      hosts:
        - midaz.example.com

Configuración de observabilidad

Midaz usa Grafana Docker OpenTelemetry LGTM para impulsar su stack de observabilidad; esta configuración recopila y exporta datos de telemetría como trazas y métricas.

Acceso al dashboard de Grafana

Para acceder al dashboard localmente:
kubectl port-forward svc/midaz-grafana 3000:3000 -n midaz
Luego diríjase a: http://localhost:3000.

Acceso DNS interno para Grafana

Para exponer Grafana dentro de su clúster o red privada a través de DNS, habilite y configure Ingress de esta manera:
grafana:
  enabled: true
  name: grafana

  ingress:
    enabled: true
    className: "nginx"
    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /
      nginx.ingress.kubernetes.io/whitelist-source-range: ""
    hosts:
      - host: "midaz-ote.example.com"
        paths:
          - path: /
            pathType: Prefix
    tls: []

Deshabilitación de observabilidad

Puede deshabilitar el stack de observabilidad completamente configurando:
grafana:
  enabled: false

Configuración de dependencias

Midaz viene con dependencias predeterminadas que están habilitadas de fábrica. Puede desactivarlas si está usando infraestructura existente.

Valkey

  • Versión: 2.4.7.
  • Repositorio: Bitnami.
  • Deshabilitar: valkey.enabled = false.
Para usar su propia instancia de Redis/Valkey:
onboarding:
  configmap:
    REDIS_HOST: { your-host }
    REDIS_PORT: { your-port }
    REDIS_USER: { your-user }
  secrets:
    REDIS_PASSWORD: { your-password }

transaction:
  configmap:
    REDIS_HOST: { your-host }
    REDIS_PORT: { your-port }
    REDIS_USER: { your-user }
  secrets:
    REDIS_PASSWORD: { your-password }

PostgreSQL

  • Versión: 16.3.0.
  • Repositorio: Bitnami.
  • Deshabilitar: postgresql.enabled = false.
Ejemplo de configuración de PostgreSQL externo:
onboarding:
  configmap:
    DB_HOST: { your-host }
    DB_USER: { your-user }
    DB_PORT: { your-port }
    DB_REPLICA_HOST: { your-replica-host }
    DB_REPLICA_USER: { your-replica-user }
    DB_REPLICA_PORT: { your-replica-port }
  secrets:
    DB_PASSWORD: { your-password }
    DB_REPLICA_PASSWORD: { your-replica-password }

transaction:
  configmap:
    DB_HOST: { your-host }
    DB_USER: { your-user }
    DB_PORT: { your-port }
    DB_REPLICA_HOST: { your-replica-host }
    DB_REPLICA_USER: { your-replica-user }
    DB_REPLICA_PORT: { your-replica-port }
  secrets:
    DB_PASSWORD: { your-password }
    DB_REPLICA_PASSWORD: { your-replica-password }

MongoDB

  • Versión: 15.4.5.
  • Repositorio: Bitnami.
  • Deshabilitar: mongodb.enabled = false.
Para conectarse a un MongoDB externo:
onboarding:
  configmap:
    MONGO_HOST: { your-host }
    MONGO_NAME: { your-db-name }
    MONGO_USER: { your-user }
    MONGO_PORT: { your-port }
  secrets:
    MONGO_PASSWORD: { your-password }

transaction:
  configmap:
    MONGO_HOST: { your-host }
    MONGO_NAME: { your-db-name }
    MONGO_USER: { your-user }
    MONGO_PORT: { your-port }
  secrets:
    MONGO_PASSWORD: { your-password }

RabbitMQ

  • Versión: 16.0.0.
  • Repositorio: Bitnami.
  • Deshabilitar: rabbitmq.enabled = false.
Si está usando una instancia externa de RabbitMQ, necesita cargar el archivo de definiciones requerido. Sin estas colas, intercambios y enlaces en su lugar, Midaz no funcionará como se espera. Puede cargar las definiciones de dos maneras:

Automáticamente

Habilite la bandera externalRabbitmqDefinitions en su archivo values.yaml para aplicar las definiciones predeterminadas automáticamente:
   global:
     ## -- Enable or disable loading of default RabbitMQ definitions to external host
     externalRabbitmqDefinitions:
       enabled: true
Esto crea un Job de Kubernetes que carga las definiciones de RabbitMQ en su instancia externa.
AtenciónEste Job solo se ejecuta durante la primera instalación del chart. Se activa mediante un hook post-install de Helm y no se ejecutará nuevamente durante actualizaciones o reinstalaciones.Si necesita ejecutarlo nuevamente, elimine el release e instálelo de nuevo.

Manualmente

Si prefiere aplicar las definiciones usted mismo, use la API HTTP de RabbitMQ:
 curl -u { your-host-user }: { your-host-pass } -X POST -H "Content-Type: application/json" -d @load_definitions.json http://{ your-host }: { your-host-port }/api/definitions
Encontrará el archivo load_definitions.json en: charts/midaz/files/rabbitmq/load_definitions.json.

Use su propio RabbitMQ

Si ya tiene una instancia de RabbitMQ en ejecución, puede deshabilitar la dependencia integrada y apuntar los componentes de Midaz a su configuración externa:
onboarding:
  configmap:
    RABBITMQ_HOST: { your-host }
    RABBITMQ_DEFAULT_USER: { your-host-user }
    RABBITMQ_PORT_HOST: { your-host-port }
    RABBITMQ_PORT_AMQP: { your-host-amqp-port }

  secrets:
    RABBITMQ_DEFAULT_PASS: { your-host-pass }

transaction:
  configmap:
    RABBITMQ_HOST: { your-host }
    RABBITMQ_DEFAULT_USER: { your-host-user }
    RABBITMQ_PORT_HOST: { your-host-port }
    RABBITMQ_PORT_AMQP: { your-host-amqp-port }

  secrets:
    RABBITMQ_DEFAULT_PASS: { your-host-pass }

Componentes de Midaz

El sistema Midaz se ejecuta en cuatro capas distintas que trabajan juntas, distribuidas en cargas de trabajo segregadas:

Onboarding

ParámetroDescripciónValor Predeterminado
onboarding.nameNombre del servicio."onboarding"
onboarding.replicaCountNúmero de réplicas para el servicio onboarding.2
onboarding.image.repositoryRepositorio para la imagen del contenedor del servicio onboarding."lerianstudio/midaz-onboarding"
onboarding.image.pullPolicyPolítica de extracción de imagen."IfNotPresent"
onboarding.image.tagEtiqueta de imagen utilizada para el despliegue."2.1.0"
onboarding.imagePullSecretsSecretos para extraer imágenes de un registro privado.[]
onboarding.nameOverrideAnula el nombre predeterminado generado por Helm.""
onboarding.fullnameOverrideAnula el nombre completo generado por Helm.""
onboarding.podAnnotationsAnotaciones del pod para metadatos adicionales.{}
onboarding.podSecurityContextContexto de seguridad aplicado a nivel del pod.{}
onboarding.securityContext.runAsGroupDefine el ID de grupo para el usuario que ejecuta el proceso dentro del contenedor.1000
onboarding.securityContext.runAsUserDefine el ID de usuario para el proceso que se ejecuta dentro del contenedor.1000
onboarding.securityContext.runAsNonRootAsegura que el proceso no se ejecute como root.true
onboarding.securityContext.capabilities.dropLista de capacidades a eliminar.["ALL"]
onboarding.securityContext.readOnlyRootFilesystemDefine el sistema de archivos raíz como de solo lectura.true
onboarding.pdb.enabledEspecifica si PodDisruptionBudget está habilitado.true
onboarding.pdb.minAvailableNúmero mínimo de pods disponibles.1
onboarding.pdb.maxUnavailableNúmero máximo de pods no disponibles.1
onboarding.pdb.annotationsAnotaciones para el PodDisruptionBudget.{}
onboarding.deploymentUpdate.typeTipo de estrategia de despliegue."RollingUpdate"
onboarding.deploymentUpdate.maxSurgeNúmero máximo de pods que se pueden crear sobre el número deseado de pods."100%"
onboarding.deploymentUpdate.maxUnavailableNúmero máximo de pods que pueden no estar disponibles durante la actualización.0
onboarding.service.typeTipo de servicio Kubernetes."ClusterIP"
onboarding.service.portPuerto para la API HTTP.3000
onboarding.ingress.enabledEspecifica si Ingress está habilitado.false
onboarding.ingress.classNameNombre de la clase Ingress.""
onboarding.ingress.annotationsAnotaciones adicionales de ingress.{}
onboarding.ingress.hostsHosts configurados para Ingress y rutas asociadas.""
onboarding.ingress.tlsConfiguraciones TLS para Ingress.[]
onboarding.resources.limits.cpuLímite de CPU asignado para los pods."1500m"
onboarding.resources.limits.memoryLímite de memoria asignado para los pods."512Gi"
onboarding.resources.requests.cpuSolicitud mínima de CPU para los pods."768m"
onboarding.resources.requests.memorySolicitud mínima de memoria para los pods."256Mi"
onboarding.autoscaling.enabledEspecifica si el autoescalado está habilitado.true
onboarding.autoscaling.minReplicasNúmero mínimo de réplicas para autoescalado.2
onboarding.autoscaling.maxReplicasNúmero máximo de réplicas para autoescalado.5
onboarding.autoscaling.targetCPUUtilizationPercentagePorcentaje de utilización de CPU objetivo para autoescalado.80
onboarding.autoscaling.targetMemoryUtilizationPercentagePorcentaje de utilización de memoria objetivo para autoescalado.80
onboarding.nodeSelectorSelectores de nodo para programación de pods.{}
onboarding.tolerationsToleraciones para programación de pods.{}
onboarding.affinityReglas de afinidad para programación de pods.{}
onboarding.configmapConfiguraciones adicionales en ConfigMap.Encuentre los valores predeterminados en la configuración.
onboarding.secretsSecretos adicionales para el servicio.Encuentre los valores predeterminados en la configuración.
onboarding.serviceAccount.createEspecifica si se debe crear la cuenta de servicio.true
onboarding.serviceAccount.annotationsAnotaciones para la cuenta de servicio.{}
onboarding.serviceAccount.nameNombre de la cuenta de servicio. Si no se define, se generará automáticamente.""

Transacción

ParámetroDescripciónValor Predeterminado
transaction.nameNombre del servicio."transaction"
transaction.replicaCountNúmero de réplicas para el servicio transaction.1
transaction.image.repositoryRepositorio para la imagen del contenedor del servicio transaction."lerianstudio/midaz-transaction"
transaction.image.pullPolicyPolítica de extracción de imagen."IfNotPresent"
transaction.image.tagEtiqueta de imagen utilizada para el despliegue."2.1.0"
transaction.imagePullSecretsSecretos para extraer imágenes de un registro privado.[]
transaction.nameOverrideAnula el nombre predeterminado generado por Helm.""
transaction.fullnameOverrideAnula el nombre completo generado por Helm.""
transaction.podAnnotationsAnotaciones del pod para metadatos adicionales.{}
transaction.podSecurityContextContexto de seguridad para el pod.{}
transaction.securityContext.runAsGroupDefine el ID de grupo para el usuario que ejecuta el proceso dentro del contenedor.1000
transaction.securityContext.runAsUserDefine el ID de usuario para el proceso que se ejecuta dentro del contenedor.1000
transaction.securityContext.runAsNonRootAsegura que el proceso no se ejecute como root.true
transaction.securityContext.capabilities.dropLista de capacidades de Linux a eliminar.["ALL"]
transaction.securityContext.readOnlyRootFilesystemDefine el sistema de archivos raíz como de solo lectura.true
transaction.pdb.enabledHabilitar o deshabilitar PodDisruptionBudget.true
transaction.pdb.minAvailableNúmero mínimo de pods disponibles.2
transaction.pdb.maxUnavailableNúmero máximo de pods no disponibles.1
transaction.pdb.annotationsAnotaciones para el PodDisruptionBudget.{}
transaction.deploymentUpdate.typeTipo de estrategia de despliegue."RollingUpdate"
transaction.deploymentUpdate.maxSurgeNúmero máximo de pods que se pueden crear sobre el número deseado de pods."100%"
transaction.deploymentUpdate.maxUnavailableNúmero máximo de pods que pueden no estar disponibles durante la actualización.0
transaction.service.typeTipo de servicio Kubernetes."ClusterIP"
transaction.service.portPuerto para la API HTTP.3001
transaction.ingress.enabledHabilitar o deshabilitar ingress.false
transaction.ingress.classNameNombre de la clase Ingress.""
transaction.ingress.annotationsAnotaciones adicionales de ingress.{}
transaction.ingress.hostsHosts configurados para ingress y rutas asociadas.[{host: "", paths: [{path: "/", pathType: "Prefix"}]}]
transaction.ingress.tlsConfiguración TLS para ingress.[]
transaction.resources.limits.cpuLímite de CPU asignado para los pods."2000m"
transaction.resources.limits.memoryLímite de memoria asignado para los pods."512Gi"
transaction.resources.requests.cpuSolicitud mínima de CPU para los pods."768m"
transaction.resources.requests.memorySolicitud mínima de memoria para los pods."256Mi"
transaction.autoscaling.enabledHabilitar o deshabilitar autoescalado horizontal de pods.true
transaction.autoscaling.minReplicasNúmero mínimo de réplicas para autoescalado.3
transaction.autoscaling.maxReplicasNúmero máximo de réplicas para autoescalado.9
transaction.autoscaling.targetCPUUtilizationPercentagePorcentaje de utilización de CPU objetivo para autoescalado.70
transaction.autoscaling.targetMemoryUtilizationPercentagePorcentaje de utilización de memoria objetivo para autoescalado.80
transaction.nodeSelectorSelector de nodo para programar pods en nodos específicos.{}
transaction.tolerationsToleraciones para programación en nodos con taints.{}
transaction.affinityReglas de afinidad para programación de pods.{}
transaction.configmapConfigMap para variables de entorno y configuraciones.Encuentre los valores predeterminados en la configuración.
transaction.secretsSecretos para almacenar datos sensibles.Encuentre los valores predeterminados en la configuración.
transaction.serviceAccount.createEspecifica si se debe crear una ServiceAccount.true
transaction.serviceAccount.annotationsAnotaciones para la ServiceAccount.{}
transaction.serviceAccount.nameNombre de la cuenta de servicio.""

Console

ParámetroDescripciónValor Predeterminado
console.nameNombre del servicio."console"
console.enabledHabilitar o deshabilitar el servicio console.true
console.replicaCountNúmero de réplicas para el despliegue.1
console.image.repositoryRepositorio de imagen Docker para Console."lerianstudio/midaz-console"
console.image.pullPolicyPolítica de extracción de imagen Docker."IfNotPresent"
console.image.tagEtiqueta de imagen Docker utilizada para el despliegue."1.25.1"
console.imagePullSecretsSecretos para extraer imágenes Docker de un registro privado.[]
console.nameOverrideAnula el nombre del recurso.""
console.fullnameOverrideAnula el nombre completo del recurso.""
console.podAnnotationsAnotaciones para los pods.{}
console.podSecurityContextContexto de seguridad aplicado a nivel del pod.{}
console.securityContext.runAsGroupDefine el ID de grupo para el usuario que ejecuta el proceso dentro del contenedor.1000
console.securityContext.runAsUserDefine el ID de usuario para el proceso que se ejecuta dentro del contenedor.1000
console.securityContext.runAsNonRootAsegura que el proceso no se ejecute como root.true
console.securityContext.capabilities.dropLista de capacidades de Linux a eliminar.["ALL"]
console.securityContext.readOnlyRootFilesystemDefine el sistema de archivos raíz como de solo lectura.true
console.pdb.enabledEspecifica si PodDisruptionBudget está habilitado.false
console.pdb.minAvailableNúmero mínimo de pods disponibles para PodDisruptionBudget.1
console.pdb.maxUnavailableNúmero máximo de pods no disponibles para PodDisruptionBudget.1
console.pdb.annotationsAnotaciones para el PodDisruptionBudget.{}
console.deploymentUpdate.typeTipo de estrategia de despliegue."RollingUpdate"
console.deploymentUpdate.maxSurgeNúmero máximo de pods que se pueden crear sobre el número deseado de pods."100%"
console.deploymentUpdate.maxUnavailableNúmero máximo de pods que pueden no estar disponibles durante la actualización.0
console.service.typeTipo de servicio Kubernetes."ClusterIP"
console.service.portPuerto del servicio.8081
console.ingress.enabledEspecifica si Ingress está habilitado.false
console.ingress.classNameNombre de la clase Ingress.""
console.ingress.annotationsAnotaciones adicionales para Ingress.{}
console.ingress.hostsHosts configurados para Ingress y rutas asociadas.[{ "host": "", "paths": [{ "path": "/", "pathType": "Prefix" }] }]
console.ingress.tlsConfiguraciones TLS para Ingress.[]
console.resources.limits.cpuLímite de CPU asignado para los pods."200m"
console.resources.limits.memoryLímite de memoria asignado para los pods."256Mi"
console.resources.requests.cpuSolicitud mínima de CPU para los pods."100m"
console.resources.requests.memorySolicitud mínima de memoria para los pods."128Mi"
console.autoscaling.enabledEspecifica si el autoescalado horizontal de pods está habilitado.true
console.autoscaling.minReplicasNúmero mínimo de réplicas para autoescalado.1
console.autoscaling.maxReplicasNúmero máximo de réplicas para autoescalado.3
console.autoscaling.targetCPUUtilizationPercentagePorcentaje de utilización de CPU objetivo para autoescalado.80
console.autoscaling.targetMemoryUtilizationPercentagePorcentaje de utilización de memoria objetivo para autoescalado.80
console.nodeSelectorSelectores de nodo para programación de pods.{}
console.tolerationsToleraciones para programación de pods.{}
console.affinityReglas de afinidad para programación de pods.{}
console.configmapConfiguraciones adicionales en el ConfigMap.Encuentre los valores predeterminados en la configuración.
console.secretsSecretos adicionales para el servicio.{}
console.serviceAccount.createEspecifica si se debe crear la cuenta de servicio.true
console.serviceAccount.annotationsAnotaciones para la cuenta de servicio.{}
console.serviceAccount.nameNombre de la cuenta de servicio. Si no se define, se generará automáticamente.""