Skip to content

Configuration Reference⚓︎

The xControl chart is configured entirely through Helm values. This page lists the values an installer or operator of the deployment is most likely to set, grouped the way they appear in values.yaml. Run helm show values expeto/xcontrol for the complete file with its inline comments, and keep your overrides in the values.yaml you install from.

Values not listed here have defaults that suit a production install.

Images and credentials⚓︎

Value Default Purpose
image.repository docker.expeto.io Registry the xControl images are pulled from.
image.tag chart appVersion Override to pin a specific build.
imageCredentials.username, .password, .email unset Registry credentials written into the pull Secret. Pass them with --set at install and upgrade time.
imagePullSecrets[].name, .create expeto, true Name of the pull Secret and whether the chart creates it. Set create: false when the Secret is managed outside Helm.
global.imageRegistry docker.expeto.io Registry for the dependency charts' images. Point it at a mirror for air-gapped clusters.

Hostname, ingress and TLS⚓︎

Value Default Purpose
global.config.primaryDomain xcontrol.example.com Hostname of the installation. Used on every Ingress and in every URL xControl issues.
global.config.extraDomains unset Additional hostnames the Ingress objects answer on.
global.config.acmeTls false Annotate the Ingress objects for cert-manager's ACME issuer (kubernetes.io/tls-acme). Requires a default issuer in the cluster.
global.config.frontend.basePath ngui Path of the web interface.
global.config.frontend.ingress.flavor detected Ingress controller dialect: standard, nginx-mergeable, haproxy-openshift, haproxy or alb. Set explicitly for GitOps renders.
global.config.frontend.ingress.defaultClassName unset IngressClass to request when the cluster has more than one.
global.config.frontend.ingress.tls.secretName unset Existing TLS Secret to use instead of an ACME certificate.
global.config.frontend.ingress.annotations unset Annotations added to every generated Ingress, for example external-dns hints.
global.config.frontend.ingress.alb.* unset AWS load balancer controller settings (scheme, certificateArn, groupOrder) when the flavor is alb.
global.config.frontend.ingress.nginx-mergeable.* unset Issuer or wildcard Secret for the master Ingress when the flavor is nginx-mergeable.
ingress-nginx.enabled false Install the reference ingress-nginx controller as a dependency. Only for clusters that have no ingress controller at all.
global.networks.ingress create: false MetalLB address pool and advertisement for the ingress controller's LoadBalancer Service on bare-metal clusters.

Single sign-on⚓︎

Value Default Purpose
global.config.keycloak.realm.name expeto Realm that holds the xControl users.
global.config.keycloak.realm.accessTokenLifespan 300 Access token lifetime in seconds.
global.config.keycloak.realm.ssoSessionIdleTimeout 1800 Idle timeout of a browser session in seconds.
global.config.keycloak.realm.ssoSessionMaxLifespan 36000 Maximum lifetime of a browser session in seconds.
keycloak.production false Keycloak production mode. Set true for a production install.
keycloak.resources preset CPU and memory for the Keycloak pod.

Database⚓︎

The database is a PostgreSQL cluster managed by the CloudNativePG operator, installed by the chart.

Value Default Purpose
cloudnative-pg.enabled true Install the operator. Disable on a cluster that already runs it (it is cluster-scoped, one copy per cluster).
cluster.mode standalone standalone, replica (hot standby of another installation) or recovery (rebuild from a backup).
cluster.cluster.instances 3 PostgreSQL instances. Each needs its own node.
cluster.cluster.storage.size 42Gi Data volume per instance.
cluster.cluster.storage.storageClass default class StorageClass for the data volumes.
cluster.cluster.postgresql.synchronous any, 1 Synchronous replication: one standby must confirm every commit.
cluster.cluster.postgresql.parameters see file Tuning such as shared_buffers, work_mem, max_connections.
cluster.backups.enabled false Continuous WAL archiving and scheduled base backups to object storage.
cluster.backups.endpointURL, .provider, .s3.* unset Object store endpoint, region, bucket, path and credentials.
cluster.backups.scheduledBackups[].schedule see file Base backup schedule in CloudNativePG's six-field cron form (seconds first); 0 0 0 * * * is daily at midnight.
cluster.backups.retentionPolicy 3d How long backups are kept.
cluster.recovery.* unset Source object store and cluster name when cluster.mode is recovery.
cluster.replica.* unset Primary connection details when cluster.mode is replica; the primary's release notes print the exact command.
global.database.waitForWritable true Hold application pods in an init container until the database accepts writes, so a standby site waits instead of crash-looping.
global.database.passwords.*, global.database.encodedPasswords.* unset Fix the superuser and per-role passwords instead of generating them, needed when a replica must match its primary.
global.createSecrets true Generate all application Secrets with random passwords. Set false under GitOps and supply them yourself.

Application⚓︎

Value Default Purpose
jvm.memorySize 2g Heap of the API server JVM.
volume.size 512Mi Working volume for xControl state.
deployments.api.autoscaling.enabled false Horizontal Pod Autoscaler for the API server; minReplicas, maxReplicas and targetCPUUtilizationPercentage alongside.
resources unset Requests and limits for the API server container.
nodeSelector, tolerations, affinity unset Standard scheduling controls for the API server.
global.manualNodeConfig true xControl needs no kernel or NIC tuning, so the node-configuration DaemonSet is not deployed.

Monitoring and documentation⚓︎

Value Default Purpose
xview.enabled false Install xView (VictoriaMetrics, Grafana, alerting) with the release. Mutually exclusive with kubemonitoring.enabled.
xview.storage.size 200Mi Grafana storage.
xview.victoria-metrics-k8s-stack.* see file Metrics retention, storage and dashboard settings; see xView.
kubemonitoring.enabled true Namespace-scoped Prometheus for the xControl workloads only. Disable when xView is enabled and on OpenShift.
expeto-docs.ingress.enabled true Serve the Platform Guide and End-User Guide from the installation.

Geo-redundancy⚓︎

Value Default Purpose
xcontrol-operator.enabled false Deploy the cross-site failover witness. Only meaningful on a third cluster that can reach both sites' Kubernetes APIs; see Upgrade, backup and geo-redundancy.
xcontrol-operator.mode monitor monitor observes and alerts; witness arms automatic failover after config.witness.failAfter.
xcontrol-operator.config.sites.<name>.* unset Namespace, cluster name, Postgres host and optional kubeconfig Secret for each site.

Platform⚓︎

Value Default Purpose
global.k8sPlatform detected Force a platform profile (openshift, eks, aks, microk8s, tanzu) when rendering without a cluster.
global.defaultUid 337 User ID for the non-root containers. OpenShift assigns its own range and the chart follows it.
global.eks.karpenter.* disabled Karpenter node provisioning on EKS.
spring.profiles sql,keycloak,fast,k8s Application profiles. Do not change on a production install.