1. Infrastructure Charts
  2. cluster

cluster

Deploys cluster with Cluster API and Kubevirt, including addons.

Deploys a Kubernetes cluster with Cluster API and KubeVirt.

Includes the following addons:

Prerequisites

The chart requires the following addons to be installed on the host cluster:

Make sure to specify the namespace Argo CD is watching resources in using the argocdNamespace values option.

The chart requires a virtual machine image built from the Kubernetes image builder project available for download over HTTP(S). Make sure to set config.image to the url of the virtual machine image.

Secrets containing Cloudflare token, DNS API credentials, and MinIO bucket credentials on the host cluster are required. Make sure to create the secrets, specify the namespace of the secrets in config.externalSecrets.remoteNamespace, and authorize access to the secrets via config.rbac.

Install

To install the chart:

helm install my-release oci://ghcr.io/sneakybugs/cluster --version 2.2.0 --values values.yaml

Assuming you have a values.yaml with your values overrides:

Upgrade

To upgrade the chart:

helm upgrade my-release oci://ghcr.io/sneakybugs/cluster --version 2.2.0 --values values.yaml

Assuming you have a values.yaml with your values overrides:

Uninstall

To uninstall the chart:

helm uninstall my-release

Configuration

ParameterDescriptionDefault
nameOverrideOverride chart name.""
fullnameOverrideOverride full release name.""
argocdNamespaceNamespace to deploy Argo CD resources to.”argocd”
versions.calicoCalico version to deploy.”v3.30.1”
versions.certManagerCert Manager version to deploy.”v1.15.0”
versions.componentscluster-components chart version to deploy.”5.1.0”
versions.telemetryExporterComponentstelemetry-exporter-components chart version to deploy.”2.0.0”
versions.externalDNSExternalDNS version to deploy.”1.14.5”
versions.externalSecretsExternal Secrets version to deploy.”0.12.1”
versions.openEBSOpenEBS version to deploy.”4.0.1”
versions.traefikTraefik version to deploy.”28.1.0”
versions.kubeStateMetricsKube State Metrics chart version to deploy.”5.20.0”
versions.openTelemetryOperatorOpenTelemetry Operator chart version to deploy.”0.90.3”
versions.prometheusNodeExporterNode exporter chart version to deploy.”4.36.0”
versions.prometheusOperatorCRDsPrometheus Operator CRDs chart version to deploy.”12.0.0”
versions.veleroVelero chart version to deploy.”8.3.0”
versions.veleroPluginForAWSVelero AWS plugin version to deploy.”1.11.1”
versions.kroKro version to deploy.”0.3.0”
features.backupsEnable Velero backups when true.true
features.telemetryExporterEnable OpenTelemetry exporter when true.true
features.kroEnable Kro when true.true
config.podSubnetPod subnet to use.”10.243.0.0/16”
config.serviceSubnetService subnet to use.”10.95.0.0/16”
config.imageNode image to use.https://vmi.infra.sneakybugs.com/images/rocky-10.0-k8s-1.33-4632336-20250615.qcow2
config.versionKubernetes version of the node image.”1.33.0”
config.imageRegistries[{“prefix”: “docker.io”, “location”: “oci.infra.sneakybugs.com/docker”}, {“prefix”: “quay.io”, “location”: “oci.infra.sneakybugs.com/quay”}, {“prefix”: “ghcr.io”, “location”: “oci.infra.sneakybugs.com/ghcr”}, {“prefix”: “registry.k8s.io”, “location”: “oci.infra.sneakybugs.com/k8s”}, {“prefix”: “oci.external-secrets.io”, “location”: “oci.infra.sneakybugs.com/external-secrets”}]
config.traefik.ingressHostnameHostname to set for the ingress service with ExternalDNS.”ingress.services.infra.sneakybugs.com”
config.otlpExporter.endpointCentralized OpenTelemetry Collector endpoint to export telemetry to.”otel.infra.sneakybugs.com:4317”
config.externalSecrets.remoteNamespace”tenant-secrets”
config.externalDNSWebhook.repository”docker.houseofkummer.com/lior/home-dns/external-dns-provider”
config.externalDNSWebhook.tag”2.1.0”
config.certManagerValues for cluster-components chart certManager field.{}
config.velero.storage.s3UrlS3 endpoint URL for backup storage.https://vmi.infra.sneakybugs.com
config.velero.storage.bucketBucket name for backup storage.”backups”
config.velero.storage.prefixPrefix to store backups in the S3 bucket, defaults to : if unspecified.""
config.velero.storage.accessModeBackup location access mode, ReadWrite or ReadOnly.”ReadWrite”
config.velero.backup.scheduleCron schedule to perform backups at.”0 4 * * *“
config.velero.backup.ttlTime to keep backups.”720h”
config.velero.externalSecretExternal secret used by Velero for S3 credentials.{}
config.rbac.namespaceNamespace for role in the management cluster.”tenant-secrets”
config.rbac.rulesRole rules for the namespace in the management cluster.[{“apiGroups”: [""], “resources”: [“secrets”], “verbs”: [“get”, “list”, “watch”], “resourceNames”: [“cert-manager”, “external-dns”, “backup”]}, {“apiGroups”: [“authorization.k8s.io”], “resources”: [“selfsubjectrulesreviews”], “verbs”: [“create”]}]
nodes.controlPlane.replicasControl plane node count.1
nodes.controlPlane.resources.storageControl plane node disk size.”16Gi”
nodes.controlPlane.resources.coresControl plane node core count.2
nodes.controlPlane.resources.memoryControl plane node RAM size.”4Gi”
nodes.worker.replicasWorker node count.1
nodes.worker.resources.storageWorker node disk size.”32Gi”
nodes.worker.resources.coresWorker node core count.4
nodes.worker.resources.memoryWorker node RAM size.”8Gi”

Star the source on GitHub.