Deploy vCluster AddOns
Configure addons​
vCluster supports addons that extend the capabilities of your tenant cluster. You can configure these addons during deployment to adjust networking, observability, and other features for your environment and requirements.
Metrics Server​
vCluster can install the Kubernetes Metrics Server into the tenant cluster. Enable it when you need kubectl top output or want the Horizontal Pod Autoscaler to use CPU and memory metrics.
deploy:
metricsServer:
enabled: true
CNI​
vCluster installs Flannel as the Container Network Interface (CNI) by default. You can disable it and install your own CNI.
deploy:
cni:
flannel:
enabled: false
When you disable Flannel, you are responsible for installing and operating a CNI in the tenant cluster. vCluster support does not cover the configuration or behavior of user-managed CNI installations.
Kube proxy​
vCluster installs kube-proxy by default to configure services on worker nodes. If your CNI implements its own service proxy (for example, Cilium in kube-proxy replacement mode), you can disable it.
deploy:
kubeProxy:
enabled: false
To customize kube-proxy behavior without disabling it, use the config field. Values merge into the default KubeProxyConfiguration. See the Kubernetes kube-proxy config API reference for available fields.
deploy:
kubeProxy:
config:
mode: ipvs
ipvs:
scheduler: rr
Use extraArgs to pass additional flags directly to the kube-proxy binary.
MetalLB​
vCluster can install MetalLB into the tenant cluster. Enable this with the following YAML:
deploy:
metallb:
enabled: true
ipAddressPool:
addresses:
- 10.X.X.1-10.X.X.100 # your IPs here
Local Path Provisioner​
vCluster installs the Local Path Provisioner by default to provide a default StorageClass for stateful workloads. If you bring your own storage solution, you can disable it.
deploy:
localPathProvisioner:
enabled: false
When you disable the Local Path Provisioner and replace it with your own StorageClass, vCluster support does not cover your storage configuration. Replacing the provisioner does not affect existing PersistentVolumes, However, new PersistentVolumeClaims do not bind until a replacement provisioner is available.
Platform stacks​
When a tenant cluster is managed by vCluster Platform 4.12, vCluster 0.37 can request StackInstances through deploy.stacks. Each Stack deploys to the tenant cluster after Platform creates it.
deploy:
stacks:
- name: observability
# Resolve a StackTemplate from vCluster Platform.
templateRef:
name: observability
parameters:
retention: 7d
# Keep children when a later template removes their tasks.
prunePolicy: Retain
Each entry requires a stable name and exactly one definition source:
templateRef.namereferences a cluster-scoped StackTemplate.templatedefines the parameters, tasks, and published outputs inline.
The optional parameters map supplies .Values used by the tasks. defaults.taskTimeout sets the default task timeout. prunePolicy is Retain by default and can be set to Prune.
This field requires vCluster Platform. The Platform UI hides the Stacks form for vCluster versions that don't support it. See Use a Stack for the user workflow and status model.
Control plane components​
CoreDNS and Konnectivity are control plane components, not deploy addons. Configure them under controlPlane in your vcluster.yaml:
- CoreDNS: see CoreDNS configuration
- Konnectivity: configure or disable under
controlPlane.advanced.konnectivity
Config reference​
deploy object ​
Deploy holds configuration for the deployment of vCluster.
deploy object ​kubeProxy object ​
KubeProxy holds dedicated kube proxy configuration.
kubeProxy object ​enabled boolean true ​
Enabled defines if the kube proxy should be enabled.
enabled boolean true ​image string ​
Image is the image for the kube-proxy.
image string ​imagePullPolicy string ​
ImagePullPolicy is the policy how to pull the image.
imagePullPolicy string ​nodeSelector object {} ​
NodeSelector is the node selector for the kube-proxy.
nodeSelector object {} ​priorityClassName string ​
PriorityClassName is the priority class name for the kube-proxy.
priorityClassName string ​tolerations object[] [] ​
Tolerations is the tolerations for the kube-proxy.
tolerations object[] [] ​extraEnv object[] [] ​
ExtraEnv is the extra environment variables for the kube-proxy.
extraEnv object[] [] ​extraArgs string[] [] ​
ExtraArgs are additional arguments to pass to the kube-proxy.
extraArgs string[] [] ​config object {} ​
Config is the config for the kube-proxy that will be merged into the default kube-proxy config. More information can be found here:
https://kubernetes.io/docs/reference/config-api/kube-proxy-config.v1alpha1/#kubeproxy-config-k8s-io-v1alpha1-KubeProxyConfiguration
config object {} ​metallb object ​
Metallb holds dedicated metallb configuration.
metallb object ​enabled boolean false ​
Enabled defines if metallb should be enabled.
enabled boolean false ​controllerImage string ​
ControllerImage is the image for metallb controller.
controllerImage string ​speakerImage string ​
SpeakerImage is the image for metallb speaker.
speakerImage string ​cni object ​
CNI holds dedicated CNI configuration.
cni object ​flannel object ​
Flannel holds dedicated Flannel configuration.
flannel object ​enabled boolean true ​
Enabled defines if Flannel should be enabled.
enabled boolean true ​image string ​
Image is the image for Flannel main container.
image string ​initImage string ​
InitImage is the image for Flannel init container.
initImage string ​imagePullPolicy string ​
ImagePullPolicy is the policy how to pull the image.
imagePullPolicy string ​csi object ​
CSI holds dedicated CSI configuration.
csi object ​kubeVirt object ​
KubeVirt holds dedicated kubevirt CSI configuration.
kubeVirt object ​enabled boolean false ​
Enabled defines if kubevirt CSI should be enabled. This allows workloads within this virtual cluster to use
persistent volumes that vCluster provisions within its own namespace in the host cluster and hot plugs into
the kubevirt virtual machines that back the nodes of this virtual cluster. The virtual machines have to run
within the same namespace as this virtual cluster and vCluster annotates the nodes with the virtual machine
they run on, which the CSI node plugin needs. The volumes are provisioned as CDI data volumes, so CDI has to
be installed within the host cluster. This is only supported in private nodes mode.
enabled boolean false ​image string ​
Image is the image for the kubevirt CSI node plugin. The controller side is part of the vCluster control
plane, so this is the only image that is deployed.
image string ​imagePullPolicy string ​
ImagePullPolicy is the policy how to pull the image.
imagePullPolicy string ​hostLabels object {} ​
HostLabels are additional labels vCluster adds to the persistent volume claims it creates within the
namespace of this virtual cluster in the host cluster.
hostLabels object {} ​storageClass object ​
StorageClass holds configuration for the storage class that is created within this virtual cluster.
storageClass object ​enabled boolean true ​
Enabled defines if the storage class should be created within this virtual cluster.
enabled boolean true ​name string kubevirt ​
Name is the name of the storage class.
name string kubevirt ​default boolean true ​
Default defines if the storage class should be the default storage class of this virtual cluster. This is not
allowed while deploy.localPathProvisioner is enabled, because that creates a default storage class as well and
two default storage classes leave it to Kubernetes which provisioner a claim without a storage class ends up on.
default boolean true ​hostStorageClassName string ​
HostStorageClassName is the storage class within the host cluster that is used to provision the volumes.
If empty, the default storage class of the host cluster is used.
hostStorageClassName string ​hostVolumeMode string ​
HostVolumeMode pins the volume mode of the volumes that are created within the host cluster. If empty, the
storage profile CDI keeps for the storage class of the host cluster decides.
hostVolumeMode string ​bus string scsi ​
Bus is the bus the volumes are attached with to the virtual machine.
bus string scsi ​localPathProvisioner object ​
LocalPathProvisioner holds dedicated local path provisioner configuration.
localPathProvisioner object ​enabled boolean true ​
Enabled defines if LocalPathProvisioner should be enabled.
enabled boolean true ​image string ​
Image is the image for local path provisioner.
image string ​imagePullPolicy string ​
ImagePullPolicy is the policy how to pull the image.
imagePullPolicy string ​nodePath string ​
NodePath is the path on the node where to create the persistent volume directories.
nodePath string ​ingressNginx object ​
IngressNginx holds dedicated ingress-nginx configuration.
Deprecated: We do not deploy ingress nginx and the project is being deprecated.
ingressNginx object ​enabled boolean false ​
Enabled defines if ingress-nginx should be enabled.
enabled boolean false ​defaultIngressClass boolean true ​
DefaultIngressClass defines if the deployed ingress class should be the default ingress class.
defaultIngressClass boolean true ​metricsServer object ​
MetricsServer holds dedicated metrics server configuration.
metricsServer object ​enabled boolean false ​
Enabled defines if metrics server should be enabled.
enabled boolean false ​volumeSnapshotController object ​
VolumeSnapshotController holds dedicated CSI snapshot-controller configuration.
Deprecated: Removed in 0.36.0. Setting this value is rejected by the Helm chart; remove it from your config.
volumeSnapshotController object ​enabled boolean ​
Enabled defines if the CSI volumes snapshot-controller should be enabled.
enabled boolean ​argoCD object ​
ArgoCD holds dedicated configuration for argoCD Apps to deploy
argoCD object ​applications object[] ​
Applications specifies the applications to deploy. This requires the argo cd integration to be enabled.
applications object[] ​name string ​
Name specifies the stable identifier of the argo cd application. It is used to derive generated
ArgoCDApplication resource names and the final Argo CD application name.
name string ​displayName string ​
DisplayName specifies the display name of the argo cd application.
displayName string ​target string ​
Target specifies the target of the argo cd application. This can be "vCluster" or "host". Defaults to "vCluster".
target string ​inline object ​
Inline specifies the inline argo cd application definition. This requires the argo cd integration to be enabled.
inline object ​template object ​
Template specifies the argo cd application template to use. This requires the argo cd integration to be enabled.
template object ​name string ​
Name specifies the name of the argo cd application template
name string ​parameters object ​
Parameters specifies the parameters to pass to the argo cd application template.
parameters object ​stacks object[] ​
Stack holds dedicated configuration for stacks to deploy
stacks object[] ​name string ​
Name specifies the stable identifier of the stack.
name string ​displayName string ​
DisplayName specifies the display name of the stack.
displayName string ​description string ​
Description describes the stack.
description string ​template object ​
Template defines the stack inline: parameter declarations and tasks, the same payload
a StackTemplate carries. Mutually exclusive with TemplateRef.
template object ​parameters object[] ​
Parameters declares the parameters the tasks may reference as {{ .Values.variable }}.
Values are supplied by the stack's parameters field.
parameters object[] ​variable string ​
Variable is the path of the variable. Can be foo or foo.bar for nested objects.
variable string ​label string ​
Label is the label to show for this parameter
label string ​description string ​
Description is the description to show for this parameter
description string ​type string ​
Type of the parameter. Can be one of:
string, multiline, boolean, number and password
type string ​options string[] ​
Options is a slice of strings, where each string represents a mutually exclusive choice.
options string[] ​min integer ​
Min is the minimum number if type is number
min integer ​max integer ​
Max is the maximum number if type is number
max integer ​required boolean ​
Required specifies if this parameter is required
required boolean ​defaultValue string ​
DefaultValue is the default value if none is specified
defaultValue string ​placeholder string ​
Placeholder shown in the UI
placeholder string ​invalidation string ​
Invalidation regex that if matched will reject the input
invalidation string ​validation string ​
Validation regex that if matched will allow the input
validation string ​section string ​
Section where this app should be displayed. Apps with the same section name will be grouped together
section string ​tasks object[] ​
Tasks defines the stack DAG.
tasks object[] ​name string ​
Name specifies the stable identifier of the task. DNS-label-safe, unique within the stack.
name string ​dependsOn string[] ​
DependsOn lists task names that must be healthy before this task starts.
dependsOn string[] ​argoCDApplication object ​
ArgoCDApplication specifies the argo cd application this task deploys. Exactly one of
ArgoCDApplication or App must be set.
argoCDApplication object ​template object ​
Template specifies the inline argo cd application template definition. Mutually
exclusive with TemplateRef.
template object ​templateRef object ​
TemplateRef references an ArgoCDApplicationTemplate (per-application blueprint) by
name. Mutually exclusive with Template.
templateRef object ​name string ​
Name of the ArgoCDApplicationTemplate.
name string ​parameters object ​
Parameters supplies values to the referenced template's declared parameters. Only
valid with TemplateRef; values for an inline template belong in the definition.
parameters object ​app object ​
App specifies the platform app this task deploys. Exactly one of ArgoCDApplication or
App must be set.
app object ​template object ​
Template specifies the inline app definition, with metadata and a spec that carries the
chart plus a few instance fields (displayName, description, releaseName). Mutually
exclusive with TemplateRef.
template object ​templateRef object ​
TemplateRef references a named app by name and version. Mutually exclusive with Template.
templateRef object ​name string ​
Name of the app to reference.
name string ​version string ​
Version of the app to deploy. If empty, the latest version is deployed.
version string ​parameters object ​
Parameters supplies values to the referenced app. Only valid with TemplateRef; values
for an inline template belong in the definition.
parameters object ​timeout string ​
Timeout bounds how long this task may take to become healthy, overriding
defaults.taskTimeout. Go duration string, for example "10m".
timeout string ​outputs object[] ​
Outputs declares values captured from this task's deployed resources that later
tasks reference as {{ .Outputs.task.name }}.
outputs object[] ​name string ​
Name identifies the output. Letters and digits only, unique within the task.
name string ​fromSecret object ​
FromSecret reads the value from a Secret key on the destination cluster.
Exactly one of fromSecret or fromResource must be set.
fromSecret object ​namespace string ​
Namespace of the Secret. Must be a namespace this stack deploys into.
namespace string ​name string ​
Name of the Secret.
name string ​key string ​
Key inside the Secret's data.
key string ​fromResource object ​
FromResource reads a single field from a resource on the destination cluster.
Exactly one of fromSecret or fromResource must be set.
fromResource object ​apiVersion string ​
APIVersion of the resource, e.g. "v1" or "apps/v1".
apiVersion string ​kind string ​
Kind of the resource, e.g. "Service".
kind string ​namespace string ​
Namespace of the resource. Must be a namespace this stack deploys into;
cluster-scoped resources cannot be read.
namespace string ​name string ​
Name of the resource.
name string ​jsonPath string ​
JSONPath selects the field, in the kubectl template syntax, e.g.
"{.spec.clusterIP}". It must select exactly one scalar value.
jsonPath string ​publishedOutputs object[] ​
PublishedOutputs selects which captured task outputs the stack exposes to its
users, under a public name. They are read through the stack instance's outputs
subresource.
publishedOutputs object[] ​name string ​
Name specifies the public name of the output. Unique within the stack; it may
differ from the task output's name.
name string ​templateRef object ​
TemplateRef references a cluster-scoped StackTemplate to resolve the tasks from.
Mutually exclusive with Template.
templateRef object ​name string ​
Name specifies the name of the StackTemplate to reference.
name string ​parameters object ​
Parameters specifies the values the template's tasks reference. Values the template does not
declare are still available to tasks, but get no default and are not validated.
parameters object ​defaults object ​
Defaults are applied to all tasks unless overridden per-task.
defaults object ​taskTimeout string ​
TaskTimeout is the default per-task timeout as a Go duration (e.g. "10m").
taskTimeout string ​prunePolicy string ​
PrunePolicy controls what happens to an application whose task is removed from the
resolved set. One of "Retain" (default) or "Prune".
prunePolicy string ​