39 lines
2.8 KiB
YAML
39 lines
2.8 KiB
YAML
---
|
|
# KubeVirt + CDI — CONTROLLERS half only (the operators). Phase 5 (WS-VM).
|
|
#
|
|
# CONTROLLERS/CONFIGS SPLIT (F-MON1 / DECISIONS-LOG): the two operator release manifests below install
|
|
# the KubeVirt + CDI CONTROLLERS, which REGISTER the `kubevirt.io` (KubeVirt) and `cdi.kubevirt.io`
|
|
# (CDI) CRDs. The tuning custom resources that CONSUME those CRDs — kubevirt-cr.yaml / cdi-cr.yaml —
|
|
# live in this directory for locality but are applied by the `platform-config` Flux Kustomization
|
|
# (dependsOn: platform, wait) so the CRDs exist BEFORE the CRs apply. Applying both in one atomic pass
|
|
# deadlocks ("no matches for kind KubeVirt"), exactly the failure F-MON1 documents.
|
|
#
|
|
# THERE IS A THIRD PASS FOR CDI, and it is not optional (2026-09-05). The two operator manifests below
|
|
# register exactly ONE CDI CRD, `cdis.cdi.kubevirt.io`. Every other CDI CRD — `storageprofiles`,
|
|
# `datavolumes`, `datasources`, `dataimportcrons` — is created by cdi-operator only AFTER it reconciles
|
|
# the `CDI` CR. So `cdi-storageprofiles.yaml` is a SECOND-ORDER CR and CANNOT share a pass with
|
|
# `cdi-cr.yaml`: the dry-run of the unknown `StorageProfile` kind aborts the pass, the CR is never
|
|
# applied, the CRD is never created, and platform-config deadlocks (cost 12h on prod's cold start).
|
|
# It is therefore applied by a third Kustomization, `platform-config-cdi` (dependsOn platform-config).
|
|
# Before adding any new CDI CR here, ask which pass owns it: CRD in git -> platform-config;
|
|
# CRD created by cdi-operator at runtime -> platform-config-cdi.
|
|
#
|
|
# Namespaces: the operator manifests each create their own namespace (`kubevirt`, `cdi`) with the
|
|
# pod-security profile they need (kubevirt is privileged) — so we do NOT redeclare them here (that
|
|
# would be a duplicate-resource kustomize error). These are PLATFORM namespaces: they intentionally
|
|
# carry NO `homelab.keithjackson.dev/app-namespace` label, so the Kyverno default-deny baseline is NOT
|
|
# generated into them (that would sever the virt control plane). Application VMs live in app namespaces.
|
|
#
|
|
# PINNED (Renovate-maintained): bump the two version tags together to a compatible KubeVirt/CDI pair.
|
|
# KubeVirt v1.9.0 (kubevirt.io/v1) — operator + CRDs
|
|
# CDI v1.66.0 (cdi.kubevirt.io/v1beta1) — operator + CRDs
|
|
# Kustomize loads these raw release manifests as remote file resources (verified: `kubectl kustomize`
|
|
# builds them); Flux's kustomize-controller fetches them the same way at reconcile.
|
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
|
kind: Kustomization
|
|
resources:
|
|
# renovate: datasource=github-releases depName=kubevirt/kubevirt
|
|
- https://github.com/kubevirt/kubevirt/releases/download/v1.9.1/kubevirt-operator.yaml
|
|
# renovate: datasource=github-releases depName=kubevirt/containerized-data-importer
|
|
- https://github.com/kubevirt/containerized-data-importer/releases/download/v1.66.1/cdi-operator.yaml
|