Quick Start¶
This walkthrough discovers a cluster, generates SR-IOV Ethernet manifests, deploys them, and validates the result. It assumes l8k is installed and $KUBECONFIG points at the target cluster.
1. Discover¶
l8k discover \
--kubeconfig "$KUBECONFIG" \
--network-operator-release 26.4 \
--save-cluster-config ./cluster-config.yaml
Discovery bootstraps a private NIC Configuration Daemon in nvidia-k8s-launch-kit, creates the CRDs it needs, reads NicDevice state, and tears the namespace down when finished. A pre-installed Network Operator is not required.
See Cluster Discovery for profile precedence, grouping, labels, rail collapsing, preset matching, and bootstrap troubleshooting.
The saved cluster-config.yaml includes:
- The discovered NIC and GPU topology.
- Resolved profile settings.
- Machine and GPU labels used for later group selection.
- Comments copied from the source config so the generated file remains editable.
2. Generate¶
l8k generate \
--user-config ./cluster-config.yaml \
--fabric ethernet \
--deployment-type sriov \
--multirail \
--save-deployment-files ./deployment
Generation writes the Network Operator bundle to deployment/network-operator/. When the config came from a file, l8k writes resolved defaults and explicit CLI overrides back to the same file while preserving comments.
3. Deploy¶
l8k deploy \
--user-config ./cluster-config.yaml \
--deployment-files ./deployment \
--kubeconfig "$KUBECONFIG"
Deploy runs in phases:
- Install or verify the
nvidia/network-operatorHelm chart from the embedded release catalog. - Apply
NicClusterPolicyand wait for readiness. - Apply per-group
NicNodePolicyresources and wait for readiness. - Apply the remaining CRs and verify each one reaches a terminal state.
If networkOperator.imagePullSecrets is configured, create the named Secret
in networkOperator.namespace before deploying. Phase 0 reads compatible
Docker credentials through the Kubernetes API to authenticate the chart
download; the kubeconfig therefore needs get secrets permission in that
namespace.
Preview the server-side apply without persisting resources:
l8k deploy \
--user-config ./cluster-config.yaml \
--deployment-files ./deployment \
--kubeconfig "$KUBECONFIG" \
--dry-run
4. Validate¶
l8k validate \
--user-config ./cluster-config.yaml \
--deployment-files ./deployment \
--kubeconfig "$KUBECONFIG"
Validation is the final acceptance stage of the normal workflow. It checks Helm release metadata, rendered values, component versions, manifest state, preflight drift, and data-plane connectivity. A successful run gives the deployment a green light and writes the supporting HTML report to:
Common Variants¶
Generate and deploy in one step:
l8k generate \
--user-config ./cluster-config.yaml \
--fabric ethernet \
--deployment-type sriov \
--save-deployment-files ./deployment \
--deploy \
--kubeconfig "$KUBECONFIG"
Run in automation mode:
l8k discover --output json 2>/dev/null | jq .
l8k generate --output json 2>/dev/null | jq .
l8k validate --output json 2>/dev/null | jq .
Use a known hardware preset without cluster discovery: