Skip to content

Helm chart values

The operator's chart is published at oci://ghcr.io/kuberoot-dev/charts/kubepkg, versioned with kubepkg. These are its values and their defaults, taken from the chart itself:

charts/kubepkg/values.yaml
image:
  repository: ghcr.io/kuberoot-dev/kubepkg-operator
  # Defaults to the chart's appVersion.
  tag: ""
  pullPolicy: IfNotPresent

# How components are installed: helm (in-process, can roll back), werf
# (through Nelm, werf's deployment engine, can roll back), flux or argo.
backend: helm

# The helm and werf backends install whatever the packages' charts contain, CRDs and
# cluster roles included; Kubernetes only lets it grant permissions it holds,
# so it needs cluster-admin. The flux and argo backends hand charts to Flux or
# Argo CD and get by with the operator's own role; set this to false for them.
clusterAdmin: true

# API group the kubepkg types are served under.
apiGroup: kubepkg.dev

# namespace/name of a Secret whose values.yaml is layered under every
# component's values: platform-wide settings such as a domain or an issuer.
valuesSecret: ""

# Labels put on every namespace packages create.
namespaceLabels: {}

argo:
  namespace: argocd
  project: default

# Air-gapped clusters: an oci:// registry path that holds copies of every
# chart and package tree, made by kubepkg bundle import. The operator then
# fetches only from there; digests are verified as usual.
mirror: ""

# kubernetes.io/dockerconfigjson Secrets with credentials for the
# registries charts and package trees come from (helm and werf backends).
# A bare name is a Secret in the release namespace; namespace/name works
# too. They are read on every pull, so rotated credentials apply at once;
# one that does not exist is skipped with a warning.
registrySecrets: []

# Keep pods in package namespaces on the images their packages pin:
#   off      nothing happens
#   warn     tags the packages pin are rewritten to their digests; other
#            images run, with a warning
#   enforce  the same, and other images are refused; a namespace where
#            some package pins no images stays at warn
# The operator issues the webhook's certificate itself.
imagePolicy: "off"
# Namespaces the image policy never applies to, even when packages install
# there: the cluster and tools other than packages start pods in them. A
# namespace labelled kubepkg.dev/image-policy=off by an admin is left
# alone too.
imagePolicyExclude: [kube-system, kube-public, kube-node-lease]

# Registries the operator reaches over plain HTTP, host or host:port, e.g.
# a local registry; every other registry keeps TLS. A Repository can list
# more in spec.plainHTTPRegistries.
plainHTTPRegistries: []
# Deprecated: reaches every registry over plain HTTP, public ones included.
# Use plainHTTPRegistries.
plainHTTP: false

# Repositories to subscribe to, e.g. a distribution's own:
#   - name: main
#     url: https://packages.example.org/index.yaml
#     priority: 10
#     publicKeys:
#       - |
#         -----BEGIN PUBLIC KEY-----
#         ...
#         -----END PUBLIC KEY-----
#   or, for a repository with a root of trust (threshold signing, rotation):
#     trust:
#       rootThreshold: 2
#       rootKeys: [...]
repositories: []

replicas: 1

# Packages reconciled at once. With the helm and werf backends an install
# holds a worker until its components are ready, so one slow package must
# not keep the others, its dependents included, waiting.
packageWorkers: 4

# A failed install or upgrade is tried again on its own: first after
# backoff, then after twice as long each time, at most maxBackoff.
retry:
  backoff: 30s
  maxBackoff: 10m

metrics:
  # A Service in front of the operator's metrics endpoint.
  service: true
  # A Prometheus Operator ServiceMonitor scraping it.
  serviceMonitor:
    enabled: false
    interval: 30s
    labels: {}
  # Alerts: packages not ready, failed or rolled back upgrades, repositories
  # that cannot be loaded or have not changed for long, reconcile errors.
  prometheusRule:
    enabled: false
    labels: {}
    # How long a repository index may stay unchanged before it is stale.
    indexMaxAge: 168h
  # A Grafana dashboard in a ConfigMap, for Grafana's dashboard sidecar.
  dashboard:
    enabled: false
    labels:
      grafana_dashboard: "1"

resources:
  requests:
    cpu: 100m
    memory: 128Mi
  limits:
    memory: 1Gi

nodeSelector: {}
tolerations: []
affinity: {}

What the chart installs is described in Installing kubepkg. The chart refuses backend: helm or backend: werf together with clusterAdmin: false, because those backends could not install charts that create cluster roles.