Build a functional layer bundle
What you’ll accomplish
Section titled “What you’ll accomplish”After completing this guide, you will have a UDS Bundle that deploys a tailored subset of UDS Core using individual functional layers instead of the full core package. This is useful for resource-constrained environments, edge deployments, or clusters that already provide some platform capabilities.
Prerequisites
Section titled “Prerequisites”- UDS CLI installed
- UDS Registry account created and authenticated locally with a read token
- Access to a Kubernetes cluster
- Familiarity with functional layers and their dependencies
Before you begin
Section titled “Before you begin”UDS Core functional layers are published as individual OCI Zarf packages. Each layer corresponds to a capability (identity, monitoring, logging, etc.) and can be included or excluded from your bundle independently, as long as dependency ordering is maintained.
Layers are published to organization-specific registries and require a Defense Unicorns agreement for access. In the examples below, replace <MY-ORG> with your UDS Registry organization.
-
Decide which layers your environment needs
Review the layer selection criteria to determine which capabilities apply. At minimum, you need
core-base. Add other layers based on your requirements.Key dependency rules:
core-baseis required for all other layers (exceptcore-crds)core-monitoringrequirescore-identity-authorizationcore-crdsis only needed if pre-core infrastructure requires policy exemptions
-
Create your bundle manifest
Define a
uds-bundle.yamlthat lists the layers you need in dependency order. Comment out or remove layers that don’t fit your deployment.uds-bundle.yaml kind: UDSBundlemetadata:name: custom-core-bundledescription: UDS Core deployed with individual functional layersversion: "0.1.0"packages:- name: initrepository: ghcr.io/zarf-dev/packages/initref: x.x.x# Optional - deploy before base if pre-core components need policy exemptions- name: core-crdsrepository: registry.defenseunicorns.com/<MY-ORG>/core-crdsref: x.x.x-upstream# Required - foundation for all other layers- name: core-baserepository: registry.defenseunicorns.com/<MY-ORG>/core-baseref: x.x.x-upstream# Optional - remove if your deployment doesn't require user authentication- name: core-identity-authorizationrepository: registry.defenseunicorns.com/<MY-ORG>/core-identity-authorizationref: x.x.x-upstream# Optional - skip if your cluster already provides a metrics server- name: core-metrics-serverrepository: registry.defenseunicorns.com/<MY-ORG>/core-metrics-serverref: x.x.x-upstream# Optional - remove if runtime threat detection is not needed- name: core-runtime-securityrepository: registry.defenseunicorns.com/<MY-ORG>/core-runtime-securityref: x.x.x-upstream# Optional - remove if log aggregation is not needed- name: core-loggingrepository: registry.defenseunicorns.com/<MY-ORG>/core-loggingref: x.x.x-upstream# Optional - requires core-identity-authorization for Grafana login- name: core-monitoringrepository: registry.defenseunicorns.com/<MY-ORG>/core-monitoringref: x.x.x-upstream# Optional - remove if backup/restore is not needed- name: core-backup-restorerepository: registry.defenseunicorns.com/<MY-ORG>/core-backup-restoreref: x.x.x-upstream -
(Optional) Add overrides for individual layers
You can apply bundle overrides to individual layers the same way you would to the full
corepackage. The component and chart names are the same; only the package name in the bundle changes.uds-bundle.yaml packages:- name: core-loggingrepository: registry.defenseunicorns.com/<MY-ORG>/core-loggingref: x.x.x-upstreamoverrides:loki:loki:values:- path: loki.storage.typevalue: s3 -
Create and deploy your bundle
Terminal window uds create .uds deploy uds-bundle-custom-core-bundle-*.tar.zst
Verification
Section titled “Verification”Confirm all deployed packages are healthy:
uds zarf package listAll listed packages should show a successful deployment status. If any layer is missing or failed, check the deploy logs for dependency or ordering issues.
Troubleshooting
Section titled “Troubleshooting”Problem: Policy violations during deployment
Section titled “Problem: Policy violations during deployment”Symptom: Pods from pre-core infrastructure components fail admission after core-base deploys.
Solution: Deploy the core-crds layer before core-base and create Exemption resources alongside your pre-core components.
Problem: Monitoring dashboards not accessible
Section titled “Problem: Monitoring dashboards not accessible”Symptom: Package CR reconciliation errors for monitoring components that require SSO configuration.
Solution: The core-monitoring layer requires the core-identity-authorization layer for SSO. Add it to your bundle before the monitoring layer.
Related documentation
Section titled “Related documentation”- Functional Layers - Layer architecture, dependencies, and selection criteria
- Bundles - How bundles compose Zarf packages with overrides and variables
- Flavors - Choosing between upstream, registry1, and unicorn image variants
- Production getting-started guide - Pre-core infrastructure provisioning for production environments