Manifest Generation¶
l8k generate resolves a profile against cluster-config.yaml and renders a reviewable deployment bundle. Generation does not require cluster access unless --deploy is also set.
Configuration Resolution¶
Profile settings use this precedence:
- Hardware-derived values and Launch Kit defaults.
- Values persisted in the configuration file.
- Explicit CLI flags.
When generation uses a file-backed config, resolved defaults and CLI overrides are written back to the same file while comments and file permissions are preserved. This makes the reviewed file the input for deploy and validation.
If hardware groups disagree on fabric, or discovery cannot resolve a configured link layer, generation requires --fabric.
Profile Selection¶
Use the profile persisted by discovery, or override it:
l8k generate \
--user-config ./cluster-config.yaml \
--fabric ethernet \
--deployment-type sriov \
--multirail \
--save-deployment-files ./deployment
See Deployment Profiles for the fabric and deployment-type matrix. See Spectrum-X for the Spectrum-X cohort flags and required RA2.3 inputs.
Bundle Layout¶
Launch Kit cleans the selected plugin output directory before every render and writes Network Operator files under:
deployment/
`-- network-operator/
|-- values.yaml
|-- 10-nicclusterpolicy.yaml
|-- 11-nicnodepolicy-<group>.yaml
|-- 20-ippool-<group>.yaml
|-- 30-*.yaml
|-- 40-*.yaml
|-- 50-*.yaml
`-- 60-example-daemonset-<group>.yaml
The exact files depend on the profile:
| Order | Content |
|---|---|
values.yaml |
Network Operator Helm values consumed by deployment phase 0. |
10 |
Cluster-wide NicClusterPolicy. |
11 |
Per-group NicNodePolicy resources where the release/profile uses them. |
20 |
NV-IPAM IPPool resources. |
25 through 40 |
NIC naming/configuration templates and SR-IOV pool or node policies. |
50 through 80 |
Secondary networks, Spectrum-X CIDRPool, DRA, and rail-pool resources. |
40, 60, or 90 example |
Temporary workload consumed by validation, depending on profile. |
Group and namespace suffixes are added when one render produces multiple copies.
Generate Without Discovery¶
Use a known topology preset when cluster access is unavailable:
l8k generate \
--for PowerEdge-XE9680-H200 \
--node-selector "nvidia.com/gpu.product=NVIDIA-H200" \
--fabric ethernet \
--deployment-type sriov \
--save-deployment-files ./deployment
--node-selector is required because a preset has no live worker-node list. See Topology Presets.
Limit The Hardware Cohort¶
# All source groups for one GPU type
l8k generate \
--user-config ./cluster-config.yaml \
--gpu-type NVIDIA-H200 \
--save-deployment-files ./deployment-h200
# An explicit source-group subset
l8k generate \
--user-config ./cluster-config.yaml \
--groups pe-xe9680-h200,ts-sr680a-v3-h200 \
--save-deployment-files ./deployment-stage
--gpu-type is case-insensitive. --groups identifiers are case-sensitive. The flags are mutually exclusive and an empty match fails generation. See Heterogeneous Clusters for the render-scope rules.
Multiple Network Namespaces¶
Render secondary-network CRs and example test DaemonSets into more than one workload namespace:
l8k generate \
--user-config ./cluster-config.yaml \
--network-namespaces default,training,inference \
--save-deployment-files ./deployment
Launch Kit creates an independent secondary-network and example-workload copy per namespace. Cluster-wide and shared resources such as NicClusterPolicy, node policies, IPPool, and CIDRPool are not duplicated.
Spectrum-X resources render into the first configured network namespace.
Custom Workload Manifest¶
Replace the profile's example DaemonSet:
l8k generate \
--user-config ./cluster-config.yaml \
--workload-manifest ./workloads/rdma-test.yaml \
--save-deployment-files ./deployment
Supported workload kinds are Pod, Deployment, DaemonSet, StatefulSet, Job, and ReplicaSet. Launch Kit:
- Sets the selected network namespace.
- Adds a group suffix to the workload name.
- Adds the Multus network annotation.
- Adds network resource requests and limits to the first container.
- Adds required node affinity for the render group.
For example, a two-rail SR-IOV workload receives:
metadata:
annotations:
k8s.v1.cni.cncf.io/networks: sriov-network-rail-0,sriov-network-rail-1
spec:
containers:
- name: rdma-app
resources:
requests:
nvidia.com/sriov_resource_rail_0: "1"
nvidia.com/sriov_resource_rail_1: "1"
limits:
nvidia.com/sriov_resource_rail_0: "1"
nvidia.com/sriov_resource_rail_1: "1"
Review the rendered manifest after patching. l8k deploy skips files with example in the filename, while l8k validate applies them temporarily for connectivity checks.
Generate And Deploy¶
The separate commands provide the clearest review boundary:
l8k generate \
--user-config ./cluster-config.yaml \
--save-deployment-files ./deployment
l8k deploy \
--user-config ./cluster-config.yaml \
--deployment-files ./deployment
For a single invocation:
l8k generate \
--user-config ./cluster-config.yaml \
--save-deployment-files ./deployment \
--deploy \
--kubeconfig "$KUBECONFIG"
Add --dry-run for a server-side preview and --overwrite-existing only after reviewing preflight drift.