Astro Private Cloud 2.2This feature was introduced in Astro Private Cloud 2.2. To access this feature, upgrade your Astro Private Cloud installation to 2.2 or later.
Laminar is an enterprise feature. To enable it, contact Astronomer support to request image pull credentials.
global.laminar.enabled to enable both components:
For the full platform install procedure, see Install the data plane. To install KEDA, which worker autoscaling requires, see Configure worker autoscaling. To run without the platform creating RBAC resources, see Bring your own Kubernetes service accounts.
Prerequisites
- APC 2.2 or later on both the control plane and the data plane.
- Deployments in Airflow operator mode.
- Permission to change the data plane’s
values.yamland upgrade the platform release. See Apply a config change.
Enable Laminar
Setglobal.laminar.enabled in the data plane’s values.yaml, then upgrade the release:
Laminar components render only on a data plane or in a unified installation. Setting this value on a split control plane creates nothing.
In a unified installation, set the value in the single
values.yaml. On a split installation, set it in each data plane that runs Deployments you want to hibernate or autoscale.
Configure image pull credentials
Standard APC installation credentials don’t cover the Laminar images, so apply the credentials you requested from Astronomer support in the platform namespace, using the method that matches how your installation pulls platform images.- Private registry
- Laminar image pull secret
If you mirror platform images into your own registry, mirror Laminar then uses
ap-laminar alongside them and pull it the same way as every other platform component:global.privateRegistry.secretName, and you don’t set laminar.imagePullSecrets. The chart ignores that value whenever global.privateRegistry.enabled is true. For the full procedure, including how to create the registry secret, see Install the control plane.ImagePullBackOff and never become ready, leaving hibernation and worker autoscaling unavailable. Check the Pod events:
Configure the database secret
Laminar stores its state in its own database and reads the connection string from a Kubernetes secret with aconnection key.
- Auto-managed
- Customer-managed
This is the default. Each time a Laminar Pod starts, the bootstrapper init container checks for the The bootstrapper then creates and connects to that database rather than one named after the Helm release. Use this when the database name has to outlive the release name, because reinstalling under a different release name otherwise points Laminar at a new, empty database.
<release>-laminar database, creates it if it doesn’t exist, and creates or updates the connection string in a secret named <release>-laminar-backend in the platform namespace.To use your own database name, set laminar.databaseBootstrapper.dbName:Set
dbName when you enable Laminar. Changing it on a running installation switches Laminar to a different database, which the bootstrapper creates empty. The previous database isn’t migrated or deleted.backendSecretName, the bootstrapper init container no longer runs, and Laminar reads only your secret. A name that points at a secret you haven’t created leaves Laminar waiting for a secret nothing creates.
To switch from auto-managed to customer-managed, create your secret first, then set backendSecretName and upgrade. To switch back, remove backendSecretName and upgrade. The bootstrapper runs again and recreates <release>-laminar-backend.
Set resources and replicas
Override the default requests and limits withlaminar.apiServer.resources and laminar.hypervisor.resources.
Edit the data plane’s
values.yaml:
- The Hypervisor always runs with one replica, with no user overrides. High availability for the Hypervisor isn’t supported.
laminar.apiServer.replicasdefaults to2and takes any number. The API Server is stateless, so add replicas when the request volume from KEDA and the operator grows.
Sizing
Astronomer hasn’t published sizing guidance for larger Deployment counts. Until the benchmarks are complete, start from the chart defaults, watch CPU and memory use against the limits, and raise the limits for any component that approaches them. The API Server scales with the number of Deployments and worker queues.Compatibility and limits
Laminar in APC 2.2 supports the following:- Deployments in Airflow operator mode. Laminar doesn’t manage Helm-mode Deployments.
- Both the Celery executor and the Kubernetes executor. Laminar doesn’t change which executor a Deployment runs.
- Mixed data planes. Deployments that Laminar manages and Deployments it doesn’t can run side by side on the same data plane.
- Deployments in Airflow operator mode that run Astro Runtime 3.3.x or earlier.
- Namespace pools are unsupported.
- Installations that run without cluster roles, where
global.clusterRolesisfalse, are unsupported. Both Laminar components need cluster-scoped read and scale access to Airflow custom resources. - Existing Deployments aren’t brought under Laminar’s management until the next time each one is updated.
- Incident detection and automatic healing aren’t available.
Security
Laminar runs entirely in the data plane. Its components communicate only with in-cluster platform components and the Kubernetes API, so Laminar adds no outbound connection to an Astronomer-hosted service and works in an air-gapped installation. When Laminar is enabled, the metadata database secret for every operator-based Airflow Deployment on the data plane is synced into the platform namespace, so Laminar can read it and manage those Deployments. The originals also stay in their Deployment namespaces, so count both copies when you audit where Deployment database credentials exist. Whenglobal.rbac.enabled is true, the chart creates the following for each component:
- A namespaced
RoleandRoleBindingin the platform namespace, grantingget,list, andwatchon secrets. - A
ClusterRoleandClusterRoleBindingfor theairflow.apache.orgAPI group. The Hypervisor reads Airflow resources and patches their scale subresources, along with Kubernetes Deployments, Pods, and KEDA scaled objects. The API Server reads and patches Airflow resources and reads the scheduler scale subresource.
global.networkPolicy.enabled is true, the sub-chart ships an ingress NetworkPolicy for each component. Both accept traffic on port 8000 from Prometheus, Houston, and the data plane internal API only. The API Server additionally accepts traffic from the ingress controller, and, when worker autoscaling is on, from the namespace named in global.keda.namespace.
Monitor Laminar
Both components serve Prometheus metrics at/laminar/metrics on port 8000. When global.laminar.enabled is true, the platform’s Prometheus scrapes them as the laminar-hypervisor and laminar-api-server jobs, and prefixes the Hypervisor’s metrics with hypervisor_. On a split installation, the control plane federates both jobs from each data plane.
Two platform alerts cover Laminar:
Both are critical. To route them, see Platform alerts.
Turn Laminar off
Setglobal.laminar.enabled back to false and upgrade the release. Helm removes both components and everything the sub-chart created for them.
Turning Laminar off doesn’t delete its database. The
<release>-laminar database and the secret holding its connection string stay in place, and Laminar reuses them if you turn it back on. Drop the database yourself after disabling this feature.- Wake any hibernated Deployment. With the Hypervisor gone, nothing evaluates hibernation schedules or overrides, and a Deployment that is scaled to zero stays there.
- Confirm that no Deployment relies on worker autoscaling. Without the API Server, KEDA gets no worker count, and every autoscaling queue drops to its minimum worker count.