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. |
| 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. |