{
  "schema_version": 2,
  "id": "integrate/redis-data-integration/installation/install-k8s",
  "title": "Install on Kubernetes",
  "url": "https://redis.io/docs/latest/integrate/redis-data-integration/installation/install-k8s/",
  "summary": "Learn how to install RDI on Kubernetes",
  "tags": [
    "docs",
    "integrate",
    "rs",
    "rdi"
  ],
  "last_updated": "2026-09-18T16:39:21+01:00",
  "page_type": "content",
  "content_hash": "9a2082cae2b65fc53d75ab94a52b4cb7b00a0ca4ac8deb21692ebc84014dbd24",
  "sections": [
    {
      "id": "overview",
      "title": "Overview",
      "role": "overview",
      "text": "This guide explains how to use the RDI [Helm chart](https://helm.sh/docs/topics/charts/)\nto install on [Kubernetes](https://kubernetes.io/) (K8s). You can also\n[Install RDI on VMs](https://redis.io/docs/latest/integrate/redis-data-integration/installation/install-vm).\n\nThe installation creates the following K8s objects:\n\n-   A K8s [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) named `rdi`.\n    You can also use a different namespace name if you prefer.\n-   [Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) and \n    [services](https://kubernetes.io/docs/concepts/services-networking/service/) for the \n    [RDI operator](https://redis.io/docs/latest/integrate/redis-data-integration/architecture#how-rdi-is-deployed),\n    [metrics exporter](https://redis.io/docs/latest/integrate/redis-data-integration/observability), and API server.\n-   A [service account](https://kubernetes.io/docs/concepts/security/service-accounts/) \n    and [RBAC resources](https://kubernetes.io/docs/reference/access-authn-authz/rbac) for the RDI operator.\n-   A [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) with RDI database details.\n-   [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/)\n    with the RDI database credentials and TLS certificates.\n-   Other optional K8s resources such as [ingresses](https://kubernetes.io/docs/concepts/services-networking/ingress/) \n    that can be enabled depending on your K8s environment and needs.\n\nYou can use this installation on [OpenShift](https://docs.openshift.com/) and other K8s distributions\nincluding cloud providers' K8s managed clusters.\n\nYou can configure the RDI Helm chart to pull the RDI images from [dockerhub](https://hub.docker.com/u/redis) \nor from your own [private image registry](#using-a-private-image-registry)."
    },
    {
      "id": "before-you-install",
      "title": "Before you install",
      "role": "content",
      "text": "Complete the following steps before installing the RDI Helm chart:\n\n-   [Create the RDI database](#create-the-rdi-database) on your Redis Enterprise cluster.\n\n-   Create a [user](https://redis.io/docs/latest/operate/rs/security/access-control/create-users)\n    for the RDI database if you prefer not to use the default password (see\n    [Access control](https://redis.io/docs/latest/operate/rs/security/access-control) for\n    more information).\n\n-   Download the RDI Helm chart tar file from the\n    [Redis download center](https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/rdi-.tgz) (in the *Modules, Tools & Integration* category) .\n\n    [code example]\n\n-   If you want to use a private image registry,\n    [prepare it with the RDI images](#using-a-private-image-registry).\n\n-   [Download the RDI CLI](#download-the-rdi-cli), which you use to deploy and manage pipelines."
    },
    {
      "id": "create-the-rdi-database",
      "title": "Create the RDI database",
      "role": "content",
      "text": "RDI uses a database on your Redis Enterprise cluster to store its state\ninformation. Use the Redis Enterprise Cluster Manager UI to create the RDI database with the following\nrequirements:\n\n* Redis Enterprise v6.4 or greater for the cluster.\n* For production, 250MB RAM with one primary and one replica is recommended, but for the\n  quickstart or for development, 125MB and a single shard is sufficient.\n* If you are deploying RDI for a production environment then secure this database with a password\n  and TLS.\n* Set the database's\n  [eviction policy](https://redis.io/docs/latest/operate/rs/databases/memory-performance/eviction-policy) to `noeviction`. Note that you can't set this using\n  [`rladmin`](https://redis.io/docs/latest/operate/rs/references/cli-utilities/rladmin),\n  so you must either do it using the admin UI or with the following\n  [REST API](https://redis.io/docs/latest/operate/rs/references/rest-api)\n  command:\n\n  [code example]\n* Set the database's\n  [data persistence](https://redis.io/docs/latest/operate/rs/databases/configure/database-persistence)\n  to AOF - fsync every 1 sec. Note that you can't set this using\n  [`rladmin`](https://redis.io/docs/latest/operate/rs/references/cli-utilities/rladmin),\n  so you must either do it using the admin UI or with the following\n  [REST API](https://redis.io/docs/latest/operate/rs/references/rest-api)\n  commands:\n\n  [code example]\n If you don't have permissions to use AOF persistence, please check the [Using RDI without persistence](https://redis.io/docs/latest/integrate/redis-data-integration/faq#can-i-use-rdi-without-persistence-enabled) section in the FAQ.\n\n* **Ensure that the RDI database is not clustered.** RDI will not work correctly if the\n  RDI database is clustered (but note that the target database *can* be clustered without\n  any problems).\n\n  When you create the RDI database, expand the **Clustering** section and make sure the\n  **Sharding** option is *unchecked* (as shown below).\n\n  ![The Sharding option is unchecked in the Clustering section of the create database form.](https://redis.io/docs/latest/images/rdi/ingest/RDIClusterSetting.webp)\n\n  You can check if your RDI database is clustered from its **Configuration** tab in the\n  Cluster Manager UI. In the **Clustering** section, **Sharding** should be set to **Disabled**,\n  as shown in the following screenshot:\n\n  ![The Clustering section of the database Configuration tab shows Sharding: Disabled.](https://redis.io/docs/latest/images/rdi/ingest/RDICheckUnclustered.webp)\n\n  If you find the database has been clustered by mistake, you must create a new database with\n  sharding disabled before continuing with the RDI installation.\n\n\nYou should then provide the details of this database in the [`values.yaml`](#the-valuesyaml-file)\nfile as described below."
    },
    {
      "id": "using-a-private-image-registry",
      "title": "Using a private image registry",
      "role": "content",
      "text": "Add the RDI images from [dockerhub](https://hub.docker.com/u/redis) to your local registry.\nYou need the following RDI images with tags matching the RDI version you want to install:\n\n-   [redis/rdi-api](https://hub.docker.com/r/redis/rdi-api)\n-   [redis/rdi-operator](https://hub.docker.com/r/redis/rdi-operator)\n-   [redis/rdi-monitor](https://hub.docker.com/r/redis/rdi-monitor)\n-   [redis/rdi-processor](https://hub.docker.com/r/redis/rdi-processor)\n-   [redis/rdi-collector-api](https://hub.docker.com/r/redis/rdi-collector-api)\n-   [redis/rdi-collector-initializer](https://hub.docker.com/r/redis/rdi-collector-initializer)\n\nIf you plan to use the Flink processor for any of your pipelines, you'll also need:\n\n-   [redis/rdi-flink-processor](https://hub.docker.com/r/redis/rdi-flink-processor)\n-   [redis/rdi-metrics-aggregator](https://hub.docker.com/r/redis/rdi-metrics-aggregator)\n\nIf you plan to use the Flink processor exclusively, the `redis/rdi-processor`\nand `redis/rdi-monitor` images are not required.\n\nIf you plan to use Spanner as a source for your pipeline, you'll also need\n[redis/rdi-flink-collector](https://hub.docker.com/r/redis/rdi-flink-collector).\n\nIf you plan to use Snowflake as a source for any of your pipelines, you'll also need\n[riotx/riotx:v1.12.0](https://hub.docker.com/r/riotx/riotx):\n[RIOT-X](https://redis.github.io/riotx/), a data ingestion and replication tool for Redis.\n\nIn addition, the RDI Helm chart uses the following 3rd party images:\n\n-   [redislabs/debezium-server:3.5.0.Final-rdi.3](https://hub.docker.com/r/redislabs/debezium-server),\n    based on `quay.io/debezium/server/3.5.0.Final` with minor modifications:\n    [Debezium](https://debezium.io/), an open source distributed platform for change data capture.\n-   [redis/reloader:v1.4.13](https://hub.docker.com/r/redis/reloader), originally `ghcr.io/stakater/reloader:v1.4.13`:\n    [Reloader](https://github.com/stakater/Reloader), a K8s controller to watch changes to ConfigMaps\n    and Secrets and do rolling upgrades.\n\nThe example below shows how to specify the registry and image pull secret in your\n[`rdi-values.yaml`](#the-valuesyaml-file) file for the Helm chart:\n\n[code example]\n\nTo pull images from a private image registry, you must provide the image pull secret and in some cases also set the permissions. Follow the links below to learn how to use a private registry with:\n\n-   [Rancher](https://ranchermanager.docs.rancher.com/how-to-guides/new-user-guides/kubernetes-resources-setup/kubernetes-and-docker-registries#using-a-private-registry)\n-   [OpenShift](https://docs.openshift.com/container-platform/4.17/openshift_images/managing_images/using-image-pull-secrets.html)\n-   [Amazon Elastic Kubernetes Service (EKS)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_EKS.html)\n-   [Google Kubernetes Engine (GKE)](https://cloud.google.com/artifact-registry/docs/pull-cached-dockerhub-images)\n-   [Azure Kubernetes Service (AKS)](https://learn.microsoft.com/en-us/azure/aks/cluster-container-registry-integration?tabs=azure-cli)"
    },
    {
      "id": "download-the-rdi-cli",
      "title": "Download the RDI CLI",
      "role": "content",
      "text": "You manage RDI with the [`redis-di` CLI](https://redis.io/docs/latest/integrate/redis-data-integration/reference/cli),\nwhich you use to deploy pipelines, set secrets, and inspect status. Unlike the VM installation, which\nbundles the CLI, a Kubernetes installation requires you to download it separately from the Redis\ndownload center.\n\nThe CLI is currently built for the following platforms. Download the binary that matches the operating\nsystem and architecture of the machine you will run it from. On Linux and macOS, if you are not sure\nwhich to choose, run `uname -sm`: `Linux x86_64` is Linux amd64, `Linux aarch64` is Linux arm64,\n`Darwin x86_64` is macOS on Intel, and `Darwin arm64` is macOS on Apple silicon.\n\n| Platform | Download |\n| :-- | :-- |\n| Linux, x86-64 (amd64) | [`redis-di`](https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/cli//bin/linux-amd64/redis-di) |\n| Linux, ARM64 (aarch64) | [`redis-di`](https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/cli//bin/linux-arm64/redis-di) |\n| macOS, Intel (amd64) | [`redis-di`](https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/cli//bin/darwin-amd64/redis-di) |\n| macOS, Apple silicon (arm64) | [`redis-di`](https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/cli//bin/darwin-arm64/redis-di) |\n| Windows, x86-64 (amd64) | [`redis-di.exe`](https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/cli//bin/windows-amd64/redis-di.exe) |\n\nFor example, to download the CLI for Linux amd64, make it executable, and put it on your `PATH`:\n\n[code example]\n\n> [!NOTE]\n> The macOS and Windows binaries are not currently signed or notarized, so the operating\n> system may block them the first time you run them. On macOS, allow the binary to run in\n> **System Settings > Privacy & Security**, or remove the quarantine attribute with\n> `xattr -d com.apple.quarantine ./redis-di`, and then run it again. On Windows, if Microsoft Defender\n> SmartScreen blocks it, choose **More info > Run anyway**."
    },
    {
      "id": "supported-versions-of-kubernetes-and-openshift",
      "title": "Supported versions of Kubernetes and OpenShift",
      "role": "compatibility",
      "text": "RDI only supports versions of Kubernetes and OpenShift that have\nnot yet reached end-of-life (EOL). See the\n[Kubernetes](https://kubernetes.io/releases/) and\n[OpenShift](https://access.redhat.com/support/policy/updates/openshift)\nlifecycle pages for the latest updates."
    },
    {
      "id": "install-the-rdi-helm-chart",
      "title": "Install the RDI Helm chart",
      "role": "setup",
      "text": "1.  Scaffold the default `values.yaml` file from the chart into a local\n    `rdi-values.yaml` file:\n\n    [code example]\n\n1.  Open the `rdi-values.yaml` file you just created, change or add the appropriate\n    values for your installation, and delete the values you have not changed to \n    use their default values. \n    See [The `values.yaml` file](#the-valuesyaml-file) for more details.\n\n1.  Run the `helm upgrade --install` command:\n\n    [code example]\n\n    > [!NOTE]\n    > The above command will install RDI in a namespace called\n    > `rdi`. If you want to use a different namespace, pass the option\n    > `-n <custom-namespace>` to the `helm install` command instead.\n\n    &nbsp;\n\n    > [!WARNING]\n    > Only one RDI installation is supported per Kubernetes\n    > cluster. Installing RDI into multiple namespaces in the same cluster is\n    > not supported and will fail. If you need more than one RDI deployment,\n    > use separate Kubernetes clusters."
    },
    {
      "id": "the-valuesyaml-file",
      "title": "The `values.yaml` file",
      "role": "content",
      "text": "The [`values.yaml`](https://helm.sh/docs/topics/charts/#templates-and-values) file inside the\nHelm chart contains the values you can set for the RDI Helm installation.\nSee the comments by each value for more information about the values you may need to add or change \ndepending on your use case.\n\nAt a minimum, you must set the values of `connection.host`, `connection.port`, and `connection.password`\nto enable the basic connection to the RDI database. \nYou must also set `api.jwtKey`, RDI uses this value to encrypt the\n[JSON web token (JWT)](https://jwt.io/) token used by RDI API. Best practice is\nto generate a value containing 32 random bytes of data (equivalent to 256\nbits) and then encode this value as ASCII characters. Use the following\ncommand to generate the random key from the\n[`urandom` special file](https://en.wikipedia.org/wiki//dev/random):\n\n[code example]\n\nIf you use TLS to connect to the RDI database, you must set the\nCA certificate content in `connection.ssl.cacert` (for TLS). In addition, if you\nalso use mTLS, you must set the client certificate and private key contents in\n`connection.ssl.cert`, and `connection.ssl.key`. \n\n-   You can add the certificate content directly in the `rdi-values.yaml` file\n    as follows:\n\n    [code example]\n\n-   Alternatively, you can use the `--set-file` argument to set these values to\n    the content of your certificate files as follows:\n\n    [code example]\n\n> [!NOTE]\n> Please see [these docs](https://redis.io/docs/latest/integrate/redis-data-integration/data-pipelines/prepare-dbs/spanner#6-additional-kubernetes-configuration) if this RDI installation is for use with GCP Spanner.\n\nIf you are deploying to [OpenShift](https://docs.openshift.com/), you must\nset `global.openshift` to `true`:\n\n[code example]\n\nSet `global.securityContext.runAsUser` and\n`global.securityContext.runAsGroup` to the appropriate values for your\nOpenShift environment.\n\n[code example]\n\n> [!WARNING]\n> The default OpenShift Security Context Constraints (SCCs)\n> will not allow RDI to run if `global.securityContext.runAsUser`\n> and `global.securityContext.runAsGroup` have their default values of `1000`.\n> You must edit your `rdi-values.yaml` file to ensure these values are\n> in the valid range for your OpenShift environment.\n>\n> Use the following [OpenShift CLI](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/cli_tools/openshift-cli-oc) command\n> to find the user and group ranges for your project:\n>\n> [code example]"
    },
    {
      "id": "configure-the-flink-processor",
      "title": "Configure the Flink processor",
      "role": "configuration",
      "text": "RDI ships with two stream processor implementations: the *classic* processor and the\ndefault [Apache Flink](https://flink.apache.org/)-based *Flink* processor.\nSee\n[Stream processor implementations](https://redis.io/docs/latest/integrate/redis-data-integration/architecture#stream-processor-implementations)\nfor an overview of the differences and\n[Differences between the classic and Flink processors](https://redis.io/docs/latest/integrate/redis-data-integration/architecture/classic-vs-flink)\nfor a side-by-side comparison.\n\nTo configure the Flink processor at the Helm chart level, add the\n`operator.dataPlane.flinkProcessor` block to your `rdi-values.yaml` file. The\nsnippet below shows a few of the most commonly adjusted values. See the\n`flinkProcessor` block in the Helm chart's `values.yaml` for the full set of\nsupported values.\n\n[code example]\n\nConfiguring the Flink processor at the Helm chart level only sets the values\nthat the operator will use when deploying the JobManager and TaskManager workloads.\nA pipeline runs on the Flink processor unless its `config.yaml` sets\n[`processors.type`](https://redis.io/docs/latest/integrate/redis-data-integration/data-pipelines/pipeline-config#processors)\nto `classic`. Fine-tune the Flink runtime\nthrough the `processors.advanced` section of `config.yaml` (see the\n[configuration reference](https://redis.io/docs/latest/integrate/redis-data-integration/reference/config-yaml-reference#processors)).\n\nFor migrating existing pipelines to the Flink processor, see\n[Migrate from the classic processor to the Flink processor](https://redis.io/docs/latest/integrate/redis-data-integration/installation/migration-classic-to-flink)."
    },
    {
      "id": "check-the-installation",
      "title": "Check the installation",
      "role": "content",
      "text": "To verify the status of the K8s deployment, run the following command:\n\n[code example]\n\nThe output looks like the following. Check that the `rdi` release is listed.\nWith RDI 1.8.0 or later, check that the `default` release is also listed.\n\n[code example]\n\nAlso, check that all pods have `Running` status:\n\n[code example]\n\nYou can verify that the RDI API works by running\n[`redis-di info`](https://redis.io/docs/latest/integrate/redis-data-integration/reference/cli/redis-di-info)\nagainst it, or by adding a connection to the RDI API server to\n[Redis Insight](https://redis.io/docs/latest/develop/tools/insight/rdi-connector)."
    },
    {
      "id": "using-ingress-controllers",
      "title": "Using ingress controllers",
      "role": "content",
      "text": "You must ensure that an appropriate\n[ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)\nis available in your K8s cluster to expose the RDI API service via the K8s\n[`Ingress`](https://kubernetes.io/docs/concepts/services-networking/ingress/)\nresource. Follow the documentation of your cloud provider or of\nthe ingress controller to install the controller correctly."
    },
    {
      "id": "using-the-nginx-ingress-controller-on-aks",
      "title": "Using the `nginx` ingress controller on AKS",
      "role": "content",
      "text": "On AKS, if you want to use the open source\n[`nginx`](https://nginx.org/)\n[ingress controller](https://github.com/kubernetes/ingress-nginx/blob/main/README.md#readme)\nrather than the\n[AKS application routing add-on](https://learn.microsoft.com/en-us/azure/aks/app-routing),\nfollow the AKS documentation for\n[creating an unmanaged ingress controller](https://learn.microsoft.com/en-us/troubleshoot/azure/azure-kubernetes/load-bal-ingress-c/create-unmanaged-ingress-controller?tabs=azure-cli).\nSpecifically, ensure that one or both of the following Helm chart values is set:\n\n- `controller.service.annotations.\"service\\.beta\\.kubernetes\\.io/azure-load-balancer-health-probe-request-path\"=/healthz`\n- `controller.service.externalTrafficPolicy=Local`"
    },
    {
      "id": "prepare-your-source-databases",
      "title": "Prepare your source databases",
      "role": "content",
      "text": "Before deploying a pipeline, you must configure each source database to enable CDC. See the\n[Prepare source databases](https://redis.io/docs/latest/integrate/redis-data-integration/data-pipelines/prepare-dbs)\nsection to learn how to do this. A pipeline can capture from more than one source database,\nso you must prepare each one each source separately. See\n[Multiple sources in one pipeline](https://redis.io/docs/latest/integrate/redis-data-integration/data-pipelines/multiple-sources) for details."
    },
    {
      "id": "deploy-a-pipeline",
      "title": "Deploy a pipeline",
      "role": "content",
      "text": "When the Helm installation is complete and you have prepared your source databases for CDC,\nyou are ready to start using RDI. See the guides on how to\n[configure](https://redis.io/docs/latest/integrate/redis-data-integration/data-pipelines) and\n[deploy](https://redis.io/docs/latest/integrate/redis-data-integration/data-pipelines/deploy)\nRDI pipelines for more information. You can also configure and deploy a pipeline\nusing [Redis Insight](https://redis.io/docs/latest/develop/tools/insight). See\n[RDI in Redis Insight](https://redis.io/docs/latest/develop/tools/insight/rdi-connector)\nfor full details on how to connect to RDI and deploy pipelines."
    },
    {
      "id": "uninstall-rdi",
      "title": "Uninstall RDI",
      "role": "content",
      "text": "If you want to remove your RDI K8s installation, first run\nthe following commands. (If you installed RDI into a custom namespace then\nreplace `rdi` with the name of your namespace.)\n\n[code example]\n\n> [!NOTE]\n> The line `kubectl delete pipeline default -n rdi` is only needed for RDI 1.8.0 or above.\n\nIf you also want to delete the keys from your RDI database, connect to it with\n[`redis-cli`](https://redis.io/docs/latest/develop/tools/cli) and run a\n[`FLUSHALL`](https://redis.io/docs/latest/commands/flushall) command."
    }
  ],
  "examples": [
    {
      "id": "before-you-install-ex0",
      "language": "bash",
      "code": "export RDI_VERSION=\n    wget https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/rdi-$RDI_VERSION.tgz",
      "section_id": "before-you-install"
    },
    {
      "id": "create-the-rdi-database-ex0",
      "language": "bash",
      "code": "curl -v -k -d '{\"eviction_policy\": \"noeviction\"}' \\\n    -u '<USERNAME>:<PASSWORD>' \\\n    -H \"Content-Type: application/json\" \\\n    -X PUT https://<CLUSTER_FQDN>:9443/v1/bdbs/<BDB_UID>",
      "section_id": "create-the-rdi-database"
    },
    {
      "id": "create-the-rdi-database-ex1",
      "language": "bash",
      "code": "curl -v -k -d '{\"data_persistence\":\"aof\"}' \\\n    -u '<USERNAME>:<PASSWORD>' \\\n    -H \"Content-Type: application/json\" \n    -X PUT https://<CLUSTER_FQDN>:9443/v1/bdbs/<BDB_UID>\n  curl -v -k -d '{\"aof_policy\":\"appendfsync-every-sec\"}' \\\n    -u '<USERNAME>:<PASSWORD>' \\\n    -H \"Content-Type: application/json\" \\\n    -X PUT https://<CLUSTER_FQDN>:9443/v1/bdbs/<BDB_UID>",
      "section_id": "create-the-rdi-database"
    },
    {
      "id": "using-a-private-image-registry-ex0",
      "language": "yaml",
      "code": "global:\n  # Global image settings.\n  # If using a private image registry, update the default values accordingly.\n  image:\n    registry: your-registry\n    repository: your-repository # If different from \"redis\"\n  \n  # Image pull secrets to be used when using a private image registry.\n  imagePullSecrets:\n    - name: your-secret-name\n\n# ...\n\n# Configuration of the reloader.\nreloader:\n  reloader:\n    # ...\n    deployment:\n      image:\n        name: my-registry.com/my-repo/reloader\n        #...",
      "section_id": "using-a-private-image-registry"
    },
    {
      "id": "download-the-rdi-cli-ex0",
      "language": "bash",
      "code": "export RDI_VERSION=\nwget https://redis-enterprise-software-downloads.s3.amazonaws.com/redis-di/cli/$RDI_VERSION/bin/linux-amd64/redis-di\nchmod +x redis-di\nsudo mv redis-di /usr/local/bin/",
      "section_id": "download-the-rdi-cli"
    },
    {
      "id": "install-the-rdi-helm-chart-ex0",
      "language": "bash",
      "code": "helm show values rdi-<tag>.tgz > rdi-values.yaml",
      "section_id": "install-the-rdi-helm-chart"
    },
    {
      "id": "install-the-rdi-helm-chart-ex1",
      "language": "bash",
      "code": "helm upgrade --install rdi rdi-<tag>.tgz -f rdi-values.yaml -n rdi --create-namespace",
      "section_id": "install-the-rdi-helm-chart"
    },
    {
      "id": "the-valuesyaml-file-ex0",
      "language": "bash",
      "code": "head -c 32 /dev/urandom | base64",
      "section_id": "the-valuesyaml-file"
    },
    {
      "id": "the-valuesyaml-file-ex1",
      "language": "yaml",
      "code": "connection:\n      ssl:\n        enabled: true\n        cacert: |\n          -----BEGIN CERTIFICATE-----\n          ...\n          -----END CERTIFICATE-----\n        cert: |\n          -----BEGIN CERTIFICATE-----\n          ...\n          -----END CERTIFICATE-----\n        key: |\n          -----BEGIN PRIVATE KEY-----\n          ...\n          -----END PRIVATE KEY-----",
      "section_id": "the-valuesyaml-file"
    },
    {
      "id": "the-valuesyaml-file-ex2",
      "language": "bash",
      "code": "helm upgrade --install rdi rdi-<tag>.tar.gz -f rdi-values.yaml -n rdi --create-namespace \\\n      --set connection.ssl.enabled=true \\\n      --set-file connection.ssl.cacert=<path-to-CA-certificate> \\\n      --set-file connection.ssl.cert=<path-to-client-certificate> \\\n      --set-file connection.ssl.key=<path-to-client-key>",
      "section_id": "the-valuesyaml-file"
    },
    {
      "id": "the-valuesyaml-file-ex3",
      "language": "yaml",
      "code": "global:\n  # Indicates whether the deployment is intended for an OpenShift environment.\n  openShift: true",
      "section_id": "the-valuesyaml-file"
    },
    {
      "id": "the-valuesyaml-file-ex4",
      "language": "yaml",
      "code": "global:\n  # Container default security context.\n  # ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container\n  securityContext:\n    runAsNonRoot: true\n    # On OpenShift, user and group 1000 are usually not allowed.\n    # If using OpenShift, set runAsUser and runAsGroup to values in your project's user and group ranges.\n    # You can examine the latter via `oc get projects <rid-project-name> -o yaml | grep \"openshift.io/sa.scc\"`\n    runAsUser: 1000701234\n    runAsGroup: 1000701234\n    allowPrivilegeEscalation: false",
      "section_id": "the-valuesyaml-file"
    },
    {
      "id": "the-valuesyaml-file-ex5",
      "language": "bash",
      "code": "> oc get projects <rid-project-name> -o yaml | grep \"openshift.io/sa.scc\"\n>",
      "section_id": "the-valuesyaml-file"
    },
    {
      "id": "configure-the-flink-processor-ex0",
      "language": "yaml",
      "code": "operator:\n  dataPlane:\n    flinkProcessor:\n      jobManager:\n        # JobManager pod resources.\n        cpu: 0.1\n        memory: 1024\n      taskManager:\n        # TaskManager pod resources.\n        cpu: 1\n        memory: 2048\n        # Number of parallel task slots per TaskManager pod.\n        # Total parallelism is `replicas * numberOfTaskSlots`.\n        numberOfTaskSlots: 1",
      "section_id": "configure-the-flink-processor"
    },
    {
      "id": "check-the-installation-ex0",
      "language": "bash",
      "code": "helm list -n rdi",
      "section_id": "check-the-installation"
    },
    {
      "id": "check-the-installation-ex1",
      "language": "plaintext",
      "code": "NAME   \tNAMESPACE\tREVISION\tUPDATED         STATUS  \tCHART         \tAPP VERSION\ndefault\trdi      \t1       \t2025-05-08 ... \tdeployed\tpipeline-0.1.0\t<tag>\nrdi    \trdi      \t3       \t2025-05-08 ...\tdeployed\trdi-1.0.0",
      "section_id": "check-the-installation"
    },
    {
      "id": "check-the-installation-ex2",
      "language": "bash",
      "code": "kubectl get pod -n rdi\n\nNAME                      READY  STATUS  \tRESTARTS  AGE\ncollector-api-<id>        1/1    Running  0         29m\nrdi-api-<id>              1/1 \t Running \t0      \t  29m\nrdi-operator-<id>         1/1 \t Running \t0      \t  29m\nrdi-reloader-<id>         1/1 \t Running \t0      \t  29m",
      "section_id": "check-the-installation"
    },
    {
      "id": "uninstall-rdi-ex0",
      "language": "bash",
      "code": "kubectl delete pipeline default -n rdi\nhelm uninstall rdi -n rdi\nkubectl delete namespace rdi",
      "section_id": "uninstall-rdi"
    }
  ]
}
