Deployment
This page covers deploying the Cluster Readiness Engine (CRE) controller in production: install paths, resource sizing, high availability, RBAC, network policies, health probes, and the cleanup steps that are easy to miss.
Installation methods
CRE supports two install paths. Both pull the same artifacts from the GitHub Container Registry (GHCR).
nvcrectl setup init
Install the CLI first with the installer script (see Install for the full walkthrough):
Then set up the cluster:
setup init runs two phases:
- deps — Kubeflow Trainer (required for
TrainJobworkloads) - helm — the CRE Helm chart: CRDs, controller Deployment, RBAC, metrics Service/ServiceMonitor, and built-in LogProfiles
The Helm chart is pulled from GHCR at the CLI’s own version, so a tagged release needs no version flag. Dev builds (built from main) require --version to name the chart version explicitly:
--image-pull-secret takes a GitHub token; it creates the nvcrectl-pull-secret image pull secret in the cluster-readiness-engine namespace and authenticates the Helm chart pull. Use --skip-phases=deps when Kubeflow Trainer is already installed, and --auto-approve to skip the confirmation prompt in CI.
Check the installation at any time:
Helm chart
For GitOps workflows, install the chart directly. Log in to the GHCR Helm registry first — the chart pull is authenticated:
Then inspect and install, pinning an explicit version:
The controller image is ghcr.io/nvidia/cluster-readiness-engine/manager, tagged with the same release version. Chart and image versions move together — name the same tag everywhere. The Helm path does not install Kubeflow Trainer; install it separately before running TrainJob workloads.
Key chart values:
Resource requirements
The controller runs as a single Deployment. The shipped defaults are:
Size it according to the number of nodes and concurrent workloads in the cluster:
High availability
Leader election is enabled by default (the manager runs with --leader-elect). To run the controller in HA mode, scale the Deployment to two or more replicas:
Only one replica holds the leader lease at a time. Standby replicas take over automatically if the leader fails. No additional configuration is required.
RBAC requirements
The controller’s ClusterRole (cre-manager-role) is scoped to the resource types CRE actually manages — there are no wildcard rules. Review these before deploying to locked-down clusters:
The Workflow dependency system creates supporting resources (ConfigMaps, PVCs, ComputeDomains, TrainingRuntimes) before workloads start, so the role includes create/delete on exactly those types. Inspect the full ClusterRole:
Cluster scope and tenancy model
The controller operates as a cluster-scoped infrastructure service, the same model used by the GPU Operator, Node Problem Detector, and other Kubernetes-native controllers. Burn-in certification is an infrastructure concern that reads cluster-scoped Node objects to evaluate GPU health.
CRE never modifies nodes — it does not taint, cordon, or patch them. It records failed nodes with a reason (HardwareFailureDetected, ThresholdViolation, or WorkloadFailed) in the Certification status, and leaves quarantine and repair to your platform’s own tooling.
For teams that need per-team access control, the chart ships admin, editor, and viewer ClusterRoles for the Certification, Workflow, Job, and GoodputMeasurement CRDs. Bind these to team-specific groups or service accounts using standard Kubernetes RoleBindings scoped to each team’s namespace.
Network policies
The chart does not ship a NetworkPolicy. If your cluster enforces network policies, allow ingress to the metrics port (8443) from your monitoring namespace:
If you want to restrict egress to the Kubernetes API server or gate health probes separately, layer additional NetworkPolicies on top of this example.
Scaling characteristics
The controller uses controller-runtime’s work queue model — each reconciler processes events concurrently. A single replica comfortably handles clusters up to 1,000 nodes and hundreds of concurrent burn-in Jobs. Leader election ensures only one replica reconciles at a time, while standby replicas provide automatic failover.
The controller has no external database, no admission webhook, and no sidecar injection. It depends on Kubeflow Trainer for TrainJob workloads, and nvcrectl setup init installs Kubeflow Trainer by default unless you skip the deps phase. CRD validation is handled through CEL-based validation rules embedded in the CRD schema, which the API server evaluates natively. Operationally, that reduces the stack to the controller Deployment plus the Kubernetes APIs and Trainer CRDs it uses.
Tuning for large clusters (200+ nodes)
CEL evaluation is lightweight per node, pod-to-node lookups use field indexes, and node watches filter for health-relevant changes only (taints, conditions, schedulability), so unrelated node updates do not trigger reconciliation.
Air-gapped and disconnected environments
The controller runs without external network access at runtime. All catalog entries are embedded in the binary at compile time, and the controller makes no outbound API calls — it communicates only with the Kubernetes API server. For air-gapped deployment:
- Mirror the controller image (
ghcr.io/nvidia/cluster-readiness-engine/manager) and the Kubeflow Trainer images to your internal registry - Install the Helm chart with
manager.image.repositorypointing at your internal registry - Pre-load any workload images referenced by catalog entries (NeMo, NCCL tests)
No internet access, external telemetry endpoints, or license servers are required at runtime.
Health checks
The controller exposes two probe endpoints on port 8081, and the chart configures both probes on the Deployment:
Shipped probe configuration:
Upgrades
- Review the release notes for breaking changes.
- Upgrade the Helm release (log in to
ghcr.iofirst, as above): - Verify the rollout:
To roll back:
If you installed with nvcrectl setup init, upgrade by installing the new CLI version and re-running nvcrectl setup init.
Uninstall and cleanup
nvcrectl setup reset
setup reset runs three phases: cr (deletes all CRE custom resource instances while the controller can still process finalizers), helm (removes the CRE Helm release and then explicitly deletes the CRE CRDs), and deps (removes Kubeflow Trainer and its CRDs). Use --skip-phases=deps to keep Kubeflow Trainer.
What setup reset retains — clean these up yourself if you want a pristine cluster:
- The
cluster-readiness-engineandkubeflow-systemnamespaces are not deleted. - The
nvcrectl-pull-secretimage pull secret created bysetup init --image-pull-secretremains in thecluster-readiness-enginenamespace.
helm uninstall leaves the CRDs behind
Helm intentionally never deletes CRDs that live in a chart’s crds/ directory (to avoid accidental data loss), so a manual helm uninstall cluster-readiness-engine leaves all seven cre.nvidia.com CRDs — and every remaining custom resource instance — in the cluster. Delete them explicitly:
Warning: deleting a CRD deletes all instances of that resource cluster-wide, including any Certification results you have not exported. Save reports first with nvcrectl certification report <name> --results-file <path>.
Production security checklist
Use this checklist before going live. Each item addresses a specific risk surface.
Next steps
- Monitoring — Set up Prometheus metrics and alerting.
- Troubleshooting — Diagnose common production issues.
- Install — First-time installation instructions.