Production Deployment Guide
This comprehensive guide provides detailed instructions for deploying Ilum in production environments with enhanced security, namespace separation, and multiple configuration options to meet diverse operational requirements.
Sommario
- Panoramica
- Prerequisiti di Kubernetes
- Architettura
- High Availability Configuration
- Failure Domains & Resilience
- Dynamic Resource Scaling
- Namespace Separation Strategy
- Security Configuration
- Dependency Deployment
- Pre-configured Stack Options
- Helm Values Configuration
- Installation Instructions
- Post-Installation Configuration
- Risoluzione dei problemi
Panoramica
For production environments, it's strongly recommended to deploy critical dependencies in separate namespaces to achieve:
- Enhanced Security: Namespace-level isolation and RBAC policies
- Gestione delle risorse: Independent resource quotas and limits
- Operational Excellence: Simplified maintenance and upgrades
- Compliance: Meeting organizational separation requirements
- Scalabilità: Independent scaling of components
Critical Components for Namespace Separation
The following components should be deployed in separate namespaces for production:
- PostgreSQL: Primary metadata store for
ilum-coreand shared dependency for Marquez, Hive Metastore, Airflow, Superset, MLflow, and others - MongoDB: Legacy metadata store, still supported for existing deployments
- Apache Kafka: Message broker and communication layer (required for
ilum-coreHA) - MinIO: Object storage for Spark applications and data
Prerequisiti di Kubernetes
Ilum has been extensively tested across all leading Kubernetes environments, ensuring compatibility with a variety of deployment scenarios:
Supported Platforms
- Lightweight Distributions: k3s, Rancher, MicroK8s
- Bare-metal Clusters: Self-managed Kubernetes installations
- Managed Services:
- Motore di Google Kubernetes (GKE)
- Servizio Kubernetes elastico Amazon (EKS)
- Servizio Azure Kubernetes (servizio Azure Kubernetes)
- DigitalOcean Kubernetes
- Red Hat OpenShift
Minimum Suggested Requirements
| Component | Requirement |
|---|---|
| Kubernetes Version | 1.20+ |
| CPU | 8 cores minimum, 16+ recommended |
| Memoria | 16GB minimum, 32GB+ recommended |
Air-gapped (Offline) Environments
For air-gapped installations, refer to our comprehensive Air-gapped Installation Guide.
Testing vs Production
Minikube is used throughout our documentation for demonstration purposes but is not suitable for production due to limitations in scalability, resource management, and high availability.
Architettura
Components and modules
The Ilum platform consists of three core services and a curated set of optional modules:
ilum-core: Main backend service. Hosts the public REST API, job and cluster orchestration, multi-engine SQL execution, security, and lineage capture.ilum-ui: React-based web frontend. Hosts the SQL Editor, Table Explorer, Lineage view, Workloads management, and the Modules registry.ilum-api: Module-management microservice. Drives Helm-based install, upgrade, and disable of optional Ilum modules at runtime via cluster-scoped RBAC. Future releases will extendilum-apicon Model Context Protocol (MCP) capabilities and open APIs for third-party extension.
Optional modules include execution engines (Trino, Apache Flink), additional catalogs (Project Nessie, Unity Catalog, DuckLake), notebooks (JupyterHub, Zeppelin), orchestration (Airflow, Kestra, Mage, n8n, NiFi), BI tools (Superset, Streamlit), AI and ML stacks (MLflow, LangFuse), and observability components (Kube Prometheus stack, Loki, Promtail).
PostgreSQL
PostgreSQL is the primary metadata store per ilum-core (accessed via R2DBC with jOOQ-generated SQL DSL). It is also used by shared dependencies including Marquez, Hive Metastore, Airflow, Superset, MLflow, Hydra, Gitea, n8n, and Kestra to store their respective metadata.
PostgreSQL is Abilitato in Ilum per impostazione predefinita.
If you want to control whether PostgreSQL is enabled or not, you can use the helm value postgresql.enabled. For example, to disable it, you can add --set postgreSQL.enabled=Falso al comando di installazione.
MongoDB
MongoDB is supported as a legacy metadata store per ilum-core. New deployments should use PostgreSQL; existing MongoDB-backed deployments remain fully supported. Ilum ships migration tooling (M001 through M009 scripts) for moving from MongoDB to PostgreSQL.
Ilum automatically creates all necessary databases and collections during the startup process when MongoDB is in use.
Apache Kafka
Apache Kafka funge da livello di comunicazione di Ilum, facilitando l'interazione tra i lavori Ilum-Core e Spark, oltre a tra diverse istanze Ilum-Core quando scalate. È fondamentale garantire che i broker Apache Kafka siano accessibili da entrambi Processi Ilum-Core e Spark, soprattutto quando i processi Spark vengono avviati in un cluster Kubernetes diverso.
Ilum utilizza Kafka per portare avanti la comunicazione utilizzando diversi argomenti, tutti creati durante l'avvio di Ilum. Pertanto, gli utenti Non è necessario gestire questi argomenti manualmente.
MinIO
Ilum utilizza MinIO come livello di archiviazione per i componenti dell'applicazione Spark. Tutti i file (inclusi jar, configurazioni, dati necessari, necessari per il funzionamento dei componenti Spark (driver, esecutori) vengono memorizzati e resi disponibili per il download tramite MinIO.
MinIO implementa l'interfaccia S3, che consente anche di memorizzare i dati di input/output.
Ilum-Livio-proxy
Il proxy Ilum-Livy è la nostra implementazione di Livy Api, che integra il codice spark con i gruppi Ilum in servizi come Jupyter, Zeppelin, Airflow
Ilum Livy-proxy è abilitato in Ilum per impostazione predefinita.
Nel caso in cui si desideri aggiungere o rimuovere Ilum-Livy-proxy, è possibile utilizzare ilum-livy-proxy.enabled helm valore per gestirlo.
Per esempio: --set ilum-livy-proxy.enabled=falso per disabilitarlo.
Per saperne di più su Ilum-Livy-proxy qui
Giove
Jupyter è un sofisticato ambiente di sviluppo Notebook che consente di avere codice, grafici, spiegazioni e altro in un unico documento eseguibile.
Giove è abilitato in Ilum per impostazione predefinita.
Tuttavia, nel caso in cui si desideri controllare se è abilitato o meno, è possibile utilizzare helm value ilum-jupyter.enabled. Ad esempio, è possibile aggiungere
--set ilum-jupyter.enabled=falso al comando di installazione per disabilitarlo.
Tieni presente che Jupyter utilizza Ilum-Livio-proxy per l'integrazione con i Gruppi Ilum. Pertanto, dovresti abilitarlo anche:
--set ilum-livy-proxy.enabled=vero
Se si vuole accedere all'interfaccia utente di Jupyter, è possibile farlo nei seguenti modi:
- utilizzando l'interfaccia utente di Ilum: vai su Moduli > Jupyter
- Configurazione di un ingresso
- Utilizzo del comando port-forward
kubectl port-forward svc/ilum-jupyter 8888:8888
Per saperne di più su Jupyter qui
Apache Zeppelin
Zeppelin è un notebook - sofisticato ambiente di sviluppo che ti consente di avere codice, grafici, spiegazioni e altro in un unico documento eseguibile.
Tieni presente che il notebook Zeppelin non è incluso nel pacchetto ilum per impostazione predefinita. Se si desidera eseguire questo servizio, aggiungere --set ilum-zeppelin.enabled=vero al comando di installazione.
Tenete presente che Zeppelin fa uso di Ilum-Livio-proxy per l'integrazione con i Gruppi Ilum. Pertanto, dovresti abilitarlo anche:
--set ilum-livy-proxy.enabled=vero
Se vuoi accedere all'interfaccia utente di Zeppelin, il modo migliore per farlo è configurare un ingresso o utilizzare il comando port-forward Kubectl Port-Forward SVC/ILUM-Zeppelin 8080:8080
Leggi tutto su Zeppelin qui
Hive Metastore
Hive Metastore is a metadata storage used to store your Spark catalogs (Spark tables, databases, views, and more) in a database instead of runtime memory. You can view these schemas later on the Esplora tabelle pagina.
Per impostazione predefinita, il metastore Hive non è abilitato in Ilum.
To enable the Hive Metastore bundled instance, set the following values in your Helm installation command:
ilum-core:
metastore:
Abilitato: vero
digitare: alveare
ilum-hive-metastore:
Abilitato: vero
Hive Metastore uses Database PostgreSQL to store metadata. You can read about Postgres in Ilum sotto.
Progetto Nessie
Nessie is a transactional catalog for your data. It was inspired by Git and is designed to support a wide range of data-lake tooling. It works best with Apache Iceberg tables.
To learn more about Nessie, visit the Nessie documentation page.
Project Nessie is not enabled in Ilum by default. To enable it, set the following values in your Helm installation command:
ilum-core:
metastore:
Abilitato: vero
digitare: Nessie
Nessie:
Abilitato: vero
Ilum SQL (Kyuubi Gateway)
Ilum SQL non è abilitato in Ilum per impostazione predefinita.
Ilum SQL is the multi-engine SQL gateway built on Apache Kyuubi. It exposes a single JDBC and REST entry point for queries that route to Apache Spark, Trino, DuckDBo Apache Flink based on the engine selected for each query, or chosen by the automatic engine router.
To enable Ilum SQL, add --set ilum-sql.enabled=vero per abilitare l'host di esecuzione SQL e --set ilum-core.sql.enabled=vero to enable the SQL features inside Ilum itself.
Read more about the SQL Editor on the SQL Editor page.
Trino
Nota: Trino is not enabled in Ilum by default. To enable it, add --set trino.enabled=vero to deploy a built-in Trino distribution.
Trino is a distributed SQL query engine well suited to interactive analytics on medium-to-large datasets and for federated queries across multiple data sources. It complements Spark for workloads that benefit from low-latency response times.
Once enabled, Trino is reachable through the Ilum SQL gateway and selectable from the Engine Selector in the SQL Editor. Read more on the SQL Editor page.
DuckDB and DuckLake
DuckDB is enabled by default and provides single-node SQL execution for small-to-medium data, ad-hoc exploration, and DuckLake-managed tables. It runs in-process with ilum-core and is selectable from the Engine Selector in the SQL Editor.
DuckLake is the DuckDB-native catalog, enabled by default, with table data stored in MinIO (or any configured S3-compatible backend). No additional Helm values are required to use DuckDB or DuckLake.
Apache Flink
Apache Flink support is available for Azienda deployments as a Beta feature. Flink is exposed through the Kyuubi SQL gateway for low-latency stream processing. Contact Ilum for enablement details.
n8n
Nota: n8n non è abilitato in Ilum per impostazione predefinita. Per abilitarlo, aggiungere --set ilum-n8n.enabled=vero per abilitare una distribuzione N8N integrata.
n8n è una piattaforma di automazione del flusso di lavoro fair-code con funzionalità di intelligenza artificiale native.
Maggiori informazioni a riguardo leggi il Pagina n8n.
Flusso d'aria Apache
Apache Airflow is a powerful platform for orchestrating and managing data workflows. To read more about Airflow in Ilum, visit the Airflow documentation page.
Airflow is not enabled in the Ilum package by default.
To deploy Airflow, add --set airflow.enabled=vero al comando di installazione.
Once enabled, Airflow will appear in the Ilum UI under the Moduli section.
Airflow can leverage Ilum’s Livy proxy to easily create jobs within Ilum. For more details, see the Livy proxy section above.
Marquez
Marquez is an open-source metadata management tool that focuses on capturing, aggregating, and visualizing the lineage of data assets within an organization’s data ecosystem. It tracks how datasets are produced and consumed by different jobs and provides a central view of these dependencies.
Si prega di notare che Marquez non è incluso nel pacchetto Ilum per impostazione predefinita.
Se si desidera eseguire questo servizio,
Aggiungere --set global.lineage.enabled=vero al comando di installazione.
Tenete conto del fatto che Marquez si avvale di Database PostgreSQL per memorizzare i metadati. Puoi leggere a riguardo sotto.
Additionally, if you wish to use Marquez’s web client instead of Ilum’s UI, enable the default web client with
--set ilum-marquez.web.enabled=vero e impostare uno dei metodi di accesso:
- Utilizzare il comando port-forward
kubectl port-forward svc/ilum-marquez-web 9444:9444 - Configurare un ingresso
Leggi tutto su Marquez e Ilum Lineage qui
OpenMetadata
OpenMetadata is an open-source data catalog and governance platform. In Ilum it serves as the catalog of record: tables, schemas, column-level lineage, classification tags, glossary terms, domains, and data products are all populated through OpenLineage events and ingestion pipelines. It complements Marquez, which remains a lightweight lineage-event debugging surface.
OpenMetadata is opt-in and disabled by default. A plain installation brings up zero OpenMetadata resources. Enabling the full catalog stack requires four flags:
helm install ilum ilum/ilum \
--mettere openmetadata.enabled=vero \
--mettere openmetadata-dependencies.enabled=vero \
--mettere openmetadataBootstrap.enabled=vero \
--mettere ilum-core.job.openLineage.openmetadata.enabled=vero
openmetadata.enabled deploys the OpenMetadata server (a small Ilum fork of the 1.12.5 image
that fixes OpenLineage auto-create reliability). openmetadata-dependencies.enabled brings up its
backing OpenSearch e PostgreSQL. openmetadataBootstrap.enabled runs the post-install
Job that registers the Hive, Delta Lake, MinIO, Superset, and OpenLineage services and seeds
governance metadata. ilum-core.job.openLineage.openmetadata.enabled adds the Spark-to-OpenMetadata
OpenLineage transport leg so engine lineage reaches the catalog.
Take into account that OpenMetadata makes use of a Database PostgreSQL and an OpenSearch
index; both are provisioned by openmetadata-dependencies. When cookie-based UI auth is enabled,
access to the embedded OpenMetadata view is gated by the access_openmetadata Nginx map.
Read more about OpenMetadata in Ilum qui.
Kestra
Kestra è un open source Piattaforma di orchestrazione dei dati progettata per l'orchestrazione e l'automazione dei dati pipeline e flussi di lavoro aziendali. Puoi leggere a riguardo qui.
Kestra non è abilitato in Ilum per impostazione predefinita. Per abilitarlo, aggiungere --set kestra.enabled=vero al comando di installazione.
Kestra utilizza Database PostgreSQL per memorizzare i dati relativi ai lavori e alle attività e Minio for general file storage.
Mage
Mage is an open-source data engineering platform that simplifies the process of building, deploying, and maintaining data pipelines. It provides a user-friendly interface for creating data workflows, integrating with various data sources, and managing data transformations.
To read about Mage next to Ilum, visit the Pagina della documentazione.
Mage is not enabled in Ilum by default. To enable it, add --set mageai.enabled=true al comando di installazione.
Ilum deploys Mage OSS, which is the open-source version of Mage, and does not include the commercial features available in Mage Pro (Cloud).
NiFi
Apache NiFi is a software project for building data processing pipelines. It provides a user interface for creating, managing, and deploying data processing pipelines.
To read about NiFi next to Ilum, visit the Pagina della documentazione.
NiFi is not enabled in Ilum by default. To enable it, add --set nifi.enabled=true al comando di installazione.
Streamlit
Streamlit is a library for creating beautiful, performant, and scalable data apps in Python. It is used to build custom data apps accessible from the Ilum UI.
To read about Streamlit next to Ilum, visit the Pagina della documentazione.
Streamlit is not enabled in Ilum by default.
To enable it, add --set streamlit.enabled=true al comando di installazione.
Additionally, can provide a docker image with your streamlit application running in it. To see how to do it, visit our Pagina della documentazione.
Cubo Prometeo Pila
Kube Prometheus Stack include Prometheus, Grafana e altri strumenti per il monitoraggio dell'infrastruttura dati
Tieni presente che Kube Prometheus Stack non è incluso nel pacchetto ilum per impostazione predefinita. Se si desidera eseguire questo servizio, aggiungere --set kube-prometheus-stack.enabled=true al comando di installazione.
Se si sta aggiornando una carta Ilum Helm esistente che in precedenza lo faceva non se lo stack Kube Prometheus è abilitato, è necessario installare le definizioni delle risorse personalizzate (CRD) Prometheus necessarie prima di procedere con l'aggiornamento. A tale scopo, eseguire i comandi seguenti:
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
Se si desidera accedere all'interfaccia utente di Prometheus, il modo migliore per farlo è configurare un ingresso o utilizzare il comando port-forward Kubectl Port-Forward SVC/Prometheus 9090:9090
Se si desidera accedere all'interfaccia utente di Grafana, il modo migliore per farlo consiste nel configurare un ingresso o nell'utilizzare il comando port-forward kubectl port-forward svc/ilum-grafana 8080:80
Loki e Promtail
Loki viene utilizzato per raccogliere e gestire i registri dell'infrastruttura dati. Promtail è usato come agente che spinge i registri in Loki
Si prega di essere consapevoli che Loki non è abilitato in Ilum per impostazione predefinita. Se si desidera eseguire questo servizio, aggiungere --set global.logAggregation.loki.enabled=true al comando di installazione.
Promtail anche non è abilitato in Ilum per impostazione predefinita. Per abilitarlo aggiungere --set global.logAggreagtion.promtail.enabled=true
al comando di installazione
Se si desidera accedere a Loki ed eseguire le query Loki, è possibile configurare un ingresso o utilizzare il comando port-forward kubectl port-forward svc/ilum-loki-read 3100:3100 per le query di lettura e kubectl port-forward svc/ilum-loki-write 3100:3100 per le query di scrittura. È inoltre possibile utilizzare
servizio ilum-loki-gateway Per collegare Grafana a Loki
Production Architecture Overview
Recommendations on which optionally deployed components to place in which namespace, whether in the one belonging to the Ilum release or in separate, dedicated ones.
┌─────────────────────────┐ ┌────────────────────────────┐
│ ILUM │ │ Dependencies │
│ components │ │ separated │
│ namespace │ │ namespaces │
├─────────────────────────┤ ├────────────────────────────┤
│ • Ilum Core ** │ │ • PostgreSQL ** │
│ • Ilum UI ** │ │ • MongoDB (legacy) │
│ • Ilum API ** │ │ • Kafka ** │
│ • Ilum Livy-Proxy * │ │ • MinIO * │
│ • Ilum Jupyter * │ │ • Kube-Prometheus-Stack * │
│ • Ilum Zeppelin │ │ • Loki & Promtail * │
│ • Ilum Hive Metastore * │ └────────────────────────────┘
│ • Ilum Kyuubi * │
│ • Trino │
│ • Marquez * │
│ • Unity Catalog │
│ • Nessie │
│ • Airflow │
│ • MLflow │
│ • LangFuse │
│ • Superset │
│ • Streamlit │
│ • Gitea * │
│ • N8N │
│ • Kestra │
│ • Mage │
│ • OpenLDAP │
└─────────────────────────┘
** Mandatory components for production release
* Recommended components for production release
Network Communication
- Inter-namespace Communication: Configured via Kubernetes Services and NetworkPolicies
- Service Discovery: DNS-based service resolution
- Sicurezza: TLS encryption for all inter-service communication
High Availability Configuration
For production deployments, critical services should run with multiple replicas to eliminate single points of failure. The following table shows recommended configurations:
| Component | Minimum Replicas | Recommended | Helm Value | Notes |
|---|---|---|---|---|
| ilum-core | 2 | 3 | ilum-core.replicaCount: 3 | Stateless; requires Kafka communication mode for HA |
| ilum-api | 2 | 2 | ilum-api.replicaCount: 2 | Stateless module-management microservice; cluster-scoped RBAC |
| PostgreSQL | 2 | 3 | postgresql.replicaCount: 3 | Primary metadata store; primary + standby with streaming replication |
| MongoDB (legacy) | 3 | 3 | mongodb.replicaCount: 3 | Only for legacy deployments; replica set with automatic failover |
| Apache Kafka | 3 | 3 | kafka.replicaCount: 3 | Required for HA communication; minimum 3 for quorum |
| MinIO | 4 | 4 | minio.replicas: 4 | Erasure coding requires minimum 4 nodes |
| Hive Metastore | 2 | 2 | ilum-hive-metastore.replicaCount: 2 | Stateless; connects to shared PostgreSQL backend |
| Kyuubi (ilum-sql) | 2 | 2 | ilum-sql.replicaCount: 2 | SQL gateway; stateless |
Example Helm values for a fully HA deployment:
ilum-core:
replicaCount: 3
mongodb:
replicaCount: 3
Kafka:
replicaCount: 3
minio:
Repliche: 4
postgresql:
replicaCount: 3
High Availability for ilum-core requires Apache Kafka as the communication type. The default gRPC communication does not support HA. Set ilum-core.communication.type: kafka to enable HA mode.
Failure Domains & Resilience
Ilum's architecture is designed to eliminate single points of failure through several mechanisms:
Stateless Core Design
Le ilum-core component is fully stateless. It persists no local data and can recover its entire state from PostgreSQL (or MongoDB on legacy deployments) and Kafka after a crash or restart. This means any ilum-core replica can handle any request, enabling seamless horizontal scaling and zero-downtime rolling updates.
Le ilum-api module-management microservice is also stateless. It can be scaled horizontally and tolerates pod restarts without losing in-flight Helm operations, thanks to a long termination grace period.
Pod Anti-Affinity
Configure Kubernetes pod anti-affinity rules to ensure replicas of critical services are spread across different nodes and availability zones:
ilum-core:
affinità:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- chiave: app
operatore: In
valori:
- ilum-nucleo
topologyKey: kubernetes.io/hostname
Namespace-Level Isolation
Deploying dependencies (MongoDB, Kafka, MinIO, PostgreSQL) in separate namespaces provides blast radius containment. A failure in one component's namespace does not cascade to others. See Namespace Separation Strategy for details.
Leader Election
For components that require coordination (such as the Spark History Server or scheduled maintenance tasks), Kubernetes-native leader election ensures that exactly one instance acts as the primary while others stand by for automatic failover.
Dynamic Resource Scaling
Ilum supports multiple layers of dynamic scaling to match compute resources with workload demands.
Spark Dynamic Allocation
Enable Spark's built-in dynamic allocation to automatically adjust the number of executors based on workload:
# Cluster-level Spark defaults in ilum
spark.dynamicAllocation.enabled: "vero"
spark.dynamicAllocation.minExecutors: "1"
spark.dynamicAllocation.maxExecutors: "20"
spark.dynamicAllocation.executorIdleTimeout: "60s"
spark.dynamicAllocation.schedulerBacklogTimeout: "5s"
With dynamic allocation, idle executors are released back to the cluster, freeing resources for other jobs. New executors are added automatically when tasks queue up.
Kubernetes Horizontal Pod Autoscaler (HPA)
For always-on services like Trino coordinators or ilum-core, use Kubernetes HPA to scale based on CPU or memory utilization:
apiVersion: autoscaling/v2
gentile: HorizontalPodAutoscaler
Metadati:
nome: ilum-nucleo-hpa
Spec:
scaleTargetRef:
apiVersion: applicazioni/v1
gentile: Spiegamento
nome: ilum-nucleo
minReplicas: 2
maxReplicas: 5
Metriche:
- digitare: Risorsa
resource:
nome: cpu
bersaglio:
digitare: Utilization
averageUtilization: 70
Cluster Autoscaler Integration
Ilum works seamlessly with Kubernetes cluster autoscalers (available on GKE, EKS, AKS, and via Cluster API). When Spark jobs request more executor pods than the current cluster can accommodate, the cluster autoscaler provisions additional nodes automatically. When pods are released, nodes are drained and removed.
Combine Spark dynamic allocation with cluster autoscaling for full elasticity: Spark scales executors based on workload, and the cluster scales nodes based on pending pods.
Auto-Pause on Idle
Ilum's interactive services (SQL Editor sessions, Jupyter notebooks) can be configured to automatically pause after a period of inactivity, releasing compute resources:
ilum-core:
SQL:
duckdb:
idleTimeout: 1h
job:
retain:
hours: 24
Namespace Separation Strategy
Recommended Namespace Structure
# Core Ilum Components placed in ilum namespace
ilum: # Main application services (ilum-core, ilum-ui, ilum-api)
# Critical Dependencies (Separate Namespaces)
ilum-postgresql: # PostgreSQL databases (primary metadata store)
ilum-mongodb: # MongoDB cluster (legacy metadata store)
ilum-kafka: # Kafka brokers (required for ilum-core HA)
ilum-minio: # Object storage cluster
ilum-kps: # Kube-prometheus-stack monitoring resources
ilum-logs: # Loki & Promtail log aggregation resources
Namespace Creation
Create all required namespaces before deployment:
⚠️ Warning: Create namespaces only for components you plan to deploy
# Ilum namespace
kubectl create spazio dei nomi ilum
# Dependency namespaces
kubectl create namespace ilum-mongodb
kubectl create namespace ilum-kafka
kubectl create namespace ilum-minio
kubectl create namespace ilum-postgresql
kubectl create namespace ilum-kps
kubectl create namespace ilum-logs
Chiavi di sicurezza
Questa applicazione utilizza token Web JSON (JWT) a scopo di autenticazione. Per impostazione predefinita, l'applicazione utilizza una chiave RSA , che viene generata in modo casuale in fase di esecuzione, per firmare questi token.
Nella sua configurazione standard, l'applicazione crea una nuova coppia di chiavi RSA ogni volta che viene avviata. Questo approccio Semplifica lo sviluppo e il test locale gestendo automaticamente il processo di generazione delle chiavi. Tuttavia, deve essere ha sottolineato che questo approccio non è adatto a un ambiente di produzione.
Il problema principale con l'utilizzo di chiavi generate casualmente in un ambiente di produzione è la mancanza di persistenza. Ogni volta l'applicazione si riavvia, genera una nuova coppia di chiavi RSA, invalidando tutti i token emessi in precedenza. Ciò potrebbe portare a Una disconnessione improvvisa e imprevista per tutti gli utenti, che interrompe l'esperienza utente e potenzialmente porta alla perdita di dati.
Generare la chiave privata
Per un ambiente di produzione, una coppia di chiavi stabile e sicura deve essere generata manualmente e utilizzata in modo coerente. Questo Garantisce che i token rimangano validi in più riavvii dell'applicazione, fornendo così un'esperienza utente coerente.
È possibile generare manualmente una coppia di chiavi RSA utilizzando strumenti come OpenSSL. Un comando comune per generare una chiave privata RSA a 2048 bit è il seguente:
openssl genpkey -algoritmo RSA \
-pkeyopt rsa_keygen_bits:2048 \
-pkeyopt rsa_keygen_pubexp:65537 | \
openssl pkcs8 -topk8 -nocrypt -outform pem > chiave-privata.p8
Il contenuto della chiave privata dovrebbe essere simile al seguente:
-----INIZIA LA CHIAVE PRIVATA-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCsRnE83rm6BJya
nTyzVqX0SG+D4zBjkyWsOmGG+CoDdgQ6Z8AaocmnjP1SbRykQsQSMf6SeW+fdpH+
ccmzuHe7pZIa2o2Mg8xbk/UszJDaPztwoQbUt/2gHi/rZP8cIVkquzhnN/yxrMls
...
-----TERMINA LA CHIAVE PRIVATA-----
Per utilizzare la chiave privata come impostazione ilum-core.security.jwt.privateKey, rimuovere l'intestazione e il piè di pagina dalla chiave.
Generare la chiave pubblica
Per generare la chiave pubblica corrispondente, utilizzare:
openssl pkey -pubout -inform pem -outform pem -in private-key.p8 -out public-key.spki
Il contenuto della chiave pubblica dovrebbe essere simile al seguente:
-----INIZIA LA CHIAVE PUBBLICA-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArEZxPN65ugScmp08s1al
9Ehvg+MwY5MlrDphhvgqA3YEOmfAGqHJp4z9Um0cpELEEjH+knlvn3aR/nHJs7h3
u6WSGtqNjIPMW5P1LMyQ2j87cKEG1Lf9oB4v62T/HCFZKrs4Zzf8sazJbMN3E/mJ
...
-----FINE CHIAVE PUBBLICA-----
Per utilizzare la chiave pubblica come impostazione ilum-core.security.jwt.publicKey, rimuovere l'intestazione e il piè di pagina dalla chiave.
Authentication Methods
Ilum come provider di identità
Ilum può essere distribuito come provider di identità. Con questa funzione, puoi gestire gli utenti esclusivamente all'interno di Ilum e autenticarli su altri microservizi come Airflow, Superset, Grafana, Givea e Minio.
Per abilitare l'Identity Provider di Ilum, aggiungi i seguenti flag:
--set global.security.hydra.enabled=vero e --set global.security.hydra.uiUrl=.
Per ulteriori informazioni sulla configurazione del provider di identità, visitare il sito Web questa pagina
OpenLDAP
OpenLDAP is the open-source LDAP server. It is not enabled in Ilum by default. To enable it add --set openldap.enabled=true to your
installation command.
If you want to access OpenLDAP you can use port-forward command kubectl port-forward svc/ilum-openldap 1389:389.
Ilum-Core is preconfigured to connect to OpenLDAP server deployed by Ilum. However you must switch security type to LDAP by adding
--set ilum-core.security.type=ldap al comando di installazione.
To learn more about OpenLDAP and LDAP in Ilum, visit the LDAP documentation page qui.
Dependency Deployment
Nota: The components described below are required or recommended dependencies for Ilum. You can choose to deploy them using the provided instructions or integrate with your own existing managed services.
MongoDB
Deploy MongoDB in a dedicated namespace with high availability
1. Add Bitnami Repository
helm repo Aggiungere bitnami https://charts.bitnami.com/bitnami
Aggiornamento del repo Helm
2. Create MongoDB Values File
# mongodb-values.yaml
immagine:
registry: docker.io
deposito: ilum/mongodb
cartellino: 6.0.5
fullnameOverride: "ilum-mongodb"
architecture: "replicaset"
Auth:
Abilitato: falso
volumePermissions:
Abilitato: vero
3. Deploy MongoDB, Ilum by default uses chart in ^13.x version but should also work with newer versions
helm install mongodb bitnami/mongodb \
--namespace ilum-mongodb \
--version 13.18.5 \
--values mongodb-values.yaml
For more information about mongo deployment refer to mongodb chart details
4. Ilum AIO chart configuration values that need to be changed
# Disable bundled mongo
mongodb:
Abilitato: falso
ilum-core:
mongo:
Uri: "mongodb://ilum-mongodb-0.ilum-mongodb-headless.ilum-mongodb:27017,ilum-mongodb-1.ilum-mongodb-headless.ilum-mongodb:27017/ilum?replicaSet=rs0"
# or use your mongo instance uri
Apache Kafka
Deploy Kafka cluster in a dedicated namespace
1. Add Bitnami Repository
helm repo Aggiungere bitnami https://charts.bitnami.com/bitnami
Aggiornamento del repo Helm
2. Create Kafka Values File
# kafka-values.yaml
extraConfig: |
auto.create.topics.enable=false
message.max.bytes=20000000
fullnameOverride: "ilum-kafka"
listeners:
cliente:
protocollo: PLAINTEXT
3. Deploy Kafka, Ilum by default uses chart in ^25.x version but should also work with newer versions
helm install kafka bitnami/kafka \
--namespace ilum-kafka \
--version 25.3.5 \
--values kafka-values.yaml
For more information about kafka deployment refer to kafka chart details
4. Ilum AIO chart configuration values that need to be changed
ilum-core:
communication:
digitare: Kafka
Kafka:
address: "ilum-kafka-controller-0.ilum-kafka-controller-headless.ilum-kafka:9092,ilum-kafka-controller-1.ilum-kafka-controller-headless.ilum-kafka:9092,ilum-kafka-controller-2.ilum-kafka-controller-headless.ilum-kafka:9092"
# or use your kafka instance address
MinIO Deployment
Deploy MinIO cluster for object storage:
1. Add Bitnami Repository
helm repo Aggiungere bitnami https://charts.bitnami.com/bitnami
Aggiornamento del repo Helm
2. Create MinIO Values File
# minio-values.yaml
extraEnvVars: |
- name: MINIO_BROWSER_REDIRECT_URL
value: "http://ilum-minio.ilum-minio:9001/external/minio/"
# Environment variables for hydra
- nome: MINIO_IDENTITY_OPENID_CONFIG_URL
valore: "ILUM_UI_PROTOCOL://ILUM_UI_DOMAIN/external/hydra/.well-known/openid-configuration"
- nome: MINIO_IDENTITY_OPENID_CLIENT_ID
valore: "HYDRA_CLIENT_ID"
- nome: MINIO_IDENTITY_OPENID_CLIENT_SECRET
valore: "HYDRA_CLIENT_SECRET"
- nome: MINIO_IDENTITY_OPENID_REDIRECT_URI
valore: "ILUM_UI_PROTOCOL://ILUM_UI_DOMAIN/external/minio/oauth_callback"
- nome: MINIO_IDENTITY_OPENID_SCOPES
valore: "openid,profile,email"
- nome: MINIO_IDENTITY_OPENID_CLAIM_NAME
valore: "minio_policies"
# end of hydra related environment variables
fullnameOverride: "ilum-minio"
defaultBuckets: "ilum-files, ilum-data, ilum-tables, ilum-mlflow, ilum-kestra"
Auth:
rootUser: ""
rootPassword: ""
persistence:
grandezza: 16Gi
3. Deploy MinIO, Ilum by default uses chart in ^15.x version but should also work with newer versions
helm install minio bitnami/minio \
--namespace ilum-minio \
--version 15.0.7 \
--values minio-values.yaml
For more information about minio deployment refer to minio chart details
4. Ilum AIO chart configuration values that need to be changed
# Disable bundled minio
minio:
Abilitato: falso
ilum-core:
minio:
statusProbe:
baseUrl: "http://ilum-minio.ilum-minio:9000"
kubernetes:
storage:
digitare: S3
S3:
ospite: "ilum-minio.ilum-minio"
porto: 9000
accessKey: ""
secretKey: ""
# If hive metastore is deployed with minio as the storage
ilum-hive-metastore:
storage:
metastore:
warehouse: "s3a://ilum-data/"
digitare: "S3"
S3:
ospite: "ilum-minio.ilum-minio"
porto: 9000
accessKey: ""
secretKey: ""
# If trino is deployed with minio as the storage
Trino:
Cataloghi:
ilum-delta: |
connector.name=delta_lake
delta.metastore.store-table-metadata=true
delta.register-table-procedure.enabled=true
hive.metastore.uri=thrift://ilum-hive-metastore:9083
fs.native-s3.enabled=true
s3.endpoint=http://ilum-minio.ilum-minio:9000
s3.region=us-east-1
s3.path-style-access=true
s3.aws-access-key=
s3.aws-secret-key=
# If Loki is deployed with s3 as the storage
loki:
loki:
auth_enabled: falso
storage:
bucketNames:
chunks: ilum-file
ruler: ilum-file
Admin: ilum-file
digitare: S3
S3:
Endpoint: http (in inglese)://ilum-minio.ilum-minio:9000
region: us-A est-1
secretAccessKey: -S3-segreto-chiave>
accessKeyId: -S3-accesso-chiave>
s3ForcePathStyle: vero
insecure: vero
# If minio is deployed
minioExtensions:
ospite: http (in inglese)://ilum-minio.ilum-minio:9000
# If airflow is deployed with minio as the logs storage
airflow:
extraEnv: |
- name: AIRFLOW__API__AUTH_BACKENDS
value: "airflow.api.auth.backend.default"
- name: MINIO_USERNAME
value: ""
- name: MINIO_PASSWORD
value: ""
- name: MINIO_ENDPOINT
value: "http://ilum-minio.ilum-minio:9000"
# If mlflow is deployed
Flusso ML:
externalS3:
ospite: "ilum-minio.ilum-minio"
# If kestra is deployed with minio as the storage
kestra:
configuration:
kestra:
storage:
digitare: minio
minio:
Endpoint: ilum-minio.ilum-minio
porto: 9000
secure: falso
accessKey: -S3-accesso-chiave>
secretKey: -S3-segreto-chiave>
region: "predefinito"
bucket: ilum-kestra
PostgreSQL Deployment
Deploy PostgreSQL for metadata storage:
1. Add Bitnami Repository
helm repo Aggiungere bitnami https://charts.bitnami.com/bitnami
Aggiornamento del repo Helm
2. Create PostgreSQL Values File
# postgresql-values.yaml
fullnameOverride: ilum-postgresql
Auth:
postgresPassword: "CAMBIAMIPER favore"
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
3. Deploy PostgreSQL, Ilum by default uses chart in ^13.x version but should also work with newer versions
helm install postgresql bitnami/postgresql \
--namespace ilum-postgresql \
--version 13.4.4 \
--values postgresql-values.yaml
For more information about postgresql deployment refer to postgresql chart details
4. Ilum AIO chart configuration values that need to be changed
# Disable bundled PostgreSQL
postgresql:
Abilitato: falso
#Postgres extensions for databases auto-creation
postgresExtensions:
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
databasesToCreate: marquez,airflow,metastore,Flusso ML,mlflow_auth,superset,Gitea,n8n,idra,kestra
Auth:
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
# Configure hydra database if hydra is enabled in ilum-core deployment
ilum-core:
idra:
dns: postgres://ilum:CHANGEMEPLEASE@ilum-postgresql.ilum-postgresql:5432/hydra?sslmode=disable
# If ilum-hive-metastore is deployed
ilum-hive-metastore:
postgresql:
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
database: metastore
Auth:
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
# If lineage is enabled
ilum-marquez:
marquez:
db:
immagine: "Bitnami/PostgreSQL:16"
ospite: "ilum-postgresql-0.ilum-postgresql-hl.ilum-postgresql"
porto: 5432
nome: marquez
utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
# If gitea is deployed
Gitea:
initPreScript: "while ! nc -z ilum-postgresql-hl.ilum-postgresql 5432 2>/dev/null; do echo 'Waiting for Postgres...'; sleep 5; done; echo 'Postgres is ready!'"
Gitea:
configurazione:
server:
ROOT_URL: http (in inglese)://gitea.example.com/external/gitea
database:
DB_TYPE: postgres
HOST: "ilum-postgresql-hl.ilum-postgresql:5432"
NAME: Gitea
UTENTE: ilum
PASSWD: "CAMBIAMIPER favore"
# If airflow is deployed with postgres as metadata connection
airflow:
dati:
metadataConnection:
utente: postgres
passare: "CAMBIAMIPER favore"
protocollo: postgresql
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
db: airflow
sslmode: disable
# If superset is deployed with postgres as the storage
superset:
supersetNode:
connections:
db_host: "ilum-postgresql-hl.ilum-postgresql"
db_port: "5432"
db_user: ilum
db_pass: "CAMBIAMIPER favore"
db_name: superset
# If mlflow is deployed with postgres as the external database
Flusso ML:
externalDatabase:
dialectDriver: "postgresql"
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
utente: ilum
database: Flusso ML
authDatabase: mlflow_auth
existingSecret: "ilum-postgresql"
existingSecretPasswordKey: "postgres-password"
# If n8n is deployed
n8n:
db:
digitare: postgresdb
externalPostgresql:
ospite: "ilum-postgresql-hl.ilum-postgresql"
nome utente: "ilum"
parola d’ordine: "CAMBIAMIPER favore"
database: "n8n"
# If kestra is deployed
kestra:
configuration:
datasources:
postgres:
URL: "jdbc:postgresql://ilum-postgresql-hl.ilum-postgresql:5432/kestra"
driverClassName: "org.postgresql.Driver"
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
initContainers:
- nome: wait-per-postgres
immagine: "Bitnami/PostgreSQL:16"
command:
- /bin/bash
argomenti:
- -ec
- |
until pg_isready -h ilum-postgresql-hl.ilum-postgresql -p 5432 -U ilum -d kestra; do
echo "Waiting for PostgreSQL server to be ready..."
sleep 2
fatto
echo "Database is ready!"
Kube-Prometheus-Stack Deployment (If you plan to use it)
Deploy Kube-Prometheus-Stack for monitoring purposes:
1. Add Prometheus Community Repository
helm repo Aggiungere prometheus-community https://prometheus-community.github.io/helm-charts
Aggiornamento del repo Helm
2. Create Kube-Prometheus-Stack Values File
# kps-values.yaml
nameOverride: "ilum-kps"
kubeStateMetrics:
Abilitato: falso
nodeExporter:
Abilitato: falso
alertmanager:
Abilitato: falso
grafana:
nameOverride: "ilum-grafana"
grafana.ini:
server:
root_url: "%(protocol)s://%(domain)s:%(http_port)s/external/grafana"
serve_from_sub_path: "vero"
auth.generic_oauth:
Abilitato: falso
nome: Ilum
allow_sign_up: vero
login_attribute_path: userId
email_attribute_name: E-mail
role_attribute_path: contiene(grafana_roles, 'Amministratore') && 'Amministratore' || contiene(grafana_roles, 'Editore') && 'Editore' || contiene(grafana_roles, 'Viewer') && 'Spettatore'
role_attribute_strict: vero
adminPassword: Admin
sidecar:
dashboards:
folderAnnotation: "grafana_folder"
provider:
foldersFromFilesStructure: "vero"
3. Deploy kube-prometheus-stack, Ilum by default uses chart in ^54.x version but should also work with newer versions
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
--namespace ilum-kps \
--version 54.2.2 \
--values kps-values.yaml
For more information about kube-prometheus-stack deployment refer to kps chart details
4. Define prometheus PodMonitors and ServiceMonitors
You can define your own Pod and ServiceMonitors for prometheus. Example PodMonitors defined in Ilum AIO chart you can use
Ilum Pods Monitor
apiVersion: monitoring.coreos.com/v1
gentile: PodMonitor
Metadati:
nome: ilum-pods-monitor
Namespace: ilum-kps
Etichette:
ilum.prometheus: "vero"
Spec:
selettore:
matchLabels:
ilum.prometheus: "vero"
podMetricsEndpoints:
- interval: 5s
porto: http (in inglese)
sentiero: /actuator/prometheus
namespaceSelector:
matchNames:
- ilum
Spark Driver Pods Monitor
apiVersion: monitoring.coreos.com/v1
gentile: PodMonitor
Metadati:
nome: ilum-autista-pods-monitor
Namespace: ilum-kps
Etichette:
ilum.resourceType: autista
Spec:
selettore:
matchLabels:
ilum.resourceType: autista
podMetricsEndpoints:
- interval: 5s
porto: scintilla-Ui
sentiero: /metrics/executors/prometheus/
- interval: 5s
porto: scintilla-Ui
sentiero: /metrics/prometheus/
namespaceSelector:
any: vero
Loki & Promtail Deployment (If you plan to use it)
Deploy Loki & Promtail for logs aggregation:
1. Add Grafana Repository
helm repo Aggiungere grafana https://grafana.github.io/helm-charts
Aggiornamento del repo Helm
2. Create Loki and Promtail Values File
# loki-values.yaml
nameOverride: ilum-loki
monitoraggio:
selfMonitoring:
Abilitato: falso
grafanaAgent:
installOperator: falso
lokiCanary:
Abilitato: falso
test:
Abilitato: falso
loki:
auth_enabled: falso
storage:
bucketNames:
chunks: ilum-file
ruler: ilum-file
Admin: ilum-file
digitare: S3
S3:
Endpoint: http (in inglese)://ilum-minio.ilum-minio:9000
region: us-A est-1
secretAccessKey: -S3-segreto-chiave>
accessKeyId: -S3-accesso-chiave>
s3ForcePathStyle: vero
insecure: vero
compactor:
retention_enabled: vero
deletion_mode: filtro-e-cancellare
shared_store: S3
limits_config:
allow_deletes: vero
# promtail-values.yaml
configurazione:
clients:
- URL: http (in inglese)://ilum-loki-scrivere:3100/loki/api/v1/push
snippets:
pipelineStages:
- match:
selettore: '{ilum_logAggregation!="true"}'
action: goccia
drop_counter_reason: non_ilum_log
extraRelabelConfigs:
- action: per etichetteper mappa
regex: "__meta_kubernetes_pod_label_ilum(.*)"
replacement: "ilum${1}"
- action: per etichetteper mappa
regex: "__meta_kubernetes_pod_label_spark(.*)"
replacement: "spark${1}"
scrapeConfigs: |
- job_name: kubernetes-pods
pipeline_stages:
{{- toYaml .Values.config.snippets.pipelineStages | nindent 4 }}
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- ilum
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_controller_name
regex: ([0-9a-z-.]+?)(-[0-9a-f]{8,10})?
action: replace
target_label: __tmp_controller_name
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_name
- __meta_kubernetes_pod_label_app
- __tmp_controller_name
- __meta_kubernetes_pod_name
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: app
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_instance
- __meta_kubernetes_pod_label_instance
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: instance
- source_labels:
- __meta_kubernetes_pod_label_app_kubernetes_io_component
- __meta_kubernetes_pod_label_component
regex: ^;*([^;]+)(;.*)?$
action: replace
target_label: component
{{- if .Values.config.snippets.addScrapeJobLabel }}
- replacement: kubernetes-pods
target_label: scrape_job
{{- end }}
{{- toYaml .Values.config.snippets.common | nindent 4 }}
{{- with .Values.config.snippets.extraRelabelConfigs }}
{{- toYaml . | nindent 4 }}
{{- end }}
3. Deploy Loki, Ilum by default uses chart in 3.5.0 version but should also work with newer versions
helm install loki grafana/loki \
--namespace ilum-logs \
--version 3.5.0 \
--values loki-values.yaml
For more information about loki deployment refer to loki chart details
4. Deploy Promtail, Ilum by default uses chart in ^6.15.x version but should also work with newer versions
helm install promtail grafana/promtail \
--namespace ilum-logs \
--version 6.15.5 \
--values promtail-values.yaml
For more information about promtail deployment refer to promtail chart details
5. Ilum AIO chart configuration values that need to be changed
globale:
logAggregation:
Abilitato: vero
loki:
Abilitato: falso
URL: http (in inglese)://ilum-loki-gateway.ilum-logs
promtail:
Abilitato: falso
Pre-configured Stack Examples
Nota: In those examples security configuration has been ignored, so those deployments stick to Ilum internal security mechanism, if you want to know how to use other security methods refer to LDAP o OAUTH2
Option 1: Minimal Production Stack
Suitable for deployments with basic requirements. Extra enabled modules:
- ilum-sql
- ilum-hive-metastore
- ilum-marquez (lineage)
Minimal needed values file taking into account the components deployment described above. For more detailed configuration you can examine dedicated charts, for example ilum-core
# minimal-production-values.yaml
globale:
lineage:
Abilitato: vero
ilum-core:
sicurezza:
jwt:
privateKey: Key generated as described in Security-keys section
publicKey: Key generated as described in Security-keys section
SQL:
Abilitato: vero
metastore:
Abilitato: vero
digitare: alveare
mongo:
Uri: "mongodb://ilum-mongodb-0.ilum-mongodb-headless.ilum-mongodb:27017,ilum-mongodb-1.ilum-mongodb-headless.ilum-mongodb:27017/ilum?replicaSet=rs0"
communication:
digitare: Kafka
Kafka:
address: "ilum-kafka-controller-0.ilum-kafka-controller-headless.ilum-kafka:9092,ilum-kafka-controller-1.ilum-kafka-controller-headless.ilum-kafka:9092,ilum-kafka-controller-2.ilum-kafka-controller-headless.ilum-kafka:9092"
minio:
statusProbe:
baseUrl: "http://ilum-minio.ilum-minio:9000"
kubernetes:
storage:
digitare: S3
S3:
ospite: "ilum-minio.ilum-minio"
porto: 9000
accessKey: ""
secretKey: ""
Gitea:
initPreScript: "while ! nc -z ilum-postgresql-hl.ilum-postgresql 5432 2>/dev/null; do echo 'Waiting for Postgres...'; sleep 5; done; echo 'Postgres is ready!'"
Gitea:
configurazione:
server:
ROOT_URL: http (in inglese)://gitea.example.com/external/gitea
database:
DB_TYPE: postgres
HOST: "ilum-postgresql-hl.ilum-postgresql:5432"
NAME: Gitea
UTENTE: ilum
PASSWD: "CAMBIAMIPER favore"
ilum-marquez:
marquez:
db:
ospite: "ilum-postgresql-0.ilum-postgresql-hl.ilum-postgresql"
# Disable bundled dependencies
mongodb:
Abilitato: falso
Kafka:
Abilitato: falso
minio:
Abilitato: falso
postgresql:
Abilitato: falso
# Above-default modules
ilum-sql:
Abilitato: vero
ilum-hive-metastore:
Abilitato: vero
storage:
metastore:
warehouse: "s3a://ilum-data/"
digitare: "S3"
S3:
ospite: "ilum-minio.ilum-minio"
porto: 9000
accessKey: ""
secretKey: ""
postgresql:
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
database: metastore
Auth:
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
# Ilum add-ons
postgresExtensions:
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
databasesToCreate: marquez,airflow,metastore,Flusso ML,mlflow_auth,superset,Gitea,n8n,idra,kestra
Auth:
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
minioExtensions:
ospite: http (in inglese)://ilum-minio.ilum-minio:9000
Option 2: Enterprise Production Stack
Comprehensive setup with monitoring, logging aggregation, and more optional modules. Extra enabled modules:
- ilum-sql
- ilum-hive-metastore
- ilum-marquez (lineage)
- superset
- Flusso ML
- kube-prometheus-stack
- Loki & Promtail (log aggregation)
Minimal needed values file taking into account the components deployment described above. For more detailed configuration you can examine dedicated charts, for example ilum-core
# enterprise-production-values.yaml
globale:
lineage:
Abilitato: vero
logAggregation:
Abilitato: vero
loki:
Abilitato: falso
URL: http (in inglese)://ilum-loki-gateway.ilum-logs
promtail:
Abilitato: falso
ilum-core:
sicurezza:
jwt:
privateKey: Key generated as described in Security-keys section
publicKey: Key generated as described in Security-keys section
SQL:
Abilitato: vero
metastore:
Abilitato: vero
digitare: alveare
mongo:
Uri: "mongodb://ilum-mongodb-0.ilum-mongodb-headless.ilum-mongodb:27017,ilum-mongodb-1.ilum-mongodb-headless.ilum-mongodb:27017/ilum?replicaSet=rs0"
communication:
digitare: Kafka
Kafka:
address: "ilum-kafka-controller-0.ilum-kafka-controller-headless.ilum-kafka:9092,ilum-kafka-controller-1.ilum-kafka-controller-headless.ilum-kafka:9092,ilum-kafka-controller-2.ilum-kafka-controller-headless.ilum-kafka:9092"
minio:
statusProbe:
baseUrl: "http://ilum-minio.ilum-minio:9000"
kubernetes:
storage:
digitare: S3
S3:
ospite: "ilum-minio.ilum-minio"
porto: 9000
accessKey: ""
secretKey: ""
Gitea:
initPreScript: "while ! nc -z ilum-postgresql-hl.ilum-postgresql 5432 2>/dev/null; do echo 'Waiting for Postgres...'; sleep 5; done; echo 'Postgres is ready!'"
Gitea:
configurazione:
server:
ROOT_URL: http (in inglese)://gitea.example.com/external/gitea
database:
DB_TYPE: postgres
HOST: "ilum-postgresql-hl.ilum-postgresql:5432"
NAME: Gitea
UTENTE: ilum
PASSWD: "CAMBIAMIPER favore"
ilum-marquez:
marquez:
db:
ospite: "ilum-postgresql-0.ilum-postgresql-hl.ilum-postgresql"
# Disable bundled dependencies
mongodb:
Abilitato: falso
Kafka:
Abilitato: falso
minio:
Abilitato: falso
postgresql:
Abilitato: falso
# Above-default modules
ilum-sql:
Abilitato: vero
ilum-hive-metastore:
Abilitato: vero
storage:
metastore:
warehouse: "s3a://ilum-data/"
digitare: "S3"
S3:
ospite: "ilum-minio.ilum-minio"
porto: 9000
accessKey: ""
secretKey: ""
postgresql:
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
database: metastore
Auth:
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
# Ilum add-ons
postgresExtensions:
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
databasesToCreate: marquez,metastore,Flusso ML,mlflow_auth,superset,Gitea
Auth:
nome utente: ilum
parola d’ordine: "CAMBIAMIPER favore"
minioExtensions:
ospite: http (in inglese)://ilum-minio.ilum-minio:9000
superset:
Abilitato: vero
supersetNode:
connections:
db_host: "ilum-postgresql-hl.ilum-postgresql"
db_port: "5432"
db_user: ilum
db_pass: "CAMBIAMIPER favore"
db_name: superset
Flusso ML:
Abilitato: vero
externalS3:
ospite: "ilum-minio.ilum-minio"
externalDatabase:
dialectDriver: "postgresql"
ospite: "ilum-postgresql-hl.ilum-postgresql"
porto: 5432
utente: ilum
database: Flusso ML
authDatabase: mlflow_auth
existingSecret: "ilum-postgresql"
existingSecretPasswordKey: "postgres-password"
Helm Values Configuration
Complete Production Values Template
Reference the official Helm chart values at: https://artifacthub.io/packages/helm/ilum/ilum?modal=values
Ilum AIO Installation
Step 1: Verify Dependencies
# Check MongoDB
kubectl get pods -n ilum-mongodb
kubectl logs -f mongodb-0 -n ilum-mongodb
# Check Kafka
kubectl get pods -n ilum-kafka
kubectl logs -f kafka-0 -n ilum-kafka
# Check MinIO
kubectl get pods -n ilum-minio
kubectl logs -f minio-0 -n ilum-minio
# Check PostgreSQL
kubectl get pods -n ilum-postgresql
kubectl logs -f postgresql-primary-0 -n ilum-postgresql
Step 2: Deploy Ilum
Ilum in defragmented deployment needs
ilum-minio segreto
kubectl -n ilum create secret generic ilum-minio \
--from-literal=root-user=<your-s3-access-key> \
--from-literal=root-password=<your-s3-secret-key>
ilum-postgresql segreto
kubectl -n ilum create secret generic ilum-postgresql \
--from-literal=parola d’ordine=CAMBIAMIPER favore \
--from-literal=postgres-password=CAMBIAMIPER favore
Installa Ilum
helm install ilum ilum/ilum \
--namespace ilum \
--values production-values.yaml
# Monitor deployment
kubectl get pods -n ilum -w
Post-Installation Configuration
1. Verify Installation
# Check all pods
kubectl get pods --all-namespaces | grep ilum
# Check services
kubectl get services --all-namespaces | grep ilum
# Check ingress (if enabled)
kubectl get ingress --all-namespaces
2. Access Ilum UI
# Port forward (for testing)
kubectl port-forward svc/ilum-ui 9777:9777 -n ilum
# Or access via ingress
http://ilum.company.com
# Or access via NodePort
kubectl get svc
http://K8S_NODE_ADDRESS:ILUM_UI_NODEPORT
Risoluzione dei problemi
Errori di estrazione delle immagini
Durante l'installazione di Ilum nel cluster, Helm estrarrà le immagini Docker, che possono avere dimensioni fino a 10 GB, a seconda dei moduli aggiuntivi abilitati. Di conseguenza, con una connessione Internet lenta, è possibile che si verifichino errori di timeout dell'estrazione dell'immagine se il tempo di download dell'immagine supera il timeout configurato. Per risolvere questo problema, puoi:
- Estrarre manualmente l'immagine Docker eseguendo:
minikube ssh docker pull image
# per esempio
minikube ssh docker pull ilum/core-6.1.3
- Modifica il timeout di estrazione dell'immagine nelle configurazioni di Kubernetes in questo modo:
minikube start --extra-config=kubelet.runtime-request-timeout=5m
o in questo modo:
minikube start --extra-config=kubelet.image-pull-progress-deadline=5m
Password/credenziali predefinite
Ilum viene fornito con credenziali predefinite per vari moduli per semplificare la configurazione iniziale e il test. Tuttavia, per Distribuzioni di produzioneLo è Fondamentale per modificare queste credenziali predefinite per garantire la sicurezza e impedire l'accesso non autorizzato.
Credenziali predefinite
| Applicazione | Nome utente predefinito | Password predefinita |
|---|---|---|
| Interfaccia utente di Ilum | Admin | Admin |
| Object Storage Console | Admin | admin12345 |
| Flusso d'aria Web Interfaccia utente | Admin | Admin |
| Interfaccia utente Superset | Admin | Admin |
| Interfaccia utente Gitea | ilum | ilum |
| Grafana | Admin | Admin |
Credenziali del database (per uso interno)
| Banca dati | Nome utente predefinito | Password predefinita |
|---|---|---|
| PostgreSQL | postgres | CAMBIAMIPER favore |
| Marquez | postgres | CAMBIAMIPER favore |
| Hive Metastore | postgres | CAMBIAMIPER favore |