The vmafx-operator is the Kubernetes operator binary that reconciles the
VmafxJob, VmafxNode, and VmafxModelTraining custom resource definitions
(CRDs). It is published as a signed, SBOM-attested OCI image on every release tag.
ADR reference: ADR-0815, ADR-0714.
| Registry | Image | Default tag | Platforms |
|---|---|---|---|
ghcr.io |
vmafx/vmafx-operator |
latest |
linux/amd64, linux/arm64 |
Pull by digest for production deployments:
docker pull ghcr.io/vmafx/vmafx-operator@sha256:<digest>Verify the Sigstore signature:
cosign verify \
--certificate-identity-regexp="https://github.com/VMAFx/vmafx/.github/workflows/docker-publish-operator-node.yml" \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
ghcr.io/vmafx/vmafx-operator@sha256:<digest>docker build \
-f docker/Dockerfile.operator \
--target operator \
-t ghcr.io/vmafx/vmafx-operator:dev \
.Multi-arch (requires docker buildx):
docker buildx build \
-f docker/Dockerfile.operator \
--target operator \
--platform linux/amd64,linux/arm64 \
-t ghcr.io/vmafx/vmafx-operator:dev \
--push \
.docker run --rm \
-e VMAFX_OPERATOR_METRICS_ADDR=:8081 \
-e VMAFX_OPERATOR_PROBE_ADDR=:8082 \
-e VMAFX_OPERATOR_LEADER_ELECT=false \
-e VMAFX_OPERATOR_LOG_LEVEL=info \
ghcr.io/vmafx/vmafx-operator:latestIn-cluster the operator reads kubeconfig from the service-account token
mounted by Kubernetes. The RBAC rules are managed by the Helm chart
(ADR-0699); the image runs as
uid 65532 (nonroot) by default.
| Variable | Default | Description |
|---|---|---|
VMAFX_OPERATOR_METRICS_ADDR |
:8081 |
Prometheus /metrics endpoint bind address |
VMAFX_OPERATOR_PROBE_ADDR |
:8082 |
/healthz + /readyz bind address |
VMAFX_OPERATOR_LEADER_ELECT |
false |
Enable leader election for HA deployments |
VMAFX_OPERATOR_LOG_LEVEL |
info |
Log verbosity: debug, info, warn, error |
CLI flags mirror all environment variables and take precedence.
| Port | Protocol | Purpose |
|---|---|---|
| 8081 | TCP | Prometheus metrics |
| 8082 | TCP | Health and readiness probes (/healthz, /readyz) |
The workflow .github/workflows/docker-publish-operator-node.yml fires on every
v* tag push (release-please) and on workflow_dispatch. It:
- Builds
ghcr.io/vmafx/vmafx-operatorforlinux/amd64+linux/arm64using BuildKit native cross-compilation (CGO_ENABLED=0 pure-Go binary; no QEMU needed). - Signs the pushed digest via
cosign sign --yes(Sigstore keyless OIDC). - Generates a CycloneDX SBOM with
syftand attaches it as acosign attestpredicate. - Uploads the SBOM JSON as a workflow artifact (90-day retention).
- Runs a smoke-test (
--help) before the aggregator gate passes.
Update the image tag (or digest) in the Helm values.yaml:
operator:
image:
repository: ghcr.io/vmafx/vmafx-operator
tag: "v3.2.0-lusoris.5"Then run helm upgrade vmafx ./deploy/helm/vmafx -n vmafx-system.