Kubernetes Native Orchestrator
Starting with OpenMetadata 1.12, you can run ingestion pipelines directly using native Kubernetes, eliminating the need for Apache Airflow. This is ideal for organizations that:- Already run workloads on Kubernetes and prefer native solutions
- Don’t need the full feature set of Apache Airflow
Orchestration Modes
The Kubernetes orchestrator supports two modes for running ingestion pipelines:Option 1: OMJob Operator (Recommended)
Uses custom Kubernetes CRDs (OMJob and CronOMJob) managed by the OpenMetadata operator.
Advantages:
- Exit Handler Guarantee: Even if the ingestion pod crashes (OOMKilled, node failure, etc.), the operator ensures pipeline status is always reported back to OpenMetadata
- Failure Diagnostics: Automatically collects detailed error context from pod logs and events when pipelines fail
- Pod Lifecycle Monitoring: The operator watches pod events and updates pipeline status in real-time
- Elevated permissions to install Custom Resource Definitions (CRDs)
- The OMJob Operator deployment running in your cluster
Option 2: Native Kubernetes Jobs
Uses standard Kubernetes resources (Job and CronJob) without any custom CRDs.
Advantages:
- No CRD installation required - uses only built-in Kubernetes resources
- Works in environments with restricted permissions
- Simpler setup
- No guaranteed exit handler - if a pod is killed unexpectedly, status updates may not reach OpenMetadata
- No automatic failure diagnostics
Features
Native K8s Integration
Pipelines run as standard Kubernetes Jobs, making them easy to monitor with existing K8s tooling.
Automatic Status Updates
Pipeline status is automatically reported back to OpenMetadata, including success/failure details.
Failure Diagnostics
When pipelines fail, detailed diagnostics are collected from pod logs and events. (OMJob Operator only)
Resource Control
Configure CPU, memory, node selectors, and security contexts for ingestion pods.
Setup Option 1: OMJob Operator (Recommended)
This setup uses custom CRDs for guaranteed exit handler execution and failure diagnostics.Prerequisites
- OpenMetadata deployed on Kubernetes (Helm chart recommended)
- Permissions to install CRDs in your cluster
- Ingestion image accessible from your cluster (
docker.getcollate.io/openmetadata/ingestion-base)
Helm Values Configuration
Required RBAC Permissions
When using the OMJob Operator, additional permissions are needed for the custom resources:Setup Option 2: Native Kubernetes Jobs
This setup uses standard Kubernetes Jobs and CronJobs without any custom CRDs.Prerequisites
- OpenMetadata deployed on Kubernetes (Helm chart recommended)
- RBAC permissions for the OpenMetadata service account to manage Jobs, CronJobs, ConfigMaps, and Secrets
- Ingestion image accessible from your cluster (
docker.getcollate.io/openmetadata/ingestion-base)
Helm Values Configuration
Required RBAC Permissions
Storing Pipeline Logs in S3
By default, OpenMetadata reads the logs of a run from its Kubernetes pod, so the logs are lost when the pod is deleted. This happens, for example, whenttlSecondsAfterFinished expires or when a node is scaled down or replaced. The UI then shows No pods found for this pipeline or unable to retrieve container logs.
To keep the logs, store them in an S3 bucket or in S3-compatible storage such as MinIO. While a pipeline runs, the ingestion sends its logs to the OpenMetadata server. The server writes them to the bucket, and the UI reads them from there.
1. Create a Bucket
Create a bucket used only for pipeline logs. Only the OpenMetadata server needs access to it, because the ingestion pods send their logs through the server.2. Configure the Server
Add the log storage settings to your Helm values withextraEnvs, then run helm upgrade:
Log storage initialized successfully: type=s3. If it doesn’t, look for an error about the bucket in the server log.
3. Enable Log Storage for Each Pipeline
A pipeline sends its logs to the bucket only when itsenableStreamableLogs property is true. The property is false by default and the UI has no setting for it, so set it with the API. Then redeploy the pipeline so that the change reaches Kubernetes:
The
PIPELINE_SERVICE_CLIENT_LOG_ENABLED server setting doesn’t enable log storage for your pipelines. Set enableStreamableLogs on each pipeline as shown above.logs.txt file, in a folder per pipeline and run, so the logs of earlier runs stay in the bucket too. The UI shows the logs of the latest run. Runs that finished before the change are not copied to the bucket.
For validating your setup, viewing pipeline logs, troubleshooting, and migrating from Airflow, see the Operations & Troubleshooting guide.