Using FluxCD

KubeDB can be deployed via FluxCD using its Helm Controller against the OCI Helm registry at ghcr.io/appscode-charts. Apply the manifests below in order.

1. Configure the OCI Helm repository

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: appscode-charts
  namespace: flux-system
spec:
  type: oci
  interval: 12h
  url: oci://ghcr.io/appscode-charts

2. Create a Secret with the license

Generate a license from the AppsCode License Server and store it in a Secret so HelmRelease can reference it via valuesFrom.

$ kubectl create namespace kubedb
$ kubectl create secret generic kubedb-license \
  --from-file=license=/path/to/the/license.txt \
  -n kubedb

3. Install KubeDB via HelmRelease

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: kubedb
  namespace: kubedb
spec:
  interval: 1h
  chart:
    spec:
      chart: kubedb
      version: v2026.4.27
      sourceRef:
        kind: HelmRepository
        name: appscode-charts
        namespace: flux-system
  install:
    createNamespace: true
    crds: CreateReplace
  upgrade:
    crds: CreateReplace
  valuesFrom:
  - kind: Secret
    name: kubedb-license
    valuesKey: license
    targetPath: global.license
  values:
    global:
      featureGates:
        Elasticsearch: true
        Kafka: true
        MariaDB: true
        MongoDB: true
        MySQL: true
        Postgres: true
        Redis: true

If you use a private Docker registry with self-signed certificates, add the registry hosts under global.insecureRegistries:

  values:
    global:
      insecureRegistries:
      - hub.example.com
      - hub2.example.com

(Alternative) Use License Proxyserver instead of a license Secret

Instead of creating a per-cluster license Secret (steps 2–3 above), you can deploy the license-proxyserver chart. It distributes license tokens to KubeDB and other AppsCode operators inside the cluster, so the kubedb HelmRelease no longer needs to mount a license. Use this approach in place of the kubedb-license Secret.

a. Install license-proxyserver

Generate an online license-proxyserver token by following the License Proxyserver guide, then store it in a Secret that the HelmRelease references via valuesFrom:

$ cat > license-proxyserver.yaml <<'EOF'
platform:
  baseURL: https://appscode.com
  token: '****************************************'
EOF

$ kubectl create secret generic ace-licenseserver-cred \
  --from-file=license-proxyserver.yaml \
  -n kubeops
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: license-proxyserver
  namespace: kubeops
spec:
  interval: 5m
  chart:
    spec:
      chart: license-proxyserver
      version: v2026.2.16
      sourceRef:
        kind: HelmRepository
        name: appscode-charts
        namespace: flux-system
  install:
    createNamespace: true
    crds: CreateReplace
  upgrade:
    crds: CreateReplace
  values:
    registryFQDN: ghcr.io
  valuesFrom:
  - kind: Secret
    name: ace-licenseserver-cred
    valuesKey: license-proxyserver.yaml
    optional: true

b. Install KubeDB without a license Secret

With the proxyserver running, deploy the kubedb HelmRelease without the valuesFrom license Secret — drop step 2 and the valuesFrom block from step 3:

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: kubedb
  namespace: kubedb
spec:
  interval: 1h
  chart:
    spec:
      chart: kubedb
      version: v2026.4.27
      sourceRef:
        kind: HelmRepository
        name: appscode-charts
        namespace: flux-system
  install:
    createNamespace: true
    crds: CreateReplace
  upgrade:
    crds: CreateReplace
  values:
    global:
      featureGates:
        Elasticsearch: true
        Kafka: true
        MariaDB: true
        MongoDB: true
        MySQL: true
        Postgres: true
        Redis: true

To see the detailed configuration options, visit here.

Next: enable database engines and verify the installation.