diff --git a/content/operate/kubernetes/7.4.6/_index.md b/content/operate/kubernetes/7.4.6/_index.md new file mode 100644 index 0000000000..0c37a0422f --- /dev/null +++ b/content/operate/kubernetes/7.4.6/_index.md @@ -0,0 +1,17 @@ +--- +Title: Redis Enterprise for Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: The Redis Enterprise operators allows you to use Redis Enterprise for + Kubernetes. +hideListLinks: false +linkTitle: 7.4.6 +weight: 50 +url: '/operate/kubernetes/7.4.6/' +--- + +Kubernetes provides enterprise orchestration of containers and has been widely adopted. Redis Enterprise for Kubernetes provides a simple way to get a Redis Enterprise cluster on Kubernetes and enables more complex deployment scenarios. + diff --git a/content/operate/kubernetes/7.4.6/active-active/_index.md b/content/operate/kubernetes/7.4.6/active-active/_index.md new file mode 100644 index 0000000000..bbf2e5c1b6 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/active-active/_index.md @@ -0,0 +1,99 @@ +--- +Title: Active-Active databases +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Content related to Active-Active Redis Enterprise databases for Kubernetes. +hideListLinks: true +linkTitle: Active-Active databases +weight: 40 +url: '/operate/kubernetes/7.4.6/active-active/' +--- + +On Kubernetes, Redis Enterprise [Active-Active]({{< relref "/operate/rs/databases/active-active/" >}}) databases provide read and write access to the same dataset from different Kubernetes clusters. + +## Active-Active setup methods + +There are two methods for creating an Active-Active database with Redis Enterprise for Kubernetes: + +- The `RedisEnterpriseActiveActiveDatabase` (REAADB) custom resource is available for versions 6.4.2 and later. +- The `crdb-cli` method is available for versions 6.4.2 or earlier. + + +We recommend creating new Active-Active databases using the RedisEnterpriseActiveActiveDatabase (REAADB) custom resource. This allows you to manage your Active-Active database with the operator and ensures you have the latest features and functionality. + +### Active-Active controller method + +Versions 6.4.2-6 or later fully support the Active-Active controller. Some of these features were available as a preview in 6.4.2-4 and 6.4.2-5. Please upgrade to 6.4.2-6 for the full set of general availability features and bug fixes. + +This setup method includes the following steps: + +1. Gather REC credentials and [prepare participating clusters]({{< relref "/operate/kubernetes/active-active/prepare-clusters.md" >}}). +2. Create [`RedisEnterpriseRemoteCluster` (RERC)]({{< relref "/operate/kubernetes/active-active/create-reaadb#create-rerc" >}}) resources. +3. Create [`RedisEnterpriseActiveActiveDatabase` (REAADB)]({{< relref "/operate/kubernetes/active-active/create-reaadb#create-reaadb" >}}) resource. + +### `crdb-cli` method + +For versions 6.4.2 or earlier, this Active-Active setup method includes the following steps: + +1. Install and configure an ingress. +2. Gather configuration details. +3. Add the `ActiveActive` field to the REC spec. +4. Create the database with the `crdb-cli` tool. + +## Redis Enterprise Active-Active controller for Kubernetes + +{{}}These features are supported for general availability in releases 6.4.2-6 and later.{{}} + +[Active-Active]({{< relref "/operate/rs/databases/active-active/" >}}) databases give you read-and-write access to Redis Enterprise clusters (REC) in different Kubernetes clusters or namespaces. Active-Active deployments managed by the Redis Enterprise operator require two additional custom resources: Redis Enterprise Active-Active database (REAADB) and Redis Enterprise remote cluster (RERC). + +To create an Active-Active Redis Enterprise deployment for Kubernetes with these new features, first [prepare participating clusters]({{< relref "/operate/kubernetes/active-active/prepare-clusters.md" >}}) then [create an Active-Active database]({{< relref "/operate/kubernetes/active-active/create-reaadb.md" >}}). + +### Preview versions + +If you are using a preview version of these features (operator version 6.4.2-4 or 6.4.2-5), you'll need to enable the Active-Active controller with the following steps. You need to do this only once per cluster. We recommend using the fully supported 6.4.2-6 version. + +1. Download the custom resource definitions (CRDs) for the most recent release (6.4.2-4) from [redis-enterprise-k8s-docs Github](https://github.com/RedisLabs/redis-enterprise-k8s-docs/tree/master/crds). + +1. Apply the new CRDs for the Redis Enterprise Active-Active database (REAADB) and Redis Enterprise remote cluster (RERC) to install those controllers. + + ```sh + kubectl apply -f crds/reaadb_crd.yaml + kubectl apply -f crds/rerc_crd.yaml + ``` + +1. Enable the Active-Active and remote cluster controllers on the operator ConfigMap. + + ```sh + kubectl patch cm operator-environment-config --type merge --patch "{\"data\": \ + {\"ACTIVE_ACTIVE_DATABASE_CONTROLLER_ENABLED\":\"true\", \ + \"REMOTE_CLUSTER_CONTROLLER_ENABLED\":\"true\"}}" + + +### REAADB custom resource + +Redis Enterprise Active-Active database (REAADB) contains a link to the RERC for each participating cluster, and provides configuration and status to the management plane. + +For a full list of fields and options, see the [REAADB API reference]({{}}). + +### RERC custom resource + +Redis Enterprise remote cluster (RERC) custom resource contains configuration details for all the participating clusters. + +For a full list of fields and options, see the [RERC API reference]({{}}). + +### Limitations + +* Existing Redis databases cannot be migrated to a REAADB. (DOC-3594) +* Admission is not blocking REAADB with `shardCount` which exceeds license quota. (RED-96301) + Workaround: Fix the problems with the REAADB and reapply. +* The `/` value must be unique for each RERC resource. (RED-96302) +* Only global database options are supported, no support for specifying configuration per location. +* No support for migration from old (`crdb-cli`) Active-Active database method to new Active-Active controller. +* No support for REAADB with participating clusters co-located within the same Kubernetes cluster, except for a single designated local participating cluster. + +## More info + +For more general information about Active-Active, see the [Redis Enterprise Software docs]({{< relref "/operate/rs/databases/active-active/" >}}). diff --git a/content/operate/kubernetes/7.4.6/active-active/create-aa-crdb-cli.md b/content/operate/kubernetes/7.4.6/active-active/create-aa-crdb-cli.md new file mode 100644 index 0000000000..404cb4e17f --- /dev/null +++ b/content/operate/kubernetes/7.4.6/active-active/create-aa-crdb-cli.md @@ -0,0 +1,217 @@ +--- +Title: Create Active-Active databases with crdb-cli +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section shows how to set up an Active-Active Redis Enterprise database + on Kubernetes using the Redis Enterprise Software operator. +linkTitle: Create Active-Active with crdb-cli +weight: 99 +url: '/operate/kubernetes/7.4.6/active-active/create-aa-crdb-cli/' +--- +{{}} Versions 6.4.2 and later support the Active-Active database controller. This controller allows you to create Redis Enterprise Active-Active databases (REAADB) and Redis Enterprise remote clusters (RERC) with custom resources. We recommend using the [REAADB method for creating Active-Active databases]({{< relref "/operate/kubernetes/active-active/create-reaadb.md" >}}).{{}} + +On Kubernetes, Redis Enterprise [Active-Active]({{< relref "/operate/rs/databases/active-active/" >}}) databases provide read-and-write access to the same dataset from different Kubernetes clusters. For more general information about Active-Active, see the [Redis Enterprise Software docs]({{< relref "/operate/rs/databases/active-active/" >}}). + +Creating an Active-Active database requires routing [network access]({{< relref "/operate/kubernetes/networking/" >}}) between two Redis Enterprise clusters residing in different Kubernetes clusters. Without the proper access configured for each cluster, syncing between the databases instances will fail. + +This process consists of: + +1. Documenting values to be used in later steps. It's important these values are correct and consistent. +1. Editing the Redis Enterprise cluster (REC) spec file to include the `ActiveActive` section. This will be slightly different depending on the K8s distribution you are using. +1. Creating the database with the `crdb-cli` command. These values must match up with values in the REC resource spec. + +## Prerequisites + +Before creating Active-Active databases, you'll need admin access to two or more working Kubernetes clusters that each have: + +- Routing for external access with an [ingress resources]({{< relref "/operate/kubernetes/networking/ingress.md" >}}) (or [route resources]({{< relref "/operate/kubernetes/networking/routes.md" >}}) on OpenShift). +- A working [Redis Enterprise cluster (REC)]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) with a unique name. +- Enough memory resources available for the database (see [hardware requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}})). + +{{}} The `activeActive` field and the `ingressOrRouteSpec` field cannot coexist in the same REC. If you configured your ingress via the `ingressOrRouteSpec` field in the REC, create your Active-Active database with the RedisEnterpriseActiveActiveDatabase (REAADB) custom resource.{{}} + +## Document required parameters + +The most common mistake when setting up Active-Active databases is incorrect or inconsistent parameter values. The values listed in the resource file must match those used in the crdb-cli command. + +- **Database name** ``: + - Description: Combined with ingress suffix to create the Active-Active database hostname + - Format: string + - Example value: `myaadb` + - How you get it: you choose + - The database name requirements are: + - Maximum of 63 characters + - Only letter, number, or hyphen (-) characters + - Starts with a letter; ends with a letter or digit. + - Database name is not case-sensitive + +You'll need the following information for each participating Redis Enterprise cluster (REC): + +{{}} +You'll need to create DNS aliases to resolve your API hostname ``,``, `` to the IP address for the ingress controller’s LoadBalancer (or routes in Openshift) for each database. To avoid entering multiple DNS records, you can use a wildcard in your alias (such as *.ijk.example.com). +{{}} + +- **REC hostname** ``: + - Description: Hostname used to identify your Redis Enterprise cluster in the `crdb-cli` command. This MUST be different from other participating clusters. + - Format: `..svc.cluster.local` + - Example value: `rec01.ns01.svc.cluster.local` + - How to get it: List all your Redis Enterprise clusters + ```bash + kubectl get rec + ``` +- **API hostname** ``: + - Description: Hostname used to access the Redis Enterprise cluster API from outside the K8s cluster + - Format: string + - Example value: `api.ijk.example.com` +- **Ingress suffix** ``: + - Description: Combined with database name to create the Active-Active database hostname + - Format: string + - Example value: `-cluster.ijk.example.com` +- [**REC admin credentials**]({{< relref "/operate/kubernetes/security/manage-rec-credentials.md" >}}) ` `: + - Description: Admin username and password for the REC stored in a secret + - Format: string + - Example value: username: `user@example.com`, password: `something` + - How to get them: + ```sh + kubectl get secret \ + -o jsonpath='{.data.username}' | base64 --decode + kubectl get secret \ + -o jsonpath='{.data.password}' | base64 --decode + ``` +- **Replication hostname** ``: + - Description: Hostname used inside the ingress for the database + - Format: `` + - Example value: `myaadb-cluster.ijk.example.com` + - How to get it: Combine `` and ` values you documented above. +- **Replication endpoint** ``: + - Description: Endpoint used externally to contact the database + - Format: `:443` + - Example value: `myaadb-cluster.ijk.example.com:443` + - How to get it:`:443` + +## Add `activeActive` section to the REC resource file + +From inside your K8s cluster, edit your Redis Enterprise cluster (REC) resource to add the following to the `spec` section. Do this for each participating cluster. + + The operator uses the API hostname (``) to create an ingress to the Redis Enterprise cluster's API; this only happens once per cluster. Every time a new Active-Active database instance is created on this cluster, the operator creates a new ingress route to the database with the ingress suffix (``). The hostname for each new database will be in the format ``. + +### Using ingress controller + +1. If your cluster uses an [ingress controller]({{< relref "/operate/kubernetes/networking/ingress.md" >}}), add the following to the `spec` section of your REC resource file. + + Nginx: + + ```sh + activeActive: + apiIngressUrl: + dbIngressSuffix: + ingressAnnotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/backend-protocol: HTTPS + nginx.ingress.kubernetes.io/ssl-passthrough: "true" + method: ingress + ``` + +HAproxy: + + ```sh + activeActive: + apiIngressUrl: + dbIngressSuffix: + ingressAnnotations: + kubernetes.io/ingress.class: haproxy + ingress.kubernetes.io/ssl-passthrough: "true" + method: ingress + ``` + +2. After the changes are saved and applied, you can verify a new ingress was created for the API. + + ```sh + $ kubectl get ingress + NAME HOSTS ADDRESS PORTS AGE + rec01 api.abc.cde.example.com 225161f845b278-111450635.us.cloud.com 80 24h + ``` + +3. Verify you can access the API from outside the K8s cluster. + + ```sh + curl -k -L -i -u : https:///v1/cluster + ``` + + If the API call fails, create a DNS alias that resolves your API hostname (``) to the IP address for the ingress controller's LoadBalancer. + +4. Make sure you have DNS aliases for each database that resolve your API hostname ``,``, `` to the IP address of the ingress controller’s LoadBalancer. To avoid entering multiple DNS records, you can use a wildcard in your alias (such as `*.ijk.example.com`). + +#### If using Istio Gateway and VirtualService + +No changes are required to the REC spec if you are using [Istio]({{< relref "/operate/kubernetes/networking/istio-ingress.md" >}}) in place of an ingress controller. The `activeActive` section added above creates ingress resources. The two custom resources used to configure Istio (Gateway and VirtualService) replace the need for ingress resources. + +{{}} +These custom resources are not controlled by the operator and will need to be configured and maintained manually. +{{}} + +For each cluster, verify the VirtualService resource has two `- match:` blocks in the `tls` section. The hostname under `sniHosts:` should match your ``. + +### Using OpenShift routes + +1. Make sure your Redis Enterprise cluster (REC) has a different name (``) than any other participating clusters. If not, you'll need to manually rename the REC or move it to a different namespace. + You can check your new REC name with: + ```sh + oc get rec -o jsonpath='{.items[0].metadata.name}' + ``` + + If the rec name was modified, reapply [scc.yaml](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift/scc.yaml) to the namespace to reestablish security privileges. + + ```sh + oc apply -f scc.yaml + oc adm policy add-scc-to-group redis-enterprise-scc-v2 system:serviceaccounts: + ``` + + Releases before 6.4.2-6 use the earlier version of the SCC, named `redis-enterprise-scc`. + +1. Make sure you have DNS aliases for each database that resolve your API hostname ``,``, `` to the route IP address. To avoid entering multiple DNS records, you can use a wildcard in your alias (such as `*.ijk.example.com`). + +1. If your cluster uses [OpenShift routes]({{< relref "/operate/kubernetes/networking/routes.md" >}}), add the following to the `spec` section of your Redis Enterprise cluster (REC) resource file. + + ```sh + activeActive: + apiIngressUrl: + dbIngressSuffix: + method: openShiftRoute + ``` + +1. Make sure you have DNS aliases that resolve to the routes IP for both the API hostname (``) and the replication hostname (``) for each database. To avoid entering each database individually, you can use a wildcard in your alias (such as `*.ijk.example.com`). + +1. After the changes are saved and applied, you can see that a new route was created for the API. + + ```sh + $ oc get route + NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD + rec01 api-openshift.apps.abc.example.com rec01 api passthrough None + ``` + +## Create an Active-Active database with `crdb-cli` + +The `crdb-cli` command can be run from any Redis Enterprise pod hosted on any participating K8s cluster. You'll need the values for the [required parameters]({{< relref "/operate/kubernetes/active-active/create-aa-crdb-cli#document-required-parameters" >}}) for each Redis Enterprise cluster. + +```sh +crdb-cli crdb create \ + --name \ + --memory-size \ + --encryption yes \ + --instance fqdn=,url=https://,username=,password=,replication_endpoint=,replication_tls_sni= \ + --instance fqdn=,url=https://,username=,password=,replication_endpoint=,replication_tls_sni= +``` + +To create a database that syncs between more than two instances, add additional `--instance` arguments. + +See the [`crdb-cli` reference]({{< relref "/operate/rs/references/cli-utilities/crdb-cli" >}}) for more options. + +## Test your database + +The easiest way to test your Active-Active database is to set a key-value pair in one database and retrieve it from the other. + +You can connect to your databases with the instructions in [Manage databases]({{< relref "/operate/kubernetes/re-databases/db-controller#connect-to-a-database" >}}). Set a test key with `SET foo bar` in the first database. If your Active-Active deployment is working properly, when connected to your second database, `GET foo` should output `bar`. diff --git a/content/operate/kubernetes/7.4.6/active-active/create-reaadb.md b/content/operate/kubernetes/7.4.6/active-active/create-reaadb.md new file mode 100644 index 0000000000..a47886b761 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/active-active/create-reaadb.md @@ -0,0 +1,174 @@ +--- +Title: Create Active-Active database (REAADB) +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: null +linkTitle: Create database +weight: 30 +url: '/operate/kubernetes/7.4.6/active-active/create-reaadb/' +--- + +{{}}This feature is supported for general availability in releases 6.4.2-6 and later. Some of these features were available as a preview in 6.4.2-4 and 6.4.2-5. Please upgrade to 6.4.2-6 for the full set of general availability features and bug fixes.{{}} + +## Prerequisites + +To create an Active-Active database, make sure you've completed all the following steps and have gathered the information listed below each step. + +1. Configure the [admission controller and ValidatingWebhook]({{< relref "/operate/kubernetes/deployment/quick-start.md#enable-the-admission-controller/" >}}). + {{}}These are installed and enabled by default on clusters created via the OpenShift OperatorHub. {{}} + +2. Create two or more [RedisEnterpriseCluster (REC) custom resources]({{< relref "/operate/kubernetes/deployment/quick-start#create-a-redis-enterprise-cluster-rec" >}}) with enough [memory resources]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}). + * Name of each REC (``) + * Namespace for each REC (``) + +3. Configure the REC [`ingressOrRoutes` field]({{< relref "/operate/kubernetes/networking/ingressorroutespec.md" >}}) and [create DNS records]({{< relref "/operate/kubernetes/networking/ingressorroutespec#configure-dns/" >}}). + * REC API hostname (`api--.`) + * Database hostname suffix (`-db--.`) + +4. [Prepare participating clusters]({{< relref "/operate/kubernetes/active-active/prepare-clusters.md" >}}) + * RERC name (`) + * RERC secret name (`redis-enterprise-`) + +For a list of example values used throughout this article, see the [Example values](#example-values) section. + +## Create `RedisEnterpriseRemoteCluster` resources {#create-rerc} + +1. Create a `RedisEnterpriseRemoteCluster` (RERC) custom resource file for each participating Redis Enterprise cluster (REC). + + Below are examples of RERC resources for two participating clusters. Substitute your own values to create your own resource. + + Example RERC (`rerc-ohare`) for the REC named `rec-chicago` in the namespace `ns-illinois`: + + ```yaml + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseRemoteCluster + metadata: + name: rerc-ohare + spec: + recName: rec-chicago + recNamespace: ns-illinois + apiFqdnUrl: api-rec-chicago-ns-illinois.example.com + dbFqdnSuffix: -db-rec-chicago-ns-illinois.example.com + secretName: redis-enterprise-rerc-ohare + ``` + + Example RERC (`rerc-raegan`) for the REC named `rec-arlington` in the namespace `ns-virginia`: + + ```yaml + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseRemoteCluster + metadata: + name: rerc-reagan + spec: + recName: rec-arlington + recNamespace: ns-virginia + apiFqdnUrl: test-example-api-rec-arlington-ns-virginia.example.com + dbFqdnSuffix: -example-cluster-rec-arlington-ns-virginia.example.com + secretName: redis-enterprise-rerc-reagan + ``` + + For more details on RERC fields, see the [RERC API reference]({{}}). + +1. Create a Redis Enterprise remote cluster from each RERC custom resource file. + + ```sh + kubectl create -f + ``` + +1. Check the status of your RERC. If `STATUS` is `Active` and `SPEC STATUS` is `Valid`, then your configurations are correct. + + ```sh + kubectl get rerc + ``` + + The output should look similar to: + + ```sh + kubectl get rerc rerc-ohare + + NAME STATUS SPEC STATUS LOCAL + rerc-ohare Active Valid true + ``` + + In case of errors, review the RERC custom resource events and the Redis Enterprise operator logs. + +## Create `RedisEnterpriseActiveActiveDatabase` resource {#create-reaadb} + +1. Create a `RedisEnterpriseActiveActiveDatabase` (REAADB) custom resource file meeting the naming requirements and listing the names of the RERC custom resources created in the last step. + + Naming requirements: + * less than 63 characters + * contains only lowercase letters, numbers, or hyphens + * starts with a letter + * ends with a letter or digit + + Example REAADB named `reaadb-boeing` linked to the REC named `rec-chicago` with two participating clusters and a global database configuration with shard count set to 3: + + ```yaml + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseActiveActiveDatabase + metadata: + name: reaadb-boeing + spec: + globalConfigurations: + databaseSecretName: + memorySize: 200MB + shardCount: 3 + participatingClusters: + - name: rerc-ohare + - name: rerc-reagan + ``` + + {{}}Sharding is disabled on Active-Active databases created with a `shardCount` of 1. Sharding cannot be enabled after database creation. {{}} + + For more details on RERC fields, see the [RERC API reference]({{}}). + +1. Create a Redis Enterprise Active-Active database from the REAADB custom resource file. + + ```sh + kubectl create -f + ``` + +1. Check the status of your RERC. If `STATUS` is `Active` and `SPEC STATUS` is `Valid`, your configurations are correct. + + ```sh + kubectl get reaadb + ``` + + The output should look similar to: + + ```sh + kubectl get reaadb reaadb-boeing + + NAME STATUS SPEC STATUS LINKED REDBS REPLICATION STATUS + reaadb-boeing active Valid up + ``` + + + In case of errors, review the REAADB custom resource events and the Redis Enterprise operator logs. + +## Example values + +This article uses the following example values: + +#### Example cluster 1 + +* REC name: `rec-chicago` +* REC namespace: `ns-illinois` +* RERC name: `rerc-ohare` +* RERC secret name: `redis-enterprise-rerc-ohare` +* API FQDN: `api-rec-chicago-ns-illinois.example.com` +* DB FQDN suffix: `-db-rec-chicago-ns-illinois.example.com` + +#### Example cluster 2 + +* REC name: `rec-arlington` +* REC namespace: `ns-virginia` +* RERC name: `rerc-raegan` +* RERC secret name: `redis-enterprise-rerc-reagan` +* API FQDN: `api-rec-arlington-ns-virginia.example.com` +* DB FQDN suffix: `-db-rec-arlington-ns-virginia.example.com` + diff --git a/content/operate/kubernetes/7.4.6/active-active/edit-clusters.md b/content/operate/kubernetes/7.4.6/active-active/edit-clusters.md new file mode 100644 index 0000000000..2907ec069a --- /dev/null +++ b/content/operate/kubernetes/7.4.6/active-active/edit-clusters.md @@ -0,0 +1,158 @@ +--- +Title: Edit participating clusters for Active-Active database +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Steps to add or remove a participating cluster to an existing Active-Active + database with Redis Enterprise for Kubernetes. +linkTitle: Edit participating clusters +weight: 40 +url: '/operate/kubernetes/7.4.6/active-active/edit-clusters/' +--- +{{}}This feature is supported for general availability in releases 6.4.2-6 and later. Some of these features were available as a preview in 6.4.2-4 and 6.4.2-5. Please upgrade to 6.4.2-6 for the full set of general availability features and bug fixes. and later.{{}} + +## Add a participating cluster + +Use the following steps to add a participating cluster to an existing Redis Enterprise Active-Active database (REAADB) for Kubernetes. + +### Prerequisites + +To prepare the Redis Enterprise cluster (REC) to participate in an Active-Active database, perform the following tasks from [Prepare participating clusters]({{< relref "/operate/kubernetes/active-active/prepare-clusters.md" >}}): + +- Make sure the cluster meets the hardware and naming requirements. +- Enable the Active-Active controllers. +- Configure external routing. +- Configure `ValidatingWebhookConfiguration`. + +### Collect REC credentials + +To communicate with other clusters, all participating clusters need access to the admin credentials for all other clusters. + +1. Get the REC credentials secret for the new participating cluster. + + ```sh + kubectl get secret -o yaml + ``` + + This example shows an admin credentials secret for an REC named `rec-boston`: + + ```yaml + apiVersion: v1 + data: + password: ABcdef12345 + username: GHij56789 + kind: Secret + metadata: + name: rec-boston + type: Opaque + ``` + +1. Create a secret for the new participating cluster named `redis-enterprise-` and add the username and password. + + The example below shows a secret file for a remote cluster named `rerc-logan` . + + ```yaml + apiVersion: v1 + data: + password: ABcdef12345 + username: GHij56789 + kind: Secret + metadata: + name: redis-enterprise-rerc-logan + type: Opaque + ``` + +1. Apply the file of collected secrets to every participating REC. + + ```sh + kubectl apply -f + ``` + + If the admin credentials for any of the clusters change, update and reapply the file to all clusters. + +### Create RERC + +1. From one of the existing participating clusters, create a `RedisEnterpriseRemoteCluster` (RERC) custom resource for the new participating cluster. + + This example shows an RERC custom resource for an REC named `rec-boston` in the namespace `ns-massachusetts`. + + ```yaml + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseRemoteCluster + metadata: + name: rerc-logan + spec: + recName: rec-boston + recNamespace: ns-massachusetts + apiFqdnUrl: test-example-api-rec-boston-ns-massachusetts.example.com + dbFqdnSuffix: -example-cluster-rec-boston-ns-massachusetts.example.com + secretName: redis-enterprise-rerc-logan + ``` + +1. Create the RERC custom resource. + + ```sh + kubectl create -f + ``` + +1. Check the status of the newly created RERC custom resource. + + ```sh + kubectl get rerc + ``` + + The output should look like this: + + ```sh + NAME STATUS SPEC STATUS LOCAL + rerc-logan Active Valid true + ``` + +### Edit REAADB spec + +1. Patch the REAADB spec to add the new RERC name to the `participatingClusters`, replacing `` and `` with your own values. + + ```sh + kubectl patch reaadb < --type merge --patch '{"spec": {"participatingClusters": [{"name": ""}]}}' + ``` + +1. View the REAADB `participatingClusters` status to verify the cluster was added. + + ```sh + kubectl get reaadb -o=jsonpath='{.status.participatingClusters}' + ``` + + The output should look like this: + + ```sh + [{"id":1,"name":"rerc-ohare"},{"id":2,"name":"rerc-reagan"},{"id":3,"name":"rerc-logan"}] + ``` + +## Remove a participating cluster + +1. On an existing participating cluster,remove the desired cluster from the `participatingCluster` section of the REAADB spec. + + ```sh + kubectl edit reaadb + ``` + +1. On each of the other participating clusters, verify the status is `active` and the spec status is `Valid` and the cluster was removed. + + ```sh + kubectl get reaadb }}This feature is supported for general availability in releases 6.4.2-6 and later. Some of these features were available as a preview in 6.4.2-4 and 6.4.2-5. Please upgrade to 6.4.2-6 for the full set of general availability features and bug fixes. and later.{{}} + +Before a RedisEnterpriseCluster (REC) can participate in an Active-Active database, it needs an accompanying RedisEnterpriseRemoteCluster (RERC) custom resource. The RERC contains details allowing the REC to link to the RedisEnterpriseActiveActiveDatabase (REAADB). The RERC resource is listed in the REAADB resource to become a participating cluster for the Active-Active database. + +The RERC controller periodically connects to the local REC endpoint via its external address, to ensure it’s setup correctly. For this to work, the external load balancer must support [NAT hairpinning](https://en.wikipedia.org/wiki/Network_address_translation#NAT_loopback). In some cloud environments, this may involve disabling IP preservation for the load balancer target groups. + +For more details, see the [RERC API reference]({{}}). + +## Edit RERC + +Use the `kubectl patch rerc --type merge --patch` command to patch the local RERC custom resource with your changes. For a full list of available fields, see the [RERC API reference]({{}}). + +The following example edits the `dbFqdnSuffix` field for the RERC named `rerc-ohare`. + +```sh +kubectl patch rerc rerc-ohare --type merge --patch \ +'{"spec":{"dbFqdnSuffix": "-example2-cluster-rec-chicago-ns-illinois.example.com"}}' +``` + +## Update RERC secret + +If the credentials are changed or updated for a REC participating cluster, you need to manually edit the RERC secret and apply it to all participating clusters. + +1. On the local cluster, update the secret with new credentials and name it with the following convention: `redis-enterprise-`. + + A secret for a remote cluster named `rerc-ohare` would be similar to the following: + + ```yaml + apiVersion: v1 + data: + password: PHNvbWUgcGFzc3dvcmQ+ + username: PHNvbWUgdXNlcj4 + kind: Secret + metadata: + name: redis-enterprise-rerc-ohare + type: Opaque + ``` + +1. Apply the file. + + ```sh + kubectl apply -f + ``` + +1. Watch the RERC to verify the status is "Active" and the spec status is "Valid." + + ```sh + kubectl get rerc + ``` + + The output should look like this: + + ```sh + NAME STATUS SPEC STATUS LOCAL + rerc-ohare Active Valid true + ``` + + To troubleshoot invalid configurations, view the RERC custom resource events and the [Redis Enterprise operator logs]({{< relref "/operate/kubernetes/logs/" >}}). + +1. Verify the status of each REAADB using that RERC is "Active" and the spec status is "Valid." + + ```sh + kubectl get reaadb reaadb-boeing + + NAME STATUS SPEC STATUS LINKED REDBS REPLICATION STATUS + reaadb-boeing active Valid up + ``` + + To troubleshoot invalid configurations, view the RERC custom resource events and the [Redis Enterprise operator logs]({{< relref "/operate/kubernetes/logs/" >}}). + +1. Repeat the above steps on all other participating clusters. diff --git a/content/operate/kubernetes/7.4.6/active-active/global-config.md b/content/operate/kubernetes/7.4.6/active-active/global-config.md new file mode 100644 index 0000000000..012825995c --- /dev/null +++ b/content/operate/kubernetes/7.4.6/active-active/global-config.md @@ -0,0 +1,107 @@ +--- +Title: Set global database configurations +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: The REAADB contains the field '.spec.globalConfigurations' and through + this the database configurations are set. +linkTitle: Global configuration +weight: 50 +url: '/operate/kubernetes/7.4.6/active-active/global-config/' +--- +{{}}This feature is supported for general availability in releases 6.4.2-6 and later. Some of these features were available as a preview in 6.4.2-4 and 6.4.2-5. Please upgrade to 6.4.2-6 for the full set of general availability features and bug fixes.{{}} + +The Redis Enterprise Active-Active database (REAADB) custom resource contains the field `.spec.globalConfigurations`. This field sets configurations for the Active-Active database across all participating clusters, such as memory size, shard count, and the global database secrets. + +The [REAADB API reference]({{}}) contains a full list of available fields. + +## Edit global configurations + +1. Edit or patch the REAADB custom resource with your global configuration changes. + + The example command below patches the REAADB named `reaadb-boeing` to set the global memory size to 200MB: + + ```sh + kubectl patch reaadb reaadb-boeing --type merge --patch \ + '{"spec": {"globalConfigurations": {"memorySize": "200mb"}}}' + ``` + +1. Verify the status is `active` and the spec status is `Valid`. + + This example shows the status for the `reaadb-boeing` database. + + ```sh + kubectl get reaadb reaadb-boeing + + NAME STATUS SPEC STATUS GLOBAL CONFIGURATIONS REDB LINKED REDBS + reaadb-boeing active Valid + ``` + +1. View the global configurations on each participating cluster to verify they are synced. + + ```sh + kubectl get reaadb -o yaml + ``` + +## Edit global configuration secrets + +This section edits the secrets under the REAADB `.spec.globalConfigurations` section. For more information and all available fields, see the [REAADB API reference]({{}}). + + +1. On an existing participating cluster, generate a YAML file containing the database secret with the relevant data. + + This example shoes a secret named `my-db-secret` with the password `my-password` encoded in base 64. + + ```yaml + apiVersion: v1 + data: + password: bXktcGFzcw + kind: Secret + metadata: + name: my-db-secret + type: Opaque + ``` + +1. Apply the secret file from the previous step, substituting your own value for ``. + + ```sh + kubectl apply -f + ``` + +1. Patch the REAADB custom resource to specify the database secret, substituting your own values for `` and ``. + + ```sh + kubectl patch reaadb --type merge --patch \ + '{"spec": {"globalConfigurations": {"databaseSecretName": "secret-name"}}}' + ``` + +1. Check the REAADB status for an `active` status and `Valid` spec status. + + ```sh + kubectl get reaadb + + NAME STATUS SPEC STATUS GLOBAL CONFIGURATIONS REDB LINKED REDBS + reaadb-boeing active Valid + ``` + +1. On each other participating cluster, check the secret status. + + ``sh + kubectl get reaadb -o=jsonpath='{.status.secretsStatus}' + ``` + + The output should show the status as `Invalid`. + + ```sh + [{"name":"my-db-secret","status":"Invalid"}] + ``` + +1. Sync the secret on each participating cluster. + + ```sh + kubectl apply -f + ``` + +1. Repeat the previous two steps on every participating cluster. diff --git a/content/operate/kubernetes/7.4.6/active-active/global-db-secret.md b/content/operate/kubernetes/7.4.6/active-active/global-db-secret.md new file mode 100644 index 0000000000..5039795eab --- /dev/null +++ b/content/operate/kubernetes/7.4.6/active-active/global-db-secret.md @@ -0,0 +1,76 @@ +--- +Title: Set global database secret +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: The REAADB contains the field '.spec.globalConfigurations' to set the + global database secret. +linkTitle: Global database secret +weight: 50 +url: '/operate/kubernetes/7.4.6/active-active/global-db-secret/' +--- +{{}}This feature is supported for general availability in releases 6.4.2-6 and later. Some of these features were available as a preview in 6.4.2-4 and 6.4.2-5. Please upgrade to 6.4.2-6 for the full set of general availability features and bug fixes.{{}} + +## Set global database secret + +One of the fields available for `globalConfigurations` is `databaseSecretName` which can point to a secret containing the database password. To set the database secret name and sync the data to all participating clusters, follow the steps below. + +To edit other global configruations, see [global configuration]({{< relref "/operate/kubernetes/active-active/global-config.md" >}}) + +1. On an existing participating cluster, generate a YAML file containing the database secret with the database password. + + This example shoes a secret named `my-db-secret` with the password `my-password` encoded in base 64. + + ```yaml + apiVersion: v1 + data: + password: bXktcGFzcw + kind: Secret + metadata: + name: my-db-secret + type: Opaque + ``` + +1. Apply the secret file from the previous step, substituting your own value for ``. + + ```sh + kubectl apply -f + ``` + +1. Patch the REAADB custom resource to specify the database secret, substituting your own values for `` and ``. + + ```sh + kubectl patch reaadb --type merge --patch \ + '{"spec": {"globalConfigurations": {"databaseSecretName": "secret-name"}}}' + ``` + +1. Check the REAADB status for an `active` status and `Valid` spec status. + + ```sh + kubectl get reaadb + + NAME STATUS SPEC STATUS GLOBAL CONFIGURATIONS REDB LINKED REDBS + example-aadb-1 active Valid + ``` + +1. On each other participating cluster, check the secret status. + + ``sh + kubectl get reaadb -o=jsonpath='{.status.secretsStatus}' + ``` + + The output should show the status as `Invalid`. + + ```sh + [{"name":"my-db-secret","status":"Invalid"}] + ``` + +1. Sync the secret on each participating cluster. + + ```sh + kubectl apply -f + ``` + +1. Repeat the previous two steps on every participating cluster. diff --git a/content/operate/kubernetes/7.4.6/active-active/prepare-clusters.md b/content/operate/kubernetes/7.4.6/active-active/prepare-clusters.md new file mode 100644 index 0000000000..795f38c1a9 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/active-active/prepare-clusters.md @@ -0,0 +1,166 @@ +--- +Title: Prepare participating clusters +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Prepare your participating RECs to be part of an Active-Active database + deployment. +linkTitle: Prepare clusters +weight: 10 +url: '/operate/kubernetes/7.4.6/active-active/prepare-clusters/' +--- + +{{}}This feature is supported for general availability in releases 6.4.2-6 and later. Some of these features were available as a preview in 6.4.2-4 and 6.4.2-5. Please upgrade to 6.4.2-6 for the full set of general availability features and bug fixes.{{}} + +## Prepare participating clusters + +Before you prepare your clusters to participate in an Active-Active database, make sure you've completed all the following steps and have gathered the information listed below each step. + +1. Configure the [admission controller and ValidatingWebhook]({{< relref "/operate/kubernetes/deployment/quick-start.md#enable-the-admission-controller/" >}}). + +2. Create two or more [RedisEnterpriseCluster (REC) custom resources]({{< relref "/operate/kubernetes/deployment/quick-start#create-a-redis-enterprise-cluster-rec" >}}) with enough [memory resources]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}). + * Name of each REC (``) + * Namespace for each REC (``) + +3. Configure the REC [`ingressOrRoutes` field]({{< relref "/operate/kubernetes/networking/ingressorroutespec.md" >}}) and [create DNS records]({{< relref "/operate/kubernetes/networking/ingressorroutespec#configure-dns/" >}}). + * REC API hostname (`api--.`) + * Database hostname suffix (`-db--.`) + +Next you'll [collect credentials](#collect-rec-credentials) for your participating clusters and create secrets for the RedisEnterprsieRemoteCluster (RERC) to use. + +For a list of example values used throughout this article, see the [Example values](#example-values) section. + +### Preview versions + +If you are using a preview version of these features (operator version 6.4.2-4 or 6.4.2-5), you'll need to enable the Active-Active controller with the following steps. You need to do this only once per cluster. We recommend using the fully supported 6.4.2-6 version. + +1. Download the custom resource definitions (CRDs) for the most recent release (6.4.2-4) from [redis-enterprise-k8s-docs Github](https://github.com/RedisLabs/redis-enterprise-k8s-docs/tree/master/crds). + +1. Apply the new CRDs for the Redis Enterprise Active-Active database (REAADB) and Redis Enterprise remote cluster (RERC) to install those controllers. + + ```sh + kubectl apply -f crds/reaadb_crd.yaml + kubectl apply -f crds/rerc_crd.yaml + ``` + +1. Enable the Active-Active and remote cluster controllers on the operator ConfigMap. + + ```sh + kubectl patch cm operator-environment-config --type merge --patch "{\"data\": \ + {\"ACTIVE_ACTIVE_DATABASE_CONTROLLER_ENABLED\":\"true\", \ + \"REMOTE_CLUSTER_CONTROLLER_ENABLED\":\"true\"}}" + +## Collect REC credentials + +To communicate with other clusters, all participating clusters will need access to the admin credentials for all other clusters. + +1. Create a file to hold the admin credentials for all participating RECs (such as `all-rec-secrets.yaml`). + +1. Within that file, create a new secret for each participating cluster named `redis-enterprise-`. + + The example below shows a file (`all-rec-secrets.yaml`) holding secrets for two participating clusters: + + ```yaml + apiVersion: v1 + data: + password: + username: + kind: Secret + metadata: + name: redis-enterprise-rerc-ohare + type: Opaque + + --- + + apiVersion: v1 + data: + password: + username: + kind: Secret + metadata: + name: redis-enterprise-rerc-reagan + type: Opaque + + ``` + +1. Get the REC credentials secret for each participating cluster. + + ```sh + kubectl get secret -o yaml + ``` + + The admin credentials secret for an REC named `rec-chicago` would be similar to this: + + ```yaml + apiVersion: v1 + data: + password: ABcdef12345 + username: GHij56789 + kind: Secret + metadata: + name: rec-chicago + type: Opaque + ``` + +1. Add the username and password to the new secret for that REC and namespace. + + This example shows the collected secrets file (`all-rec-secrets.yaml`) for `rerc-ohare` (representing `rec-chicago` in namespace `ns-illinois`) and `rerc-reagan` (representing `rec-arlington` in namespace `ns-virginia`). + + ```yaml + apiVersion: v1 + data: + password: ABcdef12345 + username: GHij56789 + kind: Secret + metadata: + name: redis-enterprise-rerc-ohare + type: Opaque + + --- + + apiVersion: v1 + data: + password: KLmndo123456 + username: PQrst789010 + kind: Secret + metadata: + name: redis-enterprise-rerc-reagan + type: Opaque + + ``` + +1. Apply the file of collected secrets to every participating REC. + + ```sh + kubectl apply -f + ``` + + If the admin credentials for any of the clusters changes, the file will need to be updated and reapplied to all clusters. + +## Next steps + +Now you are ready to [create your Redis Enterprise Active-Active database]({{< relref "/operate/kubernetes/active-active/create-reaadb.md" >}}). + +## Example values + +This article uses the following example values: + +#### Example cluster 1 + +* REC name: `rec-chicago` +* REC namespace: `ns-illinois` +* RERC name: `rerc-ohare` +* RERC secret name: `redis-enterprise-rerc-ohare` +* API FQDN: `api-rec-chicago-ns-illinois.example.com` +* DB FQDN suffix: `-db-rec-chicago-ns-illinois.example.com` + +#### Example cluster 2 + +* REC name: `rec-arlington` +* REC namespace: `ns-virginia` +* RERC name: `rerc-raegan` +* RERC secret name: `redis-enterprise-rerc-reagan` +* API FQDN: `api-rec-arlington-ns-virginia.example.com` +* DB FQDN suffix: `-db-rec-arlington-ns-virginia.example.com` diff --git a/content/operate/kubernetes/7.4.6/architecture/_index.md b/content/operate/kubernetes/7.4.6/architecture/_index.md new file mode 100644 index 0000000000..18fc4f323d --- /dev/null +++ b/content/operate/kubernetes/7.4.6/architecture/_index.md @@ -0,0 +1,49 @@ +--- +Title: Redis Enterprise for Kubernetes architecture +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section provides an overview of the architecture and considerations + for Redis Enterprise for Kubernetes. +hideListLinks: true +linkTitle: Architecture +weight: 11 +url: '/operate/kubernetes/7.4.6/architecture/' +--- +Redis bases its Kubernetes architecture on several vital concepts. + +## Layered architecture + +Kubernetes is an excellent orchestration tool, but it was not designed to deal with all the nuances associated with operating Redis Enterprise. Therefore, it can fail to react accurately to internal Redis Enterprise edge cases or failure conditions. Also, Kubernetes orchestration runs outside the Redis Cluster deployment and may fail to trigger failover events, for example, in split network scenarios. + +To overcome these issues, Redis created a layered architecture approach that splits responsibilities between operations Kubernetes does well, procedures Redis Enterprise Cluster excels at, and the processes both can orchestrate together. The figure below illustrated this layered orchestration architecture: + +{{< image filename="/images/k8s/kubernetes-overview-layered-orchestration.png" >}} + +## Operator based deployment + +Operator allows Redis to maintain a unified deployment solution across various Kubernetes environments, i.e., RedHat OpenShift, VMware Tanzu (Tanzu Kubernetes Grid, and Tanzu Kubernetes Grid Integrated Edition, formerly known as PKS), Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS), and vanilla (upstream) Kubernetes. Statefulset and anti-affinity guarantee that each Redis Enterprise node resides on a Pod that is hosted on a different VM or physical server. See this setup shown in the figure below: + +{{< image filename="/images/k8s/kubernetes-overview-unified-deployment.png" >}} + +## Network-attached persistent storage {#networkattached-persistent-storage} + +Kubernetes and cloud-native environments require that storage volumes be network-attached to the compute instances, to guarantee data durability. Otherwise, if using local storage, data may be lost in a Pod failure event. See the figure below: + +{{< image filename="/images/k8s/kubernetes-overview-network-attached-persistent-storage.png" >}} + +On the left-hand side (marked #1), Redis Enterprise uses local ephemeral storage for durability. When a Pod fails, Kubernetes launches another Pod as a replacement, but this Pod comes up with empty local ephemeral storage, and the data from the original Pod is now lost. + +On the right-hand side of the figure (marked #2), Redis Enterprise uses network-attached storage for data durability. In this case, when a Pod fails, Kubernetes launches another Pod and automatically connects it to the storage device used by the failed Pod. Redis Enterprise then instructs the Redis Enterprise database instance/s running on the newly created node to load the data from the network-attached storage, which guarantees a durable setup. + +Redis Enterprise is not only great as an in-memory database but also extremely efficient in the way it uses persistent storage, even when the user chooses to configure Redis Enterprise to write every change to the disk. Compared to a disk-based database that requires multiple interactions (in most cases) with a storage device for every read or write operation, Redis Enterprise uses a single IOPS, in most cases, for a write operation and zero IOPS for a read operation. As a result, significant performance improvements are seen in typical Kubernetes environments, as illustrated in the figures below: + +{{< image filename="/images/k8s/kubernetes-overview-performance-improvements-read.png" >}}{{< image filename="/images/k8s/kubernetes-overview-performance-improvements-write.png" >}} + +## Multiple services on each pod + +Each Pod includes multiple Redis Enterprise instances (multiple services). We found that the traditional method of deploying a Redis Enterprise database over Kubernetes, in which each Pod includes only a single Redis Enterprise instance while preserving a dedicated CPU, is notably inefficient. Redis Enterprise is exceptionally fast and in many cases can use just a fraction of the CPU resources to deliver the requested throughput. Furthermore, when running a Redis Enterprise Cluster with multiple Redis Enterprise instances across multiple Pods, the Kubernetes network, with its multiple vSwitches, can quickly become the deployment’s bottleneck. Therefore, Redis took a different approach to managing Redis Enterprise over the Kubernetes environment. Deploying multiple Redis Enterprise database instances on a single Pod allows us to better utilize the hardware resources used by the Pod such as CPU, memory, and network while keeping the same level of isolation. See the figure below: + +{{< image filename="/images/k8s/kubernetes-overview-multiple-services-per-pod.png" >}} diff --git a/content/operate/kubernetes/7.4.6/architecture/operator.md b/content/operate/kubernetes/7.4.6/architecture/operator.md new file mode 100644 index 0000000000..8f9ddb3a21 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/architecture/operator.md @@ -0,0 +1,72 @@ +--- +Title: Redis Enterprise for Kubernetes operator-based architecture +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section provides a description of the design of Redis Enterprise + for Kubernetes. +linkTitle: What is an operator? +weight: 30 +url: '/operate/kubernetes/7.4.6/architecture/operator/' +--- +Redis Enterprise is the fastest, most efficient way to +deploy and maintain a Redis Enterprise cluster in Kubernetes. + +## What is an operator? + +An operator is a [Kubernetes custom controller](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-controllers) which extends the native K8s API. + +Operators were developed to handle sophisticated, stateful applications +that the default K8s controllers aren’t able to handle. While stock +Kubernetes controllers—for example, +[StatefulSets](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/)—are +ideal for deploying, maintaining and scaling simple stateless +applications, they are not equipped to handle access to stateful +resources, upgrade, resize and backup of more elaborate, clustered +applications such as databases. + +## What does an operator do? + +In abstract terms, Operators encode human operational knowledge into +software that can reliably manage an application in an extensible, +modular way and do not hinder the basic primitives that comprise the K8s +architecture. + +Redis created an operator that deploys and manages the lifecycle of a Redis Enterprise Cluster. + +The Redis Enterprise operator acts as a custom controller for the custom +resource RedisEnterpriseCluster, or ‘rec’, which is defined through K8s +CRD ([custom resource definition](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-resources)) +and deployed with a yaml file. + +The operator functions include: + +- Validating the deployed Cluster spec (for example, requiring the +deployment of an odd number of nodes) +- Implementing a reconciliation loop to monitor all the applicable +resources +- Logging events +- Enabling a simple mechanism for editing the Cluster spec + +The Redis Enterprise operator functions as the logic “glue” between the +K8s infrastructure and the Redis Enterprise Cluster. + +The operator creates the following resources: + +- Service account +- Service account role +- Service account role binding +- Secret – holds the cluster username, password, and license +- Statefulset – holds Redis Enterprise nodes +- The Services Manager deployment – exposes databases and tags nodes +- The Redis UI service +- The service that runs the REST API + Sentinel +- Pod Disruption Budget +- Optionally: a deployment for the Service Broker, including services and a PVC + +The following diagram shows the high-level architecture of the Redis +Enterprise operator: + +{{< image filename="/images/k8s/k8-high-level-architecture-diagram-of-redis-enterprise.png" >}} diff --git a/content/operate/kubernetes/delete-custom-resources.md b/content/operate/kubernetes/7.4.6/delete-custom-resources.md similarity index 99% rename from content/operate/kubernetes/delete-custom-resources.md rename to content/operate/kubernetes/7.4.6/delete-custom-resources.md index 6ec48ffd3d..04e8113700 100644 --- a/content/operate/kubernetes/delete-custom-resources.md +++ b/content/operate/kubernetes/7.4.6/delete-custom-resources.md @@ -9,6 +9,7 @@ description: This article explains how to delete Redis Enterprise clusters and R Enterprise databases from your Kubernetes environment. linkTitle: Delete custom resources weight: 70 +url: '/operate/kubernetes/7.4.6/delete-custom-resources/' --- ## Multi-namespace management diff --git a/content/operate/kubernetes/7.4.6/deployment/_index.md b/content/operate/kubernetes/7.4.6/deployment/_index.md new file mode 100644 index 0000000000..06408c25a7 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/_index.md @@ -0,0 +1,40 @@ +--- +Title: Deployment +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section lists the different ways to set up and run Redis Enterprise + for Kubernetes. You can deploy on variety of Kubernetes distributions both on-prem + and in the cloud via our Redis Enterprise operator for Kubernetes. +hideListLinks: false +linkTitle: Deployment +weight: 11 +url: '/operate/kubernetes/7.4.6/deployment/' +--- + +This section lists the different ways to set up and run Redis Enterprise for Kubernetes. You can deploy on variety of Kubernetes distributions both on-prem and in the cloud via our Redis Enterprise operator for Kubernetes. + +## Operator overview {#overview} + +Redis Enterprise for Kubernetes uses [custom resource definitions](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions) (CRDs) to create and manage Redis Enterprise clusters (REC) and Redis Enterprise databases (REDB). + +The operator is a deployment that runs within a given namespace. These operator pods must run with sufficient privileges to create the Redis Enterprise cluster resources within that namespace. + +When the operator is installed, the following resources are created: + +* a service account under which the operator will run +* a set of roles to define the privileges necessary for the operator to perform its tasks +* a set of role bindings to authorize the service account for the correct roles (see above) +* the CRD for a Redis Enterprise cluster (REC) +* the CRD for a Redis Enterprise database (REDB) +* the operator itself (a deployment) + +The operator currently runs within a single namespace and is scoped to operate only on the Redis Enterprise cluster in that namespace. + +## Compatibility + +Before installing, check [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) to see which Redis Enterprise operator version supports your Kubernetes distribution. + + diff --git a/content/operate/kubernetes/7.4.6/deployment/container-images.md b/content/operate/kubernetes/7.4.6/deployment/container-images.md new file mode 100644 index 0000000000..2c1f5ec10a --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/container-images.md @@ -0,0 +1,254 @@ +--- +Title: Use a private registry for container images +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section details how the Redis Enterprise Software and Kubernetes + operator images can be configured to be pulled from a variety of sources. This page + describes how to configure alternate private repositories for images, plus some + techniques for handling public repositories with rate limiting. +linktitle: Use a private container registry +weight: 92 +url: '/operate/kubernetes/7.4.6/deployment/container-images/' +--- + +Redis Enterprise Software, its Kubernetes operator, and the Service Rigger +are all distributed as separate container images. +Your Kubernetes deployment will pull these images as needed. + You can control where these images are +pulled from within the operator deployment and also via the +Redis Enterprise custom resources. + +In general, images for deployments that do not have a registry domain +name (e.g., `gcr.io` or `localhost:5000`) are pulled from the default registry associated +with the Kubernetes cluster. A plain reference to `redislabs/redis` will likely pull from DockerHub +(except on OpenShift where it pulls from Red Hat). + +For security reasons (e.g., in air-gapped environments), you may want to pull the images +from a public registry once and then push them to a private registry under +your control. + +{{}}It is very important that the images you are pushing to the private registry have the same exact version tag as the original images. {{}} + +Furthermore, because [Docker rate limits public pulls](https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/), +you may want to consider pulling images from a +private registry to avoid deployment failures when you hit your DockerHub rate limit. + +The information below will help you track and configure where your deployments pull container images. + +{{< note >}} +**IMPORTANT** +* Each version of the Redis Enterprise operator is mapped to a specific version of Redis Enterprise Software. The semantic versions always match (for example, 7.2.4), although the specific release numbers may be different (for example, 7.2.4-7 is the operator version for Redis Enterprise Software 7.2.4-64). +* A specific operator version only supports a specific Redis Enterprise version. Other combinations of operator and Redis Enterprise versions are **not supported**. +{{< /note >}} + + +## Find container sources + +Every pod in your deployed application has a source registry. Any image not prefixed by a registry domain name (e.g., "gcr.io") will pull from the default registry for the Kubernetes cluster (i.e., DockerHub). You can use the commands below to discover the pull sources for the images on your cluster. + +To list all the images used by your cluster: + +```sh +kubectl get pods --all-namespaces -o jsonpath="{..image}" |tr -s '[[:space:]]' '\n' | uniq -c +``` + +To specifically determine the pull source for the Redis Enterprise operator itself, run the following command: + +```sh +kubectl get pods --all-namespaces -o jsonpath="{..image}" |tr -s '[[:space:]]' '\n' | uniq -c | grep redislabs +``` + +You can limit this command to specific namespaces by replacing the `--all-namespaces` parameter with +a set of `-n {namespace}` parameters, where each `{namespace}` is a specific +namespace of interest on your cluster. + +## Create a private container registry + +You can set up a private container registry in a couple of ways: + +* On-premise via [Docker registry](https://docs.docker.com/registry/deploying/), [Red Hat Quay](https://www.redhat.com/en/technologies/cloud-computing/quay), or other providers +* Cloud provider based registries (e.g., Azure Container Registry, Google Container Registry, etc.). + +Once you have set up a private container registry, you will identify the container registry using: + +* A domain name +* A port (optional) +* A repository path (optional) + +## Push images to a private container registry + +Important images for a Redis Enterprise Software deployment include: + +* Redis Enterprise Software +* Bootstrapping a Redis Enterprise cluster node (in the operator image) +* The Service Rigger +* The Redis Enterprise Software operator + +You will need to push all these images to your private container registry. In general, +to push the images you must: + + 1. [Pull](https://docs.docker.com/engine/reference/commandline/pull/) the various images locally for the Redis Enterprise Software, the Service Rigger, and the operator. + 2. Tag the local images with the private container registry, repository, and version tag. + 3. [Push](https://docs.docker.com/engine/reference/commandline/push/) the newly tagged images. + +The example below shows the commands for pushing the images for Redis Enterprise Software and its operator to a private container registry: + +```sh +PRIVATE_REPO=...your repo... +RS_VERSION=7.2.4-64 +OPERATOR_VERSION=7.2.4-7 +docker pull redislabs/redis:${RS_VERSION} +docker pull redislabs/operator:${OPERATOR_VERSION} +docker pull redislabs/k8s-controller:${OPERATOR_VERSION} +docker tag redislabs/redis:${RS_VERSION} ${PRIVATE_REPO}/redislabs/redis:${RS_VERSION} +docker tag redislabs/operator:${OPERATOR_VERSION} ${PRIVATE_REPO}/redislabs/operator:${OPERATOR_VERSION} +docker tag redislabs/k8s-controller:${OPERATOR_VERSION} ${PRIVATE_REPO}/redislabs/k8s-controller:${OPERATOR_VERSION} +docker push ${PRIVATE_REPO}/redislabs/redis:${RS_VERSION} +docker push ${PRIVATE_REPO}/redislabs/operator:${OPERATOR_VERSION} +docker push ${PRIVATE_REPO}/redislabs/k8s-controller:${OPERATOR_VERSION} +``` + +## Configure deployments to use a private container registry + +Once you push your images to your private container registry, you need to +configure your deployments to use that registry for Redis Enterprise Software and operator +deployments. The operator container image is configured directly by the operator deployment +bundle. The Redis Enterprise cluster pod (RS and bootstrapper) and Service Rigger +images are configured in the Redis Enterprise custom resource. + +Depending on your Kubernetes platform, your private container registry may +require authentication. If you do need authentication, add a [pull secret](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) to your namespace. Then you'll need to configure Kubernetes and the operator to use the pull secret. The two following sections have examples of adding the `imagePullSecrets` to the operator deployment and `pullSecrets` to the cluster custom resource. + +### Specify the operator image source + +The operator bundle contains the operator deployment and the reference to the operator image (`redislabs/operator`). To use a private container registry, you must +change this image reference in your operator deployment file **before** you deploy the operator. If you apply this change to modify an existing operator deployment, the operator's pod will restart. + +In the operator deployment file, 'containers:image' should point to the same repository and tag you used when [pushing]({{< relref "/operate/kubernetes/deployment/container-images.md#push-images-to-a-private-container-registry" >}}) to the private container registry: + +```sh +${PRIVATE_REPO}/redislabs/operator:${OPERATOR_VERSION} +``` + +The example below specifies a 7.2.4-7 operator image in a Google Container Registry: + +```YAML +apiVersion: apps/v1 +kind: Deployment +metadata: + name: redis-enterprise-operator +spec: + replicas: 1 + selector: + matchLabels: + name: redis-enterprise-operator + template: + metadata: + labels: + name: redis-enterprise-operator + spec: + serviceAccountName: redis-enterprise-operator + containers: + - name: redis-enterprise-operator + image: gcr.io/yourproject/redislabs/operator:7.2.4-7 +... +``` + +If your container registry requires a pull secret, configure `imagePullSecrets` on the operator deployment: + +```YAML +spec: + template: + spec: + imagePullSecrets: + - name: regcred +``` + +### Specify the Redis Enterprise cluster images source + +A Redis Enterprise cluster managed by the operator consists of three +container images: + +* **`redislabs/redis`**: the Redis Enterprise Software container image +* **`redislabs/operator`**: the bootstrapper is packaged within the operator container image +* **`redislabs/k8s-controller`**: the Service Rigger container image + +By default, a new Redis Enterprise cluster is created using the +container images listed above. These container images are pulled from the K8s cluster's default +container registry. + +To [pull](https://docs.docker.com/engine/reference/commandline/pull/) the Redis Enterprise container images from +a private container registry, you must specify them in the +Redis Enterprise cluster custom resource. + +Add the following sections to the `spec` section of your RedisEnterpriseCluster resource file: + + * **`redisEnterpriseImageSpec`**: controls the Redis Enterprise Software container image. *The version should match the RS version associated with the operator version*. + * **`bootstrapperImageSpec`**": controls the bootstrapper container image. *The version must match the operator version*. + * **`redisEnterpriseServicesRiggerImageSpec`**: controls the Service Rigger container image. *The version must match the operator version*. + +The REC custom resource example below pulls all three container images from a GCR private registry: + +```YAML +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + redisEnterpriseImageSpec: + imagePullPolicy: IfNotPresent + repository: gcr.io/yourproject/redislabs/redis + versionTag: 7.2.4-64 + bootstrapperImageSpec: + imagePullPolicy: IfNotPresent + repository: gcr.io/yourproject/redislabs/operator + versionTag: 7.2.4-7 + redisEnterpriseServicesRiggerImageSpec: + imagePullPolicy: IfNotPresent + repository: gcr.io/yourproject/redislabs/k8s-controller + versionTag: 7.2.4-7 +``` + +If your private container registry requires pull secrets, you must add `pullSecrets` +to the `spec` section: + +```YAML +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + pullSecrets: + - name: regcred + redisEnterpriseImageSpec: + imagePullPolicy: IfNotPresent + repository: gcr.io/yourproject/redislabs/redis + versionTag: 7.2.4-64 + bootstrapperImageSpec: + imagePullPolicy: IfNotPresent + repository: gcr.io/yourproject/redislabs/operator + versionTag: 7.2.4-7 + redisEnterpriseServicesRiggerImageSpec: + imagePullPolicy: IfNotPresent + repository: gcr.io/yourproject/redislabs/k8s-controller + versionTag: 7.2.4-7 +``` + +## Rate limiting with DockerHub + +Docker has [rate limits for image pulls](https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/). +Anonymous users are allowed a certain number of pulls every 6 hours. For authenticated users, the limit is larger. +These rate limits may affect your Kubernetes cluster in a number of ways: + +* The cluster nodes will likely be treated as a single anonymous user. +* The number of pulls during a deployment might exceed the rate limit for other deployment dependencies, including the operator, Redis Enterprise Software, or other non-Redis pods. +* Pull failures may prevent your deployment from downloading the required images in a timely manner. Delays here can affect the stability of deployments used by the Redis Enterprise operator. + +For these reasons, you should seriously consider where your images +are pulled from to **avoid failures caused by rate limiting**. The easiest solution +is to push the required images to a private container registry under your control. diff --git a/content/operate/kubernetes/7.4.6/deployment/deployment-options.md b/content/operate/kubernetes/7.4.6/deployment/deployment-options.md new file mode 100644 index 0000000000..faa5028675 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/deployment-options.md @@ -0,0 +1,59 @@ +--- +Title: Flexible deployment options +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Redis Enterprise for Kubernetes allows you to deploy to multiple namespaces. + This article describes flexible deployment options you can use to meet your specific + needs. +linkTitle: Deployment options +weight: 12 +url: '/operate/kubernetes/7.4.6/deployment/deployment-options/' +--- +You can deploy Redis Enterprise for Kubernetes in several different ways depending on your database needs. + +Multiple Redis Enterprise database resources (REDB) can be associated with single Redis Enterprise cluster resource (REC) even if they reside in different namespaces. + +The Redis Enterprise cluster (REC) custom resource must reside in the same namespace as the Redis Enterprise operator. + +{{}} Multi-namespace installations don't support Active-Active databases (REEADB). Only databases created with the REDB resource are supported in multi-namespace deployments at this time.{{}} + + +## Single REC and single namespace (one-to-one) + +The standard and simplest deployment deploys your Redis Enterprise databases (REDB) in the same namespace as the Redis Enterprise cluster (REC). No additional configuration is required for this, since there is no communication required to cross namespaces. See [Deploy Redis Enterprise for Kubernetes]({{< relref "/operate/kubernetes/deployment/quick-start.md" >}}). + +{{< image filename="/images/k8s/k8s-deploy-one-to-one.png" >}} + +## Single REC and multiple namespaces (one-to-many) + +Multiple Redis Enterprise databases (REDB) spread across multiple namespaces within the same K8s cluster can be associated with the same Redis Enterprise cluster (REC). See [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace.md" >}}) for more information. + +{{< image filename="/images/k8s/k8s-deploy-one-to-many.png" >}} + +## Multiple RECs and multiple namespaces (many-to-many) + +A single Kubernetes cluster can contain multiple Redis Enterprise clusters (REC), as long as they reside in different namespaces. Each namespace can host only one REC and each operator can only manage one REC. + +You have the flexibility to create databases in separate namespaces, or in the same namespace as the REC, or combine any of the supported deployment options above. This configuration is geared towards use cases that require multiple Redis Enterprise clusters with greater isolation or different cluster configurations. + +See [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace.md" >}}) for more information. + + +{{< image filename="/images/k8s/k8s-deploy-many-to-many.png" >}} + +## Unsupported deployment patterns + +### Cross-cluster operations + +Redis Enterprise for Kubernetes does not support operations that cross Kubernetes clusters. Redis Enterprise clusters (REC) work inside a single K8s cluster. Crossing clusters could result in functional and security issues. + +{{< image filename="/images/k8s/k8s-deploy-cross-namespaces.png" >}} + +### Multiple RECs in one namespace + +Redis Enterprise for Kubernetes does not support multiple Redis Enterprise clusters (REC) in the same namespace. Creating more than one REC in the same namespace will result in errors. + +{{< image filename="/images/k8s/k8s-deploy-multicluster-antipattern.png" >}} diff --git a/content/operate/kubernetes/7.4.6/deployment/openshift/_index.md b/content/operate/kubernetes/7.4.6/deployment/openshift/_index.md new file mode 100644 index 0000000000..a89f46e026 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/openshift/_index.md @@ -0,0 +1,43 @@ +--- +Title: Deploy Redis Enterprise for Kubernetes with OpenShift +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: A quick introduction to the steps necessary to get a Redis Enterprise + cluster installed in your OpenShift Kubernetes cluster +hideListLinks: true +linkTitle: OpenShift +weight: 11 +url: '/operate/kubernetes/7.4.6/deployment/openshift/' +--- +The deployment of Redis Enterprise clusters is managed with the Redis Enterprise operator that you deploy in the namespace for your project. +To create a database that your application +workloads can use: + +1. Install the Redis Enterprise operator. + +1. Create a Redis Enterprise CRD to describe your desired cluster. + +1. The operator reads this cluster description and deploys the various components on your K8s cluster. + +1. Once running, use the Redis Enterprise cluster to create a database. + +1. The operator automatically exposes the new database as a K8s service. + +## For OpenShift via the OperatorHub + +To [create a database on an OpenShift 4.x cluster via the OperatorHub]({{< relref "/operate/kubernetes/deployment/openshift/openshift-operatorhub" >}}) you only need to have the [OpenShift 4.x cluster installed](https://docs.openshift.com/container-platform/4.3/welcome/index.html) with at least three nodes that each meet the [minimum requirements for a development installation]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}). + +## For OpenShift via the CLI + +To [create a database on an OpenShift cluster via the CLI]({{< relref "/operate/kubernetes/deployment/openshift/openshift-cli.md" >}}), you need: + +1. An [OpenShift cluster installed](https://docs.openshift.com/container-platform/4.3/welcome/index.html) with at least three nodes that each meet the [minimum requirements for a development installation]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}). +1. The [kubectl package installed](https://kubernetes.io/docs/tasks/tools/install-kubectl/) at version 1.9 or higher +1. The [OpenShift cli installed](https://docs.openshift.com/container-platform/4.2/cli_reference/openshift_cli/getting-started-cli.html) + +## Version compatibility + +To see which version of Redis Enterprise for Kubernetes supports your OpenShift version, see [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}). diff --git a/content/operate/kubernetes/7.4.6/deployment/openshift/old-getting-started-openshift-crdb.md b/content/operate/kubernetes/7.4.6/deployment/openshift/old-getting-started-openshift-crdb.md new file mode 100644 index 0000000000..90cea9a85b --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/openshift/old-getting-started-openshift-crdb.md @@ -0,0 +1,225 @@ +--- +Title: Getting Started with Active-Active (CRDB) on OpenShift with Route-Based Ingress +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: null +draft: true +hidden: true +weight: $weight +url: '/operate/kubernetes/7.4.6/deployment/openshift/old-getting-started-openshift-crdb/' +--- +In this guide, we'll set up an [Active-Active database]({{< relref "/operate/rs/databases/active-active/_index.md" >}}) +(formerly known as CRDB) deployment with Active-Active replication +spanning across two Redis Enterprise clusters over OpenShift, using Redis Enterprise Operator +and OpenShift Route. + +## Overview + +An Active-Active deployment requires connectivity between different Kubernetes clusters. +A router is the most common way to allow such external access. A [router] +(https://docs.openshift.com/container-platform/3.5/architecture/core_concepts/routes.html#architecture-core-concepts-routes) +is configured to accept requests external to the cluster and proxy them into the +cluster based on how the route is configured. Routes are limited to HTTP/HTTPS(SNI)/TLS(SNI), +which covers web applications. + +Typically, a Kubernetes cluster administrator configures a [DNS wildcard entry] +(https://docs.openshift.com/container-platform/3.9/install_config/install/prerequisites.html#prereq-dns) +that resolves to an OpenShift Container Platform node that is running +the OpenShift router. + +The default router in OpenShift is HAProxy, which is a free, fast, and reliable solution +offering high availability, load balancing, and proxying for TCP and HTTP-based applications. + +The Redis Enterprise Operator uses the routes mechanism to expose 2 inter-cluster services: +the Redis Enterprise Cluster API service and the DB service that exposes the Active-Active database. +Both services are used during the creation and management of an Active-Active deployment. +The routes are configured with TLS passthrough. + +{{< note >}} +Routes should have unique hostnames across a Kubernetes cluster. +{{< /note >}} + +## Steps for creating an Active-Active deployment with Service Broker + +Before you create an Active-Active deployment with Service Broker, you must create a cluster +using the REC custom resource, with a Service Broker deployment as covered in +[Getting Started with Kubernetes and Openshift]({{< relref "/operate/platforms/openshift/_index.md" >}}), while noting the following: + +1. Make sure you use the latest versions of the deployment files available on GitHub. +1. Deploy nodes with at least 6GB of RAM in order to accommodate the Active-Active database plan's 5GB database size. +1. Make sure you follow the instructions to deploy the Redis Enterprise Service Broker. + +The peerClusters section in the spec is used for creating an Active-Active with the Service Broker. + +{{< note >}} +This is only relevant for OpenShift deployments, which support Service Brokers natively. +{{< /note >}} + +Copy this section of the REC spec and modify it for your environment. To apply it +to every cluster that will participate in the Active-Active database deployment, edit the cluster yaml file +and apply it using `kubectl apply -f `: + +```yaml + activeActive: + apiIngressUrl: api1.cluster1. + dbIngressSuffix: -cluster1. + method: openShiftRoute + + peerClusters: + - apiIngressUrl: api2.cluster2. + authSecret: cluster2_secret + dbIngressSuffix: -cluster2. + fqdn: ..svc.cluster.local + - apiIngressUrl: api3.cluster3. + authSecret: cluster2_secret + dbIngressSuffix: -cluster3. + fqdn: ..svc.cluster.local +``` + +This block is added to the Service Broker config map when the REC spec changes, and +it triggers a restart of the Service Broker pod to pass the peer clusters configuration +to the service broker. Once the Service Broker pod restarts, you can select the +Active-Active database plan from the OS service catalog UI. + +The elements of the section are: + +- **apiIngressUrl** - The OpenShift hostname that is created using OpenShift route. + +- **dbIngressSuffix** - The suffix of the db route name. The resulting host is +``. This is used by the Redis Enterprise Syncer to +sync data between the databases. + +- **fqdn** - The FQDN of the Kubernetes cluster where the pattern is `. +.svc.cluster.local`. (Remember that the RS cluster name is set in the REC spec). + +- **authSecret** - The Kubernetes secret name that contains the username and password +to access this cluster. + +We need to create a secret to reference from authSecret based on the cluster admin credentials +that were automatically created when the clusters were created. To do this, +repeat the following process for each of the clusters involved: + +1. Login to the OpenShift cluster where your Redis Enterprise Cluster (REC) resides. +1. To find the secret that holds the REC credentials, run: `kubectl get secrets` + + From the secrets listed, you’ll find one that is named after your REC and + of type Opaque, like this: + + ```sh + redis-enterprise-cluster Opaque 3 1d + ``` + +1. Copy the hashed password and username from the file and create a yaml file +with that information in the following format: + + ```yaml + apiVersion: v1 + kind: Secret + metadata: + name: crdb1-cred + type: Opaque + data: + password: NWhYRWU2OWQ= + username: YWRtaW5AYWNtZS5jb20= + ``` + +1. Deploy the newly created secret yaml file in the other clusters: + + ```sh + $ kubectl create -f crdb1-secret.yaml + ``` + + A typical response looks like: + + ``` + secret/crdb1-cred created + ``` + +1. Repeat the process for the other clusters until each cluster has a secret +with the credentials of the other clusters. + +After applying the update cluster deployment file, the Service Broker is redeployed +to apply the changes to the config map. + +Now, proceed to the Openshift web console. + +1. From the left menu, select a project that holds one of your configured clusters and +then select **Add to Project > Browse Catalog**. + + {{< image filename="/images/rs/openshift-crdb-catalog.png" >}} + +1. Find the **Redis Enterprise [Project Name:Cluster Name]** tile and double-click it to start the wizard. + + {{< image filename="/images/rs/openshift-crdb-information.png" >}} + +1. Click **Next** in the Information step. + + {{< image filename="/images/rs/openshift-crdb-plan.png" >}} + +1. Then, to deploy an Active-Active database on the clusters you’ve previously configured, +select the **geo-distributed-redis** plan radio button and click **Next**. + + {{< image filename="/images/rs/openshift-crdb-configuration.png" >}} + +1. Click **Next** on the Configuration step, choose a binding option in the Binding step, +and click **Create**. + + {{< image filename="/images/rs/openshift-crdb-binding.png" >}} + +The Active-Active database connected databases are now created with the specified binding, if you selected a binding. + +{{< image filename="/images/rs/openshift-crdb-results.png" >}} + +You can view the binding by following the link to the secret. + +{{< image filename="/images/rs/openshift-crdb-secret.png" >}} + +## Validating Active-Active database deployment + +To do a basic validation test of database replication: + +1. Connect to one of the cluster pods using the following command: + + ```sh + oc exec -it -0 bash + ``` + +1. At the prompt, launch the redis CLI: + + ```sh + $ redis-cli -h -p -a + ``` + +1. Set some values and verify they have been set: + + ```sh + > set keymaster Vinz + OK + > set gatekeeper Zuul + OK + > get keymaster + "Vinz" + > get gatekeeper + "Zuul" + ``` + +1. Now, exit the CLI and the pod execution environment and login to the synched database +on the other cluster. + + ```sh + oc exec -it -0 bash + $redis-cli -h -p -a + ``` + +1. Retrieve the values you previously set or continue manipulating key:value pairs +and observe the 2-way synchronization, for example: + + ```sh + > get keymaster + "Vinz" + > get gatekeeper + "Zuul" + ``` diff --git a/content/operate/kubernetes/7.4.6/deployment/openshift/old-index.md b/content/operate/kubernetes/7.4.6/deployment/openshift/old-index.md new file mode 100644 index 0000000000..ad4cf67e12 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/openshift/old-index.md @@ -0,0 +1,345 @@ +--- +Title: Redis Enterprise Software deployment for Kubernetes with OpenShift +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Redis Enterprise is supported on OpenShift Kubernetes cluster deployments + via an operator. +draft: true +hidden: true +hideListLinks: false +weight: 60 +url: '/operate/kubernetes/7.4.6/deployment/openshift/old-index/' +--- + +Redis Enterprise is supported on OpenShift Kubernetes cluster deployments via +an operator. The operator is a software component that runs in your +deployment namespace and facilitates deploying and managing +Redis Enterprise clusters. + + + +{{% comment %}} +These are the steps required to set up a Redis Enterprise Software +Cluster with OpenShift. + +Prerequisites: + +1. An [OpenShift cluster installed](https://docs.openshift.com/container-platform/4.8/installing/index.html) at version 4.6 or higher, with at least three nodes (each meeting the [minimum requirements for a development installation]({{< relref "/operate/rs/installing-upgrading/hardware-requirements.md" >}}) +1. The [kubectl package installed](https://kubernetes.io/docs/tasks/tools/install-kubectl/) at version 1.9 or higher +1. The [OpenShift cli installed](https://docs.openshift.com/container-platform/4.8/cli_reference/openshift_cli/getting-started-cli.html) + +## Step 1: Login + +- Log in to your OpenShift account as a super admin (so you have access to all the default projects). +- Create a new project, fill in the name and other details for the project, and click **Create**. + + {{< image filename="/images/rs/getting-started-kubernetes-openshift-image1.png" >}} + +- Click on “admin” (upper right corner) and then “Copy Login.” + + {{< image filename="/images/rs/getting-started-kubernetes-openshift-image4.png" >}} + +- Paste the *login* command into your shell; it should look something like this: + + ```sh + oc login https://your-cluster.acme.com –token=your$login$token + ``` + +- Next, verify that you are using the newly created project. Type: + + ```sh + oc project + ``` + +This will shift to your project rather than the default project (you can verify the project you’re currently using with the *oc project* command). + +## Step 2: Get deployment files + +Clone this repository, which contains the deployment files: + +```sh +git clone https://github.com/RedisLabs/redis-enterprise-k8s-docs +``` + + + +Specifically for the custom resource (cr) yaml file, you may also download and edit one of the files in the [example folder.](https://github.com/RedisLabs/redis-enterprise-k8s-docs/tree/master/examples) + +## Step 3: Prepare your yaml files + +Let’s look at each yaml file to see what requires editing: + +- [scc.yaml](https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/master/openshift/scc.yaml) + + The scc ([Security Context Constraint](https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html)) yaml defines the cluster’s security context constraints, which we will apply to our project later on. We strongly recommend **not** changing anything in this yaml file. + + Apply the file: + + ```sh + oc apply -f scc.yaml + ``` + + You should receive the following response: + + ```sh + securitycontextconstraints.security.openshift.io “redis-enterprise-scc” configured + ``` + + Now you need to bind the scc to your project by typing: + + ```sh + oc adm policy add-scc-to-group redis-enterprise-scc system:serviceaccounts:your_project_name + ``` + + (If you do not remember your project name, run “oc project”) + +- [openshift.bundle.yaml](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift.bundle.yaml) - + + The bundle file includes several declarations: + + 1. rbac (Role-Based Access Control) defines who can access which resources. The Operator application requires these definitions to deploy and manage the entire Redis Enterprise deployment (all cluster resources within a namespace). These include declaration of rules, role and rolebinding. + 1. crd declaration, creating a [CustomResourceDefinition](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions) for your Redis Enterprise Cluster resource. This provides another API resource to be handled by the k8s API server and managed by the operator we will deploy next + 1. operator deployment declaration, creates the operator deployment, which is responsible for managing the k8s deployment and lifecycle of a Redis Enterprise Cluster. Among many other responsibilities, it creates a [stateful set](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) that runs the Redis Enterprise nodes, as pods. The yaml contains the latest image tag representing the latest Operator version available. + + This yaml should be applied as-is, without changes. To apply it: + + ```sh + kubectl apply -f openshift.bundle.yaml + ``` + + You should receive the following response: + + ```sh + role.rbac.authorization.k8s.io/redis-enterprise-operator created + serviceaccount/redis-enterprise-operator created + rolebinding.rbac.authorization.k8s.io/redis-enterprise-operator created + customresourcedefinition.apiextensions.k8s.io/redisenterpriseclusters.app.redislabs.com configured + deployment.apps/redis-enterprise-operator created + ``` + +1. Now, verify that your redis-enterprise-operator deployment is running: + + ```sh + kubectl get deployment -l name=redis-enterprise-operator + ``` + + A typical response will look like this: + + ```sh + NAME READY UP-TO-DATE AVAILABLE AGE + redis-enterprise-operator 1/1 1 1 0m36s + ``` + + + + [sb_rbac.yaml](https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/master/openshift/sb_rbac.yaml) + + If you’re deploying a service broker, also apply the sb_rbac.yaml file. The sb_rbac (Service Broker Role-Based Access Control) yaml defines the access permissions of the Redis Enterprise Service Broker. + + We strongly recommend **not** changing anything in this yaml file. + + To apply it, run: + + ```sh + kubectl apply -f sb_rbac.yaml + ``` + + You should receive the following response: + + ```sh + clusterrole.rbac.authorization.k8s.io/redis-enterprise-operator-sb configured + clusterrolebinding.rbac.authorization.k8s.io/redis-enterprise-operator configured + ``` --> + + + +- The [rec_rhel.yaml](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift/rec_rhel.yaml) defines the configuration of the newly created resource: Redis Enterprise Cluster. This yaml could be renamed your_cluster_name.yaml to keep things tidy, but this isn’t a mandatory step. + + This yaml can be edited to the required use case, however, the sample provided can be used for test/dev and quick start purposes. Here are the main fields you may review and edit: + + - name: “your_cluster_name” (e.g. “demo-cluster”) + - nodes: number_of_nodes_in_the_cluster (Must be an uneven number of at least 3 or greater—[here’s why](https://redislabs.com/redis-enterprise/technology/highly-available-redis/)) + - uiServiceType: service_type + + Service type value can be either ClusterIP or LoadBalancer. This is an optional configuration based on [k8s service types](https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/). The default is ClusterIP. + + - storageClassName: “gp2“ + + This specifies the [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/) used for your nodes’ persistent disks. For example, AWS uses “gp2” as a default, GKE uses “standard” and Azure uses "default"). + + - redisEnterpriseNodeResources: The [compute resources](https://docs.openshift.com/enterprise/3.2/dev_guide/compute_resources.html#dev-compute-resources) required for each node. + - limits – specifies the max resources for a Redis node + - requests – specifies the minimum resources for a Redis node + + For example: + + ```sh + limits + cpu: “4000m” + memory: 4Gi + requests + + cpu: “4000m” + memory: 4Gi + ``` + + The default (if unspecified) is 4 cores (4000m) and 4GB (4Gi). + + {{< note >}} +Resource limits should equal requests ([Learn why](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/topics.md#guaranteed-quality-of-service)). + {{< /note >}} + + - serviceBrokerSpec – + - enabled: \ + + This specifies [persistence](https://redislabs.com/redis-features/persistence) for the Service Broker with an “enabled/disabled” flag. The default is “false.” + + persistentSpec: + storageClassName: “gp2“ + + - redisEnterpriseImageSpec: This configuration controls the Redis Enterprise version used, and where it is fetched from. This is an optional field. The Operator will automatically use the matching RHEL image version for the release. + + [imagePullPolicy](https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/builds_and_image_streams.html#image-pull-policy): + IfNotPresent + Repository: redislabs/redis + versionTag: 5.2.10-22 + + The version tag, as it appears on your repository (e.g. on [DockerHub](https://hub.docker.com/r/redislabs/redis/)). + +## Step 4: Create your cluster + +Once you have your_cluster_name yaml set, you need to apply it to create your Redis Enterprise Cluster: + +```sh +kubectl apply -f your_cluster_name.yaml +``` + +Run kubectl get rec and verify that creation was successful (rec is a shortcut for “RedisEnterpriseClusters”). + +You should receive a response similar to the following: + +```sh +NAME AGE + +Your_cluster_name 17s +``` + +Your Cluster will be ready shortly, typically within a few minutes. + +To check the cluster status, type the following: + +```sh +kubectl get pod +``` + +You should receive a response similar to the following: + +| | | | | | +| ---------------------------------- | ----- | ------- | -------- | --- | +| NAME | READY | STATUS | RESTARTS | AGE | +| your_cluster_name-0 | 2/2 | Running | 0 | 1m | +| your_cluster_name-1 | 2/2 | Running | 0 | 1m | +| your_cluster_name-2 | 2/2 | Running | 0 | 1m | +| your_cluster_name-controller-x-x | 1/1 | Running | 0 | 1m | +| Redis-enterprise-operator-x-x | 1/1 | Running | 0 | 5m | + +Next, create your databases. + +## Step 5: Create a database + +In order to create your database, we will log in to the Redis Enterprise UI. + +- First, apply port forwarding to your Cluster: + + ```sh + kubectl port-forward your_cluster_name-0 8443:8443 + ``` + + {{< note >}} +- your_cluster_name-0 is one of your cluster pods. You may consider running the port-forward command in the background. +- The Openshift UI provides tools for creating additional routing options, including external routes. These are covered in [RedHat Openshift documentation](https://docs.openshift.com/container-platform/3.11/dev_guide/routes.html). + {{< /note >}} + + Next, create your database. + +- Open a browser window and navigate to localhost:8443 + + {{< image filename="/images/rs/getting-started-kubernetes-openshift-image5.png" >}} + +- In order to retrieve your password, navigate to the OpenShift management console, select your project name, go to Resources-\>Secrets-\>your_cluster_name +- Retrieve your password by selecting “Reveal Secret.” + + {{< warning >}} +Do not change the default admin user password in the Redis Enterprise admin console. +Changing the admin password impacts the proper operation of the K8s deployment. + {{< /warning >}} + + {{< image filename="/images/rs/getting-started-kubernetes-openshift-image3.png" >}} + +- Follow the interface’s [instructions to create your database]({{< relref "/operate/rs/administering/creating-databases/_index.md" >}}). + +{{< note >}} +In order to conduct the Ping test through Telnet, you can create a new route to the newly created database port in the same way as described above for the UI port. After you create your database, go to the Openshift management console, select your project name and go to Applications-\>Services. You will see two newly created services representing the database along with their IP and port information, similar to the screenshot below. +{{< /note >}} + +{{< image filename="/images/rs/getting-started-kubernetes-openshift-image6.png" >}} + +{{% /comment %}} diff --git a/content/operate/kubernetes/7.4.6/deployment/openshift/openshift-cli.md b/content/operate/kubernetes/7.4.6/deployment/openshift/openshift-cli.md new file mode 100644 index 0000000000..efab1ab1a9 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/openshift/openshift-cli.md @@ -0,0 +1,248 @@ +--- +Title: Deployment with OpenShift CLI for Redis Enterprise for Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Redis Enterprise for Kubernetes and cluster can be installed via CLI + tools OpenShift +linkTitle: OpenShift CLI +weight: 60 +url: '/operate/kubernetes/7.4.6/deployment/openshift/openshift-cli/' +--- +Use these steps to set up a Redis Enterprise Software cluster with OpenShift. + +## Prerequisites + +- [OpenShift cluster](https://docs.openshift.com/container-platform/4.8/installing/index.html) with at least 3 nodes (each meeting the [minimum requirements for a development installation]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements" >}})) +- [OpenShift CLI](https://docs.openshift.com/container-platform/latest/cli_reference/openshift_cli/getting-started-cli.html) + +To see which version of Redis Enterprise for Kubernetes supports your OpenShift version, see [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}). + +## Deploy the operator + +1. Create a new project. + + ```sh + oc new-project + ``` + +1. Verify the newly created project. + + ```sh + oc project + ``` + +1. Get the deployment files. + + ```sh + git clone https://github.com/RedisLabs/redis-enterprise-k8s-docs + ``` + +1. Deploy the OpenShift operator bundle. + + If you are using version 6.2.18-41 or earlier, you must [apply the security context constraint](#install-security-context-constraint) before the operator bundle. + + ```sh + oc apply -f openshift.bundle.yaml + ``` + + {{< warning >}} +Changes to the `openshift.bundle.yaml` file can cause unexpected results. + {{< /warning >}} + +1. Verify that your `redis-enterprise-operator` deployment is running. + + ```sh + oc get deployment + ``` + + A typical response looks like this: + + ```sh + NAME READY UP-TO-DATE AVAILABLE AGE + redis-enterprise-operator 1/1 1 1 0m36s + ``` + + {{}} +DO NOT modify or delete the StatefulSet created during the deployment process. Doing so could destroy your Redis Enterprise cluster (REC). + {{}} + +## Install security context constraint + +The Redis Enterprise pods must run in OpenShift with privileges set in a [Security Context Constraint](https://docs.openshift.com/container-platform/4.4/authentication/managing-security-context-constraints.html#security-context-constraints-about_configuring-internal-oauth). This grants the pod various rights, such as the ability to change system limits or run as a particular user. + +1. Apply the file `scc.yaml` file. + + {{}} +Do not edit this file. + {{}} + + ```sh + oc apply -f openshift/scc.yaml + ``` + + You should receive the following response: + + ```sh + securitycontextconstraints.security.openshift.io "redis-enterprise-scc-v2" configured + ``` + + Releases before 6.4.2-6 use the earlier version of the SCC, named `redis-enterprise-scc`. + +1. Provide the operator permissions for the pods. + + ```sh + oc adm policy add-scc-to-user redis-enterprise-scc-v2 \ + system:serviceaccount:: + ``` + + {{}} +If you are using version 6.2.18-41 or earlier, add additional permissions for your cluster. + +```sh +oc adm policy add-scc-to-user redis-enterprise-scc \ +system:serviceaccount::redis-enterprise-operator +``` +{{}} + + You can check the name of your project using the `oc project` command. To replace the project name, use `oc edit project myproject`. Replace `rec` with the name of your Redis Enterprise cluster, if different. + +## Create a Redis Enterprise cluster custom resource + +1. Apply the `RedisEnterpriseCluster` resource file ([rec_rhel.yaml](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift/rec_rhel.yaml)). + + You can rename the file to `.yaml`, but it is not required. Examples below use `.yaml`. [Options for Redis Enterprise clusters]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) has more info about the Redis Enterprise cluster (REC) custom resource, or see the [Redis Enterprise cluster API]({{}}) for a full list of options. + + The REC name cannot be changed after cluster creation. + + {{}} +Each Redis Enterprise cluster requires at least 3 nodes. Single-node RECs are not supported. + {{}} + +2. Apply the custom resource file to create your Redis Enterprise cluster. + + ```sh + oc apply -f .yaml + ``` + + The operator typically creates the REC within a few minutes. + +1. Check the cluster status. + + ```sh + oc get pod + ``` + + You should receive a response similar to the following: + + ```sh + NAME | READY | STATUS | RESTARTS | AGE | + | -------------------------------- | ----- | ------- | -------- | --- | + | rec-name-0 | 2/2 | Running | 0 | 1m | + | rec-name-1 | 2/2 | Running | 0 | 1m | + | rec-name-2 | 2/2 | Running | 0 | 1m | + | rec-name-controller-x-x | 1/1 | Running | 0 | 1m | + | Redis-enterprise-operator-x-x | 1/1 | Running | 0 | 5m | + ``` + +## Configure the admission controller + +{{< embed-md "k8s-admission-webhook-cert.md" >}} + +### Limit the webhook to relevant namespaces + +If not limited, the webhook intercepts requests from all namespaces. If you have several REC objects in your Kubernetes cluster, limit the webhook to the relevant namespaces. If you aren't using multiple namespaces, skip this step. + +1. Verify your namespace is labeled and the label is unique to this namespace, as shown in the next example. + + ```sh + apiVersion: v1 + kind: Namespace + metadata: + labels: + namespace-name: staging + name: staging + ``` + +1. Patch the webhook spec with the `namespaceSelector` field. + + ```sh + cat > modified-webhook.yaml <}} +For releases before 6.4.2-4, use this command instead: + +```sh +oc patch ValidatingWebhookConfiguration \ + redb-admission --patch "$(cat modified-webhook.yaml)" +``` + +The 6.4.2-4 release introduces a new `ValidatingWebhookConfiguration` to replace `redb-admission`. See the [6.4.2-4 release notes]({{< relref "/operate/kubernetes/release-notes/6-4-2-releases/" >}}). + {{}} + +### Verify admission controller installation + +Apply an invalid resource as shown below to force the admission controller to reject it. If it applies successfully, the admission controller is not installed correctly. + +```sh +oc apply -f - << EOF +apiVersion: app.redislabs.com/v1alpha1 +kind: RedisEnterpriseDatabase +metadata: + name: redis-enterprise-database +spec: + evictionPolicy: illegal +EOF +``` + +You should see this error from the admission controller webhook `redisenterprise.admission.redislabs`. + +```sh +Error from server: error when creating "STDIN": admission webhook "redisenterprise.admission.redislabs" denied the request: eviction_policy: u'illegal' is not one of [u'volatile-lru', u'volatile-ttl', u'volatile-random', u'allkeys-lru', u'allkeys-random', u'noeviction', u'volatile-lfu', u'allkeys-lfu'] +``` + +## Create a Redis Enterprise database custom resource + +The operator uses the instructions in the Redis Enterprise database (REDB) custom resources to manage databases on the Redis Enterprise cluster. + +1. Create a `RedisEnterpriseDatabase` custom resource. + + This example creates a test database. For production databases, see [create a database]({{< relref "/operate/kubernetes/re-databases/db-controller.md#create-a-database" >}}) and [RedisEnterpriseDatabase API reference]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}). + + ```sh + cat << EOF > /tmp/redis-enterprise-database.yml + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseDatabase + metadata: + name: redis-enterprise-database + spec: + memorySize: 100MB + EOF + ``` + +1. Apply the newly created REDB resource. + + ```sh + oc apply -f /tmp/redis-enterprise-database.yml + ``` + +## More info + +- [Redis Enterprise cluster API]({{}}) +- [Redis Enterprise database API]({{}}) diff --git a/content/operate/kubernetes/7.4.6/deployment/openshift/openshift-operatorhub.md b/content/operate/kubernetes/7.4.6/deployment/openshift/openshift-operatorhub.md new file mode 100644 index 0000000000..71e54ebb84 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/openshift/openshift-operatorhub.md @@ -0,0 +1,92 @@ +--- +Title: Deploy Redis Enterprise with OpenShift OperatorHub +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: OpenShift provides the OperatorHub where you can install the Redis Enterprise + operator from the administrator user interface. +linkTitle: OpenShift OperatorHub +weight: 70 +url: '/operate/kubernetes/7.4.6/deployment/openshift/openshift-operatorhub/' +--- + +You can deploy Redis Enterprise for Kubernetes from the Red Hat OpenShift CLI. You can also use a UI, [OperatorHub](https://docs.openshift.com/container-platform/4.11/operators/index.html) (Red Hat) to install operators and create custom resources. + +To see which version of Redis Enterprise for Kubernetes supports your OpenShift version, see [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}). + +## Install the Redis Enterprise operator + +{{}} If using version 6.2.18-41 or earlier, [Install the security context constraint](#install-security-context-constraint) before installing the operator. {{}} + +1. Select **Operators > OperatorHub**. + +2. Search for _Redis Enterprise_ in the search dialog and select the **Redis Enterprise Operator provided by Redis** marked as **Certified**. + + By default, the image is pulled from Red Hat's registry. + +3. On the **Install Operator** page, specify the namespace for the operator. + + Only one namespace per operator is supported. + +4. Update the **channel** with the version you're installing. + + For more information about specific versions, see the [release notes]({{< relref "/operate/kubernetes/release-notes/" >}}). + +5. Choose an approval strategy. + + Use **Manual** for production systems to ensure the operator is only upgraded by approval. + +6. Select **Install** and approve the install plan. + + You can monitor the subscription status in **Operators > Installed Operators**. + +{{}}DO NOT modify or delete the StatefulSet created during the deployment process. Doing so could destroy your Redis Enterprise cluster (REC).{{}} + +## Install security context constraint + +The Redis Enterprise pods must run in OpenShift with privileges set in a [Security Context Constraint](https://docs.openshift.com/container-platform/4.4/authentication/managing-security-context-constraints.html#security-context-constraints-about_configuring-internal-oauth). This grants the pod various rights, such as the ability to change system limits or run as a particular user. + +{{}} + Before creating any clusters, install the security context constraint (SCC) for the operator in [scc.yaml](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift/scc.yaml). +{{}} + +You only need to install the SCC once, but you must not delete it. + +1. Select the project you'll be using or create a new project. + +1. Download [`scc.yaml`](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift/scc.yaml). + +1. Apply the file to install the security context constraint. + + ```sh + oc apply -f scc.yaml + ``` + +After the install, the OperatorHub automatically uses the constraint for Redis Enterprise node pods. + +{{< note >}} +If you are using the recommended RedisEnterpriseCluster name of `rec`, the SCC is automatically bound to the RedisEnterpriseCluster after install. + +If you choose a different name for the RedisEnterpriseCluster, or override the default service account name, you must manually bind the SCC to the RedisEnterpriseCluster’s service account: + + ```sh + oc adm policy add-scc-to-user redis-enterprise-scc-v2 \ + system:serviceaccount:: + ``` + +{{< /note >}} + +## Create Redis Enterprise custom resources + +The **Installed Operators**->**Operator details** page shows the provided APIs: **RedisEnterpriseCluster** and **RedisEnterpriseDatabase**. You can select **Create instance** to create custom resources using the OperatorHub interface. + +Use the YAML view to create a custom resource file or let OperatorHub generate the YAML file for you by specifying your configuration options in the form view. + + The REC name cannot be changed after cluster creation. + +{{}} In versions 6.4.2-4 and 6.4.2-5, REC creation might fail when using the form view due to an error related to the cluster level LDAP. To avoid this, use the YAML view. +{{}} + +For more information on creating and maintaining Redis Enterprise custom resources, see [Redis Enterprise clusters (REC)]({{< relref "/operate/kubernetes/re-clusters/" >}}) and [Redis Enterprise databases (REDB)]({{< relref "/operate/kubernetes/re-databases/" >}}). diff --git a/content/operate/kubernetes/7.4.6/deployment/quick-start.md b/content/operate/kubernetes/7.4.6/deployment/quick-start.md new file mode 100644 index 0000000000..aadf1b8be5 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/deployment/quick-start.md @@ -0,0 +1,260 @@ +--- +Title: Deploy Redis Enterprise Software for Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: How to install Redis Enterprise Software for Kubernetes. +linkTitle: Kubernetes +weight: 10 +url: '/operate/kubernetes/7.4.6/deployment/quick-start/' +--- + +To deploy Redis Enterprise Software for Kubernetes and start your Redis Enterprise cluster (REC), you need to do the following: + +- Create a new namespace in your Kubernetes cluster. +- Download the operator bundle. +- Apply the operator bundle and verify it's running. +- Create a Redis Enterprise cluster (REC). + +This guide works with most supported Kubernetes distributions. If you're using OpenShift, see [Redis Enterprise on OpenShift]({{< relref "/operate/kubernetes/deployment/openshift" >}}). For details on what is currently supported, see [supported distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions.md" >}}). + +## Prerequisites + +To deploy Redis Enterprise for Kubernetes, you'll need: + +- Kubernetes cluster in a [supported distribution]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions.md" >}}) +- minimum of three worker nodes +- Kubernetes client (kubectl) +- access to DockerHub, RedHat Container Catalog, or a private repository that can hold the required images. + +### Create a new namespace + +**Important:** Each namespace can only contain one Redis Enterprise cluster. Multiple RECs with different operator versions can coexist on the same Kubernetes cluster, as long as they are in separate namespaces. + +Throughout this guide, each command is applied to the namespace in which the Redis Enterprise cluster operates. + +1. Create a new namespace + + ```sh + kubectl create namespace + ``` + +1. Change the namespace context to make the newly created namespace default for future commands. + + ```sh + kubectl config set-context --current --namespace= + ``` + +You can use an existing namespace as long as it does not contain any existing Redis Enterprise cluster resources. It's best practice to create a new namespace to make sure there are no Redis Enterprise resources that could interfere with the deployment. + +## Install the operator + +Redis Enterprise for Kubernetes bundle is published as a container image. A list of required images is available in the [release notes]({{< relref "/operate/kubernetes/release-notes/_index.md" >}}) for each version. + +The operator [definition and reference materials](https://github.com/RedisLabs/redis-enterprise-k8s-docs) are available on GitHub. The operator definitions are [packaged as a single generic YAML file](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/bundle.yaml). + +{{}} +If you do not pull images from DockerHub or another public registry, you need to use a [private container registry]({{< relref "/operate/kubernetes/deployment/container-images#manage-image-sources" >}}). +{{}} + +### Download the operator bundle + +Pull the latest version of the operator bundle: + +```sh +VERSION=`curl --silent https://api.github.com/repos/RedisLabs/redis-enterprise-k8s-docs/releases/latest | grep tag_name | awk -F'"' '{print $4}'` +``` + + If you need a different release, replace `VERSION` with a specific release tag. + + Check version tags listed with the [operator releases on GitHub](https://github.com/RedisLabs/redis-enterprise-k8s-docs/releases) or by [using the GitHub API](https://docs.github.com/en/rest/reference/repos#releases) to ensure the version of the bundle is correct. + +### Deploy the operator bundle + +Apply the operator bundle in your REC namespace: + +```sh +kubectl apply -f https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/$VERSION/bundle.yaml +``` + + You should see a result similar to this: + + ```sh + role.rbac.authorization.k8s.io/redis-enterprise-operator created + serviceaccount/redis-enterprise-operator created + rolebinding.rbac.authorization.k8s.io/redis-enterprise-operator created + customresourcedefinition.apiextensions.k8s.io/redisenterpriseclusters.app.redislabs.com configured + customresourcedefinition.apiextensions.k8s.io/redisenterprisedatabases.app.redislabs.com configured + deployment.apps/redis-enterprise-operator created + ``` + +{{}}DO NOT modify or delete the StatefulSet created during the deployment process. Doing so could destroy your Redis Enterprise cluster (REC).{{}} + +#### Verify the operator is running + +Check the operator deployment to verify it's running in your namespace: + +```sh +kubectl get deployment redis-enterprise-operator +``` + +You should see a result similar to this: + +```sh +NAME READY UP-TO-DATE AVAILABLE AGE +redis-enterprise-operator 1/1 1 1 0m36s +``` + +## Create a Redis Enterprise cluster (REC) + +A Redis Enterprise cluster (REC) is created from a `RedisEnterpriseCluster` custom resource +that contains cluster specifications. + +The following example creates a minimal Redis Enterprise cluster. See the [RedisEnterpriseCluster API reference]({{}}) for more information on the various options available. + +1. Create a file that defines a Redis Enterprise cluster with three nodes. + + {{}} +The REC name (`my-rec` in this example) cannot be changed after cluster creation. + {{}} + + ```sh + cat < my-rec.yaml + apiVersion: "app.redislabs.com/v1" + kind: "RedisEnterpriseCluster" + metadata: + name: my-rec + spec: + nodes: 3 + EOF + ``` + + This will request a cluster with three Redis Enterprise nodes using the default requests (i.e., 2 CPUs and 4GB of memory per node). + + To test with a larger configuration, use the example below to add node resources to the `spec` section of your test cluster (`my-rec.yaml`). + + ```sh + redisEnterpriseNodeResources: + limits: + cpu: 2000m + memory: 16Gi + requests: + cpu: 2000m + memory: 16Gi + ``` + + {{}} +Each cluster must have at least 3 nodes. Single-node RECs are not supported. + {{}} + + See the [Redis Enterprise hardware requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}) for more information on sizing Redis Enterprise node resource requests. + +1. Apply your custom resource file in the same namespace as `my-rec.yaml`. + + ```sh + kubectl apply -f my-rec.yaml + ``` + + You should see a result similar to this: + + ```sh + redisenterprisecluster.app.redislabs.com/my-rec created + ``` + +1. You can verify the creation of the cluster with: + + ```sh + kubectl get rec + ``` + + You should see a result similar to this: + + ```sh + NAME AGE + my-rec 1m + ``` + + At this point, the operator will go through the process of creating various services and pod deployments. + + You can track the progress by examining the StatefulSet associated with the cluster: + + ```sh + kubectl rollout status sts/my-rec + ``` + + or by looking at the status of all of the resources in your namespace: + + ```sh + kubectl get all + ``` + +## Enable the admission controller + +The admission controller dynamically validates REDB resources configured by the operator. It is strongly recommended that you use the admission controller on your Redis Enterprise Cluster (REC). The admission controller only needs to be configured once per operator deployment. + +As part of the REC creation process, the operator stores the admission controller certificate in a Kubernetes secret called `admission-tls`. You may have to wait a few minutes after creating your REC to see the secret has been created. + +{{< embed-md "k8s-admission-webhook-cert.md" >}} + +### Limit the webhook to the relevant namespaces {#webhook} + +The operator bundle includes a webhook file. The webhook will intercept requests from all namespaces unless you edit it to target a specific namespace. You can do this by adding the `namespaceSelector` section to the webhook spec to target a label on the namespace. + +1. Make sure the namespace has a unique `namespace-name` label. + + ```sh + apiVersion: v1 + kind: Namespace + metadata: + labels: + namespace-name: example-ns + name: example-ns + ``` + +1. Patch the webhook to add the `namespaceSelector` section. + + ```sh + cat > modified-webhook.yaml <}}) to create a new REDB. diff --git a/content/operate/kubernetes/7.4.6/faqs/_index.md b/content/operate/kubernetes/7.4.6/faqs/_index.md new file mode 100644 index 0000000000..a88240d714 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/faqs/_index.md @@ -0,0 +1,171 @@ +--- +Title: Redis Enterprise for Kubernetes FAQs +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: null +hideListLinks: true +linkTitle: FAQs +weight: 100 +url: '/operate/kubernetes/7.4.6/faqs/' +--- +Here are some frequently asked questions about Redis Enterprise on integration platforms. + +## What is an Operator? + +An operator is a [Kubernetes custom controller](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources#custom-controllers) which extends the native K8s API. Refer to the article [Redis Enterprise K8s Operator-based deployments – Overview]({{< relref "/operate/kubernetes/architecture/operator.md" >}}). + +## Does Redis Enterprise operator support multiple RECs per namespace? + +Redis Enterprise for Kubernetes may only deploy a single Redis Enterprise cluster (REC) per [namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/). Each REC can run multiple databases while maintaining high capacity and performance. + +## Do I need to deploy a Redis Enterprise operator per namespace? + +Yes, one operator per namespace, each managing a single Redis Enterprise cluster. +Each REC can run multiple databases while maintaining high capacity and performance. + +## How can I see the custom resource definitions (CRDs) created for my Redis Enterprise cluster? + +Run the following: + +```sh +kubectl get rec +kubectl describe rec +``` + +## How can I change the Redis Enterprise cluster admin user password? + +The cluster admin user password is created by the operator during the deployment of the Redis Enterprise cluster (REC) and is stored in a Kubernetes [secret](https://kubernetes.io/docs/concepts/configuration/secret/). + +See [Manage REC credentials]({{< relref "/operate/kubernetes/security/manage-rec-credentials" >}}) for instructions on changing the admin password. + +## How is using Redis Enterprise operator superior to using Helm charts? + +While [Helm charts](https://helm.sh/docs/topics/charts/) help automate multi-resource deployments, they do not provide the lifecycle management and lack many of the benefits provided by the operator: + +- Operators are a K8s standard, while Helm is a proprietary tool + - Using operators means better packaging for different Kubernetes deployments and distributions, as Helm is not supported in a straightforward way everywhere +- Operators allow full control over the Redis Enterprise cluster lifecycle + - We’ve experienced difficulties managing the state and lifecycle of the application through Helm, as it essentially only allows to determine the resources being deployed, which is a problem when upgrading and evolve the Redis Enterprise Cluster settings +- Operators support advanced flows which would otherwise require using an additional third party product + +## How to connect to the Redis Enterprise cluster user interface + +Create a [port forwarding](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#port-forward) rule to expose the cluster user interface (UI) port. For example, when the default port 8443 is used, run: + +```sh +kubectl port-forward –namespace service/-cluster-ui 8443:8443 +``` + +Connect to the UI by pointing your browser to `https://localhost:8443` + +## How should I size Redis Enterprise cluster nodes? + +For nodes hosting the Redis Enterprise cluster [statefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/) [pods](https://kubernetes.io/docs/concepts/workloads/pods/), follow the guidelines provided for Redis Enterprise in the [hardware requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}). + +For additional information please also refer to [Kubernetes operator deployment – persistent volumes]({{< relref "/operate/kubernetes/recommendations/persistent-volumes.md" >}}). + +## How to retrieve the username/password for a Redis Enterprise Cluster? + +The Redis Enterprise cluster stores the username/password of the UI in a K8s [secret](https://kubernetes.io/docs/concepts/configuration/secret/). + +Find the secret by retrieving secrets and locating one of type [Opaque](https://kubernetes.io/docs/concepts/workloads/pods/) with a name identical or containing your Redis Enterprise cluster name. + +For example, run: + +```sh +kubectl get secrets +``` + +A possible response may look like this: + +| NAME | TYPE | DATA | AGE | +|------|------|------|-----| +| redis-enterprise-cluster | Opaque | 2 | 5d | + +To retrieve the secret run: + +```sh +kubectl get secret redis-enterprise-cluster -o yaml +``` + +A possible response may look like this: + +```yaml +apiVersion: v1 +data: + password: Q2h5N1BBY28= + username: cmVkaXNsYWJzLnNi +kind: Secret +metadata: + creationTimestamp: 2018-09-03T14:06:39Z + labels: + app: redis-enterprise + redis.io/cluster: test + name: redis-enterprise-cluster + namespace: redis + ownerReferences: + – apiVersion: app.redislabs.com/v1alpha1 + blockOwnerDeletion: true + controller: true + kind: RedisEnterpriseCluster + name: test + uid: 8b247469-c715-11e8-a5d5-0a778671fc2e + resourceVersion: “911969” + selfLink: /api/v1/namespaces/redis/secrets/redis-enterprise-cluster + uid: 8c4ff52e-c715-11e8-80f5-02cc4fca9682 +type: Opaque +``` + +Next, decode, for example, the password field. Run: + +```sh +echo "Q2h5N1BBY28=" | base64 –-decode +``` + + +## How to retrieve the username/password for a Redis Enterprise Cluster through the OpenShift Console? + +To retrieve your password, navigate to the OpenShift management console, select your project name, go to Resources->Secrets->your_cluster_name + +Retrieve your password by selecting “Reveal Secret.” +{{< image filename="/images/rs/openshift-password-retrieval.png" >}} + + +## What capabilities, privileges and permissions are defined by the Security Context Constraint (SCC) yaml? + +The `scc.yaml` file is defined like this: + +```yaml +kind: SecurityContextConstraints +apiVersion: security.openshift.io/v1 +metadata: + name: redis-enterprise-scc +allowPrivilegedContainer: false +allowedCapabilities: + - SYS_RESOURCE +runAsUser: + type: MustRunAs + uid: 1001 +FSGroup: + type: MustRunAs + ranges: 1001,1001 +seLinuxContext: + type: RunAsAny +``` + +([latest version on GitHub](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/openshift/scc.yaml)) + +([latest version on GitHub](https://github.com/RedisLabs/redis-enterprise-k8s-docs/tags)) + +The SYS_RESOURCE capability is required by the Redis Enterprise cluster (REC) container so that REC can set correct out of memory (OOM) scores to its processes inside the container. +Also, some of the REC services must be able to increase default resource limits, especially the number of open file descriptors. + +{{< note >}} +- Removing NET_RAW blocks 'ping' from being used on the solution containers. +- These changes were made as of release 5.4.6-1183 to better align the deployment with container and Kubernetes security best practices: + - The NET_RAW capability requirement in PSP was removed. + - The allowPrivilegeEscalation is set to 'false' by default. +{{< /note >}} diff --git a/content/operate/kubernetes/7.4.6/kubernetes-archive.md b/content/operate/kubernetes/7.4.6/kubernetes-archive.md new file mode 100644 index 0000000000..f6e1a41019 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/kubernetes-archive.md @@ -0,0 +1,21 @@ +--- +Title: Archive +alwaysopen: false +categories: +- docs +- operate +- rc +description: Describes where to view the archive of Redis Enterprise for Kubernetes + documentation. +linkTitle: Archive +weight: 99999999999 +url: '/operate/kubernetes/7.4.6/kubernetes-archive/' +--- + +Previous versions of Redis Enterprise for Kubernetes documentation are available on the archived web site: + +- [Redis Enterprise for Kubernetes v7.4 documentation archive](https://docs.redis.com/7.4/kubernetes/) + +- [Redis Enterprise for Kubernetes v7.2 documentation archive](https://docs.redis.com/7.2/kubernetes/)   + +- [Redis Enterprise for Kubernetes v6.x documentation archive](https://docs.redis.com/6.4/kubernetes/) diff --git a/content/operate/kubernetes/7.4.6/logs/_index.md b/content/operate/kubernetes/7.4.6/logs/_index.md new file mode 100644 index 0000000000..cfd0851860 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/logs/_index.md @@ -0,0 +1,43 @@ +--- +Title: Redis Enterprise Software logs on Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section provides information about how logs are stored and accessed. +hideListLinks: true +linkTitle: Logs +weight: 60 +url: '/operate/kubernetes/7.4.6/logs/' +--- + +## Logs + +Each redis-enterprise container stores its logs under `/var/opt/redislabs/log`. +When using persistent storage this path is automatically mounted to the +`redis-enterprise-storage` volume. +This volume can easily be accessed by a sidecar, i.e. a container residing on the same pod. + +For example, in the REC (Redis Enterprise Cluster) spec you can add a sidecar container, such as a busybox, and mount the logs to there: + +```yaml +sideContainersSpec: + - name: busybox + image: busybox + args: + - /bin/sh + - -c + - while true; do echo "hello"; sleep 1; done + + volumeMounts: + - name: redis-enterprise-storage + mountPath: /home/logs + subPath: logs +``` + +Now the logs can be accessed from in the sidecar. For example by running + +```kubectl exec -it -c busybox tail home/logs/supervisord.log``` + +The sidecar container is user determined and can be used to format, process and share logs in a specified format and protocol. diff --git a/content/operate/kubernetes/7.4.6/logs/collect-logs.md b/content/operate/kubernetes/7.4.6/logs/collect-logs.md new file mode 100644 index 0000000000..12bce83a15 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/logs/collect-logs.md @@ -0,0 +1,42 @@ +--- +Title: Collect logs +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Run the log collector script to package relevant logs into a tar.gz file + to send to Redis Support for help troubleshooting your Kubernetes environment. +linkTitle: Collect logs +weight: 89 +url: '/operate/kubernetes/7.4.6/logs/collect-logs/' +--- + +The Redis Enterprise cluster (REC) log collector script ([`log_collector.py`](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/log_collector/log_collector.py)) creates and fills a directory with the relevant logs for your environment. These logs will help the support team with troubleshooting. + +As of version 6.2.18-3, the log collector tool has two modes: + +- **restricted** collects only resources and logs created by the operator and Redis Enterprise deployments + - This is the default for versions 6.2.18-3 and later +- **all** collects everything from your environment + - This is the default mode for versions 6.2.12-1 and earlier + +{{}} This script requires Python 3.6 or later. {{}} + +1. Download the latest [`log_collector.py`](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/log_collector/log_collector.py) file. + +1. Have a K8s administrator run the script on the system that runs your `kubectl` or `oc` commands. + - Pass `-n` parameter to run on a different namespace than the one you are currently on + - Pass `-m` parameter to change the log collector mode (`all` or `restricted`) + - Run with `-h` to see more options + + ```bash + python log_collector.py + ``` + + {{< note >}} If you get an error because the yaml module is not found, install the pyYAML module with `pip install pyyaml`. + {{< /note >}} + + + +1. Upload the resulting `tar.gz` file containing all the logs to [Redis Support](https://support.redislabs.com/). diff --git a/content/operate/kubernetes/7.4.6/networking/_index.md b/content/operate/kubernetes/7.4.6/networking/_index.md new file mode 100644 index 0000000000..1aac680e94 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/networking/_index.md @@ -0,0 +1,42 @@ +--- +Title: Networking +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: null +hideListLinks: true +linkTitle: Networking +weight: 40 +url: '/operate/kubernetes/7.4.6/networking/' +--- + +Redis Enterprise for Kubernetes supports several ways to route external traffic to your RedisEnterpriseCluster: + +- Ingress controllers [HAProxy](https://haproxy-ingress.github.io/) and [NGINX](https://kubernetes.github.io/ingress-nginx/) require an `ingress` API resource. +- [Istio](https://istio.io/latest/docs/setup/getting-started/) requires `Gateway` and `VirtualService` API resources. +- OpenShift uses [routes]({{< relref "/operate/kubernetes/networking/routes.md" >}}) to route external traffic. +- The RedisEnterpriseActiveActiveDatabase (REAADB) requires any of the above routing methods to be configured in the RedisEnterpriseCluster (REC) with the `ingressOrRouteSpec` field. + +## External routing using Redis Enterprise for Kubernetes + +Every time a RedisEnterpriseDatabase (REDB), Redis Enterprise Active-Active database (REAADB), or Redis Enterprise cluster (REC) is created, the Redis Enterprise operator automatically creates a [service](https://kubernetes.io/docs/concepts/services-networking/service/) to allow requests to be routed to that resource. + +Redis Enterprise supports three [types of services](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) for accessing databases: `ClusterIP`, `headless`, or `LoadBalancer`. + +By default, the operator creates a `ClusterIP` type service, which exposes a cluster-internal IP and that can only be accessed from within the K8s cluster. For requests to be routed from outside the K8s cluster, you need an [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) (or [route](https://docs.openshift.com/container-platform/4.12/networking/routes/route-configuration.html) if you are using OpenShift). See [kubernetes.io](https://kubernetes.io/docs/) for more details on [Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) and [Ingress controllers](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/). + +* To use NGINX or HAProxy Ingress controllers, see [Ingress routing]({{< relref "/operate/kubernetes/networking/ingress.md" >}}). +* To use OpenShift routes, see [OpenShift routes]({{< relref "/operate/kubernetes/networking/routes.md" >}}). +* To use Istio as an Ingress controller, see [Istio Ingress routing]({{< relref "/operate/kubernetes/networking/istio-ingress.md" >}}) + +## `ingressOrRouteSpec` for Active-Active databases + +Versions 6.4.2 or later of Redis Enterprise for Kubernetes include a feature for ingress configuration. The `ingressOrRouteSpec` field is available in the RedisEnterpriseCluster spec to automatically create an Ingress (or route) for the API service and databases (REAADB) on that REC. See [REC external routing]({{< relref "/operate/kubernetes/networking/ingressorroutespec.md" >}}) for more details. + +This feature only supports automatic Ingress creation for Active-Active databases created and managed with the RedisEnterpriseActiveActiveDatabase (REAADB) custom resource. Use with the standard Redis Enterprise database (REDB) is not currently supported. + +## REC domain name + +The RedisEnterpriseCluster does not support custom domain names. Domain names for the REC are in the following format: `..svc.cluster.local`. diff --git a/content/operate/kubernetes/7.4.6/networking/ingress.md b/content/operate/kubernetes/7.4.6/networking/ingress.md new file mode 100644 index 0000000000..f95eee6a02 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/networking/ingress.md @@ -0,0 +1,225 @@ +--- +Title: Configure Ingress for external routing +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Configure an ingress controller to access your Redis Enterprise databases + from outside the Kubernetes cluster. +linkTitle: Ingress routing +weight: 5 +url: '/operate/kubernetes/7.4.6/networking/ingress/' +--- + +## Prerequisites + +Before creating an Ingress, you'll need: + + - A RedisEnterpriseDatabase (REDB) with TLS enabled for client connections + - A supported Ingress controller with `ssl-passthrough` enabled + - [Ingress-NGINX Controller](https://kubernetes.github.io/ingress-nginx/deploy/) + - Be sure to use the `kubernetes/ingress-nginx` controller and NOT the `nginxinc/kubernetes-ingress` controller. + - [HAProxy Ingress](https://haproxy-ingress.github.io/docs/getting-started/) + - To use Istio for your Ingress resources, see [Configure Istio for external routing]({{< relref "/operate/kubernetes/networking/istio-ingress.md" >}}) + +{{}}Make sure your Ingress controller has `ssl-passthrough`enabled. This is enabled by default for HAProxy, but disabled by default for NGINX. See the [NGINX User Guide](https://kubernetes.github.io/ingress-nginx/user-guide/tls/#ssl-passthrough) for details. {{}} + +## Create an Ingress resource + +1. Retrieve the hostname of your Ingress controller's `LoadBalancer` service. + + ``` sh + $ kubectl get svc \ + -n + ``` + + Below is example output for an HAProxy running on a K8s cluster hosted by AWS. + + ``` sh + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + haproxy-ingress LoadBalancer 10.43.62.53 a56e24df8c6173b79a63d5da54fd9cff-676486416.us-east-1.elb.amazonaws.com 80:30610/TCP,443:31597/TCP 21m + ``` + +1. Choose the hostname you will use to access your database (this value will be represented in this article with ``). + +1. Create a DNS entry that resolves your chosen database hostname to the IP address for the Ingress controller's LoadBalancer. + +1. Create the Ingress resource YAML file. + + ``` YAML + apiVersion: networking.k8s.io/v1 + kind: Ingress + metadata: + name: rec-ingress + annotations: + + spec: + rules: + - host: + http: + paths: + - path: / + pathType: ImplementationSpecific + backend: + service: + name: + port: + name: redis + ``` + + For HAProxy, insert the following into the `annotations` section: + + ``` YAML + kubernetes.io/ingress.class: haproxy + ingress.kubernetes.io/ssl-passthrough: "true" + ``` + + For NGINX, insert the following into the `annotations` section: + + ``` YAML + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/ssl-passthrough: "true" + ``` + + The `ssl-passthrough` annotation is required to allow access to the database. The specific format changes depending on your Ingress controller and any additional customizations. See [NGINX Configuration annotations](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/) and [HAProxy Ingress Options](https://www.haproxy.com/documentation/kubernetes/latest/configuration/ingress/) for updated annotation formats. + +## Test your external access + +To test your external access to the database, you need a client that supports [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) and [SNI](https://en.wikipedia.org/wiki/Server_Name_Indication). + +#### Test your access with Openssl + +1. Get the default CA certificate from the `redis-enterprise-node` container on any of the Redis Enterprise pods. + + ``` sh + $ kubectl exec -it -c redis-enterprise-node \ + -- cat /etc/opt/redislabs/proxy_cert.pem + ``` + +1. Run the following `openssl` command, substituting your own values for ``. + + ``` sh + $ openssl s_client \ + -connect :443 \ + -crlf -CAfile ./proxy_cert.pem \ + -servername + ``` + + If you are connected to the database, you will receive `PONG` back, as shown below: + + ``` sh + ... + Verify return code: 0 (ok) + --- + + PING + +PONG + ``` + +#### Test your access with Python + +You can use the code below to test your access with Python, substituting your own values for `` and ``. + +``` python +import redis + +r = redis.StrictRedis(host='', + port=443, db=0, ssl=True, + ssl_ca_certs='//proxy_cert.pem') + + +print(r.info()) +``` + +Your output should look something like this: + +``` sh +$ /Users/example-user/Documents/Projects/test_client/venv3.7/bin/python \ + /Users/example-user/Documents/Projects/test_client/test_ssl.py +{ + 'redis_version': '5.0.5', + 'redis_git_sha1': 0, + 'redis_git_dirty': 0, + 'redis_build_id': 0, + 'redis_mode': 'standalone', + 'os': 'Linux 4.14.154-128.181.amzn2.x86_64 x86_64', + 'arch_bits': 64, + 'multiplexing_api': 'epoll', + 'gcc_version': '7.4.0', + 'process_id': 1, + 'run_id': '3ce7721b096517057d28791aab555ed8ac02e1de', + 'tcp_port': 10811, + 'uptime_in_seconds': 316467, + 'uptime_in_days': 3, + 'hz': 10, + 'lru_clock': 0, + 'config_file': '', + 'connected_clients': 1, + 'client_longest_output_list': 0, + 'client_biggest_input_buf': 0, + 'blocked_clients': 0, + 'used_memory': 12680016, + 'used_memory_human': '12.9M', + 'used_memory_rss': 12680016, + 'used_memory_peak': 13452496, + 'used_memory_peak_human': '12.82M', + 'used_memory_lua': 151552, + 'mem_fragmentation_ratio': 1, + 'mem_allocator': 'jemalloc-5.1.0', + 'loading': 0, + 'rdb_changes_since_last_save': 0, + 'rdb_bgsave_in_progress': 0, + 'rdb_last_save_time': 1577753916, + 'rdb_last_bgsave_status': 'ok', + 'rdb_last_bgsave_time_sec': 0, + 'rdb_current_bgsave_time_sec': -1, + 'aof_enabled': 0, + 'aof_rewrite_in_progress': 0, + 'aof_rewrite_scheduled': 0, + 'aof_last_rewrite_time_sec': -1, + 'aof_current_rewrite_time_sec': -1, + 'aof_last_bgrewrite_status': 'ok', + 'aof_last_write_status': 'ok', + 'total_connections_received': 4, + 'total_commands_processed': 6, + 'instantaneous_ops_per_sec': 14, + 'total_net_input_bytes': 0, + 'total_net_output_bytes': 0, + 'instantaneous_input_kbps': 0.0, + 'instantaneous_output_kbps': 0.0, + 'rejected_connections': 0, + 'sync_full': 1, + 'sync_partial_ok': 0, + 'sync_partial_err': 0, + 'expired_keys': 0, + 'evicted_keys': 0, + 'keyspace_hits': 0, + 'keyspace_misses': 0, + 'pubsub_channels': 0, + 'pubsub_patterns': 0, + 'latest_fork_usec': 0, + 'migrate_cached_sockets': 0, + 'role': 'master', + 'connected_slaves': 1, + 'slave0': { + 'ip': '0.0.0.0', + 'port': 0, + 'state': 'online', + 'offset': 0, + 'lag': 0 + }, + 'master_repl_offset': 0, + 'repl_backlog_active': 0, + 'repl_backlog_size': 1048576, + 'repl_backlog_first_byte_offset': 0, + 'repl_backlog_histlen': 0, + 'used_cpu_sys': 0.0, + 'used_cpu_user': 0.0, + 'used_cpu_sys_children': 0.0, + 'used_cpu_user_children': 0.0, + 'cluster_enabled': 0 +} + +Process finished with exit code 0 +``` diff --git a/content/operate/kubernetes/7.4.6/networking/ingressorroutespec.md b/content/operate/kubernetes/7.4.6/networking/ingressorroutespec.md new file mode 100644 index 0000000000..739fbe4954 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/networking/ingressorroutespec.md @@ -0,0 +1,87 @@ +--- +Title: Establish external routing on the RedisEnterpriseCluster +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: null +linkTitle: REC external routing +weight: 30 +url: '/operate/kubernetes/7.4.6/networking/ingressorroutespec/' +--- +An Ingress is an API resource that provides a standardized and flexible way to manage external access to services running within a Kubernetes cluster. + +## Install Ingress controller + +Redis Enterprise for Kubernetes supports the Ingress controllers below: +* [HAProxy](https://haproxy-ingress.github.io/) +* [NGINX](https://kubernetes.github.io/ingress-nginx/) +* [Istio](https://istio.io/latest/docs/setup/getting-started/) + +OpenShift users can use [routes]({{< relref "/operate/kubernetes/networking/routes.md" >}}) instead of an Ingress. + +Install your chosen Ingress controller, making sure `ssl-passthrough` is enabled. `ssl-passthrough` is turned off by default for NGINX but enabled by default for HAProxy. + +## Configure DNS + +1. Choose the hostname (FQDN) you will use to access your database according to the recommended naming conventions below, replacing `` with your own values. + + REC API hostname: `api--.` + REAADB hostname: `-db--.` + + We recommend using a wildcard (`*`) in place of the database name, followed by the hostname suffix. + +1. Retrieve the `EXTERNAL-IP` of your Ingress controller's `LoadBalancer` service. + + ``` sh + $ kubectl get svc \ + -n + ``` + + Below is example output for an HAProxy ingress controller running on a K8s cluster hosted by AWS. + + ``` sh + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + haproxy-ingress LoadBalancer 10.43.62.53 a56e24df8c6173b79a63d5da54fd9cff-676486416.us-east-1.elb.amazonaws.com 80:30610/TCP,443:31597/TCP 21m + ``` + +1. Create DNS records to resolve your chosen REC API hostname and database hostname to the `EXTERNAL-IP` found in the previous step. + +## Edit the REC spec + +Edit the RedisEnterpriseCluster (REC) spec to add the `ingressOrRouteSpec` field, replacing `` below with your own values. + +### NGINX or HAproxy ingress controllers + +* Define the REC API hostname (`apiFqdnUrl`) and database hostname suffix (`dbFqdnSuffix`) you chose when configuring DNS. +* Set `method` to `ingress`. +* Set `ssl-passthrough` to "true". +* Add any additional annotations required for your ingress controller. See [NGINX docs](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/) or [HAproxy docs](https://haproxy-ingress.github.io/docs/configuration/keys/) for more information. + +```sh +kubectl patch rec --type merge --patch "{\"spec\": \ + {\"ingressOrRouteSpec\": \ + {\"apiFqdnUrl\": \"api--.example.com\", \ + \"dbFqdnSuffix\": \"-db--.example.com\", \ + \"ingressAnnotations\": \ + {\".io/ingress.class\": \ + \"\", \ + \"/ssl-passthrough\": \ \"true\"}, \ + \"method\": \"ingress\"}}}" +``` + +### OpenShift routes + +* Define the REC API hostname (`apiFqdnUrl`) and database hostname suffix (`dbFqdnSuffix`) you chose when configuring DNS. +* Set `method` to `openShiftRoute`. + +```sh +kubectl patch rec --type merge --patch "{\"spec\": \ + {\"ingressOrRouteSpec\": \ + {\"apiFqdnUrl\": \"api--.example.com\" \ + \"dbFqdnSuffix\": \"-db--.example.com\", \ + \"method\": \"openShiftRoute\"}}}" +``` + +OpenShift routes do not require any `ingressAnnotations` in the `ingressOrRouteSpec`. diff --git a/content/operate/kubernetes/7.4.6/networking/istio-ingress.md b/content/operate/kubernetes/7.4.6/networking/istio-ingress.md new file mode 100644 index 0000000000..fbd88d87b7 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/networking/istio-ingress.md @@ -0,0 +1,158 @@ +--- +Title: Configure Istio for external routing +alwaysOpen: false +categories: +- docs +- operate +- kubernetes +description: Configure Istio as an ingress controller for access to your Redis Enterprise + databases from outside the Kubernetes cluster. +linkTitle: Istio ingress routing +weight: 20 +url: '/operate/kubernetes/7.4.6/networking/istio-ingress/' +--- + +Redis Enterprise for Kubernetes has the ability to use an Istio Ingress gateway as an alternative to NGINX or HaProxy Ingress controllers. + +Istio can also understand Ingress resources, but using that mechanism takes away the advantages and options that the native Istio resources provide. Istio offers its own configuration methods using custom resources. + +To configure Istio to work with the Redis Kubernetes operator, we will use two custom resources: a `Gateway` and a `VirtualService`. Then you'll be able to establish external access to your database. + +## Install and configure Istio for Redis Enterprise + +1. [Download](https://istio.io/latest/docs/setup/getting-started/) and [install](https://istio.io/latest/docs/setup/getting-started/) Istio (see instructions from Istio's [Getting Started](https://istio.io/latest/docs/setup/getting-started/) guide). + + Once the installation is complete, all the deployments, pods, and services will be deployed in a namespace called `istio-system`. This namespace contains a `LoadBalancer` type service called `service/istio-ingressgateway` that exposes the external IP address. + +1. Find the `EXTERNAL-IP` for the `istio-ingressgateway` service. + + ```sh + kubectl get svc istio-ingressgateway -n istio-system + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + istio-ingressgateway LoadBalancer 10.34.67.89 10.145.78.91 15021:12345/TCP,80:67891/TCP,443:23456/TCP,31400:78901/TCP,15443:10112/TCP 3h8m + ``` + +1. Create a DNS entry that resolves your chosen database hostname (or a wildcard `*` followed by your domain) to the Istio `EXTERNAL-IP`. Use this hostname to access your database from outside the cluster. + + In this example, any hostname that ends with `.istio.k8s.my.example.com` will resolve to the Istio LoadBalancer's external IP of `10.145.78.91`. Substitute your own values accordingly. + +1. Verify the record was created successfully. + + ```sh + dig api.istio.k8s.my.example.com + ``` + + Look in the `ANSWER SECTION` for the record you just created. + + ```sh + ;; ANSWER SECTION: + api.istio.k8s.my.example.com 0 IN A 10.145.78.91 + ``` + +## Create custom resources + +### `Gateway` custom resource + +1. On a different namespace from `istio-system`, create a `Gateway` custom resource file (`redis-gateway.yaml` in this example). + + - Replace `.istio.k8s.my.example.com` with the domain that matches your DNS record. + - Replace `` with the label set on your Istio ingress gateway pod (most common is `istio: ingress`). + - TLS passthrough mode is required to allow secure access to the database. + + ```yaml + apiVersion: networking.istio.io/v1beta1 + kind: Gateway + metadata: + name: redis-gateway + spec: + selector: + istio: + servers: + - hosts: + - '*.istio.k8s.my.example.com' + port: + name: https + number: 443 + protocol: HTTPS + tls: + mode: PASSTHROUGH + ``` + + + +1. Apply the `Gateway` custom resource file to create the Ingress gateway. + + ```sh + kubectl apply -f redis-gateway.yaml + ``` + +1. Verify the gateway was created successfully. + + ```sh + kubectl get gateway + + NAME AGE + redis-gateway 3h33m + ``` + +### `VirtualService` custom resource + +1. On a different namespace than `istio-system`, create the `VirtualService` custom resource file (`redis-vs.yaml` in this example). + + ```yaml + apiVersion: networking.istio.io/v1beta1 + kind: VirtualService + metadata: + name: redis-vs + spec: + gateways: + - redis-gateway + hosts: + - "*.istio.k8s.my.example.com" + tls: + - match: + - port: 443 + sniHosts: + - api.istio.k8s.my.example.com + route: + - destination: + host: rec1 + port: + number: 9443 + - match: + - port: 443 + sniHosts: + - db1.istio.k8s.my.example.com + route: + - destination: + host: db1 + ``` + + This creates both a route to contact the API server on the REC (`rec1`) and a route to contact one of the databases (`db1`). + + - Replace `.istio.k8s.my.example.com` with the domain that matches your DNS record. + - The gateway's metadata name must be similar to the gateway's spec name (`redis-gateway` in this example). + +1. Apply `VirtualService` custom resource file to create the virtual service. + + ```sh + kubectl apply -f redis-vs.yaml + ``` + +1. Verify the virtual service was created successfully. + + ```sh + kubectl get vs + + NAME GATEWAYS HOSTS AGE + redis-vs ["redis-gateway"] ["*.istio.k8s.my.example.com"] 3h33m + ``` + +1. [Deploy the operator]({{< relref "/operate/kubernetes/deployment/quick-start.md" >}}), Redis Enterprise Cluster (REC), and Redis Enterprise Database (REDB) on the same namespace as the gateway and virtual service. + +## Test your external access to the database + +To [test your external access]({{< relref "/operate/kubernetes/networking/ingress.md" >}}) to the database, you need a client that supports [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) and [SNI](https://en.wikipedia.org/wiki/Server_Name_Indication). + +See [Test your access with Openssl]({{< relref "/operate/kubernetes/networking/ingress#test-your-access-with-openssl" >}}) or [Test your access with Python]({{< relref "/operate/kubernetes/networking/ingress#test-your-access-with-python" >}}) for more info. diff --git a/content/operate/kubernetes/7.4.6/networking/routes.md b/content/operate/kubernetes/7.4.6/networking/routes.md new file mode 100644 index 0000000000..6830be4628 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/networking/routes.md @@ -0,0 +1,59 @@ +--- +Title: Use OpenShift routes for external database access +alwaysOpen: false +categories: +- docs +- operate +- kubernetes +description: null +linkTitle: OpenShift routes +weight: 15 +url: '/operate/kubernetes/7.4.6/networking/routes/' +--- + +OpenShift routes allow requests to be routed to the database or cluster API from outside the cluster. For more information about routes, see [OpenShift documentation](https://docs.openshift.com/container-platform/4.13/networking/routes/route-configuration.html). + +## Prerequisites + +* Before you can connect to your database from outside the cluster, you'll need the root CA certificate of the DMC Proxy server to validate the server certificate. + + By default, the DMC Proxy uses a self-signed certificate. You can retrieve it from the Redis Enterprise admin console and save it as a file (for example, named "ca.pem") on the client machine. + +* Your database also needs TLS encryption enabled. + +## Create OpenShift route + +1. Select the **Networking/Routes** section of the OpenShift web console. + +1. Select **Create route** and fill out the following fields: + + * **Name**: Choose any name you want as the first part of your generated hostname + * **Hostname**: Leave blank + * **Path**: Leave as is ("/") + * **Service**: Select the service for the database you want to access + * **TLS Termination**: Choose "passthrough" + * **Insecure Traffic**: Select "None" + +1. Select **Create**. + +1. Find the hostname for your new route. After route creation, it appears in the "Host" field. + +1. Verify you have a DNS entry to resolve the hostname for your new route to the cluster's load balancer. + +## Access database + +Access the database from outside the cluster using `redis-cli` or `openssl`. + +To connect with `redis-cli`: + + ```sh + redis-cli -h -p 443 --tls --cacert ./ca.pem --sni + ``` + +Replace the `` value with the hostname for your new route. + +To connect with `openssl`: + + ```sh + openssl s_client -connect :443 -crlf -CAfile ./ca.pem -servername + ``` diff --git a/content/operate/kubernetes/7.4.6/re-clusters/_index.md b/content/operate/kubernetes/7.4.6/re-clusters/_index.md new file mode 100644 index 0000000000..880fa58317 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-clusters/_index.md @@ -0,0 +1,18 @@ +--- +Title: Redis Enterprise clusters (REC) +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Articles to help you manage your Redis Enterprise clusters (REC). +hideListLinks: false +linkTitle: Redis Enterprise clusters (REC) +weight: 30 +url: '/operate/kubernetes/7.4.6/re-clusters/' +--- + +This section contains articles to help you manage your Redis Enterprise clusters (REC). + + + diff --git a/content/operate/kubernetes/7.4.6/re-clusters/auto-tiering.md b/content/operate/kubernetes/7.4.6/re-clusters/auto-tiering.md new file mode 100644 index 0000000000..e2adbef309 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-clusters/auto-tiering.md @@ -0,0 +1,88 @@ +--- +Title: Use Auto Tiering on Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Deploy a cluster with Auto Tiering on Kubernetes. +linkTitle: Auto Tiering +weight: 16 +url: '/operate/kubernetes/7.4.6/re-clusters/auto-tiering/' +--- + +## Prerequisites + +Redis Enterprise Software for Kubernetes supports using Auto Tiering (previously known as Redis on Flash), which extends your node memory to use both RAM and flash storage. SSDs (solid state drives) can store infrequently used (warm) values while your keys and frequently used (hot) values are still stored in RAM. This improves performance and lowers costs for large datasets. + +{{}} +NVMe (non-volatile memory express) SSDs are strongly recommended to achieve the best performance. +{{}} + +Before creating your Redis clusters or databases, these SSDs must be: + +- [locally attached to worker nodes in your Kubernetes cluster](https://kubernetes.io/docs/concepts/storage/volumes/#local) +- formatted and mounted on the nodes that will run Redis Enterprise pods +- dedicated to Auto Tiering and not shared with other parts of the database, (e.g. durability, binaries) +- [provisioned as local persistent volumes](https://kubernetes.io/docs/concepts/storage/volumes/#local) + - You can use a [local volume provisioner](https://github.com/kubernetes-sigs/sig-storage-local-static-provisioner/blob/master/README.md) to do this [dynamically](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#dynamic) +- a [StorageClass](https://kubernetes.io/docs/concepts/storage/storage-classes/#local) resource with a unique name + +For more information on node storage, see [Node persistent and ephemeral storage]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/persistent-ephemeral-storage" >}}). + +## Create a Redis Enterprise cluster + +To deploy a Redis Enterprise cluster (REC) with Auto Tiering, you'll need to specify the following in the `redisOnFlashSpec` section of your [REC custom resource]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}): + +- enable Auto Tiering (`enabled: true`) +- flash storage driver (`bigStoreDriver`) + - `rocksdb` or `speedb`(default) +- storage class name (`storageClassName`) +- minimal flash disk size (`flashDiskSize`) + +{{}} Clusters upgraded to version 7.2.4-2 from an earlier version will change the `bigStoreDriver` (previously called `flashStorageEngine`) to the new default `speedb`, regardless of previous configuration. {{}} + +{{}}Switching between storage engines (`speedb` and `rocksdb`) requires guidance by Redis Support or your Account Manager.{{}} + +Here is an example of an REC custom resource with these attributes: + +```YAML +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: "rec" +spec: + + nodes: 3 + redisOnFlashSpec: + enabled: true + bigStoreDriver: speedb + storageClassName: local-scsi + flashDiskSize: 100G +``` + +### Create a Redis Enterprise database + +By default, any new database will use RAM only. To create a Redis Enterprise database (REDB) that can use flash storage, specify the following in the `redisEnterpriseCluster` section of the REDB custom resource definition: + +- `isRof: true` enables Auto Tiering +- `rofRamSize` defines the RAM capacity for the database + +Below is an example REDB custom resource: + +```YAML +apiVersion: app.redislabs.com/v1alpha1 +kind: RedisEnterpriseDatabase +metadata: + name: autoteiring-redb +spec: + redisEnterpriseCluster: + name: rec + isRof: true + memorySize: 2GB + rofRamSize: 0.5GB +``` + +{{< note >}} +This example defines both `memorySize` and `rofRamSize`. When using Auto Tiering, `memorySize` refers to the total combined memory size (RAM + flash) allocated for the database. `rofRamSize` specifies only the RAM capacity for the database. `rofRamSize` must be at least 10% of `memorySize`. +{{< /note >}} diff --git a/content/operate/kubernetes/7.4.6/re-clusters/cluster-recovery.md b/content/operate/kubernetes/7.4.6/re-clusters/cluster-recovery.md new file mode 100644 index 0000000000..974d8227db --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-clusters/cluster-recovery.md @@ -0,0 +1,49 @@ +--- +Title: Recover a Redis Enterprise cluster on Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This task describes how to recover a Redis Enterprise cluster on Kubernetes. +linkTitle: Recover a Redis cluster +weight: 20 +url: '/operate/kubernetes/7.4.6/re-clusters/cluster-recovery/' +--- +When a Redis Enterprise cluster loses contact with more than half of its nodes either because of failed nodes or network split, +the cluster stops responding to client connections. +When this happens, you must recover the cluster to restore the connections. + +You can also perform cluster recovery to reset cluster nodes, to troubleshoot issues, or in a case of active/passive failover. + +The Redis Enterprise for Kubernetes automates these recovery steps: + +1. Recreates a fresh Redis Enterprise cluster +1. Mounts the persistent storage with the recovery files from the original cluster to the nodes of the new cluster +1. Recovers the cluster configuration on the first node in the new cluster +1. Joins the remaining nodes to the new cluster. + +{{}}Redis Enterprise for Kubernetes 7.2.4-2 introduces a new limitation. You cannot recover or upgrade your cluster if there are databases with old module versions or manually uploaded modules. See the [Redis Enterprise Software 7.2.4 known limitations]({{< relref "/operate/rs/release-notes/rs-7-2-4-releases/rs-7-2-4-52#cluster-recovery-with-manually-uploaded-modules" >}}) for more details.{{}} + +## Prerequisites + +- For cluster recovery, the cluster must be [deployed with persistence]({{< relref "/operate/kubernetes/recommendations/persistent-volumes.md" >}}). + +## Recover a cluster + +1. Edit the REC resource to set the `clusterRecovery` flag to `true`. + + ```sh + kubectl patch rec --type merge --patch '{"spec":{"clusterRecovery":true}}' + ``` + + +1. Wait for the cluster to recover until it is in the "Running" state. + + To see the state of the cluster, run: + + ```sh + watch "kubectl describe rec | grep State" + ``` + +1. To recover the database, see [Recover a failed database]({{< relref "/operate/rs/databases/recover.md" >}}). diff --git a/content/operate/kubernetes/7.4.6/re-clusters/connect-prometheus-operator.md b/content/operate/kubernetes/7.4.6/re-clusters/connect-prometheus-operator.md new file mode 100644 index 0000000000..16f28048aa --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-clusters/connect-prometheus-operator.md @@ -0,0 +1,72 @@ +--- +Title: Connect the Prometheus operator to Redis Enterprise for Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This article describes how to configure a Prometheus operator custom + resource to allow it to export metrics from Redis Enterprise for Kubernetes. +linkTitle: Export metrics to Prometheus +weight: 92 +url: '/operate/kubernetes/7.4.6/re-clusters/connect-prometheus-operator/' +--- + +To collect metrics data from your databases and Redis Enterprise cluster (REC), you can connect your [Prometheus](https://prometheus.io/) server to an endpoint exposed on your REC. Redis Enterprise for Kubernetes creates a dedicated service to expose the `prometheus` port (8070) for data collection. A custom resource called `ServiceMonitor` allows the [Prometheus operator](https://github.com/prometheus-operator/prometheus-operator/tree/main/Documentation) to connect to this port and collect data from Redis Enterprise. + +## Prerequisites + +Before connecting Redis Enterprise to Prometheus on your Kubernetes cluster, make sure you've done the following: + +- [Deploy Redis Enterprise for Kubernetes]({{< relref "/operate/kubernetes/deployment/quick-start.md" >}}) (version 6.2.10-4 or newer) +- [Deploy the Prometheus operator](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/getting-started.md) (version 0.19.0 or newer) +- [Create a Redis Enterprise cluster]({{< relref "/operate/kubernetes/deployment/quick-start#create-a-redis-enterprise-cluster-rec" >}}) + +## Create a `ServiceMonitor` custom resource + +Below is an example `ServiceMonitor` custom resource file. By specifying the service label (`app: redis.io/service=prom-metrics`) in the `selector.matchLabels` section, you can point the Prometheus operator to the correct Redis Enterprise service (`-prom`). + +You'll need to configure the following fields to connect Prometheus to Redis Enterprise: + +| Section | Field | Value | +|---|---|---| +| `spec.endpoints` | `port` | Name of exposed port (`prometheus`) | +| `spec.namespaceSelector` | `matchNames` | Namespace for your REC | +| `spec.selector` | `matchLabels` | REC service label (`app: redis.io/service=prom-metrics`) | + +Apply the file in the same namespace as your Redis Enterprise cluster (REC). + {{}}If Redis Enterprise and Prometheus are deployed in different namespaces, you'll also need to add the [`serviceMonitorNamespaceSelector`](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#namespaceselector) field to your Prometheus resource. See the [Prometheus operator documentation](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/getting-started.md#related-resources) for more details on cross-namespace `ServiceMonitor` configuration.{{}} + + +```YAML +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: redis-enterprise +spec: + endpoints: + - interval: 15s + port: prometheus + scheme: https + tlsConfig: + insecureSkipVerify: true + namespaceSelector: + matchNames: + - + selector: + matchLabels: + redis.io/service: prom-metrics +``` + +For more info about configuring the `ServiceMonitor` resource, see the [`ServiceMonitorSpec` API documentation](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#servicemonitorspec). + +## More info + +- github.com/prometheus-operator + - [Getting started](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/getting-started.md) + - [Running exporters](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/running-exporters.md) + - [Related resources](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/user-guides/getting-started.md#related-resources) + - [Troubleshooting ServiceMonitor changes](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/troubleshooting.md) +- redis.io/docs + - [Metrics in Prometheus]({{< relref "/integrate/prometheus-with-redis-enterprise/prometheus-metrics-definitions" >}}) + - [Monitoring and metrics]({{< relref "/operate/rs/clusters/monitoring/" >}}) diff --git a/content/operate/kubernetes/7.4.6/re-clusters/connect-to-admin-console.md b/content/operate/kubernetes/7.4.6/re-clusters/connect-to-admin-console.md new file mode 100644 index 0000000000..e11a29fbca --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-clusters/connect-to-admin-console.md @@ -0,0 +1,59 @@ +--- +Title: Connect to the admin console +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Connect to the Redis Enterprise admin console to manage your Redis Enterprise + cluster. +linkTitle: Connect to the admin console +weight: 10 +url: '/operate/kubernetes/7.4.6/re-clusters/connect-to-admin-console/' +--- + +The username and password for the Redis Enterprise Software [admin console]({{< relref "/operate/rs/" >}}) are stored in a Kubernetes [secret](https://kubernetes.io/docs/concepts/configuration/secret/). After retrieving your credentials, you can use port forwarding to connect to the admin console. + +{{}} +There are several methods for accessing the admin console. Port forwarding is the simplest, but not the most efficient method for long-term use. You could also use a load balancer service or Ingress. +{{}} + +1. Switch to the namespace with your Redis Enterprise cluster (REC). + + ```sh + kubectl config set-context --current --namespace= + ``` + +1. Find your cluster name from your list of secrets. + + ```sh + kubectl get secret + ``` + + In this example, the cluster name is `rec`. + +1. Extract and decode your credentials from the secret. + + ```sh + kubectl get secret -o jsonpath='{.data.username}' | base64 --decode + kubectl get secret -o jsonpath='{.data.password}' | base64 --decode + ``` + +1. Find the port for the REC UI service in the `spec:ports` section of the service definition file. + + ```sh + kubectl get service/-ui -o yaml + ``` + + {{}} + The default port is 8443. + {{}} + +1. Use `kubectl port-forward` to forward your local port to the service port. + + ```sh + kubectl port-forward service/-ui : + ``` + +1. View the admin console from a web browser on your local machine at `https://localhost:8443`. + diff --git a/content/operate/kubernetes/7.4.6/re-clusters/expand-pvc.md b/content/operate/kubernetes/7.4.6/re-clusters/expand-pvc.md new file mode 100644 index 0000000000..3eff33289b --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-clusters/expand-pvc.md @@ -0,0 +1,104 @@ +--- +Title: Expand PersistentVolumeClaim (PVC) +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Expand your persistent volume claim by editing the REC. +linkTitle: Expand PVC +weight: 82 +url: '/operate/kubernetes/7.4.6/re-clusters/expand-pvc/' +--- + +This article outlines steps to increase the size of the persistent volume claim for your Redis Enterprise cluster (REC). + +[PersistentVolumeClaims (PVC)](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims) are created by the Redis Enterprise operator and used by the RedisEnterpriseCluster (REC). PVCs are created with a specific size and [can be expanded](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims) with the following steps, if the underlying [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/) supports it. + +This process involves deleting and recreating the REC StatefulSet with a larger persistent volume size. The pods owned by the StatefulSet are not restarted or affected by the deletion and recreation process, except when they are left without an owner momentarily. + +{{}}Shrinking (reducing the size) of your PVC is not allowed. This process only allows you to expand (size up) your PVC.{{}} + +## Prerequisites + +{{}}Do not change any other REC fields related to the StatefulSet while resizing is in progress. +{{}} + +- PVC expansion must be supported and enabled by the StorageClass and underlying storage driver of the REC PVCs. + - The relevant StorageClass is the one associated with the REC PVCs. The StorageClass for existing PVCs cannot be changed. +- The StorageClass must be configured with `allowVolumeExpansion: true`. +- Your storage driver must support online expansion. +- We highly recommend you backup your databases before beginning this PVC expansion process. + +## Expand REC PVC + +1. Enable the REC persistent volume resize flag. + + ```YAML + spec: + persistentSpec: + enablePersistentVolumeResize: true + ``` + +1. Set the value of `volumeSize` to your desired size. + + ```YAML + spec: + persistentSpec: + enablePersistentVolumeResize: true + volumeSize: Gi + ``` + +1. Apply the changes to the REC, replacing `` with the name of your REC. + + ```sh + kubectl apply -f + ``` + +After applying the REC changes, the PVCs will begin to expand to the new size. + +Once all the PVCs finish the resizing process, the operator will delete and recreate the StatefulSet with the new volume size. + +### Track progress + +You can track the progress by monitoring the status of the REC and PersistentVolumeClaim objects. + +The REC status will correspond to the status of one or more PVCs, and will reflect if the resizing is successful or failed. + +While the resizing is in progress, the status will be: + +```yaml +status: + persistenceStatus: + status: Resizing + succeeded: 2/3 +``` + +When the resizing is complete, the status becomes Provisioned and the new volume size is available for use by the REC pods. + +```yaml +status: + persistenceStatus: + status: Provisioned + succeeded: 3/3 +``` + +### Troubleshooting + +If an error occurs during this process: + +- Examine the status and events of the REC and PVC objects. + + ```sh + kubectl describe pvc + ``` + + ```sh + kubectl get events + ``` + +- Examine the logs of the operator pods. + + ```sh + kubectl logs + ``` diff --git a/content/operate/kubernetes/7.4.6/re-clusters/multi-namespace.md b/content/operate/kubernetes/7.4.6/re-clusters/multi-namespace.md new file mode 100644 index 0000000000..9e5b55a5d0 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-clusters/multi-namespace.md @@ -0,0 +1,191 @@ +--- +Title: Manage databases in multiple namespaces +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Redis Enterprise for Kubernetes allows you to deploy to multiple namespaces + within your Kubernetes cluster. This article shows you how to configure your Redis + Enterprise cluster to connect to databases in multiple namespaces +linktitle: Manage multiple namespaces +weight: 17 +url: '/operate/kubernetes/7.4.6/re-clusters/multi-namespace/' +--- + +Multiple Redis Enterprise database resources (REDBs) can be associated with a single Redis Enterprise cluster resource (REC) even if they reside in different namespaces. + +To learn more about designing a multi-namespace Redis Enterprise cluster, see [flexible deployment options]({{< relref "/operate/kubernetes/deployment/deployment-options.md" >}}). + +{{}} Multi-namespace installations don't support Active-Active databases (REEADB). Only databases created with the REDB resource are supported in multi-namespace deployments at this time.{{}} + +## Prerequisites + +Before configuring a multi-namespace deployment, you must have a running [Redis Enterprise cluster (REC)]({{< relref "/operate/kubernetes/deployment/quick-start.md" >}}). See more information in the [deployment]({{< relref "/operate/kubernetes/deployment/" >}}) section. + +## Create role and role binding for managed namespaces + +Both the operator and the RedisEnterpriseCluster (REC) resource need access to each namespace the REC will manage. For each **managed** namespace, create a `role.yaml` and `role_binding.yaml` file within the managed namespace, as shown in the examples below. + +{{}}These will need to be reapplied each time you [upgrade]({{< relref "/operate/kubernetes/upgrade/upgrade-redis-cluster.md" >}}). {{}} + +Replace `` with the namespace the REC resides in. +Replace `` with your own value (defaults to the REC name). + +`role.yaml` example: + +```yaml +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: redb-role + labels: + app: redis-enterprise +rules: + - apiGroups: + - app.redislabs.com + resources: ["redisenterpriseclusters", "redisenterpriseclusters/status", "redisenterpriseclusters/finalizers", + "redisenterprisedatabases", "redisenterprisedatabases/status", "redisenterprisedatabases/finalizers", + "redisenterpriseremoteclusters", "redisenterpriseremoteclusters/status", + "redisenterpriseremoteclusters/finalizers", + "redisenterpriseactiveactivedatabases", "redisenterpriseactiveactivedatabases/status", + "redisenterpriseactiveactivedatabases/finalizers"] + verbs: ["delete", "deletecollection", "get", "list", "patch", "create", "update", "watch"] + - apiGroups: [""] + resources: ["secrets"] + verbs: ["update", "get", "read", "list", "listallnamespaces", "watch", "watchlist", + "watchlistallnamespaces", "create","patch","replace","delete","deletecollection"] + - apiGroups: [""] + resources: ["endpoints"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events"] + verbs: ["create"] + - apiGroups: [""] + resources: ["services"] + verbs: ["get", "watch", "list", "update", "patch", "create", "delete"] +``` + +`role_binding.yaml` example: + +```yaml +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: redb-role + labels: + app: redis-enterprise +subjects: +- kind: ServiceAccount + name: redis-enterprise-operator + namespace: +- kind: ServiceAccount + name: + namespace: +roleRef: + kind: Role + name: redb-role + apiGroup: rbac.authorization.k8s.io +``` + +Apply the files, replacing `` with your own values: + +```sh +kubectl apply -f role.yaml -n +kubectl apply -f role_binding.yaml -n +``` + +{{}} +If the REC is configured to watch a namespace without setting the role and role binding permissions, or a namespace that is not yet created, the operator will fail and halt normal operations. +{{}} + + +## Update Redis Enterprise operator ConfigMap + +There are two methods of updating the operator ConfigMap (`operator-environment-config`) to specify which namespaces to manage. + +- Method 1: Configure the operator to watch for a namespace label and add this label to managed namespaces (available in versions 6.4.2-4 or later). +- Method 2: Configure the operator with an explicit list of namespaces to manage. + +You can create this ConfigMap manually before deployment, or it will be created automatically after the operator was deployed. + + +### Method 1: Namespace label (available in versions 6.4.2-4 or later) + +1. Create the `cluster_role_binding.yaml` and `cluster_role.yaml` files. Replace the `` with the namespace the Redis Enterprise cluster (REC) resides in. + + `operator_cluster_role.yaml` example: + + ```yaml + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + name: redis-enterprise-operator-consumer-ns + labels: + app: redis-enterprise + rules: + - apiGroups: [""] + resources: ["namespaces"] + verbs: ["list", "watch"] + ``` + + `operator_cluster_role_binding.yaml` example: + + ```yaml + kind: ClusterRoleBinding + apiVersion: rbac.authorization.k8s.io/v1 + metadata: + name: redis-enterprise-operator-consumer-ns + labels: + app: redis-enterprise + subjects: + - kind: ServiceAccount + name: redis-enterprise-operator + namespace: + roleRef: + kind: ClusterRole + name: redis-enterprise-operator-consumer-ns + apiGroup: rbac.authorization.k8s.io + ``` + +2. Apply the files. + + ```sh + kubectl apply -f operator_cluster_role.yaml + kubectl apply -f operator_cluster_role_binding.yaml + ``` + +3. Patch the ConfigMap in the REC namespace (``) to identify the managed namespaces with your label (``). + + ```sh + kubectl patch ConfigMap/operator-environment-config \ + -n \ + --type merge \ + -p '{"data": {"REDB_NAMESPACES_LABEL": ""}}' + ``` + +4. For each managed namespace, apply the same label. Replace `` with the namespace the REC will manage. Replace `` with the value used in the previous step. If you specify a value for ``, both the label name and value in managed namespaces must match to be detected by the operator. If the `` is empty, only the label name needs to match on managed namespaces and the value is disregarded. + + + ```sh + kubectl label namespace = + ``` + +{{}} +The operator restarts when it detects a namespace label was added or removed. +{{}} + +### Method 2: Explicit namespace list + +Patch the `operator-environment-config` in the REC namespace with a new environment variable (`REDB_NAMESPACES`). + +```sh +kubectl patch ConfigMap/operator-environment-config \ +-n \ +--type merge \ +-p '{"data":{"REDB_NAMESPACES": "}} +Only configure the operator to watch a namespace after the namespace is created and configured with the role/role_binding as explained above. If configured to watch a namespace without setting those permissions or a namespace that is not created yet, the operator will fail and not perform normal operations. +{{}} diff --git a/content/operate/kubernetes/7.4.6/re-databases/_index.md b/content/operate/kubernetes/7.4.6/re-databases/_index.md new file mode 100644 index 0000000000..d256bc3b7c --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-databases/_index.md @@ -0,0 +1,18 @@ +--- +Title: Redis Enterprise databases (REDB) +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Articles to help you manage your Redis Enterprise databases (REDBs). +hideListLinks: false +linkTitle: Redis Enterprise databases (REDB) +weight: 31 +url: '/operate/kubernetes/7.4.6/re-databases/' +--- + +This section contains articles to help you manage your Redis Enterprise databases (REDBs). + + + diff --git a/content/operate/kubernetes/7.4.6/re-databases/db-controller.md b/content/operate/kubernetes/7.4.6/re-databases/db-controller.md new file mode 100644 index 0000000000..da474b570e --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-databases/db-controller.md @@ -0,0 +1,165 @@ +--- +Title: Manage Redis Enterprise databases for Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section describes how the database controller provides the ability + to create, manage, and use databases via a database custom resource. +linkTitle: Manage databases +weight: 5 +url: '/operate/kubernetes/7.4.6/re-databases/db-controller/' +--- +## Redis Enterprise database (REDB) lifecycle + +A Redis Enterprise database (REDB) is created with a custom resource file. The custom resource defines the size, name, and other specifications for the REDB. The database is created when you apply the custom resource file. + +The database controller in Redis Enterprise for Kubernetes: + +- Discovers the custom resource +- Makes sure the REDB is created in the same namespace as the Redis Enterprise cluster (REC) +- Maintains consistency between the custom resource and the REDB + +The database controller recognizes the new custom resource and validates the specification. +If valid, the controller combines the values specified in +the custom resource with default values to create a full specification. It then uses this full specification to create the +database on the specified Redis Enterprise cluster (REC). + +Once the database is created, it is exposed with the same service mechanisms by the service rigger for the Redis Enterprise cluster. +If the database [custom resource is deleted]({{< relref "/operate/kubernetes/7.4.6/delete-custom-resources" >}}), the database and its services are deleted from the cluster. + +### Flexible deployment options + +Databases in multiple namespaces can be managed by the same operator. To learn more, see [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace" >}}). + +To learn more about designing a multi-namespace Redis Enterprise cluster, see [flexible deployment options]({{< relref "/operate/kubernetes/deployment/deployment-options.md" >}}). + +## Create a database + +Your Redis Enterprise database custom resource must be of the `kind: RedisEnterpriseDatabase` and have values for `name` and `memorySize`. All other values are optional and will be defaults if not specified. + +1. Create a file (in this example mydb.yaml) that contains your database custom resource. + + ```YAML + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseDatabase + metadata: + name: mydb + spec: + memorySize: 1GB + ``` + + To create a REDB in a different namespace from your REC, you need to specify the cluster with `redisEnterpriseCluster` in the `spec` section of your RedisEnterpriseDatabase custom resource. + + ```YAML + redisEnterpriseCluster: + name: rec + ``` + +1. Apply the file in the namespace you want your database to be in. + + ```sh + kubectl apply -f mydb.yaml + ``` + +1. Check the status of your database. + + ```sh + kubectl get redb mydb -o jsonpath="{.status.status}" + ``` + + When the status is `active`, the database is ready to use. + +## Modify a database + +The custom resource defines the properties of the database. +To change the database, you can edit your original specification and apply the change or use `kubectl edit`. + +To modify the database: + +1. Edit the definition: + + ```sh + kubectl edit redb mydb + ``` + +1. Change the specification (only properties in `spec` section) and save the changes. + For more details, see [RedisEnterpriseDatabaseSpec](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/redis_enterprise_database_api.md#redisenterprisedatabasespec) or [Options for Redis Enterprise databases]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api" >}}). + +1. Monitor the status to see when the changes take effect: + + ```sh + kubectl get redb mydb -o jsonpath="{.status.status}" + ``` + + When the status is `active`, the database is ready for use. + +## Delete a database + +The database exists as long as the custom resource exists. +If you delete the custom resource, the database controller deletes the database. +The database controller removes the database and its services from the cluster. + +To delete a database, run: + +```sh +kubectl delete redb mydb +``` + +## Connect to a database + +After the database controller creates a database, the services for accessing the database are created in the same namespace. By default there are two services, one 'ClusterIP' service and one 'headless' service. +Connection information for the database is stored in a Kubernetes [secret](https://kubernetes.io/docs/concepts/configuration/secret/) maintained by the database controller. This secret contains: + +- The database port (`port`) +- A comma separated list of service names (`service_names`) +- The database password for authenticating (`password`) + +The name of that secret is stored in the database custom resource. + +{{}} +Use these steps to connect to your database from within your K8s cluster. To access your database from outside the K8s cluster, set up the [Ingress]({{< relref "/operate/kubernetes/networking/ingress.md" >}}) controller or use OpenShift routes. +{{}} + +1. Retrieve the secret name. + + ```sh + kubectl get redb mydb -o jsonpath="{.spec.databaseSecretName}" + ``` + + The database secret name usually takes the form of `redb-`, so in our example it will be `redb-mydb`. + +1. Retrieve and decode the password. + + ```sh + kubectl get secret redb-mydb -o jsonpath="{.data.password}" | base64 --decode + ``` + +1. Retrieve and decode the port number. + + ```sh + kubectl get secret redb-mydb -o jsonpath="{.data.port}" | base64 --decode + ``` + +1. Retrieve and decode the service_names. + + ```sh + kubectl get secret redb-mydb -o jsonpath="{.data.service_names}" | base64 --decode + ``` + + You'll need to pick just one service listed here to use for connecting. + +1. From a pod within your cluster, use `redis-cli` to connect to your database. + + ```sh + redis-cli -h -p + ``` + +1. Enter the password you retrieved from the secret. + + ```sh + auth + ``` + + You are now connected to your database! diff --git a/content/operate/kubernetes/7.4.6/re-databases/replica-redb.md b/content/operate/kubernetes/7.4.6/re-databases/replica-redb.md new file mode 100644 index 0000000000..23aeb60bc7 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/re-databases/replica-redb.md @@ -0,0 +1,255 @@ +--- +Title: Create replica databases on Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: How to create and automate database replicas using the database controller +linkTitle: Create replica databases +weight: 42 +url: '/operate/kubernetes/7.4.6/re-databases/replica-redb/' +--- + +You can configure a replica of a database by creating an item in +the `replicaSources` section of the [Redis Enterprise database specification](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/redis_enterprise_database_api.md#redisenterprisedatabasespec). The value of +`replicaSourceType` must be 'SECRET'; `replicaSourceName` +must be the name of a secret that contains the replica source url. + +A secret must be created using a `stringData` section containing the replica source URI as follows: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: my-replica-source +stringData: + uri: replica-source-uri-goes-here +``` + +The replica source URL can be retrieved by going to "UI > database > configuration > Press the button Get Replica of source URL" +in the administrative UI. But, this information can also be retrieved directly from +the REST API as well. + +A replica of database CR simply uses the secret in the `replicaSources` section: + +```yaml +apiVersion: app.redislabs.com/v1alpha1 +kind: RedisEnterpriseDatabase +metadata: + name: name-of-replica +spec: + redisEnterpriseCluster: + name: name-of-cluster + replicaSources: + - replicaSourceType: SECRET + replicaSourceName: my-replica-source +``` + +In the above, `name-of-replica` database will be created as a replica of the +source database as long as the source database exists on the source cluster +and the secret contains the correct replica source URL for that database. + +## Retrieving the replica source URL via kubectl + +You will need `kubectl`, `curl`, and `jq` installed for this procedure. + +1. Set your metadata: + + ```js + CLUSTER_NAME=test + SOURCE_DB=db1 + TARGET_DB=db2 + TARGET_CLUSTER_NAME=test + ``` + +1. Retrieve the cluster authentication: + + ```js + CLUSTER_USER=`kubectl get secret/${CLUSTER_NAME} -o json | jq -r .data.username | base64 -d` + CLUSTER_PASSWORD=`kubectl get secret/${CLUSTER_NAME} -o json | jq -r .data.password | base64 -d` + ``` + +1. Forward the port of the REST API service for your source cluster: + + ```sh + kubectl port-forward pod/${CLUSTER_NAME}-0 9443 + ``` + +1. Request the information from the REST API: + + ```js + JQ='.[] | select(.name=="' + JQ+="${SOURCE_DB}" + JQ+='") | ("redis://admin:" + .authentication_admin_pass + "@"+.endpoints[0].dns_name+":"+(.endpoints[0].port|tostring))' + URI=`curl -sf -k -u "$CLUSTER_USER:$CLUSTER_PASSWORD" "https://localhost:9443/v1/bdbs?fields=uid,name,endpoints,authentication_admin_pass" | jq "$JQ" | sed 's/"//g'` + ``` + + Note: URI now contains the replica source URI. + +1. Construct the secret for the replica: + + ```yaml + cat << EOF > secret.yaml + apiVersion: v1 + kind: Secret + metadata: + name: ${SOURCE_DB}-url + stringData: + uri: ${URI} + EOF + kubectl apply -f secret.yaml + ``` + +1. Create the replica database: + + ```yaml + cat << EOF > target.yaml + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseDatabase + metadata: + name: ${TARGET_DB} + spec: + redisEnterpriseCluster: + name: ${TARGET_CLUSTER_NAME} + replicaSources: + - replicaSourceType: SECRET + replicaSourceName: ${SOURCE_DB}-url + EOF + kubectl apply -f target.yaml + ``` + +## Automating the creation via a job + +The following procedure uses a ConfigMap and a Job to construct the replica +source URL secret from the source database and configure the target database. + +There are four parameters: + +- `source` - the name of the source database +- `cluster` - the name of the cluster for the source database +- `target` - the name of the target database +- `targetCluster` - the name of the cluster for the target database + +These parameters can be set by: + +```sh +kubectl create configmap replica-of-database-parameters \ +--from-literal=source=name-of-source \ +--from-literal=cluster=name-of-cluster \ +--from-literal=target=name-of-target \ +--from-literal=targetCluster=name-of-cluster +``` + +where "name-of-..." is replaced with the database source, source cluster, +database target, and target cluster names. + +The Job and ConfigMap below, when submitted, will create the secret and +replica database: + +```yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: replica-of-database +spec: + backoffLimit: 4 + template: + spec: + serviceAccountName: redis-enterprise-operator + restartPolicy: Never + volumes: + - name: scripts + configMap: + name: replica-of-database + containers: + - name: createdb + image: debian:stable-slim + env: + - name: MY_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: SCRIPT + value: create.sh + - name: SOURCE_DB + valueFrom: + configMapKeyRef: + name: replica-of-database-parameters + key: source + - name: TARGET_DB + valueFrom: + configMapKeyRef: + name: replica-of-database-parameters + key: target + - name: CLUSTER_SERVICE + value: .svc.cluster.local + - name: CLUSTER_NAME + valueFrom: + configMapKeyRef: + name: replica-of-database-parameters + key: cluster + - name: CLUSTER_PORT + value: "9443" + - name: TARGET_CLUSTER_NAME + valueFrom: + configMapKeyRef: + name: replica-of-database-parameters + key: targetCluster + volumeMounts: + - mountPath: /opt/scripts/ + name: scripts + command: + - /bin/bash + - -c + - | + apt-get update; apt-get install -y curl jq apt-transport-https gnupg2 + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A030B21BA07F4FB + curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - + echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee -a /etc/apt/sources.list.d/kubernetes.list + apt-get update + apt-get install -y kubectl + bash /opt/scripts/$SCRIPT +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: replica-of-database +data: + create.sh: | + CLUSTER_USER=`kubectl get secret/${CLUSTER_NAME} -o json | jq -r .data.username | base64 -d` + CLUSTER_PASSWORD=`kubectl get secret/${CLUSTER_NAME} -o json | jq -r .data.password | base64 -d` + CLUSTER_HOST=${CLUSTER_NAME}.${MY_NAMESPACE}${CLUSTER_SERVICE} + JQ='.[] | select(.name=="' + JQ+="${SOURCE_DB}" + JQ+='") | ("redis://admin:" + .authentication_admin_pass + "@"+.endpoints[0].dns_name+":"+(.endpoints[0].port|tostring))' + URI=`curl -sf -k -u "$CLUSTER_USER:$CLUSTER_PASSWORD" "https://${CLUSTER_HOST}:${CLUSTER_PORT}/v1/bdbs?fields=uid,name,endpoints,authentication_admin_pass" | jq "$JQ" | sed 's/"//g'` + echo "URL: ${URL}" + echo "" + cat << EOF > /tmp/secret.yaml + apiVersion: v1 + kind: Secret + metadata: + name: ${SOURCE_DB}-url + stringData: + uri: ${URI} + EOF + cat /tmp/secret.yaml + cat << EOF > /tmp/target.yaml + apiVersion: app.redislabs.com/v1alpha1 + kind: RedisEnterpriseDatabase + metadata: + name: ${TARGET_DB} + spec: + redisEnterpriseCluster: + name: ${TARGET_CLUSTER_NAME} + replicaSources: + - replicaSourceType: SECRET + replicaSourceName: ${SOURCE_DB}-url + EOF + echo "---" + cat /tmp/target.yaml + echo "" + kubectl -n ${MY_NAMESPACE} apply -f /tmp/secret.yaml + kubectl -n ${MY_NAMESPACE} apply -f /tmp/target.yaml +``` diff --git a/content/operate/kubernetes/7.4.6/recommendations/_index.md b/content/operate/kubernetes/7.4.6/recommendations/_index.md new file mode 100644 index 0000000000..8eea3dd8d1 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/recommendations/_index.md @@ -0,0 +1,19 @@ +--- +Title: Configuration recommendations +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Settings and configuration recommendations for your Redis Enterprise + deployment. +hideListLinks: false +linkTitle: Recommendations +weight: 80 +url: '/operate/kubernetes/7.4.6/recommendations/' +--- + +This section contains recommended settings and configuration for your Redis Enterprise for Kubernetes deployment. + + + diff --git a/content/operate/kubernetes/7.4.6/recommendations/node-resources.md b/content/operate/kubernetes/7.4.6/recommendations/node-resources.md new file mode 100644 index 0000000000..1385090e0c --- /dev/null +++ b/content/operate/kubernetes/7.4.6/recommendations/node-resources.md @@ -0,0 +1,61 @@ +--- +Title: Manage node resources +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Recommendations on managing node resources and setting eviction thresholds + with Redis Enterprise for Kubernetes. +linktitle: Manage resources +weight: 17 +url: '/operate/kubernetes/7.4.6/recommendations/node-resources/' +--- + + + +## Node eviction thresholds + + Kubernetes uses [node-pressure eviction](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/) to terminate pods and free up node resources. Redis Enterprise for Kubernetes works best when you use the recommendations below. + +Eviction thresholds are managed by [kubelet arguments](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet/). + +Redis recommends setting a high [soft eviction threshold](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds). This changes the node condition early enough to alert the administrator. + +We also recommend setting the [`eviction-soft-grace-period`](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#soft-eviction-thresholds) high enough for the administrator to scale the cluster. + +For more information about configuring eviction thresholds on specific platforms, see [Freeing node resources](https://docs.openshift.com/container-platform/4.9/nodes/nodes/nodes-nodes-garbage-collection.html) for OpenShift or [Cluster architecture](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-architecture#node_allocatable) for GKE. + +### Monitor node conditions + +Redis recommends monitoring the node conditions. If both `MemoryPressure` and `DiskPressure` are true, the eviction threshold was met. + +```sh +> kubectl get nodes -o jsonpath='{range .items[*]}name:{.metadata.name}{"\t"}MemoryPressure:{.status.conditions[?(@.type == "MemoryPressure")].status}{"\t"}DiskPressure:{.status.conditions[?(@.type == "DiskPressure")].status}{"\n"}{end}' +name:gke-55d1ac88-213c MemoryPressure:False DiskPressure:False +name:gke-55d1ac88-vrpp MemoryPressure:False DiskPressure:False +name:gke-7253cc19-42g0 MemoryPressure:False DiskPressure:False +``` + +For more information about monitoring node conditions, see [Node conditions](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/#node-conditions) on [kubernetes.io](https://kubernetes.io/docs/home/). + +## Resource quotas + +Kubernetes uses the `ResourceQuota` object to limit resource consumption per namespace. This lets you limit the number of objects created by a namespace or the amount of compute resources consumed by a namespace. + +The resource settings for Redis Enterprise for Kubernetes are defined in the `operator.yaml` and the [`RedisEnterpriseCluster`](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/redis_enterprise_cluster_api.md#redisenterpriseclusterspec) custom resource. + +The following settings are the minimum workloads for the operator to function. + +```yaml + resources: + limits: + cpu: 0.5 + memory: 256Mi + requests: + cpu: 0.5 + memory: 256Mi +``` +For more details on using resource quotas, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/). + + diff --git a/content/operate/kubernetes/7.4.6/recommendations/node-selection.md b/content/operate/kubernetes/7.4.6/recommendations/node-selection.md new file mode 100644 index 0000000000..9f3f8d0fc5 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/recommendations/node-selection.md @@ -0,0 +1,271 @@ +--- +Title: Control node selection +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section provides information about how Redis Enterprise cluster + pods can be scheduled to only be placed on specific nodes or node pools. +linkTitle: Node selection +weight: 80 +url: '/operate/kubernetes/7.4.6/recommendations/node-selection/' +--- + +Many Kubernetes cluster deployments have different kinds of nodes that have +different CPU and memory resources available for scheduling cluster workloads. +Redis Enterprise for Kubernetes has various abilities to control the scheduling +Redis Enterprise cluster node pods through properties specified in the +Redis Enterprise cluster custom resource definition (CRD). + +A Redis Enterprise cluster (REC) is deployed as a StatefulSet which manages the Redis Enterprise cluster node pods. +The scheduler chooses a node to deploy a new Redis Enterprise cluster node pod on when: + +- The cluster is created +- The cluster is resized +- A pod fails + +Here are the ways that you can control the pod scheduling: + +## Using node selectors + +The [`nodeSelector`]({{}}) +property of the cluster specification uses the same values and structures as +the [Kubernetes `nodeSelector`](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector). +In general, node labels are a simple way to make sure that specific nodes are used for Redis Enterprise pods. +For example, if nodes 'n1' and 'n2' are labeled as "high memory": + +```sh +kubectl label nodes n1 memory=high +kubectl label nodes n2 memory=high +``` + +The Redis Enterprise cluster CRD can request to be scheduled on these nodes: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + nodeSelector: + memory: high +``` + +Then, when the operator creates the StatefulSet associated with the pod, the nodeSelector +section is part of the pod specification. When the scheduler attempts to +create new pods, it needs to satisfy the node selection constraints. + + +## Using node pools + +A node pool is a common part of the underlying infrastructure of the Kubernetes cluster deployment and provider. +Often, node pools are similarly-configured classes of nodes such as nodes with the same allocated amount of memory and CPU. +Implementors often label these nodes with a consistent set of labels. + +On Google Kubernetes Engine (GKE), all node pools have the label `cloud.google.com/gke-nodepool` with a value of the name used during configuration. +On Microsoft Azure Kubernetes System (AKS), you can create node pools with a specific set of labels. Other managed cluster services may have similar labeling schemes. + +You can use the `nodeSelector` section to request a specific node pool by label values. For example, on GKE: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + nodeSelector: + cloud.google.com/gke-nodepool: 'high-memory' +``` + +## Using node taints + +You can use multiple node taints with a set of tolerations to control Redis Enterprise cluster node pod scheduling. +The `podTolerations` property of the cluster specification specifies a list of pod tolerations to use. +The value is a list of [Kubernetes tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/#concepts). + +For example, if the cluster has a single node pool, the node taints can control the allowed workloads for a node. +You can add taints to the node, for example nodes n1, n2, and n3, reserve a set of nodes for the Redis Enterprise cluster: + +```sh +kubectl taint nodes n1 db=rec:NoSchedule +kubectl taint nodes n2 db=rec:NoSchedule +kubectl taint nodes n3 db=rec:NoSchedule +``` + +This prevents any pods from being scheduled onto the nodes unless the pods can tolerate the taint `db=rec`. + +You can then add the toleration for this taint to the cluster specification: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + podTolerations: + - key: db + operator: Equal + value: rec + effect: NoSchedule +``` + +A set of taints can also handle more complex use cases. +For example, a `role=test` or `role=dev` taint can be used to designate a node as dedicated for testing or development workloads via pod tolerations. + +## Using pod anti-affinity + +By default, the Redis Enterprise node pods are not allowed to be placed on the same node for the same cluster: + +```yaml +podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + app: redis-enterprise + redis.io/cluster: rec + redis.io/role: node + topologyKey: kubernetes.io/hostname +``` + +Each pod has the three labels above where `redis.io/cluster` is the label for the name of your cluster. + +You can change this rule to restrict or include nodes that the Redis Enterprise cluster node pods can run on. +For example, you can delete the `redis.io/cluster` label so that even Redis Enterprise node pods from different clusters cannot be scheduled on the same Kubernetes node: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + app: redis-enterprise + redis.io/role: node + topologyKey: kubernetes.io/hostname +``` + +or you can prevent Redis Enterprise nodes from being schedule with other workloads. +For example, if all database workloads have the label 'local/role: database', you +can use this label to avoid scheduling two databases on the same node: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + extraLabels: + local/role: database + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchLabels: + local/role: database + app: redis-enterprise + redis.io/cluster: rec + redis.io/role: node + topologyKey: kubernetes.io/hostname +``` + +In this case, any pods that are deployed with the label `local/role: database` cannot be scheduled on the same node. + + +## Using rack awareness + +You can configure Redis Enterprise with rack-zone awareness to increase availability +during partitions or other rack (or region) related failures. + +{{%note%}}When creating your rack-zone ID, there are some constraints to consider; see [rack-zone awareness]({{< relref "/operate/rs/clusters/configure/rack-zone-awareness#rack-zone-id-rules" >}}) for more info. {{%/note%}} + + +Rack-zone awareness is a single property in the Redis Enterprise cluster CRD named `rackAwarenessNodeLabel`. +This value for this label is commonly `topology.kubernetes.io/zone` as documented in +['Running in multiple zones'](https://kubernetes.io/docs/setup/best-practices/multiple-zones/#nodes-are-labeled). + +You can check the value for this label in your nodes with the command: + +```sh +$kubectl get nodes -o custom-columns="name:metadata.name","rack\\zone:metadata.labels.failure-domain\.beta\.kubernetes\.io/zone" + +name rack\zone +ip-10-0-x-a.eu-central-1.compute.internal eu-central-1a +ip-10-0-x-b.eu-central-1.compute.internal eu-central-1a +ip-10-0-x-c.eu-central-1.compute.internal eu-central-1b +ip-10-0-x-d.eu-central-1.compute.internal eu-central-1b +``` + +### Enabling the cluster role + +For the operator to read the cluster node information, you must create a cluster role for the operator and then bind the role to the service account. + +Here's a cluster role: + +```yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: redis-enterprise-operator +rules: + # needed for rack awareness + - apiGroups: [""] + resources: ["nodes"] + verbs: ["list", "get", "watch"] +``` + +And here's how to apply the role: + +```sh +kubectl apply -f https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/master/rack_awareness/rack_aware_cluster_role.yaml +``` + +The binding is typically to the `redis-enterprise-operator` service account: + +```yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: redis-enterprise-operator +subjects: +- kind: ServiceAccount + namespace: OPERATOR_NAMESPACE + name: redis-enterprise-operator +roleRef: + kind: ClusterRole + name: redis-enterprise-operator + apiGroup: rbac.authorization.k8s.io +``` + +and it can be applied by running: + +```sh +kubectl apply -f https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/master/rack_awareness/rack_aware_cluster_role_binding.yaml +``` + +Once the cluster role and the binding have been applied, you can configure Redis Enterprise clusters to use rack awareness labels. + +### Configuring rack awareness + +You can configure the node label to read for the rack zone by setting the `rackAwarenessNodeLabel` property: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: example-redisenterprisecluster +spec: + nodes: 3 + rackAwarenessNodeLabel: topology.kubernetes.io/zone +``` + +{{< note >}} +When you use the `rackAwarenessNodeLabel` property, the operator will change the topologyKey for the anti-affinity rule to the label name used unless you have specified the `podAntiAffinity` property as well. If you use `rackAwarenessNodeLabel` and `podAntiAffinity` together, you must make sure that the `topologyKey` in your pod anti-affinity rule is set to the node label name. +{{< /note >}} diff --git a/content/operate/kubernetes/7.4.6/recommendations/persistent-volumes.md b/content/operate/kubernetes/7.4.6/recommendations/persistent-volumes.md new file mode 100644 index 0000000000..7a69bceb75 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/recommendations/persistent-volumes.md @@ -0,0 +1,108 @@ +--- +Title: Use persistent volumes in Redis Enterprise clusters +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section covers details about how persistent volumes are sized and + specified for Redis Enterprise cluster deployments. +linkTitle: Persistent volumes +weight: 40 +url: '/operate/kubernetes/7.4.6/recommendations/persistent-volumes/' +--- +## Storage types + +Redis Enterprise for Kubernetes can only use storage classes supported by block storage. Block storage is mounted at the Kubernetes node level and utilizes EXT4 or XFS file systems. It can be sourced from enterprise-grade SANs or cloud environments such as EBS, Azure Managed Disks, or GCP persistent disks. + +{{}} +NFS, NFS-like, and multi-read-write/shared storage options are not supported. These types of storage are often slow and can cause locking behaviors that are incompatible with the requirements of database storage. +{{}} + +## REC `persistentSpec` field +To deploy a Redis Enterprise cluster with Redis Enterprise operator the +spec should include a *persistentSpec* section, in the +*redis-enterprise-cluster.yaml* file: + + spec: + nodes: 3 + persistentSpec: + enabled: true + storageClassName: "standard" + volumeSize: "23Gi” #optional + +Persistence storage is a requirement for production deployments. + +{{< note >}} +For **production deployments** of Redis Enterprise Cluster on Kubernetes, +the Redis Enterprise Cluster (REC) must be deployed with persistence enabled. +The REC deployment files in the [Kubernetes documentation](https://github.com/RedisLabs/redis-enterprise-k8s-docs) contain this declaration by default. +{{< /note >}} + +## Volume size + +*volumeSize* is an optional definition. By default, if the definition is +omitted, operator allocates five times (5x) the amount of memory (RAM) +defined for nodes (see example below), which is the recommended +persistent storage size as described in the [Hardware +requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}) article. + +To explicitly specify the persistent storage size, use the *volumeSize* +property as described in the example above. + +Persistent volume claims can be expanded, but not reduced after creation. See [Expand PersistentVolumeClaim (PVC)]({{}}) for details. + +{{< note >}} +We recommend that you omit the volumeSize definition from the REC declaration +so that the Redis Enterprise Cluster deployment on Kubernetes use the default volume size. +{{< /note >}} + +## Storage class name + +*storageClassName* determines the Storage Class resource, which is +defined by the Kubernetes cluster administrator, to be used for +persistent storage. + +Different Kubernetes distributions and different deployments use +different Storage Class resources. + +In order to determine the Storage Class resources available for your K8s +deployment, use the following command: + + kubectl get StorageClass + +Typically, AWS provides “gp2” as the Storage Class name while GKE uses “standard.” +Azure provides two Storage Classes: "default" using HDDs, and "managed-premium" using SSDs. + +Below is an example of a response to the command. + +| | | +| ----------------------- | ------------------------------------------------------- | +| *Name:* | *gp2* | +| *IsDefaultClass:* | *Yes* | +| *Annotations:* | *storageclass.beta.kubernetes.io/is-default-class=true* | +| *Provisioner:* | *kubernetes.io/aws-ebs* | +| *Parameters:* | *encrypted=false,kmsKeyId=,type=gp2* | +| *AllowVolumeExpansion:* | *\* | +| *MountOptions:* | *\* | +| *ReclaimPolicy:* | *Delete* | +| *VolumeBindingMode:* | *Immediate* | +| *Events:* | *\* | + +{{< note >}} +storageClassName must be specified for this deployment type. +{{< /note >}} + +{{< warning >}} +The storage class cannot be changed after deployment. Trying to change this value after deployment could result in unexpected and potentially damaging behavior. +{{< /warning >}} + +Example of the redisEnterpriseNodeResources definition: + + redisEnterpriseNodeResources: + limits: + cpu: “4000m” + memory: 4Gi + requests: + cpu: “4000m” + memory: 4Gi diff --git a/content/operate/kubernetes/7.4.6/recommendations/pod-stability.md b/content/operate/kubernetes/7.4.6/recommendations/pod-stability.md new file mode 100644 index 0000000000..859912ad72 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/recommendations/pod-stability.md @@ -0,0 +1,115 @@ +--- +Title: Manage pod stability +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section provides information about how you can use quality of service, + priority class, eviction thresholds and resource monitoring to maintain cluster + node pod stability. +linkTitle: Pod stability +weight: 90 +url: '/operate/kubernetes/7.4.6/recommendations/pod-stability/' +--- + +Kubernetes clusters manage the allocation of system resources and can evict pods to release system resources. +Here are some ways that you can configure the Redis Enterprise node pods to maintain pod stability: + +## Guaranteed quality of service + +A running pod has a quality of service measure assigned to it that is +one of three [quality of service classes](https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/): +Guaranteed, Burstable, and Best Effort. +You can assure the Guaranteed class is assigned to the Redis Enterprise node pods +by following the right guidelines. + +To get a Guaranteed quality of service class assigned: + + * Every container in the pod must have a memory limit and a memory request, and they must be the same. + * Every container in the pod must have a CPU limit and a CPU request, and they must be the same. + +If resources limits and requests are not specified in the Redis Enterprise CRD, +these requirements are met in the default version created by the operator. of your Redis Enterprise cluster CRD, +Otherwise, you must set the limits and requests to the same value for memory and CPU in the `redisEnterpriseNodeResources` +section of the CRD. + +Sidecar containers also impact the quality of service class assignment for the pod. + +To check the quality of service class of any running Redis Enterprise node pod, run: + +```sh +kubectl get pod rec-0 --o jsonpath="{.status.qosClass}" +``` + +where `rec-0` is the name of one of the pods associated with the Redis Enterprise cluster. + +## Using priority to protect from preemption + +When a Redis Enterprise node pod is scheduled, it can be assigned a +[priority class](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/) +with the `priorityClassName` property. This property value is the name of +a priority class that must already exist within the cluster. + +A sufficiently high priority will prevent other workloads with a lower +priority from preempting the scheduling of Redis Enterprise Nodes. Similarly, +a high value may also prevent eviction when lower priority workloads +are deployed on the same cluster. + +The successful use of this strategy involves first creating a priority class with a very large priority value: + +```yaml +apiVersion: scheduling.k8s.io/v1 +kind: PriorityClass +metadata: + name: redis-enterprise-priority +value: 1000000000 +globalDefault: false +description: "This priority class should be used for Redis Enterprise pods only." +``` + +Then, you refer to the priority class by name in your Redis Enterprise cluster CRD: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: example-redisenterprisecluster +spec: + size: 3 + priorityClassName: "redis-enterprise-priority" +``` + +Alternatively, you can also [disable preemption entirely](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#how-to-disable-preemption). + +## Managing eviction thresholds + +Eviction thresholds are typically managed by kubelet arguments. +You can set the thresholds: + +- On OpenShift - In the [config file](https://docs.openshift.com/container-platform/3.11/admin_guide/out_of_resource_handling.html#out-of-resource-create-config). +- On GKE - In the [managed settings](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-architecture#node_allocatable). + +We recommend that you: + + * Set the [soft eviction threshold](https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#soft-eviction-thresholds) + to be higher than the [hard eviction threshold](https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#hard-eviction-thresholds). + The high soft threshold makes the node condition change earlier, and alerts the administrator. + * Set `eviction-max-pod-grace-period` high enough to allow the RS pods to migrate the Redis databases before the pods are force killed. + * Set the `eviction-soft-grace-period` high enough that the administrator (or a k8s auto-scaling mechanism) scales k8s up or out. + +## Monitoring for memory and disk usage + +We recommend that you monitor the node for MemoryPressure and DiskPressure. +When both of these conditions are true, then an [eviction threshold](https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/#eviction-thresholds) +is met and the pod is evicted. + +To retrieve the flags, run the command: + +```sh +$kubectl get nodes -o jsonpath='{range .items[*]}name:{.metadata.name}{"\t"}MemoryPressure:{.status.conditions[?(@.type == "MemoryPressure")].status}{"\t"}DiskPressure:{.status.conditions[?(@.type == "DiskPressure")].status}{"\n"}{end}' + +name:gke-55d1ac88-213c MemoryPressure:False DiskPressure:False +name:gke-55d1ac88-vrpp MemoryPressure:False DiskPressure:False +name:gke-7253cc19-42g0 MemoryPressure:False DiskPressure:False +``` diff --git a/content/operate/kubernetes/7.4.6/recommendations/sizing-on-kubernetes.md b/content/operate/kubernetes/7.4.6/recommendations/sizing-on-kubernetes.md new file mode 100644 index 0000000000..ce776262fc --- /dev/null +++ b/content/operate/kubernetes/7.4.6/recommendations/sizing-on-kubernetes.md @@ -0,0 +1,121 @@ +--- +Title: Size and scale a Redis Enterprise cluster deployment on Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This section provides information about sizing and scaling Redis Enterprise + in a Kubernetes deployment. +linkTitle: Sizing and scaling +weight: 50 +url: '/operate/kubernetes/7.4.6/recommendations/sizing-on-kubernetes/' +--- +The following article reviews the mechanism and methods available for sizing +and scaling a Redis Enterprise cluster deployment. + +For minimum and recommended sizing, always follow the sizing guidelines +detailed in the [Redis Enterprise hardware requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}). + +## Sizing and scaling cluster nodes + +### Setting the number of cluster nodes + +Define the number of cluster nodes in redis-enterprise-cluster.yaml file. + + spec: + + nodes: 3 + +The number of nodes in the cluster must be an uneven number +equal to or greater than 3. Refer to the article [Highly Available Redis](https://redislabs.com/redis-enterprise/technology/highly-available-redis/) +for a detailed explanation on this topic. + +Set the number of cluster nodes during deployment +by editing the redis-enterprise-cluster.yaml file and +applying the file by running: + + kubectl apply -f redis-enterprise-cluster.yaml + +### Scaling out + +To scale out a Redis Enterprise Cluster deployment, increase the number of nodes +in the spec. For example, to scale the cluster out from 3 nodes to 5 nodes, +edit the redis-enterprise-cluster.yaml file with the following: + + spec: + + nodes: 5 + +To apply the new cluster configuration run: + + kubectl apply -f redis-enterprise-cluster.yaml + +{{}} Decreasing the number of nodes is not supported.{{}} + +### Sizing compute resources + +To set the compute resources required for each node, +use the redisEnterpriseNodeResources spec field. + +Under redisEnterpriseNodeResources spec, set the following fields +according to the provided guidelines. + +- limits – specifies the maximum compute resources for a Redis node +- requests – specifies the minimum compute resources for a Redis node + +For example: + + redisEnterpriseNodeResources: + + limits: + + cpu: “2000m” + + memory: 4Gi + + requests: + + cpu: “2000m” + + memory: 4Gi + +The default values, if unspecified, are 2 cores (2000m) and 4GB (4Gi). + +Set the compute resources for cluster nodes during deployment +by editing the redis-enterprise-cluster.yaml file and +applying the file by running: + + kubectl apply -f redis-enterprise-cluster.yaml + +### Scaling up node compute resources + +To scale up nodes in an existing Redis Enterprise Cluster deployment, +adjust the cpu and memory parameters in the spec. For example, +to scale nodes up to the recommended amount of compute resources, +edit the redis-enterprise-cluster.yaml file with the following: + +redisEnterpriseNodeResources: + + limits: + + cpu: “8000m” + + memory: 30Gi + + requests + + cpu: “8000m” + + memory: 30Gi + +Then, apply the file by running: + + kubectl apply -f redis-enterprise-cluster.yaml + +{{< warning >}} +When adjusting compute resources, make sure the ratio of persistent volume size and the new memory size are in accordance to the [Hardware +requirements]({{< relref "/operate/rs/installing-upgrading/install/plan-deployment/hardware-requirements.md" >}}). + +Persistent volume claims can be expanded, but not reduced after creation. See [Expand PersistentVolumeClaim (PVC)]({{}}) for details. +{{< /warning >}} diff --git a/content/operate/kubernetes/7.4.6/reference/_index.md b/content/operate/kubernetes/7.4.6/reference/_index.md new file mode 100644 index 0000000000..ebb2c65d13 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/_index.md @@ -0,0 +1,19 @@ +--- +Title: Reference +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Reference material for the operator, cluster, and database deployment + options. +hideListLinks: false +linkTitle: Reference +weight: 89 +url: '/operate/kubernetes/7.4.6/reference/' +--- + +This section contains the API reference for Redis custom resources and supported distributions. + + + diff --git a/content/operate/kubernetes/7.4.6/reference/kubernetes-api-reference-frontmatter.patch b/content/operate/kubernetes/7.4.6/reference/kubernetes-api-reference-frontmatter.patch new file mode 100644 index 0000000000..f4f7f9732f --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/kubernetes-api-reference-frontmatter.patch @@ -0,0 +1,56 @@ +diff --git a/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md b/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md +index 01e82b1b..cacaa46c 100644 +--- a/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md ++++ b/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md +@@ -5,7 +5,7 @@ categories: + - docs + - operate + - kubernetes +-linkTitle: RedisEnterpriseActiveActiveDatabase API Reference ++linkTitle: REAADB API + weight: 30 + --- + +diff --git a/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md b/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md +index 970ba528..6afe4c50 100644 +--- a/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md ++++ b/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md +@@ -5,8 +5,9 @@ categories: + - docs + - operate + - kubernetes +-linkTitle: RedisEnterpriseCluster API Reference ++linkTitle: REC API + weight: 30 ++aliases: [ /operate/kubernetes/reference/cluster-options, ] + --- + + apiVersion: +diff --git a/content/operate/kubernetes/reference/redis_enterprise_database_api.md b/content/operate/kubernetes/reference/redis_enterprise_database_api.md +index f925ce44..ea21766e 100644 +--- a/content/operate/kubernetes/reference/redis_enterprise_database_api.md ++++ b/content/operate/kubernetes/reference/redis_enterprise_database_api.md +@@ -5,8 +5,9 @@ categories: + - docs + - operate + - kubernetes +-linkTitle: RedisEnterpriseDatabase API Reference ++linkTitle: REDB API + weight: 30 ++aliases: [ /operate/kubernetes/reference/db-options, ] + --- + + apiVersion: +diff --git a/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md b/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md +index 7d37a6dc..a9a313cf 100644 +--- a/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md ++++ b/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md +@@ -5,7 +5,7 @@ categories: + - docs + - operate + - kubernetes +-linkTitle: RedisEnterpriseRemoteCluster API Reference ++linkTitle: RERC API + weight: 30 + --- + diff --git a/content/operate/kubernetes/7.4.6/reference/kubernetes-api-reference-template.tmpl b/content/operate/kubernetes/7.4.6/reference/kubernetes-api-reference-template.tmpl new file mode 100644 index 0000000000..4c9f301568 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/kubernetes-api-reference-template.tmpl @@ -0,0 +1,104 @@ +{{- $group:= index .Groups 0 -}} +{{- $kinds:= index $group.Kinds 0 -}} +{{- $resource := $kinds.Name -}} +{{- $title:= printf "%s %s" $kinds.Name "API Reference" -}} +--- +title: {{ $title }} +alwaysopen: false +categories: +- docs +- operate +- kubernetes +linkTitle: {{ $title }} +weight: 30 +--- + +apiVersion: +{{ $group:= index .Groups 0 }} + +- [{{$group.Group}}/{{$group.Version}}](#{{ anchorize (printf "%s/%s" $group.Group $group.Version) }}) + + +{{ $group:= index .Groups 0 }} + +# {{$group.Group}}/{{$group.Version}} + +{{range $group.Kinds}} +{{- $kind := . -}} +{{range .Types}} + +{{if not .IsTopLevel}} +### {{.Name}} +{{if .ParentKey}}[↩ Parent](#{{.ParentKey}}){{end}} +{{end}} +{{.Description}} + + + + + + + + + + + + {{- if .IsTopLevel -}} + + + + + + + + + + + + + + + + + + + {{- end -}} + {{- range .Fields -}} + + + + + + + {{- end -}} + +
NameTypeDescriptionRequired
apiVersionstring{{$group.Group}}/{{$group.Version}}true
kindstring{{$kind.Name}}true
metadataobjectRefer to the Kubernetes API documentation for the fields of the `metadata` field.true
{{if .TypeKey}}{{.Name}}{{else}}{{.Name}}{{end}}{{.Type}} + {{.Description}}
+ {{- if or .Schema.XValidations .Schema.Format .Schema.Enum .Schema.Default .Schema.Minimum .Schema.Maximum }} +
+ {{- end}} + {{- if .Schema.XValidations }} + Validations: + {{- range .Schema.XValidations -}} +
  • {{ .Rule }}: {{ .Message }}
  • + {{- end -}} + {{- end }} + {{- if .Schema.Format }} + Format: {{ .Schema.Format }}
    + {{- end }} + {{- if .Schema.Enum }} + Enum: {{ .Schema.Enum | toStrings | join ", " }}
    + {{- end }} + {{- if .Schema.Default }} + Default: {{ .Schema.Default }}
    + {{- end }} + {{- if .Schema.Minimum }} + Minimum: {{ .Schema.Minimum }}
    + {{- end }} + {{- if .Schema.Maximum }} + Maximum: {{ .Schema.Maximum }}
    + {{- end }} +
    {{.Required}}
    + +{{- end}}{{/* range .Types */}} +{{- end}}{{/* range .Kinds */}} diff --git a/content/operate/kubernetes/7.4.6/reference/redis_enterprise_active_active_database_api.md b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_active_active_database_api.md new file mode 100644 index 0000000000..6c8f10dc58 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_active_active_database_api.md @@ -0,0 +1,1662 @@ +--- +title: RedisEnterpriseActiveActiveDatabase API Reference +alwaysopen: false +categories: +- docs +- operate +- kubernetes +linkTitle: REAADB API +weight: 30 +url: '/operate/kubernetes/7.4.6/reference/redis_enterprise_active_active_database_api/' +--- + +apiVersion: + + +- [app.redislabs.com/v1alpha1](#appredislabscomv1alpha1) + + + + +# app.redislabs.com/v1alpha1 + + + + +RedisEnterpriseActiveActiveDatabase is the Schema for the redisenterpriseactiveactivedatabase API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiVersionstringapp.redislabs.com/v1alpha1true
    kindstringRedisEnterpriseActiveActiveDatabasetrue
    metadataobjectRefer to the Kubernetes API documentation for the fields of the `metadata` field.true
    specobject + RedisEnterpriseActiveActiveDatabaseSpec defines the desired state of RedisEnterpriseActiveActiveDatabase
    +
    false
    statusobject + RedisEnterpriseActiveActiveDatabaseStatus defines the observed state of RedisEnterpriseActiveActiveDatabase
    +
    false
    + + +### spec +[↩ Parent](#) + +RedisEnterpriseActiveActiveDatabaseSpec defines the desired state of RedisEnterpriseActiveActiveDatabase + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    participatingClusters[]object + The list of instances/ clusters specifications and configurations.
    +
    true
    globalConfigurationsobject + The Active-Active database global configurations, contains the global properties for each of the participating clusters/ instances databases within the Active-Active database.
    +
    false
    redisEnterpriseClusterobject + Connection to Redis Enterprise Cluster
    +
    false
    + + +### spec.participatingClusters[] +[↩ Parent](#spec) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The name of the remote cluster CR to link.
    +
    true
    + + +### spec.globalConfigurations +[↩ Parent](#spec) + +The Active-Active database global configurations, contains the global properties for each of the participating clusters/ instances databases within the Active-Active database. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    activeActiveobject + Connection/ association to the Active-Active database.
    +
    false
    alertSettingsobject + Settings for database alerts
    +
    false
    backupobject + Target for automatic database backups.
    +
    false
    clientAuthenticationCertificates[]string + The Secrets containing TLS Client Certificate to use for Authentication
    +
    false
    dataInternodeEncryptionboolean + Internode encryption (INE) setting. An optional boolean setting, overriding a similar cluster-wide policy. If set to False, INE is guaranteed to be turned off for this DB (regardless of cluster-wide policy). If set to True, INE will be turned on, unless the capability is not supported by the DB ( in such a case we will get an error and database creation will fail). If left unspecified, will be disabled if internode encryption is not supported by the DB (regardless of cluster default). Deleting this property after explicitly setting its value shall have no effect.
    +
    false
    databasePortinteger + Database port number. TCP port on which the database is available. Will be generated automatically if omitted. can not be changed after creation
    +
    false
    databaseSecretNamestring + The name of the secret that holds the password to the database (redis databases only). If secret does not exist, it will be created. To define the password, create an opaque secret and set the name in the spec. The password will be taken from the value of the 'password' key. Use an empty string as value within the secret to disable authentication for the database. Notes - For Active-Active databases this secret will not be automatically created, and also, memcached databases must not be set with a value, and a secret/password will not be automatically created for them. Use the memcachedSaslSecretName field to set authentication parameters for memcached databases.
    +
    false
    defaultUserboolean + Is connecting with a default user allowed? If disabled, the DatabaseSecret will not be created or updated
    +
    false
    evictionPolicystring + Database eviction policy. see more https://docs.redislabs.com/latest/rs/administering/database-operations/eviction-policy/
    +
    false
    isRofboolean + Whether it is an RoF database or not. Applicable only for databases of type "REDIS". Assumed to be false if left blank.
    +
    false
    memcachedSaslSecretNamestring + Credentials used for binary authentication in memcached databases. The credentials should be saved as an opaque secret and the name of that secret should be configured using this field. For username, use 'username' as the key and the actual username as the value. For password, use 'password' as the key and the actual password as the value. Note that connections are not encrypted.
    +
    false
    memorySizestring + memory size of database. use formats like 100MB, 0.1GB. minimum value in 100MB. When redis on flash (RoF) is enabled, this value refers to RAM+Flash memory, and it must not be below 1GB.
    +
    false
    modulesList[]object + List of modules associated with database. Note - For Active-Active databases this feature is currently in preview. For this feature to take effect for Active-Active databases, set a boolean environment variable with the name "ENABLE_ALPHA_FEATURES" to True. This variable can be set via the redis-enterprise-operator pod spec, or through the operator-environment-config Config Map.
    +
    false
    ossClusterboolean + OSS Cluster mode option. Note that not all client libraries support OSS cluster mode.
    +
    false
    persistenceenum + Database on-disk persistence policy
    +
    + Enum: disabled, aofEverySecond, aofAlways, snapshotEvery1Hour, snapshotEvery6Hour, snapshotEvery12Hour
    +
    false
    proxyPolicystring + The policy used for proxy binding to the endpoint. Supported proxy policies are: single/all-master-shards/all-nodes When left blank, the default value will be chosen according to the value of ossCluster - single if disabled, all-master-shards when enabled
    +
    false
    rackAwareboolean + Whether database should be rack aware. This improves availability - more information: https://docs.redislabs.com/latest/rs/concepts/high-availability/rack-zone-awareness/
    +
    false
    redisEnterpriseClusterobject + Connection to Redis Enterprise Cluster
    +
    false
    redisVersionstring + Redis OSS version. Version can be specified via prefix, or via channels - for existing databases - Upgrade Redis OSS version. For new databases - the version which the database will be created with. If set to 'major' - will always upgrade to the most recent major Redis version. If set to 'latest' - will always upgrade to the most recent Redis version. Depends on 'redisUpgradePolicy' - if you want to set the value to 'latest' for some databases, you must set redisUpgradePolicy on the cluster before. Possible values are 'major' or 'latest' When using upgrade - make sure to backup the database before. This value is used only for database type 'redis'
    +
    false
    replicaSources[]object + What databases to replicate from
    +
    false
    replicationboolean + In-memory database replication. When enabled, database will have replica shard for every master - leading to higher availability. Defaults to false.
    +
    false
    resp3boolean + Whether this database supports RESP3 protocol. Note - Deleting this property after explicitly setting its value shall have no effect. Please view the corresponding field in RS doc for more info.
    +
    false
    rofRamSizestring + The size of the RAM portion of an RoF database. Similarly to "memorySize" use formats like 100MB, 0.1GB It must be at least 10% of combined memory size (RAM+Flash), as specified by "memorySize".
    +
    false
    rolesPermissions[]object + List of Redis Enteprise ACL and Role bindings to apply
    +
    false
    shardCountinteger + Number of database server-side shards
    +
    false
    shardingEnabledboolean + Toggles database sharding for REAADBs (Active Active databases) and enabled by default. This field is blocked for REDB (non-Active Active databases) and sharding is toggled via the shardCount field - when shardCount is 1 this is disabled otherwise enabled.
    +
    false
    shardsPlacementstring + Control the density of shards - should they reside on as few or as many nodes as possible. Available options are "dense" or "sparse". If left unset, defaults to "dense".
    +
    false
    tlsModeenum + Require SSL authenticated and encrypted connections to the database. enabled - all incoming connections to the Database must use SSL. disabled - no incoming connection to the Database should use SSL. replica_ssl - databases that replicate from this one need to use SSL.
    +
    + Enum: disabled, enabled, replica_ssl
    +
    false
    typeenum + The type of the database.
    +
    + Enum: redis, memcached
    +
    false
    upgradeSpecobject + Specifications for DB upgrade.
    +
    false
    + + +### spec.globalConfigurations.activeActive +[↩ Parent](#specglobalconfigurations) + +Connection/ association to the Active-Active database. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The the corresponding Active-Active database name, Redis Enterprise Active Active Database custom resource name, this Resource is associated with. In case this resource is created manually at the active active database creation this field must be filled via the user, otherwise, the operator will assign this field automatically. Note: this feature is currently unsupported.
    +
    true
    participatingClusterNamestring + The corresponding participating cluster name, Redis Enterprise Remote Cluster custom resource name, in the Active-Active database, In case this resource is created manually at the active active database creation this field must be filled via the user, otherwise, the operator will assign this field automatically. Note: this feature is currently unsupported.
    +
    true
    + + +### spec.globalConfigurations.alertSettings +[↩ Parent](#specglobalconfigurations) + +Settings for database alerts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    bdb_backup_delayedobject + Periodic backup has been delayed for longer than specified threshold value [minutes]
    +
    false
    bdb_crdt_src_high_syncer_lagobject + Active-active source - sync lag is higher than specified threshold value [seconds]
    +
    false
    bdb_crdt_src_syncer_connection_errorobject + Active-active source - sync has connection error while trying to connect replica source
    +
    false
    bdb_crdt_src_syncer_general_errorobject + Active-active source - sync encountered in general error
    +
    false
    bdb_high_latencyobject + Latency is higher than specified threshold value [micro-sec]
    +
    false
    bdb_high_throughputobject + Throughput is higher than specified threshold value [requests / sec.]
    +
    false
    bdb_long_running_actionobject + An alert for state-machines that are running for too long
    +
    false
    bdb_low_throughputobject + Throughput is lower than specified threshold value [requests / sec.]
    +
    false
    bdb_ram_dataset_overheadobject + Dataset RAM overhead of a shard has reached the threshold value [% of its RAM limit]
    +
    false
    bdb_ram_valuesobject + Percent of values kept in a shard's RAM is lower than [% of its key count]
    +
    false
    bdb_replica_src_high_syncer_lagobject + Replica-of source - sync lag is higher than specified threshold value [seconds]
    +
    false
    bdb_replica_src_syncer_connection_errorobject + Replica-of source - sync has connection error while trying to connect replica source
    +
    false
    bdb_shard_num_ram_valuesobject + Number of values kept in a shard's RAM is lower than [values]
    +
    false
    bdb_sizeobject + Dataset size has reached the threshold value [% of the memory limit]
    +
    false
    + + +### spec.globalConfigurations.alertSettings.bdb_backup_delayed +[↩ Parent](#specglobalconfigurationsalertsettings) + +Periodic backup has been delayed for longer than specified threshold value [minutes] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_crdt_src_high_syncer_lag +[↩ Parent](#specglobalconfigurationsalertsettings) + +Active-active source - sync lag is higher than specified threshold value [seconds] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_crdt_src_syncer_connection_error +[↩ Parent](#specglobalconfigurationsalertsettings) + +Active-active source - sync has connection error while trying to connect replica source + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_crdt_src_syncer_general_error +[↩ Parent](#specglobalconfigurationsalertsettings) + +Active-active source - sync encountered in general error + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_high_latency +[↩ Parent](#specglobalconfigurationsalertsettings) + +Latency is higher than specified threshold value [micro-sec] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_high_throughput +[↩ Parent](#specglobalconfigurationsalertsettings) + +Throughput is higher than specified threshold value [requests / sec.] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_long_running_action +[↩ Parent](#specglobalconfigurationsalertsettings) + +An alert for state-machines that are running for too long + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_low_throughput +[↩ Parent](#specglobalconfigurationsalertsettings) + +Throughput is lower than specified threshold value [requests / sec.] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_ram_dataset_overhead +[↩ Parent](#specglobalconfigurationsalertsettings) + +Dataset RAM overhead of a shard has reached the threshold value [% of its RAM limit] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_ram_values +[↩ Parent](#specglobalconfigurationsalertsettings) + +Percent of values kept in a shard's RAM is lower than [% of its key count] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_replica_src_high_syncer_lag +[↩ Parent](#specglobalconfigurationsalertsettings) + +Replica-of source - sync lag is higher than specified threshold value [seconds] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_replica_src_syncer_connection_error +[↩ Parent](#specglobalconfigurationsalertsettings) + +Replica-of source - sync has connection error while trying to connect replica source + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_shard_num_ram_values +[↩ Parent](#specglobalconfigurationsalertsettings) + +Number of values kept in a shard's RAM is lower than [values] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.alertSettings.bdb_size +[↩ Parent](#specglobalconfigurationsalertsettings) + +Dataset size has reached the threshold value [% of the memory limit] + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    true
    thresholdstring + Threshold for alert going on/off
    +
    true
    + + +### spec.globalConfigurations.backup +[↩ Parent](#specglobalconfigurations) + +Target for automatic database backups. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    absobject +
    +
    false
    ftpobject +
    +
    false
    gcsobject + GoogleStorage
    +
    false
    intervalinteger + Backup Interval in seconds
    +
    false
    mountobject + MountPointStorage
    +
    false
    s3object +
    +
    false
    sftpobject +
    +
    false
    swiftobject +
    +
    false
    + + +### spec.globalConfigurations.backup.abs +[↩ Parent](#specglobalconfigurationsbackup) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    absSecretNamestring + The name of the secret that holds ABS credentials. The secret must contain the keys "AccountName" and "AccountKey", and these must hold the corresponding credentials
    +
    true
    containerstring + Azure Blob Storage container name.
    +
    true
    subdirstring + Optional. Azure Blob Storage subdir under container.
    +
    false
    + + +### spec.globalConfigurations.backup.ftp +[↩ Parent](#specglobalconfigurationsbackup) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    urlstring + a URI of the "ftps://[USER[:PASSWORD]@]HOST[:PORT]/PATH[/]" format
    +
    true
    + + +### spec.globalConfigurations.backup.gcs +[↩ Parent](#specglobalconfigurationsbackup) + +GoogleStorage + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    bucketNamestring + Google Storage bucket name.
    +
    true
    gcsSecretNamestring + The name of the secret that holds the Google Cloud Storage credentials. The secret must contain the keys "CLIENT_ID", "PRIVATE_KEY", "PRIVATE_KEY_ID", "CLIENT_EMAIL" and these must hold the corresponding credentials. The keys should correspond to the values in the key JSON.
    +
    true
    subdirstring + Optional. Google Storage subdir under bucket.
    +
    false
    + + +### spec.globalConfigurations.backup.mount +[↩ Parent](#specglobalconfigurationsbackup) + +MountPointStorage + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring + Path to the local mount point. You must create the mount point on all nodes, and the redislabs:redislabs user must have read and write permissions on the local mount point.
    +
    true
    + + +### spec.globalConfigurations.backup.s3 +[↩ Parent](#specglobalconfigurationsbackup) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    awsSecretNamestring + The name of the secret that holds the AWS credentials. The secret must contain the keys "AWS_ACCESS_KEY_ID" and "AWS_SECRET_ACCESS_KEY", and these must hold the corresponding credentials.
    +
    true
    bucketNamestring + Amazon S3 bucket name.
    +
    true
    subdirstring + Optional. Amazon S3 subdir under bucket.
    +
    false
    + + +### spec.globalConfigurations.backup.sftp +[↩ Parent](#specglobalconfigurationsbackup) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    sftpSecretNamestring + The name of the secret that holds SFTP credentials. The secret must contain the "Key" key, which is the SSH private key for connecting to the sftp server.
    +
    true
    sftp_urlstring + SFTP url
    +
    true
    + + +### spec.globalConfigurations.backup.swift +[↩ Parent](#specglobalconfigurationsbackup) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    auth_urlstring + Swift service authentication URL.
    +
    true
    containerstring + Swift object store container for storing the backup files.
    +
    true
    swiftSecretNamestring + The name of the secret that holds Swift credentials. The secret must contain the keys "Key" and "User", and these must hold the corresponding credentials: service access key and service user name (pattern for the latter does not allow special characters &,<,>,")
    +
    true
    prefixstring + Optional. Prefix (path) of backup files in the swift container.
    +
    false
    + + +### spec.globalConfigurations.modulesList[] +[↩ Parent](#specglobalconfigurations) + +Redis Enterprise Module: https://redislabs.com/redis-enterprise/modules/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The module's name e.g "ft" for redissearch
    +
    true
    configstring + Module command line arguments e.g. VKEY_MAX_ENTITY_COUNT 30
    +
    false
    uidstring + Module's uid - do not set, for system use only nolint:staticcheck // custom json tag unknown to the linter
    +
    false
    versionstring + Module's semantic version e.g "1.6.12" - optional only in REDB, must be set in REAADB
    +
    false
    + + +### spec.globalConfigurations.redisEnterpriseCluster +[↩ Parent](#specglobalconfigurations) + +Connection to Redis Enterprise Cluster + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The name of the Redis Enterprise Cluster where the database should be stored.
    +
    true
    + + +### spec.globalConfigurations.replicaSources[] +[↩ Parent](#specglobalconfigurations) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    replicaSourceNamestring + The name of the resource from which the source database URI is derived. The type of resource must match the type specified in the ReplicaSourceType field.
    +
    true
    replicaSourceTypestring + The type of resource from which the source database URI is derived. If set to 'SECRET', the source database URI is derived from the secret named in the ReplicaSourceName field. The secret must have a key named 'uri' that defines the URI of the source database in the form of 'redis://...'. The type of secret (kubernetes, vault, ...) is determined by the secret mechanism used by the underlying REC object. If set to 'REDB', the source database URI is derived from the RedisEnterpriseDatabase resource named in the ReplicaSourceName field.
    +
    true
    clientKeySecretstring + Secret that defines the client certificate and key used by the syncer in the target database cluster. The secret must have 2 keys in its map: "cert" which is the PEM encoded certificate, and "key" which is the PEM encoded private key.
    +
    false
    compressioninteger + GZIP compression level (0-6) to use for replication.
    +
    false
    serverCertSecretstring + Secret that defines the server certificate used by the proxy in the source database cluster. The secret must have 1 key in its map: "cert" which is the PEM encoded certificate.
    +
    false
    tlsSniNamestring + TLS SNI name to use for the replication link.
    +
    false
    + + +### spec.globalConfigurations.rolesPermissions[] +[↩ Parent](#specglobalconfigurations) + +Redis Enterprise Role and ACL Binding + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    aclstring + Acl Name of RolePermissionType (note: use exact name of the ACL from the Redis Enterprise ACL list, case sensitive)
    +
    true
    rolestring + Role Name of RolePermissionType (note: use exact name of the role from the Redis Enterprise role list, case sensitive)
    +
    true
    typestring + Type of Redis Enterprise Database Role Permission
    +
    true
    + + +### spec.globalConfigurations.upgradeSpec +[↩ Parent](#specglobalconfigurations) + +Specifications for DB upgrade. + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    upgradeModulesToLatestboolean + Upgrades the modules to the latest version that supportes the DB version during a DB upgrade action, to upgrade the DB version view the 'redisVersion' field. Note - This field is currently not supported for Active-Active databases.
    +
    true
    + + +### spec.redisEnterpriseCluster +[↩ Parent](#spec) + +Connection to Redis Enterprise Cluster + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The name of the Redis Enterprise Cluster where the database should be stored.
    +
    true
    + + +### status +[↩ Parent](#) + +RedisEnterpriseActiveActiveDatabaseStatus defines the observed state of RedisEnterpriseActiveActiveDatabase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    guidstring + The active-active database corresponding GUID.
    +
    false
    lastTaskUidstring + The last active-active database task UID.
    +
    false
    linkedRedbs[]string + The linked REDBs.
    +
    false
    participatingClusters[]object + The list of instances/ clusters statuses.
    +
    false
    redisEnterpriseClusterstring + The Redis Enterprise Cluster Object this Resource is associated with
    +
    false
    replicationStatusenum + The overall replication status
    +
    + Enum: up, down
    +
    false
    secretsStatus[]object + The status of the secrets
    +
    false
    specStatusstring + Whether the desired specification is valid
    +
    false
    statusstring + The status of the active active database.
    +
    false
    + + +### status.participatingClusters[] +[↩ Parent](#status) + +Status of participating cluster. + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The name of the remote cluster CR that is linked.
    +
    true
    idinteger + The corresponding ID of the instance in the active-active database.
    +
    + Format: int64
    +
    false
    replicationStatusenum + The replication status of the participating cluster
    +
    + Enum: up, down
    +
    false
    + + +### status.secretsStatus[] +[↩ Parent](#status) + +Status of secrets. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The name of the secret.
    +
    true
    statusenum + The status of the secret.
    +
    + Enum: Valid, Invalid
    +
    false
    diff --git a/content/operate/kubernetes/7.4.6/reference/redis_enterprise_cluster_api.md b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_cluster_api.md new file mode 100644 index 0000000000..8b5bdf2c21 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_cluster_api.md @@ -0,0 +1,26712 @@ +--- +title: RedisEnterpriseCluster API Reference +alwaysopen: false +categories: +- docs +- operate +- kubernetes +linkTitle: REC API +weight: 30 +aliases: [ /operate/kubernetes/reference/cluster-options, ] +url: '/operate/kubernetes/7.4.6/reference/redis_enterprise_cluster_api/' +--- + +apiVersion: + + +- [app.redislabs.com/v1](#appredislabscomv1) + + + + +# app.redislabs.com/v1 + + + + +RedisEnterpriseCluster is the Schema for the redisenterpriseclusters API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiVersionstringapp.redislabs.com/v1true
    kindstringRedisEnterpriseClustertrue
    metadataobjectRefer to the Kubernetes API documentation for the fields of the `metadata` field.true
    specobject + RedisEnterpriseClusterSpec defines the desired state of RedisEnterpriseCluster
    +
    false
    statusobject +
    +
    false
    + + +### spec +[↩ Parent](#) + +RedisEnterpriseClusterSpec defines the desired state of RedisEnterpriseCluster + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    activeActiveobject + Specification for ActiveActive setup. At most one of ingressOrRouteSpec or activeActive fields can be set at the same time.
    +
    false
    antiAffinityAdditionalTopologyKeys[]string + Additional antiAffinity terms in order to support installation on different zones/vcenters
    +
    false
    backupobject + Cluster-wide backup configurations
    +
    false
    bootstrapperImageSpecobject + Specification for Bootstrapper container image
    +
    false
    bootstrapperResourcesobject + Compute resource requirements for bootstrapper containers
    +
    false
    certificatesobject + RS Cluster Certificates. Used to modify the certificates used by the cluster. See the "RSClusterCertificates" struct described above to see the supported certificates.
    +
    false
    clusterCredentialSecretNamestring + Secret Name/Path to use for Cluster Credentials. To be used only if ClusterCredentialSecretType is vault. If left blank, will use cluster name.
    +
    false
    clusterCredentialSecretRolestring + Used only if ClusterCredentialSecretType is vault, to define vault role to be used. If blank, defaults to "redis-enterprise-operator"
    +
    false
    clusterCredentialSecretTypeenum + Type of Secret to use for ClusterCredential, Vault, Kuberetes,... If left blank, will default ot kubernetes secrets
    +
    + Enum: vault, kubernetes
    +
    false
    clusterRecoveryboolean + ClusterRecovery initiates cluster recovery when set to true. Note that this field is cleared automatically after the cluster is recovered
    +
    false
    containerTimezoneobject + Container timezone configuration. While the default timezone on all containers is UTC, this setting can be used to set the timezone on services rigger/bootstrapper/RS containers. You can either propagate the hosts timezone to RS pods or set it manually via timezoneName.
    +
    false
    createServiceAccountboolean + Whether to create service account
    +
    false
    dataInternodeEncryptionboolean + Internode encryption (INE) cluster wide policy. An optional boolean setting. Specifies if INE should be on/off for new created REDBs. May be overridden for specific REDB via similar setting, please view the similar setting for REDB for more info.
    +
    false
    encryptPkeysboolean + Private key encryption Possible values: true/false
    +
    false
    enforceIPv4boolean + Sets ENFORCE_IPV4 environment variable
    +
    false
    extraEnvVars[]object + ADVANCED USAGE: use carefully. Add environment variables to RS StatefulSet's containers.
    +
    false
    extraLabelsmap[string]string + Labels that the user defines for their convenience
    +
    false
    hostAliases[]object + Adds hostAliases entries to the Redis Enterprise pods
    +
    false
    ingressOrRouteSpecobject + Access configurations for the Redis Enterprise Cluster and Databases. At most one of ingressOrRouteSpec or activeActive fields can be set at the same time.
    +
    false
    ldapobject + Cluster-level LDAP configuration, such as server addresses, protocol, authentication and query settings.
    +
    false
    licensestring + Redis Enterprise License
    +
    false
    licenseSecretNamestring + K8s secret or Vault Secret Name/Path to use for Cluster License. When left blank, the license is read from the "license" field. Note that you can't specify non-empty values in both "license" and "licenseSecretName", only one of these fields can be used to pass the license string. The license needs to be stored under the key "license".
    +
    false
    nodeSelectormap[string]string + Selector for nodes that could fit Redis Enterprise pod
    +
    false
    nodesinteger + Number of Redis Enterprise nodes (pods)
    +
    + Format: int32
    +
    false
    ocspConfigurationobject + An API object that represents the cluster's OCSP configuration. To enable OCSP, the cluster's proxy certificate should contain the OCSP responder URL.
    +
    false
    persistentSpecobject + Specification for Redis Enterprise Cluster persistence
    +
    false
    podAnnotationsmap[string]string + annotations for the service rigger and redis enterprise pods
    +
    false
    podAntiAffinityobject + Override for the default anti-affinity rules of the Redis Enterprise pods. More info: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#an-example-of-a-pod-that-uses-pod-affinity
    +
    false
    podSecurityPolicyNamestring + DEPRECATED PodSecurityPolicy support is removed in Kubernetes v1.25 and the use of this field is invalid for use when running on Kubernetes v1.25+. Future versions of the RedisEnterpriseCluster API will remove support for this field altogether. For migration instructions, see https://kubernetes.io/docs/tasks/configure-pod-container/migrate-from-psp/ + Name of pod security policy to use on pods
    +
    false
    podStartingPolicyobject + Mitigation setting for STS pods stuck in "ContainerCreating"
    +
    false
    podTolerations[]object + Tolerations that are added to all managed pods. More information: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
    +
    false
    priorityClassNamestring + Adds the priority class to pods managed by the operator
    +
    false
    pullSecrets[]object + PullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images. If specified, these secrets will be passed to individual puller implementations for them to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
    +
    false
    rackAwarenessNodeLabelstring + Node label that specifies rack ID - if specified, will create rack aware cluster. Rack awareness requires node label must exist on all nodes. Additionally, operator needs a special cluster role with permission to list nodes.
    +
    false
    redisEnterpriseAdditionalPodSpecAttributesobject + ADVANCED USAGE USE AT YOUR OWN RISK - specify pod attributes that are required for the statefulset - Redis Enterprise pods. Pod attributes managed by the operator might override these settings. Also make sure the attributes are supported by the K8s version running on the cluster - the operator does not validate that.
    +
    false
    redisEnterpriseIPFamilyenum + Reserved, future use, only for use if instructed by Redis. IPFamily dictates what IP family to choose for pods' internal and external communication.
    +
    + Enum: IPv4, IPv6
    +
    false
    redisEnterpriseImageSpecobject + Specification for Redis Enterprise container image
    +
    false
    redisEnterpriseNodeResourcesobject + Compute resource requirements for Redis Enterprise containers
    +
    false
    redisEnterprisePodAnnotationsmap[string]string + annotations for redis enterprise pod
    +
    false
    redisEnterpriseServicesConfigurationobject + RS Cluster optional services settings
    +
    false
    redisEnterpriseServicesRiggerImageSpecobject + Specification for Services Rigger container image
    +
    false
    redisEnterpriseServicesRiggerResourcesobject + Compute resource requirements for Services Rigger pod
    +
    false
    redisEnterpriseTerminationGracePeriodSecondsinteger + The TerminationGracePeriodSeconds value for the (STS created) REC pods
    +
    + Format: int64
    +
    false
    redisEnterpriseVolumeMounts[]object + additional volume mounts within the redis enterprise containers. More info: https://kubernetes.io/docs/concepts/storage/volumes/
    +
    false
    redisOnFlashSpecobject + Stores configurations specific to redis on flash. If provided, the cluster will be capable of creating redis on flash databases.
    +
    false
    redisUpgradePolicyenum + Redis upgrade policy to be set on the Redis Enterprise Cluster. Possible values: major/latest This value is used by the cluster to choose the Redis version of the database when an upgrade is performed. The Redis Enterprise Cluster includes multiple versions of OSS Redis that can be used for databases.
    +
    + Enum: major, latest
    +
    false
    resp3Defaultboolean + Whether databases will turn on RESP3 compatibility upon database upgrade. Note - Deleting this property after explicitly setting its value shall have no effect. Please view the corresponding field in RS doc for more info.
    +
    false
    serviceAccountNamestring + Name of the service account to use
    +
    false
    servicesobject + Customization options for operator-managed service resources created for Redis Enterprise clusters and databases
    +
    false
    servicesRiggerSpecobject + Specification for service rigger
    +
    false
    sideContainersSpec[]object +
    +
    false
    slaveHAobject + Slave high availability mechanism configuration.
    +
    false
    uiAnnotationsmap[string]string + Annotations for Redis Enterprise UI service. This annotations will override the overlapping global annotations set under spec.services.servicesAnnotations The specified annotations will not override annotations that already exist and didn't originate from the operator, except for the 'redis.io/last-keys' annotation which is reserved.
    +
    false
    uiServiceTypeenum + Type of service used to expose Redis Enterprise UI (https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)
    +
    + Enum: ClusterIP, NodePort, LoadBalancer, ExternalName
    +
    false
    upgradeSpecobject + Specification for upgrades of Redis Enterprise
    +
    false
    usernamestring + Username for the admin user of Redis Enterprise
    +
    false
    vaultCASecretstring + K8s secret name containing Vault's CA cert - defaults to "vault-ca-cert"
    +
    false
    volumes[]object + additional volumes
    +
    false
    + + +### spec.activeActive +[↩ Parent](#spec) + +Specification for ActiveActive setup. At most one of ingressOrRouteSpec or activeActive fields can be set at the same time. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiIngressUrlstring + RS API URL
    +
    true
    dbIngressSuffixstring + DB ENDPOINT SUFFIX - will be used to set the db host. ingress Creates a host name so it should be unique if more than one db is created on the cluster with the same name
    +
    true
    methodenum + Used to distinguish between different platforms implementation
    +
    + Enum: openShiftRoute, ingress
    +
    true
    ingressAnnotationsmap[string]string + Used for ingress controllers such as ha-proxy or nginx in GKE
    +
    false
    + + +### spec.backup +[↩ Parent](#spec) + +Cluster-wide backup configurations + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    s3object + Configurations for backups to s3 and s3-compatible storage
    +
    false
    + + +### spec.backup.s3 +[↩ Parent](#specbackup) + +Configurations for backups to s3 and s3-compatible storage + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    caCertificateSecretNamestring + Secret name that holds the S3 CA certificate, which contains the TLS certificate mapped to the key in the secret 'cert'
    +
    false
    urlstring + Specifies the URL for S3 export and import
    +
    false
    + + +### spec.bootstrapperImageSpec +[↩ Parent](#spec) + +Specification for Bootstrapper container image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    digestHashstring + The digest hash of the container image to pull. When specified, the container image is pulled according to the digest hash instead of the image tag. The versionTag field must also be specified with the image tag matching this digest hash. Note: This field is only supported for OLM deployments.
    +
    false
    imagePullPolicystring + The image pull policy to be applied to the container image. One of Always, Never, IfNotPresent.
    +
    false
    repositorystring + The repository (name) of the container image to be deployed.
    +
    false
    versionTagstring + The tag of the container image to be deployed.
    +
    false
    + + +### spec.bootstrapperResources +[↩ Parent](#spec) + +Compute resource requirements for bootstrapper containers + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
    +
    false
    requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
    +
    false
    + + +### spec.bootstrapperResources.claims[] +[↩ Parent](#specbootstrapperresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.certificates +[↩ Parent](#spec) + +RS Cluster Certificates. Used to modify the certificates used by the cluster. See the "RSClusterCertificates" struct described above to see the supported certificates. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiCertificateSecretNamestring + Secret name to use for cluster's API certificate. If left blank, a cluster-provided certificate will be used.
    +
    false
    cmCertificateSecretNamestring + Secret name to use for cluster's CM (Cluster Manager) certificate. If left blank, a cluster-provided certificate will be used.
    +
    false
    ldapClientCertificateSecretNamestring + Secret name to use for cluster's LDAP client certificate. If left blank, LDAP client certificate authentication will be disabled.
    +
    false
    metricsExporterCertificateSecretNamestring + Secret name to use for cluster's Metrics Exporter certificate. If left blank, a cluster-provided certificate will be used.
    +
    false
    proxyCertificateSecretNamestring + Secret name to use for cluster's Proxy certificate. If left blank, a cluster-provided certificate will be used.
    +
    false
    syncerCertificateSecretNamestring + Secret name to use for cluster's Syncer certificate. If left blank, a cluster-provided certificate will be used.
    +
    false
    + + +### spec.containerTimezone +[↩ Parent](#spec) + +Container timezone configuration. While the default timezone on all containers is UTC, this setting can be used to set the timezone on services rigger/bootstrapper/RS containers. You can either propagate the hosts timezone to RS pods or set it manually via timezoneName. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    propagateHostobject + Identifies that container timezone should be in sync with the host, this option mounts a hostPath volume onto RS pods that could be restricted in some systems.
    +
    false
    timezoneNamestring + POSIX-style timezone name as a string to be passed as EnvVar to RE pods, e.g. "Europe/London".
    +
    false
    + + +### spec.extraEnvVars[] +[↩ Parent](#spec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    false
    valueFromobject +
    +
    false
    + + +### spec.extraEnvVars[].valueFrom +[↩ Parent](#specextraenvvars) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapKeyRefobject +
    +
    false
    fieldRefobject +
    +
    false
    resourceFieldRefobject +
    +
    false
    secretKeyRefobject +
    +
    false
    + + +### spec.extraEnvVars[].valueFrom.configMapKeyRef +[↩ Parent](#specextraenvvarsvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.extraEnvVars[].valueFrom.fieldRef +[↩ Parent](#specextraenvvarsvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.extraEnvVars[].valueFrom.resourceFieldRef +[↩ Parent](#specextraenvvarsvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.extraEnvVars[].valueFrom.secretKeyRef +[↩ Parent](#specextraenvvarsvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.hostAliases[] +[↩ Parent](#spec) + +HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    hostnames[]string + Hostnames for the above IP address.
    +
    false
    ipstring + IP address of the host file entry.
    +
    false
    + + +### spec.ingressOrRouteSpec +[↩ Parent](#spec) + +Access configurations for the Redis Enterprise Cluster and Databases. At most one of ingressOrRouteSpec or activeActive fields can be set at the same time. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiFqdnUrlstring + RS API URL
    +
    true
    dbFqdnSuffixstring + DB ENDPOINT SUFFIX - will be used to set the db host ingress . Creates a host name so it should be unique if more than one db is created on the cluster with the same name
    +
    true
    methodenum + Used to distinguish between different platforms implementation.
    +
    + Enum: openShiftRoute, ingress, istio
    +
    true
    ingressAnnotationsmap[string]string + Additional annotations to set on ingress resources created by the operator
    +
    false
    + + +### spec.ldap +[↩ Parent](#spec) + +Cluster-level LDAP configuration, such as server addresses, protocol, authentication and query settings. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    authenticationQueryobject + Configuration of authentication queries, mapping between the username, provided to the cluster for authentication, and the LDAP Distinguished Name.
    +
    true
    authorizationQueryobject + Configuration of authorization queries, mapping between a user's Distinguished Name and its group memberships.
    +
    true
    protocolenum + Specifies the LDAP protocol to use. One of: LDAP, LDAPS, STARTTLS.
    +
    + Enum: LDAP, LDAPS, STARTTLS
    +
    true
    servers[]object + One or more LDAP servers. If multiple servers are specified, they must all share an identical organization tree structure.
    +
    true
    bindCredentialsSecretNamestring + Name of a secret within the same namespace, holding the credentials used to communicate with the LDAP server for authentication queries. The secret must have a key named 'dn' with the Distinguished Name of the user to execute the query, and 'password' with its password. If left blank, credentials-based authentication is disabled.
    +
    false
    caCertificateSecretNamestring + Name of a secret within the same namespace, holding a PEM-encoded CA certificate for validating the TLS connection to the LDAP server. The secret must have a key named 'cert' with the certificate data. This field is applicable only when the protocol is LDAPS or STARTTLS.
    +
    false
    cacheTTLSecondsinteger + The maximum TTL of cached entries.
    +
    false
    enabledForControlPlaneboolean + Whether to enable LDAP for control plane access. Disabled by default.
    +
    false
    enabledForDataPlaneboolean + Whether to enable LDAP for data plane access. Disabled by default.
    +
    false
    + + +### spec.ldap.authenticationQuery +[↩ Parent](#specldap) + +Configuration of authentication queries, mapping between the username, provided to the cluster for authentication, and the LDAP Distinguished Name. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    queryobject + Configuration for a search query. Mutually exclusive with the 'template' field. The substring '%u' in the query filter will be replaced with the username.
    +
    false
    templatestring + Configuration for a template query. Mutually exclusive with the 'query' field. The substring '%u' will be replaced with the username, e.g., 'cn=%u,ou=dev,dc=example,dc=com'.
    +
    false
    + + +### spec.ldap.authenticationQuery.query +[↩ Parent](#specldapauthenticationquery) + +Configuration for a search query. Mutually exclusive with the 'template' field. The substring '%u' in the query filter will be replaced with the username. + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    basestring + The Distinguished Name of the entry at which to start the search, e.g., 'ou=dev,dc=example,dc=com'.
    +
    true
    filterstring + An RFC-4515 string representation of the filter to apply in the search. For an authentication query, the substring '%u' will be replaced with the username, e.g., '(cn=%u)'. For an authorization query, the substring '%D' will be replaced with the user's Distinguished Name, e.g., '(members=%D)'.
    +
    true
    scopeenum + The search scope for an LDAP query. One of: BaseObject, SingleLevel, WholeSubtree
    +
    + Enum: BaseObject, SingleLevel, WholeSubtree
    +
    true
    + + +### spec.ldap.authorizationQuery +[↩ Parent](#specldap) + +Configuration of authorization queries, mapping between a user's Distinguished Name and its group memberships. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    attributestring + Configuration for an attribute query. Mutually exclusive with the 'query' field. Holds the name of an attribute of the LDAP user entity that contains a list of the groups that the user belongs to, e.g., 'memberOf'.
    +
    false
    queryobject + Configuration for a search query. Mutually exclusive with the 'attribute' field. The substring '%D' in the query filter will be replaced with the user's Distinguished Name.
    +
    false
    + + +### spec.ldap.authorizationQuery.query +[↩ Parent](#specldapauthorizationquery) + +Configuration for a search query. Mutually exclusive with the 'attribute' field. The substring '%D' in the query filter will be replaced with the user's Distinguished Name. + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    basestring + The Distinguished Name of the entry at which to start the search, e.g., 'ou=dev,dc=example,dc=com'.
    +
    true
    filterstring + An RFC-4515 string representation of the filter to apply in the search. For an authentication query, the substring '%u' will be replaced with the username, e.g., '(cn=%u)'. For an authorization query, the substring '%D' will be replaced with the user's Distinguished Name, e.g., '(members=%D)'.
    +
    true
    scopeenum + The search scope for an LDAP query. One of: BaseObject, SingleLevel, WholeSubtree
    +
    + Enum: BaseObject, SingleLevel, WholeSubtree
    +
    true
    + + +### spec.ldap.servers[] +[↩ Parent](#specldap) + +Address of an LDAP server. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    hoststring + Host name of the LDAP server
    +
    true
    portinteger + Port number of the LDAP server. If unspecified, defaults to 389 for LDAP and STARTTLS protocols, and 636 for LDAPS protocol.
    +
    + Format: int32
    +
    false
    + + +### spec.ocspConfiguration +[↩ Parent](#spec) + +An API object that represents the cluster's OCSP configuration. To enable OCSP, the cluster's proxy certificate should contain the OCSP responder URL. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    ocspFunctionalityboolean + Whether to enable/disable OCSP mechanism for the cluster.
    +
    false
    queryFrequencyinteger + Determines the interval (in seconds) in which the control plane will poll the OCSP responder for a new status for the server certificate. Minimum value is 60. Maximum value is 86400.
    +
    false
    recoveryFrequencyinteger + Determines the interval (in seconds) in which the control plane will poll the OCSP responder for a new status for the server certificate when the current staple is invalid. Minimum value is 60. Maximum value is 86400.
    +
    false
    recoveryMaxTriesinteger + Determines the maximum number for the OCSP recovery attempts. After max number of tries passed, the control plane will revert back to the regular frequency. Minimum value is 1. Maximum value is 100.
    +
    false
    responseTimeoutinteger + Determines the time interval (in seconds) for which the request waits for a response from the OCSP responder. Minimum value is 1. Maximum value is 60.
    +
    false
    + + +### spec.persistentSpec +[↩ Parent](#spec) + +Specification for Redis Enterprise Cluster persistence + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enablePersistentVolumeResizeboolean + Whether to enable PersistentVolumes resize. Disabled by default. Read the instruction in pvc_expansion readme carefully before using this feature.
    +
    false
    enabledboolean + Whether to add persistent volume to Redis Enterprise pods
    +
    false
    storageClassNamestring + Storage class for persistent volume in Redis Enterprise pods. Leave empty to use the default. If using the default this way, make sure the Kubernetes Cluster has a default Storage Class configured. This can be done by running a `kubectl get storageclass` and see if one of the Storage Classes' names contains a `(default)` mark.
    +
    false
    volumeSizeint or string + To enable resizing after creating the cluster - please follow the instructions in the pvc_expansion readme
    +
    false
    + + +### spec.podAntiAffinity +[↩ Parent](#spec) + +Override for the default anti-affinity rules of the Redis Enterprise pods. More info: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#an-example-of-a-pod-that-uses-pod-affinity + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    requiredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    + + +### spec.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specpodantiaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    podAffinityTermobject +
    +
    true
    weightinteger +
    +
    + Format: int32
    +
    true
    + + +### spec.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm +[↩ Parent](#specpodantiaffinitypreferredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector +[↩ Parent](#specpodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[] +[↩ Parent](#specpodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector +[↩ Parent](#specpodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector.matchExpressions[] +[↩ Parent](#specpodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specpodantiaffinity) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector +[↩ Parent](#specpodantiaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[] +[↩ Parent](#specpodantiaffinityrequiredduringschedulingignoredduringexecutionlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector +[↩ Parent](#specpodantiaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector.matchExpressions[] +[↩ Parent](#specpodantiaffinityrequiredduringschedulingignoredduringexecutionnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.podStartingPolicy +[↩ Parent](#spec) + +Mitigation setting for STS pods stuck in "ContainerCreating" + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Whether to detect and attempt to mitigate pod startup issues
    +
    true
    startingThresholdSecondsinteger + Time in seconds to wait for a pod to be stuck while starting up before action is taken. If set to 0, will be treated as if disabled.
    +
    + Format: int32
    +
    true
    + + +### spec.podTolerations[] +[↩ Parent](#spec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    effectstring +
    +
    false
    keystring +
    +
    false
    operatorstring +
    +
    false
    tolerationSecondsinteger +
    +
    + Format: int64
    +
    false
    valuestring +
    +
    false
    + + +### spec.pullSecrets[] +[↩ Parent](#spec) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + Secret name
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes +[↩ Parent](#spec) + +ADVANCED USAGE USE AT YOUR OWN RISK - specify pod attributes that are required for the statefulset - Redis Enterprise pods. Pod attributes managed by the operator might override these settings. Also make sure the attributes are supported by the K8s version running on the cluster - the operator does not validate that. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    activeDeadlineSecondsinteger +
    +
    + Format: int64
    +
    false
    affinityobject +
    +
    false
    automountServiceAccountTokenboolean +
    +
    false
    dnsConfigobject +
    +
    false
    dnsPolicystring +
    +
    false
    enableServiceLinksboolean +
    +
    false
    ephemeralContainers[]object +
    +
    false
    hostAliases[]object +
    +
    false
    hostIPCboolean +
    +
    false
    hostNetworkboolean +
    +
    false
    hostPIDboolean +
    +
    false
    hostUsersboolean +
    +
    false
    hostnamestring +
    +
    false
    imagePullSecrets[]object +
    +
    false
    initContainers[]object +
    +
    false
    nodeNamestring +
    +
    false
    nodeSelectormap[string]string +
    +
    false
    osobject +
    +
    false
    overheadmap[string]int or string +
    +
    false
    preemptionPolicystring +
    +
    false
    priorityinteger +
    +
    + Format: int32
    +
    false
    priorityClassNamestring +
    +
    false
    readinessGates[]object +
    +
    false
    resourceClaims[]object +
    +
    false
    restartPolicystring +
    +
    false
    runtimeClassNamestring +
    +
    false
    schedulerNamestring +
    +
    false
    schedulingGates[]object +
    +
    false
    securityContextobject +
    +
    false
    serviceAccountstring +
    +
    false
    serviceAccountNamestring +
    +
    false
    setHostnameAsFQDNboolean +
    +
    false
    shareProcessNamespaceboolean +
    +
    false
    subdomainstring +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    tolerations[]object +
    +
    false
    topologySpreadConstraints[]object +
    +
    false
    volumes[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    nodeAffinityobject +
    +
    false
    podAffinityobject +
    +
    false
    podAntiAffinityobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    requiredDuringSchedulingIgnoredDuringExecutionobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferenceobject +
    +
    true
    weightinteger +
    +
    + Format: int32
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinitypreferredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchFields[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinitypreferredduringschedulingignoredduringexecutionpreference) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFields[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinitypreferredduringschedulingignoredduringexecutionpreference) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinity) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    nodeSelectorTerms[]object +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchFields[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinityrequiredduringschedulingignoredduringexecutionnodeselectorterms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFields[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitynodeaffinityrequiredduringschedulingignoredduringexecutionnodeselectorterms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    requiredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    podAffinityTermobject +
    +
    true
    weightinteger +
    +
    + Format: int32
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinity) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecutionlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecutionnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    requiredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    podAffinityTermobject +
    +
    true
    weightinteger +
    +
    + Format: int32
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinity) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecutionlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecutionnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.dnsConfig +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    nameservers[]string +
    +
    false
    options[]object +
    +
    false
    searches[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.dnsConfig.options[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesdnsconfig) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    valuestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    args[]string +
    +
    false
    command[]string +
    +
    false
    env[]object +
    +
    false
    envFrom[]object +
    +
    false
    imagestring +
    +
    false
    imagePullPolicystring +
    +
    false
    lifecycleobject +
    +
    false
    livenessProbeobject +
    +
    false
    ports[]object +
    +
    false
    readinessProbeobject +
    +
    false
    resourcesobject +
    +
    false
    securityContextobject +
    +
    false
    startupProbeobject +
    +
    false
    stdinboolean +
    +
    false
    stdinOnceboolean +
    +
    false
    targetContainerNamestring +
    +
    false
    terminationMessagePathstring +
    +
    false
    terminationMessagePolicystring +
    +
    false
    ttyboolean +
    +
    false
    volumeDevices[]object +
    +
    false
    volumeMounts[]object +
    +
    false
    workingDirstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].env[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    false
    valueFromobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersenv) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapKeyRefobject +
    +
    false
    fieldRefobject +
    +
    false
    resourceFieldRefobject +
    +
    false
    secretKeyRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.configMapKeyRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.fieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.resourceFieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.secretKeyRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].envFrom[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapRefobject +
    +
    false
    prefixstring +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].envFrom[].configMapRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].envFrom[].secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    postStartobject +
    +
    false
    preStopobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecyclepoststarthttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecycleprestophttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.grpc +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslivenessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].ports[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    containerPortinteger +
    +
    + Format: int32
    +
    true
    hostIPstring +
    +
    false
    hostPortinteger +
    +
    + Format: int32
    +
    false
    namestring +
    +
    false
    protocolstring +
    +
    + Default: TCP
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.grpc +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersreadinessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].resources +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string +
    +
    false
    requestsmap[string]int or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].resources.claims[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].securityContext +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    allowPrivilegeEscalationboolean +
    +
    false
    capabilitiesobject +
    +
    false
    privilegedboolean +
    +
    false
    procMountstring +
    +
    false
    readOnlyRootFilesystemboolean +
    +
    false
    runAsGroupinteger +
    +
    + Format: int64
    +
    false
    runAsNonRootboolean +
    +
    false
    runAsUserinteger +
    +
    + Format: int64
    +
    false
    seLinuxOptionsobject +
    +
    false
    seccompProfileobject +
    +
    false
    windowsOptionsobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.capabilities +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    add[]string +
    +
    false
    drop[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.seLinuxOptions +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    levelstring +
    +
    false
    rolestring +
    +
    false
    typestring +
    +
    false
    userstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.seccompProfile +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typestring +
    +
    true
    localhostProfilestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.windowsOptions +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gmsaCredentialSpecstring +
    +
    false
    gmsaCredentialSpecNamestring +
    +
    false
    hostProcessboolean +
    +
    false
    runAsUserNamestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.grpc +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersstartupprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].volumeDevices[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    devicePathstring +
    +
    true
    namestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.ephemeralContainers[].volumeMounts[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mountPathstring +
    +
    true
    namestring +
    +
    true
    mountPropagationstring +
    +
    false
    readOnlyboolean +
    +
    false
    subPathstring +
    +
    false
    subPathExprstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.hostAliases[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    hostnames[]string +
    +
    false
    ipstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.imagePullSecrets[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    args[]string +
    +
    false
    command[]string +
    +
    false
    env[]object +
    +
    false
    envFrom[]object +
    +
    false
    imagestring +
    +
    false
    imagePullPolicystring +
    +
    false
    lifecycleobject +
    +
    false
    livenessProbeobject +
    +
    false
    ports[]object +
    +
    false
    readinessProbeobject +
    +
    false
    resourcesobject +
    +
    false
    securityContextobject +
    +
    false
    startupProbeobject +
    +
    false
    stdinboolean +
    +
    false
    stdinOnceboolean +
    +
    false
    terminationMessagePathstring +
    +
    false
    terminationMessagePolicystring +
    +
    false
    ttyboolean +
    +
    false
    volumeDevices[]object +
    +
    false
    volumeMounts[]object +
    +
    false
    workingDirstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].env[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    false
    valueFromobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].env[].valueFrom +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersenv) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapKeyRefobject +
    +
    false
    fieldRefobject +
    +
    false
    resourceFieldRefobject +
    +
    false
    secretKeyRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.configMapKeyRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.fieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.resourceFieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.secretKeyRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].envFrom[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapRefobject +
    +
    false
    prefixstring +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].envFrom[].configMapRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].envFrom[].secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    postStartobject +
    +
    false
    preStopobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecyclepoststarthttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecycleprestophttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].livenessProbe +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].livenessProbe.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].livenessProbe.grpc +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].livenessProbe.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].livenessProbe.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslivenessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].livenessProbe.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].ports[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    containerPortinteger +
    +
    + Format: int32
    +
    true
    hostIPstring +
    +
    false
    hostPortinteger +
    +
    + Format: int32
    +
    false
    namestring +
    +
    false
    protocolstring +
    +
    + Default: TCP
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].readinessProbe +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].readinessProbe.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].readinessProbe.grpc +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].readinessProbe.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].readinessProbe.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersreadinessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].readinessProbe.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].resources +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string +
    +
    false
    requestsmap[string]int or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].resources.claims[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].securityContext +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    allowPrivilegeEscalationboolean +
    +
    false
    capabilitiesobject +
    +
    false
    privilegedboolean +
    +
    false
    procMountstring +
    +
    false
    readOnlyRootFilesystemboolean +
    +
    false
    runAsGroupinteger +
    +
    + Format: int64
    +
    false
    runAsNonRootboolean +
    +
    false
    runAsUserinteger +
    +
    + Format: int64
    +
    false
    seLinuxOptionsobject +
    +
    false
    seccompProfileobject +
    +
    false
    windowsOptionsobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].securityContext.capabilities +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    add[]string +
    +
    false
    drop[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].securityContext.seLinuxOptions +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    levelstring +
    +
    false
    rolestring +
    +
    false
    typestring +
    +
    false
    userstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].securityContext.seccompProfile +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typestring +
    +
    true
    localhostProfilestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].securityContext.windowsOptions +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gmsaCredentialSpecstring +
    +
    false
    gmsaCredentialSpecNamestring +
    +
    false
    hostProcessboolean +
    +
    false
    runAsUserNamestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].startupProbe +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].startupProbe.exec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].startupProbe.grpc +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].startupProbe.httpGet +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].startupProbe.httpGet.httpHeaders[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersstartupprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].startupProbe.tcpSocket +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].volumeDevices[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    devicePathstring +
    +
    true
    namestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.initContainers[].volumeMounts[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mountPathstring +
    +
    true
    namestring +
    +
    true
    mountPropagationstring +
    +
    false
    readOnlyboolean +
    +
    false
    subPathstring +
    +
    false
    subPathExprstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.os +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.readinessGates[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    conditionTypestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.resourceClaims[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    sourceobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.resourceClaims[].source +[↩ Parent](#specredisenterpriseadditionalpodspecattributesresourceclaims) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourceClaimNamestring +
    +
    false
    resourceClaimTemplateNamestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.schedulingGates[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.securityContext +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsGroupinteger +
    +
    + Format: int64
    +
    false
    fsGroupChangePolicystring +
    +
    false
    runAsGroupinteger +
    +
    + Format: int64
    +
    false
    runAsNonRootboolean +
    +
    false
    runAsUserinteger +
    +
    + Format: int64
    +
    false
    seLinuxOptionsobject +
    +
    false
    seccompProfileobject +
    +
    false
    supplementalGroups[]integer +
    +
    false
    sysctls[]object +
    +
    false
    windowsOptionsobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.securityContext.seLinuxOptions +[↩ Parent](#specredisenterpriseadditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    levelstring +
    +
    false
    rolestring +
    +
    false
    typestring +
    +
    false
    userstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.securityContext.seccompProfile +[↩ Parent](#specredisenterpriseadditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typestring +
    +
    true
    localhostProfilestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.securityContext.sysctls[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.securityContext.windowsOptions +[↩ Parent](#specredisenterpriseadditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gmsaCredentialSpecstring +
    +
    false
    gmsaCredentialSpecNamestring +
    +
    false
    hostProcessboolean +
    +
    false
    runAsUserNamestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.tolerations[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    effectstring +
    +
    false
    keystring +
    +
    false
    operatorstring +
    +
    false
    tolerationSecondsinteger +
    +
    + Format: int64
    +
    false
    valuestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.topologySpreadConstraints[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    maxSkewinteger +
    +
    + Format: int32
    +
    true
    topologyKeystring +
    +
    true
    whenUnsatisfiablestring +
    +
    true
    labelSelectorobject +
    +
    false
    matchLabelKeys[]string +
    +
    false
    minDomainsinteger +
    +
    + Format: int32
    +
    false
    nodeAffinityPolicystring +
    +
    false
    nodeTaintsPolicystring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.topologySpreadConstraints[].labelSelector +[↩ Parent](#specredisenterpriseadditionalpodspecattributestopologyspreadconstraints) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.topologySpreadConstraints[].labelSelector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributestopologyspreadconstraintslabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    awsElasticBlockStoreobject +
    +
    false
    azureDiskobject +
    +
    false
    azureFileobject +
    +
    false
    cephfsobject +
    +
    false
    cinderobject +
    +
    false
    configMapobject +
    +
    false
    csiobject +
    +
    false
    downwardAPIobject +
    +
    false
    emptyDirobject +
    +
    false
    ephemeralobject +
    +
    false
    fcobject +
    +
    false
    flexVolumeobject +
    +
    false
    flockerobject +
    +
    false
    gcePersistentDiskobject +
    +
    false
    gitRepoobject +
    +
    false
    glusterfsobject +
    +
    false
    hostPathobject +
    +
    false
    iscsiobject +
    +
    false
    nfsobject +
    +
    false
    persistentVolumeClaimobject +
    +
    false
    photonPersistentDiskobject +
    +
    false
    portworxVolumeobject +
    +
    false
    projectedobject +
    +
    false
    quobyteobject +
    +
    false
    rbdobject +
    +
    false
    scaleIOobject +
    +
    false
    secretobject +
    +
    false
    storageosobject +
    +
    false
    vsphereVolumeobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].awsElasticBlockStore +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    partitioninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].azureDisk +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    diskNamestring +
    +
    true
    diskURIstring +
    +
    true
    cachingModestring +
    +
    false
    fsTypestring +
    +
    false
    kindstring +
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].azureFile +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    secretNamestring +
    +
    true
    shareNamestring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].cephfs +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    monitors[]string +
    +
    true
    pathstring +
    +
    false
    readOnlyboolean +
    +
    false
    secretFilestring +
    +
    false
    secretRefobject +
    +
    false
    userstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].cephfs.secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumescephfs) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].cinder +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].cinder.secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumescinder) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].configMap +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].configMap.items[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesconfigmap) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].csi +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    driverstring +
    +
    true
    fsTypestring +
    +
    false
    nodePublishSecretRefobject +
    +
    false
    readOnlyboolean +
    +
    false
    volumeAttributesmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].csi.nodePublishSecretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumescsi) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].downwardAPI +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].downwardAPI.items[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesdownwardapi) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    fieldRefobject +
    +
    false
    modeinteger +
    +
    + Format: int32
    +
    false
    resourceFieldRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].downwardAPI.items[].fieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].downwardAPI.items[].resourceFieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].emptyDir +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mediumstring +
    +
    false
    sizeLimitint or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeClaimTemplateobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeral) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    specobject +
    +
    true
    metadataobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeralvolumeclaimtemplate) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    accessModes[]string +
    +
    false
    dataSourceobject +
    +
    false
    dataSourceRefobject +
    +
    false
    resourcesobject +
    +
    false
    selectorobject +
    +
    false
    storageClassNamestring +
    +
    false
    volumeModestring +
    +
    false
    volumeNamestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.dataSource +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    kindstring +
    +
    true
    namestring +
    +
    true
    apiGroupstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    kindstring +
    +
    true
    namestring +
    +
    true
    apiGroupstring +
    +
    false
    namespacestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.resources +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string +
    +
    false
    requestsmap[string]int or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.resources.claims[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespecresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.selector +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.selector.matchExpressions[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespecselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].fc +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsTypestring +
    +
    false
    luninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    targetWWNs[]string +
    +
    false
    wwids[]string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].flexVolume +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    driverstring +
    +
    true
    fsTypestring +
    +
    false
    optionsmap[string]string +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].flexVolume.secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesflexvolume) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].flocker +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    datasetNamestring +
    +
    false
    datasetUUIDstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].gcePersistentDisk +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pdNamestring +
    +
    true
    fsTypestring +
    +
    false
    partitioninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].gitRepo +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    repositorystring +
    +
    true
    directorystring +
    +
    false
    revisionstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].glusterfs +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    endpointsstring +
    +
    true
    pathstring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].hostPath +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    typestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].iscsi +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    iqnstring +
    +
    true
    luninteger +
    +
    + Format: int32
    +
    true
    targetPortalstring +
    +
    true
    chapAuthDiscoveryboolean +
    +
    false
    chapAuthSessionboolean +
    +
    false
    fsTypestring +
    +
    false
    initiatorNamestring +
    +
    false
    iscsiInterfacestring +
    +
    false
    portals[]string +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].iscsi.secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesiscsi) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].nfs +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    serverstring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].persistentVolumeClaim +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claimNamestring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].photonPersistentDisk +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pdIDstring +
    +
    true
    fsTypestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].portworxVolume +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    sources[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojected) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapobject +
    +
    false
    downwardAPIobject +
    +
    false
    secretobject +
    +
    false
    serviceAccountTokenobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].configMap +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].configMap.items[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsourcesconfigmap) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI.items[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsourcesdownwardapi) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    fieldRefobject +
    +
    false
    modeinteger +
    +
    + Format: int32
    +
    false
    resourceFieldRefobject +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI.items[].fieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsourcesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI.items[].resourceFieldRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsourcesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].secret +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].secret.items[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsourcessecret) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].projected.sources[].serviceAccountToken +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    audiencestring +
    +
    false
    expirationSecondsinteger +
    +
    + Format: int64
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].quobyte +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    registrystring +
    +
    true
    volumestring +
    +
    true
    groupstring +
    +
    false
    readOnlyboolean +
    +
    false
    tenantstring +
    +
    false
    userstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].rbd +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    imagestring +
    +
    true
    monitors[]string +
    +
    true
    fsTypestring +
    +
    false
    keyringstring +
    +
    false
    poolstring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    userstring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].rbd.secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesrbd) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].scaleIO +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gatewaystring +
    +
    true
    secretRefobject +
    +
    true
    systemstring +
    +
    true
    fsTypestring +
    +
    false
    protectionDomainstring +
    +
    false
    readOnlyboolean +
    +
    false
    sslEnabledboolean +
    +
    false
    storageModestring +
    +
    false
    storagePoolstring +
    +
    false
    volumeNamestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].scaleIO.secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesscaleio) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].secret +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    optionalboolean +
    +
    false
    secretNamestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].secret.items[] +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumessecret) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].storageos +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    volumeNamestring +
    +
    false
    volumeNamespacestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].storageos.secretRef +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumesstorageos) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.redisEnterpriseAdditionalPodSpecAttributes.volumes[].vsphereVolume +[↩ Parent](#specredisenterpriseadditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumePathstring +
    +
    true
    fsTypestring +
    +
    false
    storagePolicyIDstring +
    +
    false
    storagePolicyNamestring +
    +
    false
    + + +### spec.redisEnterpriseImageSpec +[↩ Parent](#spec) + +Specification for Redis Enterprise container image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    digestHashstring + The digest hash of the container image to pull. When specified, the container image is pulled according to the digest hash instead of the image tag. The versionTag field must also be specified with the image tag matching this digest hash. Note: This field is only supported for OLM deployments.
    +
    false
    imagePullPolicystring + The image pull policy to be applied to the container image. One of Always, Never, IfNotPresent.
    +
    false
    repositorystring + The repository (name) of the container image to be deployed.
    +
    false
    versionTagstring + The tag of the container image to be deployed.
    +
    false
    + + +### spec.redisEnterpriseNodeResources +[↩ Parent](#spec) + +Compute resource requirements for Redis Enterprise containers + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
    +
    false
    requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
    +
    false
    + + +### spec.redisEnterpriseNodeResources.claims[] +[↩ Parent](#specredisenterprisenoderesources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.redisEnterpriseServicesConfiguration +[↩ Parent](#spec) + +RS Cluster optional services settings + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    cmServerobject +
    +
    false
    crdbCoordinatorobject +
    +
    false
    crdbWorkerobject +
    +
    false
    mdnsServerobject +
    +
    false
    pdnsServerobject +
    +
    false
    saslauthdobject +
    +
    false
    statsArchiverobject +
    +
    false
    + + +### spec.redisEnterpriseServicesConfiguration.cmServer +[↩ Parent](#specredisenterpriseservicesconfiguration) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    operatingModeenum + Whether to enable/disable the CM server
    +
    + Enum: enabled, disabled
    +
    true
    + + +### spec.redisEnterpriseServicesConfiguration.crdbCoordinator +[↩ Parent](#specredisenterpriseservicesconfiguration) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    operatingModeenum + Whether to enable/disable the crdb coordinator process
    +
    + Enum: enabled, disabled
    +
    true
    + + +### spec.redisEnterpriseServicesConfiguration.crdbWorker +[↩ Parent](#specredisenterpriseservicesconfiguration) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    operatingModeenum + Whether to enable/disable the crdb worker processes
    +
    + Enum: enabled, disabled
    +
    true
    + + +### spec.redisEnterpriseServicesConfiguration.mdnsServer +[↩ Parent](#specredisenterpriseservicesconfiguration) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    operatingModeenum + Whether to enable/disable the Multicast DNS server
    +
    + Enum: enabled, disabled
    +
    true
    + + +### spec.redisEnterpriseServicesConfiguration.pdnsServer +[↩ Parent](#specredisenterpriseservicesconfiguration) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    operatingModeenum + Whether to enable/disable the pdns server
    +
    + Enum: enabled, disabled
    +
    true
    + + +### spec.redisEnterpriseServicesConfiguration.saslauthd +[↩ Parent](#specredisenterpriseservicesconfiguration) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    operatingModeenum + Whether to enable/disable the saslauthd service
    +
    + Enum: enabled, disabled
    +
    true
    + + +### spec.redisEnterpriseServicesConfiguration.statsArchiver +[↩ Parent](#specredisenterpriseservicesconfiguration) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    operatingModeenum + Whether to enable/disable the stats archiver service
    +
    + Enum: enabled, disabled
    +
    true
    + + +### spec.redisEnterpriseServicesRiggerImageSpec +[↩ Parent](#spec) + +Specification for Services Rigger container image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    digestHashstring + The digest hash of the container image to pull. When specified, the container image is pulled according to the digest hash instead of the image tag. The versionTag field must also be specified with the image tag matching this digest hash. Note: This field is only supported for OLM deployments.
    +
    false
    imagePullPolicystring + The image pull policy to be applied to the container image. One of Always, Never, IfNotPresent.
    +
    false
    repositorystring + The repository (name) of the container image to be deployed.
    +
    false
    versionTagstring + The tag of the container image to be deployed.
    +
    false
    + + +### spec.redisEnterpriseServicesRiggerResources +[↩ Parent](#spec) + +Compute resource requirements for Services Rigger pod + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
    +
    false
    requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
    +
    false
    + + +### spec.redisEnterpriseServicesRiggerResources.claims[] +[↩ Parent](#specredisenterpriseservicesriggerresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.redisEnterpriseVolumeMounts[] +[↩ Parent](#spec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mountPathstring +
    +
    true
    namestring +
    +
    true
    mountPropagationstring +
    +
    false
    readOnlyboolean +
    +
    false
    subPathstring +
    +
    false
    subPathExprstring +
    +
    false
    + + +### spec.redisOnFlashSpec +[↩ Parent](#spec) + +Stores configurations specific to redis on flash. If provided, the cluster will be capable of creating redis on flash databases. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean +
    +
    true
    storageClassNamestring +
    +
    true
    bigStoreDriverenum +
    +
    + Enum: rocksdb, speedb
    +
    false
    flashDiskSizeint or string +
    +
    false
    flashStorageEngineenum +
    +
    + Enum: rocksdb
    +
    false
    + + +### spec.services +[↩ Parent](#spec) + +Customization options for operator-managed service resources created for Redis Enterprise clusters and databases + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiServiceobject + Customization options for the REC API service.
    +
    false
    servicesAnnotationsmap[string]string + Global additional annotations to set on service resources created by the operator. The specified annotations will not override annotations that already exist and didn't originate from the operator.
    +
    false
    + + +### spec.services.apiService +[↩ Parent](#specservices) + +Customization options for the REC API service. + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typeenum + Type of service to create for the REC API service. Defaults to ClusterIP service, if not specified otherwise.
    +
    + Enum: ClusterIP, NodePort, LoadBalancer
    +
    false
    + + +### spec.servicesRiggerSpec +[↩ Parent](#spec) + +Specification for service rigger + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    databaseServiceTypestring + Service types for access to databases. should be a comma separated list. The possible values are cluster_ip, headless and load_balancer.
    +
    false
    extraEnvVars[]object +
    +
    false
    podAnnotationsmap[string]string + annotations for the service rigger pod
    +
    false
    serviceNamingenum + Used to determine how to name the services created automatically when a database is created. When bdb_name is used, the database name will be also used for the service name. When redis-port is used, the service will be named redis-.
    +
    + Enum: bdb_name, redis-port
    +
    false
    servicesRiggerAdditionalPodSpecAttributesobject + ADVANCED USAGE USE AT YOUR OWN RISK - specify pod attributes that are required for the rigger deployment pod. Pod attributes managed by the operator might override these settings (Containers, serviceAccountName, podTolerations, ImagePullSecrets, nodeSelector, PriorityClassName, PodSecurityContext). Also make sure the attributes are supported by the K8s version running on the cluster - the operator does not validate that.
    +
    false
    + + +### spec.servicesRiggerSpec.extraEnvVars[] +[↩ Parent](#specservicesriggerspec) + +EnvVar represents an environment variable present in a Container. More info: https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/ + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + Name of the environment variable.
    +
    true
    valuestring +
    +
    false
    valueFromobject + Source for the environment variable's value. Cannot be used if value is not empty.
    +
    false
    + + +### spec.servicesRiggerSpec.extraEnvVars[].valueFrom +[↩ Parent](#specservicesriggerspecextraenvvars) + +Source for the environment variable's value. Cannot be used if value is not empty. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapKeyRefobject + Selects a key of a ConfigMap.
    +
    false
    fieldRefobject + Selects a field of the pod
    +
    false
    resourceFieldRefobject + Selects a resource of the container: only resources limits and requests are currently supported.
    +
    false
    secretKeyRefobject + Selects a key of a secret in the pod's namespace
    +
    false
    + + +### spec.servicesRiggerSpec.extraEnvVars[].valueFrom.configMapKeyRef +[↩ Parent](#specservicesriggerspecextraenvvarsvaluefrom) + +Selects a key of a ConfigMap. + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring + The key to select.
    +
    true
    namestring + Name of the referent
    +
    false
    optionalboolean + Specify whether the ConfigMap or its key must be defined
    +
    false
    + + +### spec.servicesRiggerSpec.extraEnvVars[].valueFrom.fieldRef +[↩ Parent](#specservicesriggerspecextraenvvarsvaluefrom) + +Selects a field of the pod + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring + Path of the field to select in the specified API version.
    +
    true
    apiVersionstring + Version of the schema the FieldPath is written in terms of, defaults to "v1".
    +
    false
    + + +### spec.servicesRiggerSpec.extraEnvVars[].valueFrom.resourceFieldRef +[↩ Parent](#specservicesriggerspecextraenvvarsvaluefrom) + +Selects a resource of the container: only resources limits and requests are currently supported. + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring + Required: resource to select
    +
    true
    containerNamestring + Container name: required for volumes, optional for env vars
    +
    false
    divisorint or string + Specifies the output format of the exposed resources, defaults to "1"
    +
    false
    + + +### spec.servicesRiggerSpec.extraEnvVars[].valueFrom.secretKeyRef +[↩ Parent](#specservicesriggerspecextraenvvarsvaluefrom) + +Selects a key of a secret in the pod's namespace + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring + The key of the secret to select from. Must be a valid secret key.
    +
    true
    namestring + Name of the referent
    +
    false
    optionalboolean + Specify whether the Secret or its key must be defined
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes +[↩ Parent](#specservicesriggerspec) + +ADVANCED USAGE USE AT YOUR OWN RISK - specify pod attributes that are required for the rigger deployment pod. Pod attributes managed by the operator might override these settings (Containers, serviceAccountName, podTolerations, ImagePullSecrets, nodeSelector, PriorityClassName, PodSecurityContext). Also make sure the attributes are supported by the K8s version running on the cluster - the operator does not validate that. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    activeDeadlineSecondsinteger +
    +
    + Format: int64
    +
    false
    affinityobject +
    +
    false
    automountServiceAccountTokenboolean +
    +
    false
    dnsConfigobject +
    +
    false
    dnsPolicystring +
    +
    false
    enableServiceLinksboolean +
    +
    false
    ephemeralContainers[]object +
    +
    false
    hostAliases[]object +
    +
    false
    hostIPCboolean +
    +
    false
    hostNetworkboolean +
    +
    false
    hostPIDboolean +
    +
    false
    hostUsersboolean +
    +
    false
    hostnamestring +
    +
    false
    imagePullSecrets[]object +
    +
    false
    initContainers[]object +
    +
    false
    nodeNamestring +
    +
    false
    nodeSelectormap[string]string +
    +
    false
    osobject +
    +
    false
    overheadmap[string]int or string +
    +
    false
    preemptionPolicystring +
    +
    false
    priorityinteger +
    +
    + Format: int32
    +
    false
    priorityClassNamestring +
    +
    false
    readinessGates[]object +
    +
    false
    resourceClaims[]object +
    +
    false
    restartPolicystring +
    +
    false
    runtimeClassNamestring +
    +
    false
    schedulerNamestring +
    +
    false
    schedulingGates[]object +
    +
    false
    securityContextobject +
    +
    false
    serviceAccountstring +
    +
    false
    serviceAccountNamestring +
    +
    false
    setHostnameAsFQDNboolean +
    +
    false
    shareProcessNamespaceboolean +
    +
    false
    subdomainstring +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    tolerations[]object +
    +
    false
    topologySpreadConstraints[]object +
    +
    false
    volumes[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    nodeAffinityobject +
    +
    false
    podAffinityobject +
    +
    false
    podAntiAffinityobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    requiredDuringSchedulingIgnoredDuringExecutionobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferenceobject +
    +
    true
    weightinteger +
    +
    + Format: int32
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinitypreferredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchFields[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinitypreferredduringschedulingignoredduringexecutionpreference) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution[].preference.matchFields[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinitypreferredduringschedulingignoredduringexecutionpreference) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinity) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    nodeSelectorTerms[]object +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchFields[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinityrequiredduringschedulingignoredduringexecutionnodeselectorterms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchFields[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitynodeaffinityrequiredduringschedulingignoredduringexecutionnodeselectorterms) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    requiredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    podAffinityTermobject +
    +
    true
    weightinteger +
    +
    + Format: int32
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinity) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecutionlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodaffinityrequiredduringschedulingignoredduringexecutionnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    preferredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    requiredDuringSchedulingIgnoredDuringExecution[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinity) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    podAffinityTermobject +
    +
    true
    weightinteger +
    +
    + Format: int32
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.labelSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinityterm) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.preferredDuringSchedulingIgnoredDuringExecution[].podAffinityTerm.namespaceSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinitypreferredduringschedulingignoredduringexecutionpodaffinitytermnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinity) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    topologyKeystring +
    +
    true
    labelSelectorobject +
    +
    false
    namespaceSelectorobject +
    +
    false
    namespaces[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].labelSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecutionlabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecution) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.affinity.podAntiAffinity.requiredDuringSchedulingIgnoredDuringExecution[].namespaceSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesaffinitypodantiaffinityrequiredduringschedulingignoredduringexecutionnamespaceselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.dnsConfig +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    nameservers[]string +
    +
    false
    options[]object +
    +
    false
    searches[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.dnsConfig.options[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesdnsconfig) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    valuestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    args[]string +
    +
    false
    command[]string +
    +
    false
    env[]object +
    +
    false
    envFrom[]object +
    +
    false
    imagestring +
    +
    false
    imagePullPolicystring +
    +
    false
    lifecycleobject +
    +
    false
    livenessProbeobject +
    +
    false
    ports[]object +
    +
    false
    readinessProbeobject +
    +
    false
    resourcesobject +
    +
    false
    securityContextobject +
    +
    false
    startupProbeobject +
    +
    false
    stdinboolean +
    +
    false
    stdinOnceboolean +
    +
    false
    targetContainerNamestring +
    +
    false
    terminationMessagePathstring +
    +
    false
    terminationMessagePolicystring +
    +
    false
    ttyboolean +
    +
    false
    volumeDevices[]object +
    +
    false
    volumeMounts[]object +
    +
    false
    workingDirstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].env[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    false
    valueFromobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersenv) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapKeyRefobject +
    +
    false
    fieldRefobject +
    +
    false
    resourceFieldRefobject +
    +
    false
    secretKeyRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.configMapKeyRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.fieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.resourceFieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].env[].valueFrom.secretKeyRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].envFrom[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapRefobject +
    +
    false
    prefixstring +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].envFrom[].configMapRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].envFrom[].secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    postStartobject +
    +
    false
    preStopobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecyclepoststarthttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.postStart.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecycleprestophttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].lifecycle.preStop.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.grpc +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslivenessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].livenessProbe.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].ports[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    containerPortinteger +
    +
    + Format: int32
    +
    true
    hostIPstring +
    +
    false
    hostPortinteger +
    +
    + Format: int32
    +
    false
    namestring +
    +
    false
    protocolstring +
    +
    + Default: TCP
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.grpc +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersreadinessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].readinessProbe.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].resources +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string +
    +
    false
    requestsmap[string]int or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].resources.claims[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].securityContext +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    allowPrivilegeEscalationboolean +
    +
    false
    capabilitiesobject +
    +
    false
    privilegedboolean +
    +
    false
    procMountstring +
    +
    false
    readOnlyRootFilesystemboolean +
    +
    false
    runAsGroupinteger +
    +
    + Format: int64
    +
    false
    runAsNonRootboolean +
    +
    false
    runAsUserinteger +
    +
    + Format: int64
    +
    false
    seLinuxOptionsobject +
    +
    false
    seccompProfileobject +
    +
    false
    windowsOptionsobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.capabilities +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    add[]string +
    +
    false
    drop[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.seLinuxOptions +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    levelstring +
    +
    false
    rolestring +
    +
    false
    typestring +
    +
    false
    userstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.seccompProfile +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typestring +
    +
    true
    localhostProfilestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].securityContext.windowsOptions +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gmsaCredentialSpecstring +
    +
    false
    gmsaCredentialSpecNamestring +
    +
    false
    hostProcessboolean +
    +
    false
    runAsUserNamestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.grpc +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersstartupprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].startupProbe.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].volumeDevices[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    devicePathstring +
    +
    true
    namestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.ephemeralContainers[].volumeMounts[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesephemeralcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mountPathstring +
    +
    true
    namestring +
    +
    true
    mountPropagationstring +
    +
    false
    readOnlyboolean +
    +
    false
    subPathstring +
    +
    false
    subPathExprstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.hostAliases[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    hostnames[]string +
    +
    false
    ipstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.imagePullSecrets[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    args[]string +
    +
    false
    command[]string +
    +
    false
    env[]object +
    +
    false
    envFrom[]object +
    +
    false
    imagestring +
    +
    false
    imagePullPolicystring +
    +
    false
    lifecycleobject +
    +
    false
    livenessProbeobject +
    +
    false
    ports[]object +
    +
    false
    readinessProbeobject +
    +
    false
    resourcesobject +
    +
    false
    securityContextobject +
    +
    false
    startupProbeobject +
    +
    false
    stdinboolean +
    +
    false
    stdinOnceboolean +
    +
    false
    terminationMessagePathstring +
    +
    false
    terminationMessagePolicystring +
    +
    false
    ttyboolean +
    +
    false
    volumeDevices[]object +
    +
    false
    volumeMounts[]object +
    +
    false
    workingDirstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].env[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    false
    valueFromobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].env[].valueFrom +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersenv) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapKeyRefobject +
    +
    false
    fieldRefobject +
    +
    false
    resourceFieldRefobject +
    +
    false
    secretKeyRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.configMapKeyRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.fieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.resourceFieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].env[].valueFrom.secretKeyRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].envFrom[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapRefobject +
    +
    false
    prefixstring +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].envFrom[].configMapRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].envFrom[].secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    postStartobject +
    +
    false
    preStopobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecyclepoststarthttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.postStart.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecycleprestophttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].lifecycle.preStop.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].livenessProbe +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].livenessProbe.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].livenessProbe.grpc +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].livenessProbe.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].livenessProbe.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslivenessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].livenessProbe.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerslivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].ports[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    containerPortinteger +
    +
    + Format: int32
    +
    true
    hostIPstring +
    +
    false
    hostPortinteger +
    +
    + Format: int32
    +
    false
    namestring +
    +
    false
    protocolstring +
    +
    + Default: TCP
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].readinessProbe +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].readinessProbe.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].readinessProbe.grpc +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].readinessProbe.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].readinessProbe.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersreadinessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].readinessProbe.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].resources +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string +
    +
    false
    requestsmap[string]int or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].resources.claims[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].securityContext +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    allowPrivilegeEscalationboolean +
    +
    false
    capabilitiesobject +
    +
    false
    privilegedboolean +
    +
    false
    procMountstring +
    +
    false
    readOnlyRootFilesystemboolean +
    +
    false
    runAsGroupinteger +
    +
    + Format: int64
    +
    false
    runAsNonRootboolean +
    +
    false
    runAsUserinteger +
    +
    + Format: int64
    +
    false
    seLinuxOptionsobject +
    +
    false
    seccompProfileobject +
    +
    false
    windowsOptionsobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].securityContext.capabilities +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    add[]string +
    +
    false
    drop[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].securityContext.seLinuxOptions +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    levelstring +
    +
    false
    rolestring +
    +
    false
    typestring +
    +
    false
    userstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].securityContext.seccompProfile +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typestring +
    +
    true
    localhostProfilestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].securityContext.windowsOptions +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainerssecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gmsaCredentialSpecstring +
    +
    false
    gmsaCredentialSpecNamestring +
    +
    false
    hostProcessboolean +
    +
    false
    runAsUserNamestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].startupProbe +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].startupProbe.exec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].startupProbe.grpc +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].startupProbe.httpGet +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].startupProbe.httpGet.httpHeaders[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersstartupprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].startupProbe.tcpSocket +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainersstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].volumeDevices[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    devicePathstring +
    +
    true
    namestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.initContainers[].volumeMounts[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesinitcontainers) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mountPathstring +
    +
    true
    namestring +
    +
    true
    mountPropagationstring +
    +
    false
    readOnlyboolean +
    +
    false
    subPathstring +
    +
    false
    subPathExprstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.os +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.readinessGates[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    conditionTypestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.resourceClaims[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    sourceobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.resourceClaims[].source +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesresourceclaims) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourceClaimNamestring +
    +
    false
    resourceClaimTemplateNamestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.schedulingGates[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.securityContext +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsGroupinteger +
    +
    + Format: int64
    +
    false
    fsGroupChangePolicystring +
    +
    false
    runAsGroupinteger +
    +
    + Format: int64
    +
    false
    runAsNonRootboolean +
    +
    false
    runAsUserinteger +
    +
    + Format: int64
    +
    false
    seLinuxOptionsobject +
    +
    false
    seccompProfileobject +
    +
    false
    supplementalGroups[]integer +
    +
    false
    sysctls[]object +
    +
    false
    windowsOptionsobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.securityContext.seLinuxOptions +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    levelstring +
    +
    false
    rolestring +
    +
    false
    typestring +
    +
    false
    userstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.securityContext.seccompProfile +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typestring +
    +
    true
    localhostProfilestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.securityContext.sysctls[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.securityContext.windowsOptions +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributessecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gmsaCredentialSpecstring +
    +
    false
    gmsaCredentialSpecNamestring +
    +
    false
    hostProcessboolean +
    +
    false
    runAsUserNamestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.tolerations[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    effectstring +
    +
    false
    keystring +
    +
    false
    operatorstring +
    +
    false
    tolerationSecondsinteger +
    +
    + Format: int64
    +
    false
    valuestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.topologySpreadConstraints[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    maxSkewinteger +
    +
    + Format: int32
    +
    true
    topologyKeystring +
    +
    true
    whenUnsatisfiablestring +
    +
    true
    labelSelectorobject +
    +
    false
    matchLabelKeys[]string +
    +
    false
    minDomainsinteger +
    +
    + Format: int32
    +
    false
    nodeAffinityPolicystring +
    +
    false
    nodeTaintsPolicystring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.topologySpreadConstraints[].labelSelector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributestopologyspreadconstraints) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.topologySpreadConstraints[].labelSelector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributestopologyspreadconstraintslabelselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    awsElasticBlockStoreobject +
    +
    false
    azureDiskobject +
    +
    false
    azureFileobject +
    +
    false
    cephfsobject +
    +
    false
    cinderobject +
    +
    false
    configMapobject +
    +
    false
    csiobject +
    +
    false
    downwardAPIobject +
    +
    false
    emptyDirobject +
    +
    false
    ephemeralobject +
    +
    false
    fcobject +
    +
    false
    flexVolumeobject +
    +
    false
    flockerobject +
    +
    false
    gcePersistentDiskobject +
    +
    false
    gitRepoobject +
    +
    false
    glusterfsobject +
    +
    false
    hostPathobject +
    +
    false
    iscsiobject +
    +
    false
    nfsobject +
    +
    false
    persistentVolumeClaimobject +
    +
    false
    photonPersistentDiskobject +
    +
    false
    portworxVolumeobject +
    +
    false
    projectedobject +
    +
    false
    quobyteobject +
    +
    false
    rbdobject +
    +
    false
    scaleIOobject +
    +
    false
    secretobject +
    +
    false
    storageosobject +
    +
    false
    vsphereVolumeobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].awsElasticBlockStore +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    partitioninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].azureDisk +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    diskNamestring +
    +
    true
    diskURIstring +
    +
    true
    cachingModestring +
    +
    false
    fsTypestring +
    +
    false
    kindstring +
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].azureFile +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    secretNamestring +
    +
    true
    shareNamestring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].cephfs +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    monitors[]string +
    +
    true
    pathstring +
    +
    false
    readOnlyboolean +
    +
    false
    secretFilestring +
    +
    false
    secretRefobject +
    +
    false
    userstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].cephfs.secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumescephfs) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].cinder +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].cinder.secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumescinder) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].configMap +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].configMap.items[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesconfigmap) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].csi +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    driverstring +
    +
    true
    fsTypestring +
    +
    false
    nodePublishSecretRefobject +
    +
    false
    readOnlyboolean +
    +
    false
    volumeAttributesmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].csi.nodePublishSecretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumescsi) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].downwardAPI +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].downwardAPI.items[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesdownwardapi) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    fieldRefobject +
    +
    false
    modeinteger +
    +
    + Format: int32
    +
    false
    resourceFieldRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].downwardAPI.items[].fieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].downwardAPI.items[].resourceFieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].emptyDir +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mediumstring +
    +
    false
    sizeLimitint or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeClaimTemplateobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeral) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    specobject +
    +
    true
    metadataobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeralvolumeclaimtemplate) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    accessModes[]string +
    +
    false
    dataSourceobject +
    +
    false
    dataSourceRefobject +
    +
    false
    resourcesobject +
    +
    false
    selectorobject +
    +
    false
    storageClassNamestring +
    +
    false
    volumeModestring +
    +
    false
    volumeNamestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.dataSource +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    kindstring +
    +
    true
    namestring +
    +
    true
    apiGroupstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    kindstring +
    +
    true
    namestring +
    +
    true
    apiGroupstring +
    +
    false
    namespacestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.resources +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string +
    +
    false
    requestsmap[string]int or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.resources.claims[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespecresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.selector +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespec) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    matchExpressions[]object +
    +
    false
    matchLabelsmap[string]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].ephemeral.volumeClaimTemplate.spec.selector.matchExpressions[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesephemeralvolumeclaimtemplatespecselector) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    operatorstring +
    +
    true
    values[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].fc +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsTypestring +
    +
    false
    luninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    targetWWNs[]string +
    +
    false
    wwids[]string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].flexVolume +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    driverstring +
    +
    true
    fsTypestring +
    +
    false
    optionsmap[string]string +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].flexVolume.secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesflexvolume) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].flocker +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    datasetNamestring +
    +
    false
    datasetUUIDstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].gcePersistentDisk +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pdNamestring +
    +
    true
    fsTypestring +
    +
    false
    partitioninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].gitRepo +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    repositorystring +
    +
    true
    directorystring +
    +
    false
    revisionstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].glusterfs +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    endpointsstring +
    +
    true
    pathstring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].hostPath +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    typestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].iscsi +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    iqnstring +
    +
    true
    luninteger +
    +
    + Format: int32
    +
    true
    targetPortalstring +
    +
    true
    chapAuthDiscoveryboolean +
    +
    false
    chapAuthSessionboolean +
    +
    false
    fsTypestring +
    +
    false
    initiatorNamestring +
    +
    false
    iscsiInterfacestring +
    +
    false
    portals[]string +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].iscsi.secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesiscsi) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].nfs +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    serverstring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].persistentVolumeClaim +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claimNamestring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].photonPersistentDisk +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pdIDstring +
    +
    true
    fsTypestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].portworxVolume +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    sources[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojected) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapobject +
    +
    false
    downwardAPIobject +
    +
    false
    secretobject +
    +
    false
    serviceAccountTokenobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].configMap +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].configMap.items[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsourcesconfigmap) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI.items[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsourcesdownwardapi) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    fieldRefobject +
    +
    false
    modeinteger +
    +
    + Format: int32
    +
    false
    resourceFieldRefobject +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI.items[].fieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsourcesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].downwardAPI.items[].resourceFieldRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsourcesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].secret +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].secret.items[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsourcessecret) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].projected.sources[].serviceAccountToken +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    audiencestring +
    +
    false
    expirationSecondsinteger +
    +
    + Format: int64
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].quobyte +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    registrystring +
    +
    true
    volumestring +
    +
    true
    groupstring +
    +
    false
    readOnlyboolean +
    +
    false
    tenantstring +
    +
    false
    userstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].rbd +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    imagestring +
    +
    true
    monitors[]string +
    +
    true
    fsTypestring +
    +
    false
    keyringstring +
    +
    false
    poolstring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    userstring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].rbd.secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesrbd) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].scaleIO +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gatewaystring +
    +
    true
    secretRefobject +
    +
    true
    systemstring +
    +
    true
    fsTypestring +
    +
    false
    protectionDomainstring +
    +
    false
    readOnlyboolean +
    +
    false
    sslEnabledboolean +
    +
    false
    storageModestring +
    +
    false
    storagePoolstring +
    +
    false
    volumeNamestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].scaleIO.secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesscaleio) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].secret +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    optionalboolean +
    +
    false
    secretNamestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].secret.items[] +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumessecret) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].storageos +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    volumeNamestring +
    +
    false
    volumeNamespacestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].storageos.secretRef +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumesstorageos) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.servicesRiggerSpec.servicesRiggerAdditionalPodSpecAttributes.volumes[].vsphereVolume +[↩ Parent](#specservicesriggerspecservicesriggeradditionalpodspecattributesvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumePathstring +
    +
    true
    fsTypestring +
    +
    false
    storagePolicyIDstring +
    +
    false
    storagePolicyNamestring +
    +
    false
    + + +### spec.sideContainersSpec[] +[↩ Parent](#spec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    args[]string +
    +
    false
    command[]string +
    +
    false
    env[]object +
    +
    false
    envFrom[]object +
    +
    false
    imagestring +
    +
    false
    imagePullPolicystring +
    +
    false
    lifecycleobject +
    +
    false
    livenessProbeobject +
    +
    false
    ports[]object +
    +
    false
    readinessProbeobject +
    +
    false
    resourcesobject +
    +
    false
    securityContextobject +
    +
    false
    startupProbeobject +
    +
    false
    stdinboolean +
    +
    false
    stdinOnceboolean +
    +
    false
    terminationMessagePathstring +
    +
    false
    terminationMessagePolicystring +
    +
    false
    ttyboolean +
    +
    false
    volumeDevices[]object +
    +
    false
    volumeMounts[]object +
    +
    false
    workingDirstring +
    +
    false
    + + +### spec.sideContainersSpec[].env[] +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    false
    valueFromobject +
    +
    false
    + + +### spec.sideContainersSpec[].env[].valueFrom +[↩ Parent](#specsidecontainersspecenv) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapKeyRefobject +
    +
    false
    fieldRefobject +
    +
    false
    resourceFieldRefobject +
    +
    false
    secretKeyRefobject +
    +
    false
    + + +### spec.sideContainersSpec[].env[].valueFrom.configMapKeyRef +[↩ Parent](#specsidecontainersspecenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.sideContainersSpec[].env[].valueFrom.fieldRef +[↩ Parent](#specsidecontainersspecenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.sideContainersSpec[].env[].valueFrom.resourceFieldRef +[↩ Parent](#specsidecontainersspecenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.sideContainersSpec[].env[].valueFrom.secretKeyRef +[↩ Parent](#specsidecontainersspecenvvaluefrom) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.sideContainersSpec[].envFrom[] +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapRefobject +
    +
    false
    prefixstring +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.sideContainersSpec[].envFrom[].configMapRef +[↩ Parent](#specsidecontainersspecenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.sideContainersSpec[].envFrom[].secretRef +[↩ Parent](#specsidecontainersspecenvfrom) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    postStartobject +
    +
    false
    preStopobject +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.postStart +[↩ Parent](#specsidecontainersspeclifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.postStart.exec +[↩ Parent](#specsidecontainersspeclifecyclepoststart) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.postStart.httpGet +[↩ Parent](#specsidecontainersspeclifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.postStart.httpGet.httpHeaders[] +[↩ Parent](#specsidecontainersspeclifecyclepoststarthttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.sideContainersSpec[].lifecycle.postStart.tcpSocket +[↩ Parent](#specsidecontainersspeclifecyclepoststart) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.preStop +[↩ Parent](#specsidecontainersspeclifecycle) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    httpGetobject +
    +
    false
    tcpSocketobject +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.preStop.exec +[↩ Parent](#specsidecontainersspeclifecycleprestop) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.preStop.httpGet +[↩ Parent](#specsidecontainersspeclifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.sideContainersSpec[].lifecycle.preStop.httpGet.httpHeaders[] +[↩ Parent](#specsidecontainersspeclifecycleprestophttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.sideContainersSpec[].lifecycle.preStop.tcpSocket +[↩ Parent](#specsidecontainersspeclifecycleprestop) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.sideContainersSpec[].livenessProbe +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.sideContainersSpec[].livenessProbe.exec +[↩ Parent](#specsidecontainersspeclivenessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.sideContainersSpec[].livenessProbe.grpc +[↩ Parent](#specsidecontainersspeclivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.sideContainersSpec[].livenessProbe.httpGet +[↩ Parent](#specsidecontainersspeclivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.sideContainersSpec[].livenessProbe.httpGet.httpHeaders[] +[↩ Parent](#specsidecontainersspeclivenessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.sideContainersSpec[].livenessProbe.tcpSocket +[↩ Parent](#specsidecontainersspeclivenessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.sideContainersSpec[].ports[] +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    containerPortinteger +
    +
    + Format: int32
    +
    true
    hostIPstring +
    +
    false
    hostPortinteger +
    +
    + Format: int32
    +
    false
    namestring +
    +
    false
    protocolstring +
    +
    + Default: TCP
    +
    false
    + + +### spec.sideContainersSpec[].readinessProbe +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.sideContainersSpec[].readinessProbe.exec +[↩ Parent](#specsidecontainersspecreadinessprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.sideContainersSpec[].readinessProbe.grpc +[↩ Parent](#specsidecontainersspecreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.sideContainersSpec[].readinessProbe.httpGet +[↩ Parent](#specsidecontainersspecreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.sideContainersSpec[].readinessProbe.httpGet.httpHeaders[] +[↩ Parent](#specsidecontainersspecreadinessprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.sideContainersSpec[].readinessProbe.tcpSocket +[↩ Parent](#specsidecontainersspecreadinessprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.sideContainersSpec[].resources +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claims[]object +
    +
    false
    limitsmap[string]int or string +
    +
    false
    requestsmap[string]int or string +
    +
    false
    + + +### spec.sideContainersSpec[].resources.claims[] +[↩ Parent](#specsidecontainersspecresources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    + + +### spec.sideContainersSpec[].securityContext +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    allowPrivilegeEscalationboolean +
    +
    false
    capabilitiesobject +
    +
    false
    privilegedboolean +
    +
    false
    procMountstring +
    +
    false
    readOnlyRootFilesystemboolean +
    +
    false
    runAsGroupinteger +
    +
    + Format: int64
    +
    false
    runAsNonRootboolean +
    +
    false
    runAsUserinteger +
    +
    + Format: int64
    +
    false
    seLinuxOptionsobject +
    +
    false
    seccompProfileobject +
    +
    false
    windowsOptionsobject +
    +
    false
    + + +### spec.sideContainersSpec[].securityContext.capabilities +[↩ Parent](#specsidecontainersspecsecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    add[]string +
    +
    false
    drop[]string +
    +
    false
    + + +### spec.sideContainersSpec[].securityContext.seLinuxOptions +[↩ Parent](#specsidecontainersspecsecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    levelstring +
    +
    false
    rolestring +
    +
    false
    typestring +
    +
    false
    userstring +
    +
    false
    + + +### spec.sideContainersSpec[].securityContext.seccompProfile +[↩ Parent](#specsidecontainersspecsecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    typestring +
    +
    true
    localhostProfilestring +
    +
    false
    + + +### spec.sideContainersSpec[].securityContext.windowsOptions +[↩ Parent](#specsidecontainersspecsecuritycontext) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gmsaCredentialSpecstring +
    +
    false
    gmsaCredentialSpecNamestring +
    +
    false
    hostProcessboolean +
    +
    false
    runAsUserNamestring +
    +
    false
    + + +### spec.sideContainersSpec[].startupProbe +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    execobject +
    +
    false
    failureThresholdinteger +
    +
    + Format: int32
    +
    false
    grpcobject +
    +
    false
    httpGetobject +
    +
    false
    initialDelaySecondsinteger +
    +
    + Format: int32
    +
    false
    periodSecondsinteger +
    +
    + Format: int32
    +
    false
    successThresholdinteger +
    +
    + Format: int32
    +
    false
    tcpSocketobject +
    +
    false
    terminationGracePeriodSecondsinteger +
    +
    + Format: int64
    +
    false
    timeoutSecondsinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.sideContainersSpec[].startupProbe.exec +[↩ Parent](#specsidecontainersspecstartupprobe) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    command[]string +
    +
    false
    + + +### spec.sideContainersSpec[].startupProbe.grpc +[↩ Parent](#specsidecontainersspecstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portinteger +
    +
    + Format: int32
    +
    true
    servicestring +
    +
    false
    + + +### spec.sideContainersSpec[].startupProbe.httpGet +[↩ Parent](#specsidecontainersspecstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    httpHeaders[]object +
    +
    false
    pathstring +
    +
    false
    schemestring +
    +
    false
    + + +### spec.sideContainersSpec[].startupProbe.httpGet.httpHeaders[] +[↩ Parent](#specsidecontainersspecstartupprobehttpget) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    valuestring +
    +
    true
    + + +### spec.sideContainersSpec[].startupProbe.tcpSocket +[↩ Parent](#specsidecontainersspecstartupprobe) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    portint or string +
    +
    true
    hoststring +
    +
    false
    + + +### spec.sideContainersSpec[].volumeDevices[] +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    devicePathstring +
    +
    true
    namestring +
    +
    true
    + + +### spec.sideContainersSpec[].volumeMounts[] +[↩ Parent](#specsidecontainersspec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mountPathstring +
    +
    true
    namestring +
    +
    true
    mountPropagationstring +
    +
    false
    readOnlyboolean +
    +
    false
    subPathstring +
    +
    false
    subPathExprstring +
    +
    false
    + + +### spec.slaveHA +[↩ Parent](#spec) + +Slave high availability mechanism configuration. + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    slaveHAGracePeriodinteger + Time in seconds between when a node fails, and when slave high availability mechanism starts relocating shards. If set to 0, will not affect cluster configuration.
    +
    + Format: int32
    +
    true
    + + +### spec.upgradeSpec +[↩ Parent](#spec) + +Specification for upgrades of Redis Enterprise + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    autoUpgradeRedisEnterpriseboolean + Whether to upgrade Redis Enterprise automatically when operator is upgraded
    +
    true
    + + +### spec.volumes[] +[↩ Parent](#spec) + +Volume represents a named volume in a pod that may be accessed by any container in the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    true
    awsElasticBlockStoreobject +
    +
    false
    azureDiskobject +
    +
    false
    azureFileobject +
    +
    false
    cephfsobject +
    +
    false
    cinderobject +
    +
    false
    configMapobject +
    +
    false
    csiobject +
    +
    false
    downwardAPIobject +
    +
    false
    emptyDirobject +
    +
    false
    fcobject +
    +
    false
    flexVolumeobject +
    +
    false
    flockerobject +
    +
    false
    gcePersistentDiskobject +
    +
    false
    gitRepoobject +
    +
    false
    glusterfsobject +
    +
    false
    hostPathobject +
    +
    false
    iscsiobject +
    +
    false
    nfsobject +
    +
    false
    persistentVolumeClaimobject +
    +
    false
    photonPersistentDiskobject +
    +
    false
    portworxVolumeobject +
    +
    false
    projectedobject +
    +
    false
    quobyteobject +
    +
    false
    rbdobject +
    +
    false
    scaleIOobject +
    +
    false
    secretobject +
    +
    false
    storageosobject +
    +
    false
    vsphereVolumeobject +
    +
    false
    + + +### spec.volumes[].awsElasticBlockStore +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    partitioninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].azureDisk +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    diskNamestring +
    +
    true
    diskURIstring +
    +
    true
    cachingModestring +
    +
    false
    fsTypestring +
    +
    false
    kindstring +
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].azureFile +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    secretNamestring +
    +
    true
    shareNamestring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].cephfs +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    monitors[]string +
    +
    true
    pathstring +
    +
    false
    readOnlyboolean +
    +
    false
    secretFilestring +
    +
    false
    secretRefobject +
    +
    false
    userstring +
    +
    false
    + + +### spec.volumes[].cephfs.secretRef +[↩ Parent](#specvolumescephfs) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].cinder +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.volumes[].cinder.secretRef +[↩ Parent](#specvolumescinder) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].configMap +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.volumes[].configMap.items[] +[↩ Parent](#specvolumesconfigmap) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.volumes[].csi +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    driverstring +
    +
    true
    fsTypestring +
    +
    false
    nodePublishSecretRefobject +
    +
    false
    readOnlyboolean +
    +
    false
    volumeAttributesmap[string]string +
    +
    false
    + + +### spec.volumes[].csi.nodePublishSecretRef +[↩ Parent](#specvolumescsi) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].downwardAPI +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    + + +### spec.volumes[].downwardAPI.items[] +[↩ Parent](#specvolumesdownwardapi) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    fieldRefobject +
    +
    false
    modeinteger +
    +
    + Format: int32
    +
    false
    resourceFieldRefobject +
    +
    false
    + + +### spec.volumes[].downwardAPI.items[].fieldRef +[↩ Parent](#specvolumesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.volumes[].downwardAPI.items[].resourceFieldRef +[↩ Parent](#specvolumesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.volumes[].emptyDir +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    mediumstring +
    +
    false
    sizeLimitint or string +
    +
    false
    + + +### spec.volumes[].fc +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsTypestring +
    +
    false
    luninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    targetWWNs[]string +
    +
    false
    wwids[]string +
    +
    false
    + + +### spec.volumes[].flexVolume +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    driverstring +
    +
    true
    fsTypestring +
    +
    false
    optionsmap[string]string +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.volumes[].flexVolume.secretRef +[↩ Parent](#specvolumesflexvolume) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].flocker +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    datasetNamestring +
    +
    false
    datasetUUIDstring +
    +
    false
    + + +### spec.volumes[].gcePersistentDisk +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pdNamestring +
    +
    true
    fsTypestring +
    +
    false
    partitioninteger +
    +
    + Format: int32
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].gitRepo +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    repositorystring +
    +
    true
    directorystring +
    +
    false
    revisionstring +
    +
    false
    + + +### spec.volumes[].glusterfs +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    endpointsstring +
    +
    true
    pathstring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].hostPath +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    typestring +
    +
    false
    + + +### spec.volumes[].iscsi +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    iqnstring +
    +
    true
    luninteger +
    +
    + Format: int32
    +
    true
    targetPortalstring +
    +
    true
    chapAuthDiscoveryboolean +
    +
    false
    chapAuthSessionboolean +
    +
    false
    fsTypestring +
    +
    false
    initiatorNamestring +
    +
    false
    iscsiInterfacestring +
    +
    false
    portals[]string +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    + + +### spec.volumes[].iscsi.secretRef +[↩ Parent](#specvolumesiscsi) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].nfs +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    serverstring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].persistentVolumeClaim +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    claimNamestring +
    +
    true
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].photonPersistentDisk +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pdIDstring +
    +
    true
    fsTypestring +
    +
    false
    + + +### spec.volumes[].portworxVolume +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumeIDstring +
    +
    true
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    + + +### spec.volumes[].projected +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    sources[]object +
    +
    true
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.volumes[].projected.sources[] +[↩ Parent](#specvolumesprojected) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    configMapobject +
    +
    false
    downwardAPIobject +
    +
    false
    secretobject +
    +
    false
    serviceAccountTokenobject +
    +
    false
    + + +### spec.volumes[].projected.sources[].configMap +[↩ Parent](#specvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.volumes[].projected.sources[].configMap.items[] +[↩ Parent](#specvolumesprojectedsourcesconfigmap) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.volumes[].projected.sources[].downwardAPI +[↩ Parent](#specvolumesprojectedsources) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    + + +### spec.volumes[].projected.sources[].downwardAPI.items[] +[↩ Parent](#specvolumesprojectedsourcesdownwardapi) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    fieldRefobject +
    +
    false
    modeinteger +
    +
    + Format: int32
    +
    false
    resourceFieldRefobject +
    +
    false
    + + +### spec.volumes[].projected.sources[].downwardAPI.items[].fieldRef +[↩ Parent](#specvolumesprojectedsourcesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fieldPathstring +
    +
    true
    apiVersionstring +
    +
    false
    + + +### spec.volumes[].projected.sources[].downwardAPI.items[].resourceFieldRef +[↩ Parent](#specvolumesprojectedsourcesdownwardapiitems) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    resourcestring +
    +
    true
    containerNamestring +
    +
    false
    divisorint or string +
    +
    false
    + + +### spec.volumes[].projected.sources[].secret +[↩ Parent](#specvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    items[]object +
    +
    false
    namestring +
    +
    false
    optionalboolean +
    +
    false
    + + +### spec.volumes[].projected.sources[].secret.items[] +[↩ Parent](#specvolumesprojectedsourcessecret) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.volumes[].projected.sources[].serviceAccountToken +[↩ Parent](#specvolumesprojectedsources) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring +
    +
    true
    audiencestring +
    +
    false
    expirationSecondsinteger +
    +
    + Format: int64
    +
    false
    + + +### spec.volumes[].quobyte +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    registrystring +
    +
    true
    volumestring +
    +
    true
    groupstring +
    +
    false
    readOnlyboolean +
    +
    false
    tenantstring +
    +
    false
    userstring +
    +
    false
    + + +### spec.volumes[].rbd +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    imagestring +
    +
    true
    monitors[]string +
    +
    true
    fsTypestring +
    +
    false
    keyringstring +
    +
    false
    poolstring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    userstring +
    +
    false
    + + +### spec.volumes[].rbd.secretRef +[↩ Parent](#specvolumesrbd) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].scaleIO +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    gatewaystring +
    +
    true
    secretRefobject +
    +
    true
    systemstring +
    +
    true
    fsTypestring +
    +
    false
    protectionDomainstring +
    +
    false
    readOnlyboolean +
    +
    false
    sslEnabledboolean +
    +
    false
    storageModestring +
    +
    false
    storagePoolstring +
    +
    false
    volumeNamestring +
    +
    false
    + + +### spec.volumes[].scaleIO.secretRef +[↩ Parent](#specvolumesscaleio) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].secret +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    defaultModeinteger +
    +
    + Format: int32
    +
    false
    items[]object +
    +
    false
    optionalboolean +
    +
    false
    secretNamestring +
    +
    false
    + + +### spec.volumes[].secret.items[] +[↩ Parent](#specvolumessecret) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    keystring +
    +
    true
    pathstring +
    +
    true
    modeinteger +
    +
    + Format: int32
    +
    false
    + + +### spec.volumes[].storageos +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    fsTypestring +
    +
    false
    readOnlyboolean +
    +
    false
    secretRefobject +
    +
    false
    volumeNamestring +
    +
    false
    volumeNamespacestring +
    +
    false
    + + +### spec.volumes[].storageos.secretRef +[↩ Parent](#specvolumesstorageos) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring +
    +
    false
    + + +### spec.volumes[].vsphereVolume +[↩ Parent](#specvolumes) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    volumePathstring +
    +
    true
    fsTypestring +
    +
    false
    storagePolicyIDstring +
    +
    false
    storagePolicyNamestring +
    +
    false
    + + +### status +[↩ Parent](#) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    bundledDatabaseVersions[]object + Versions of open source databases bundled by Redis Enterprise Software - please note that in order to use a specific version it should be supported by the ‘upgradePolicy’ - ‘major’ or ‘latest’ according to the desired version (major/minor)
    +
    false
    ingressOrRouteMethodStatusstring + The ingressOrRouteSpec/ActiveActive spec method that exist
    +
    false
    licenseStatusobject +
    +
    false
    managedAPIsobject + Indicates cluster APIs that are being managed by the operator. This only applies to cluster APIs which are optionally-managed by the operator, such as cluster LDAP configuration. Most other APIs are automatically managed by the operator, and are not listed here.
    +
    false
    modules[]object +
    +
    false
    ocspStatusobject + An API object that represents the cluster's OCSP status
    +
    false
    persistenceStatusobject + The status of the Persistent Volume Claims that are used for Redis Enterprise Cluster persistence. The status will correspond to the status of one or more of the PVCs (failed/resizing if one of them is in resize or failed to resize)
    +
    false
    redisEnterpriseIPFamilystring +
    +
    false
    specStatusstring +
    +
    false
    statestring +
    +
    false
    + + +### status.bundledDatabaseVersions[] +[↩ Parent](#status) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    dbTypestring +
    +
    true
    versionstring +
    +
    true
    majorboolean +
    +
    false
    + + +### status.licenseStatus +[↩ Parent](#status) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    activationDatestring +
    +
    false
    expirationDatestring +
    +
    false
    licenseStatestring +
    +
    false
    shardsLimitinteger +
    +
    false
    + + +### status.managedAPIs +[↩ Parent](#status) + +Indicates cluster APIs that are being managed by the operator. This only applies to cluster APIs which are optionally-managed by the operator, such as cluster LDAP configuration. Most other APIs are automatically managed by the operator, and are not listed here. + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    ldapboolean + Indicate whether cluster LDAP configuration is managed by the operator. When this is enabled, the operator will reconcile the cluster LDAP configuration according to the '.spec.ldap' field in the RedisEnterpriseCluster resource.
    +
    false
    + + +### status.modules[] +[↩ Parent](#status) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    displayNamestring +
    +
    false
    namestring +
    +
    false
    versions[]string +
    +
    false
    + + +### status.ocspStatus +[↩ Parent](#status) + +An API object that represents the cluster's OCSP status + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    certStatusstring + Indicates the proxy certificate status - GOOD/REVOKED/UNKNOWN.
    +
    false
    nextUpdatestring + The time at or before which newer information will be available about the status of the certificate (if available)
    +
    false
    producedAtstring + The time at which the OCSP responder signed this response.
    +
    false
    responderUrlstring + The OCSP responder url from which this status came from.
    +
    false
    revocationTimestring + The time at which the certificate was revoked or placed on hold.
    +
    false
    thisUpdatestring + The most recent time at which the status being indicated is known by the responder to have been correct.
    +
    false
    + + +### status.persistenceStatus +[↩ Parent](#status) + +The status of the Persistent Volume Claims that are used for Redis Enterprise Cluster persistence. The status will correspond to the status of one or more of the PVCs (failed/resizing if one of them is in resize or failed to resize) + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    statusstring + The current status of the PVCs
    +
    false
    succeededstring + The number of PVCs that are provisioned with the expected size
    +
    false
    diff --git a/content/operate/kubernetes/7.4.6/reference/redis_enterprise_database_api.md b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_database_api.md new file mode 100644 index 0000000000..bd2c486b03 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_database_api.md @@ -0,0 +1,1634 @@ +--- +title: RedisEnterpriseDatabase API Reference +alwaysopen: false +categories: +- docs +- operate +- kubernetes +linkTitle: REDB API +weight: 30 +aliases: [ /operate/kubernetes/reference/db-options, ] +url: '/operate/kubernetes/7.4.6/reference/redis_enterprise_database_api/' +--- + +apiVersion: + + +- [app.redislabs.com/v1alpha1](#appredislabscomv1alpha1) + + + + +# app.redislabs.com/v1alpha1 + + + + +RedisEnterpriseDatabase is the Schema for the redisenterprisedatabases API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiVersionstringapp.redislabs.com/v1alpha1true
    kindstringRedisEnterpriseDatabasetrue
    metadataobjectRefer to the Kubernetes API documentation for the fields of the `metadata` field.true
    specobject + RedisEnterpriseDatabaseSpec defines the desired state of RedisEnterpriseDatabase
    +
    false
    statusobject + RedisEnterpriseDatabaseStatus defines the observed state of RedisEnterpriseDatabase
    +
    false
    + + +### spec +[↩ Parent](#) + +RedisEnterpriseDatabaseSpec defines the desired state of RedisEnterpriseDatabase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    activeActiveobject + Connection/ association to the Active-Active database.
    +
    false
    alertSettingsobject + Settings for database alerts
    +
    false
    backupobject + Target for automatic database backups.
    +
    false
    clientAuthenticationCertificates[]string + The Secrets containing TLS Client Certificate to use for Authentication
    +
    false
    dataInternodeEncryptionboolean + Internode encryption (INE) setting. An optional boolean setting, overriding a similar cluster-wide policy. If set to False, INE is guaranteed to be turned off for this DB (regardless of cluster-wide policy). If set to True, INE will be turned on, unless the capability is not supported by the DB ( in such a case we will get an error and database creation will fail). If left unspecified, will be disabled if internode encryption is not supported by the DB (regardless of cluster default). Deleting this property after explicitly setting its value shall have no effect.
    +
    false
    databasePortinteger + Database port number. TCP port on which the database is available. Will be generated automatically if omitted. can not be changed after creation
    +
    false
    databaseSecretNamestring + The name of the secret that holds the password to the database (redis databases only). If secret does not exist, it will be created. To define the password, create an opaque secret and set the name in the spec. The password will be taken from the value of the 'password' key. Use an empty string as value within the secret to disable authentication for the database. Notes - For Active-Active databases this secret will not be automatically created, and also, memcached databases must not be set with a value, and a secret/password will not be automatically created for them. Use the memcachedSaslSecretName field to set authentication parameters for memcached databases.
    +
    false
    defaultUserboolean + Is connecting with a default user allowed?
    +
    false
    evictionPolicystring + Database eviction policy. see more https://docs.redislabs.com/latest/rs/administering/database-operations/eviction-policy/
    +
    false
    isRofboolean + Whether it is an RoF database or not. Applicable only for databases of type "REDIS". Assumed to be false if left blank.
    +
    false
    memcachedSaslSecretNamestring + Credentials used for binary authentication in memcached databases. The credentials should be saved as an opaque secret and the name of that secret should be configured using this field. For username, use 'username' as the key and the actual username as the value. For password, use 'password' as the key and the actual password as the value. Note that connections are not encrypted.
    +
    false
    memorySizestring + memory size of database. use formats like 100MB, 0.1GB. minimum value in 100MB. When redis on flash (RoF) is enabled, this value refers to RAM+Flash memory, and it must not be below 1GB.
    +
    false
    modulesList[]object + List of modules associated with database. Note - For Active-Active databases this feature is currently in preview. For this feature to take effect for Active-Active databases, set a boolean environment variable with the name "ENABLE_ALPHA_FEATURES" to True. This variable can be set via the redis-enterprise-operator pod spec, or through the operator-environment-config Config Map.
    +
    false
    ossClusterboolean + OSS Cluster mode option. Note that not all client libraries support OSS cluster mode.
    +
    false
    persistenceenum + Database on-disk persistence policy
    +
    + Enum: disabled, aofEverySecond, aofAlways, snapshotEvery1Hour, snapshotEvery6Hour, snapshotEvery12Hour
    +
    false
    proxyPolicystring + The policy used for proxy binding to the endpoint. Supported proxy policies are: single/all-master-shards/all-nodes When left blank, the default value will be chosen according to the value of ossCluster - single if disabled, all-master-shards when enabled
    +
    false
    rackAwareboolean + Whether database should be rack aware. This improves availability - more information: https://docs.redislabs.com/latest/rs/concepts/high-availability/rack-zone-awareness/
    +
    false
    redisEnterpriseClusterobject + Connection to Redis Enterprise Cluster
    +
    false
    redisVersionstring + Redis OSS version. Version can be specified via prefix, or via channels - for existing databases - Upgrade Redis OSS version. For new databases - the version which the database will be created with. If set to 'major' - will always upgrade to the most recent major Redis version. If set to 'latest' - will always upgrade to the most recent Redis version. Depends on 'redisUpgradePolicy' - if you want to set the value to 'latest' for some databases, you must set redisUpgradePolicy on the cluster before. Possible values are 'major' or 'latest' When using upgrade - make sure to backup the database before. This value is used only for database type 'redis'
    +
    false
    replicaSources[]object + What databases to replicate from
    +
    false
    replicationboolean + In-memory database replication. When enabled, database will have replica shard for every master - leading to higher availability. Defaults to false.
    +
    false
    resp3boolean + Whether this database supports RESP3 protocol. Note - Deleting this property after explicitly setting its value shall have no effect. Please view the corresponding field in RS doc for more info.
    +
    false
    rofRamSizestring + The size of the RAM portion of an RoF database. Similarly to "memorySize" use formats like 100MB, 0.1GB. It must be at least 10% of combined memory size (RAM and Flash), as specified by "memorySize".
    +
    false
    rolesPermissions[]object + List of Redis Enteprise ACL and Role bindings to apply
    +
    false
    shardCountinteger + Number of database server-side shards
    +
    false
    shardingEnabledboolean + Toggles database sharding for REAADBs (Active Active databases) and enabled by default. This field is blocked for REDB (non-Active Active databases) and sharding is toggled via the shardCount field - when shardCount is 1 this is disabled otherwise enabled.
    +
    false
    shardsPlacementenum + Control the density of shards - should they reside on as few or as many nodes as possible. Available options are "dense" or "sparse". If left unset, defaults to "dense".
    +
    + Enum: dense, sparse
    +
    false
    tlsModeenum + Require SSL authenticated and encrypted connections to the database. enabled - all incoming connections to the Database must use SSL. disabled - no incoming connection to the Database should use SSL. replica_ssl - databases that replicate from this one need to use SSL.
    +
    + Enum: disabled, enabled, replica_ssl
    +
    false
    typeenum + The type of the database (redis or memcached). Defaults to "redis".
    +
    + Enum: redis, memcached
    +
    false
    upgradeSpecobject + Specifications for DB upgrade.
    +
    false
    + + +### spec.activeActive +[↩ Parent](#spec) + +Connection/ association to the Active-Active database. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The the corresponding Active-Active database name, Redis Enterprise Active Active Database custom resource name, this Resource is associated with. In case this resource is created manually at the active active database creation this field must be filled via the user, otherwise, the operator will assign this field automatically. Note: this feature is currently unsupported.
    +
    true
    participatingClusterNamestring + The corresponding participating cluster name, Redis Enterprise Remote Cluster custom resource name, in the Active-Active database, In case this resource is created manually at the active active database creation this field must be filled via the user, otherwise, the operator will assign this field automatically. Note: this feature is currently unsupported.
    +
    true
    + + +### spec.alertSettings +[↩ Parent](#spec) + +Settings for database alerts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    bdb_backup_delayedobject + Periodic backup has been delayed for longer than specified threshold value [minutes]. -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_crdt_src_high_syncer_lagobject + Active-active source - sync lag is higher than specified threshold value [seconds] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_crdt_src_syncer_connection_errorobject + Active-active source - sync has connection error while trying to connect replica source -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_crdt_src_syncer_general_errorobject + Active-active source - sync encountered in general error -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_high_latencyobject + Latency is higher than specified threshold value [micro-sec] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_high_throughputobject + Throughput is higher than specified threshold value [requests / sec.] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_long_running_actionobject + An alert for state-machines that are running for too long -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_low_throughputobject + Throughput is lower than specified threshold value [requests / sec.] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_ram_dataset_overheadobject + Dataset RAM overhead of a shard has reached the threshold value [% of its RAM limit] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_ram_valuesobject + Percent of values kept in a shard's RAM is lower than [% of its key count] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_replica_src_high_syncer_lagobject + Replica-of source - sync lag is higher than specified threshold value [seconds] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_replica_src_syncer_connection_errorobject + Replica-of source - sync has connection error while trying to connect replica source -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_shard_num_ram_valuesobject + Number of values kept in a shard's RAM is lower than [values] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    bdb_sizeobject + Dataset size has reached the threshold value [% of the memory limit] expected fields: -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required
    +
    false
    + + +### spec.alertSettings.bdb_backup_delayed +[↩ Parent](#specalertsettings) + +Periodic backup has been delayed for longer than specified threshold value [minutes]. -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_crdt_src_high_syncer_lag +[↩ Parent](#specalertsettings) + +Active-active source - sync lag is higher than specified threshold value [seconds] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_crdt_src_syncer_connection_error +[↩ Parent](#specalertsettings) + +Active-active source - sync has connection error while trying to connect replica source -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_crdt_src_syncer_general_error +[↩ Parent](#specalertsettings) + +Active-active source - sync encountered in general error -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_high_latency +[↩ Parent](#specalertsettings) + +Latency is higher than specified threshold value [micro-sec] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_high_throughput +[↩ Parent](#specalertsettings) + +Throughput is higher than specified threshold value [requests / sec.] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_long_running_action +[↩ Parent](#specalertsettings) + +An alert for state-machines that are running for too long -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_low_throughput +[↩ Parent](#specalertsettings) + +Throughput is lower than specified threshold value [requests / sec.] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_ram_dataset_overhead +[↩ Parent](#specalertsettings) + +Dataset RAM overhead of a shard has reached the threshold value [% of its RAM limit] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_ram_values +[↩ Parent](#specalertsettings) + +Percent of values kept in a shard's RAM is lower than [% of its key count] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_replica_src_high_syncer_lag +[↩ Parent](#specalertsettings) + +Replica-of source - sync lag is higher than specified threshold value [seconds] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_replica_src_syncer_connection_error +[↩ Parent](#specalertsettings) + +Replica-of source - sync has connection error while trying to connect replica source -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_shard_num_ram_values +[↩ Parent](#specalertsettings) + +Number of values kept in a shard's RAM is lower than [values] -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.alertSettings.bdb_size +[↩ Parent](#specalertsettings) + +Dataset size has reached the threshold value [% of the memory limit] expected fields: -Note threshold is commented (allow string/int/float and support backwards compatibility) but is required + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    enabledboolean + Alert enabled or disabled
    +
    false
    + + +### spec.backup +[↩ Parent](#spec) + +Target for automatic database backups. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    absobject +
    +
    false
    ftpobject +
    +
    false
    gcsobject + GoogleStorage
    +
    false
    intervalinteger + Backup Interval in seconds
    +
    false
    mountobject + MountPointStorage
    +
    false
    s3object +
    +
    false
    sftpobject +
    +
    false
    swiftobject +
    +
    false
    + + +### spec.backup.abs +[↩ Parent](#specbackup) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    absSecretNamestring + The name of the K8s secret that holds ABS credentials. The secret must contain the keys "AccountName" and "AccountKey", and these must hold the corresponding credentials
    +
    true
    containerstring + Azure Blob Storage container name.
    +
    true
    subdirstring + Optional. Azure Blob Storage subdir under container.
    +
    false
    + + +### spec.backup.ftp +[↩ Parent](#specbackup) + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    urlstring + a URI of the ftps://[USER[:PASSWORD]@]HOST[:PORT]/PATH[/]
    +
    true
    + + +### spec.backup.gcs +[↩ Parent](#specbackup) + +GoogleStorage + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    bucketNamestring + Google Storage bucket name.
    +
    true
    gcsSecretNamestring + The name of the K8s secret that holds the Google Cloud Storage credentials. The secret must contain the keys "CLIENT_ID", "PRIVATE_KEY", "PRIVATE_KEY_ID", "CLIENT_EMAIL" and these must hold the corresponding credentials. The keys should correspond to the values in the key JSON.
    +
    true
    subdirstring + Optional. Google Storage subdir under bucket.
    +
    false
    + + +### spec.backup.mount +[↩ Parent](#specbackup) + +MountPointStorage + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    pathstring + Path to the local mount point. You must create the mount point on all nodes, and the redislabs:redislabs user must have read and write permissions on the local mount point.
    +
    true
    + + +### spec.backup.s3 +[↩ Parent](#specbackup) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    awsSecretNamestring + The name of the K8s secret that holds the AWS credentials. The secret must contain the keys "AWS_ACCESS_KEY_ID" and "AWS_SECRET_ACCESS_KEY", and these must hold the corresponding credentials.
    +
    true
    bucketNamestring + Amazon S3 bucket name.
    +
    true
    subdirstring + Optional. Amazon S3 subdir under bucket.
    +
    false
    + + +### spec.backup.sftp +[↩ Parent](#specbackup) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    sftpSecretNamestring + The name of the K8s secret that holds SFTP credentials. The secret must contain the "Key" key, which is the SSH private key for connecting to the sftp server.
    +
    true
    sftp_urlstring + SFTP url
    +
    true
    + + +### spec.backup.swift +[↩ Parent](#specbackup) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    auth_urlstring + Swift service authentication URL.
    +
    true
    containerstring + Swift object store container for storing the backup files.
    +
    true
    swiftSecretNamestring + The name of the K8s secret that holds Swift credentials. The secret must contain the keys "Key" and "User", and these must hold the corresponding credentials: service access key and service user name (pattern for the latter does not allow special characters &,<,>,")
    +
    true
    prefixstring + Optional. Prefix (path) of backup files in the swift container.
    +
    false
    + + +### spec.modulesList[] +[↩ Parent](#spec) + +Redis Enterprise Module: https://redislabs.com/redis-enterprise/modules/ + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The module's name e.g "ft" for redissearch
    +
    true
    configstring + Module command line arguments e.g. VKEY_MAX_ENTITY_COUNT 30
    +
    false
    versionstring + Module's semantic version e.g "1.6.12" - optional only in REDB, must be set in REAADB
    +
    false
    + + +### spec.redisEnterpriseCluster +[↩ Parent](#spec) + +Connection to Redis Enterprise Cluster + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The name of the Redis Enterprise Cluster where the database should be stored.
    +
    true
    + + +### spec.replicaSources[] +[↩ Parent](#spec) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    replicaSourceNamestring + The name of the resource from which the source database URI is derived. The type of resource must match the type specified in the ReplicaSourceType field.
    +
    true
    replicaSourceTypestring + The type of resource from which the source database URI is derived. If set to 'SECRET', the source database URI is derived from the secret named in the ReplicaSourceName field. The secret must have a key named 'uri' that defines the URI of the source database in the form of 'redis://...'. The type of secret (kubernetes, vault, ...) is determined by the secret mechanism used by the underlying REC object. If set to 'REDB', the source database URI is derived from the RedisEnterpriseDatabase resource named in the ReplicaSourceName field.
    +
    true
    clientKeySecretstring + Secret that defines the client certificate and key used by the syncer in the target database cluster. The secret must have 2 keys in its map: "cert" which is the PEM encoded certificate, and "key" which is the PEM encoded private key.
    +
    false
    compressioninteger + GZIP compression level (0-6) to use for replication.
    +
    false
    serverCertSecretstring + Secret that defines the server certificate used by the proxy in the source database cluster. The secret must have 1 key in its map: "cert" which is the PEM encoded certificate.
    +
    false
    tlsSniNamestring + TLS SNI name to use for the replication link.
    +
    false
    + + +### spec.rolesPermissions[] +[↩ Parent](#spec) + +Redis Enterprise Role and ACL Binding + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    aclstring + Acl Name of RolePermissionType
    +
    true
    rolestring + Role Name of RolePermissionType
    +
    true
    typestring + Type of Redis Enterprise Database Role Permission
    +
    true
    + + +### spec.upgradeSpec +[↩ Parent](#spec) + +Specifications for DB upgrade. + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    upgradeModulesToLatestboolean + Upgrades the modules to the latest version that supportes the DB version during a DB upgrade action, to upgrade the DB version view the 'redisVersion' field. Notes - All modules must be without specifing the version. in addition, This field is currently not supported for Active-Active databases.
    +
    true
    + + +### status +[↩ Parent](#) + +RedisEnterpriseDatabaseStatus defines the observed state of RedisEnterpriseDatabase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    activeActiveobject + Connection/ association to the Active-Active database.
    +
    false
    backupInfoobject + Information on the database's periodic backup
    +
    false
    createdTimestring + Time when the database was created
    +
    false
    databaseUIDstring + Database UID provided by redis enterprise
    +
    false
    internalEndpoints[]object + Endpoints listed internally by the Redis Enterprise Cluster. Can be used to correlate a ReplicaSourceStatus entry.
    +
    false
    lastActionStatusstring + Status of the last action done by operator on this database
    +
    false
    lastActionUidstring + UID of the last action done by operator on this database
    +
    false
    lastUpdatedstring + Time when the database was last updated
    +
    false
    observedGenerationinteger + The generation (built in update counter of K8s) of the REDB resource that was fully acted upon, meaning that all changes were handled and sent as an API call to the Redis Enterprise Cluster (REC). This field value should equal the current generation when the resource changes were handled. Note: the lastActionStatus field tracks actions handled asynchronously by the Redis Enterprise Cluster.
    +
    + Format: int64
    +
    false
    redisEnterpriseClusterstring + The Redis Enterprise Cluster Object this Resource is associated with
    +
    false
    replicaSourceStatuses[]object + ReplicaSource statuses
    +
    false
    shardStatusesmap[string]integer + Aggregated statuses of shards
    +
    false
    specStatusstring + Whether the desired specification is valid
    +
    false
    statusstring + The status of the database
    +
    false
    versionstring + Database compatibility version
    +
    false
    + + +### status.activeActive +[↩ Parent](#status) + +Connection/ association to the Active-Active database. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    namestring + The the corresponding Active-Active database name, Redis Enterprise Active Active Database custom resource name, this Resource is associated with. In case this resource is created manually at the active active database creation this field must be filled via the user, otherwise, the operator will assign this field automatically. Note: this feature is currently unsupported.
    +
    true
    participatingClusterNamestring + The corresponding participating cluster name, Redis Enterprise Remote Cluster custom resource name, in the Active-Active database, In case this resource is created manually at the active active database creation this field must be filled via the user, otherwise, the operator will assign this field automatically. Note: this feature is currently unsupported.
    +
    true
    + + +### status.backupInfo +[↩ Parent](#status) + +Information on the database's periodic backup + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    backupFailureReasonstring + Reason of last failed backup process
    +
    false
    backupHistoryinteger + Backup history retention policy (number of days, 0 is forever)
    +
    false
    backupIntervalinteger + Interval in seconds in which automatic backup will be initiated
    +
    false
    backupIntervalOffsetinteger + Offset (in seconds) from round backup interval when automatic backup will be initiated (should be less than backup_interval)
    +
    false
    backupProgressPercentageinteger + Database scheduled periodic backup progress (percentage)
    +
    false
    backupStatusstring + Status of scheduled periodic backup process
    +
    false
    lastBackupTimestring + Time of last successful backup
    +
    false
    + + +### status.internalEndpoints[] +[↩ Parent](#status) + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    hoststring + Hostname assigned to the database
    +
    false
    portinteger + Database port name
    +
    false
    + + +### status.replicaSourceStatuses[] +[↩ Parent](#status) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    endpointHoststring + The internal host name of the replica source database. Can be used as an identifier. See the internalEndpoints list on the REDB status.
    +
    true
    laginteger + Lag in millisec between source and destination (while synced).
    +
    false
    lastErrorstring + Last error encountered when syncing from the source.
    +
    false
    lastUpdatestring + Time when we last receive an update from the source.
    +
    false
    rdbSizeinteger + The source’s RDB size to be transferred during the syncing phase.
    +
    false
    rdbTransferredinteger + Number of bytes transferred from the source’s RDB during the syncing phase.
    +
    false
    statusstring + Sync status of this source
    +
    false
    diff --git a/content/operate/kubernetes/7.4.6/reference/redis_enterprise_remote_cluster_api.md b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_remote_cluster_api.md new file mode 100644 index 0000000000..690cb53bda --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/redis_enterprise_remote_cluster_api.md @@ -0,0 +1,168 @@ +--- +title: RedisEnterpriseRemoteCluster API Reference +alwaysopen: false +categories: +- docs +- operate +- kubernetes +linkTitle: RERC API +weight: 30 +url: '/operate/kubernetes/7.4.6/reference/redis_enterprise_remote_cluster_api/' +--- + +apiVersion: + + +- [app.redislabs.com/v1alpha1](#appredislabscomv1alpha1) + + + + +# app.redislabs.com/v1alpha1 + + + + +RedisEntepriseRemoteCluster represents a remote participating cluster. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiVersionstringapp.redislabs.com/v1alpha1true
    kindstringRedisEnterpriseRemoteClustertrue
    metadataobjectRefer to the Kubernetes API documentation for the fields of the `metadata` field.true
    specobject +
    +
    false
    statusobject +
    +
    false
    + + +### spec +[↩ Parent](#) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    apiFqdnUrlstring + The URL of the cluster, will be used for the active-active database URL.
    +
    true
    recNamestring + The name of the REC that the RERC is pointing at
    +
    true
    recNamespacestring + The namespace of the REC that the RERC is pointing at
    +
    true
    dbFqdnSuffixstring + The database URL suffix, will be used for the active-active database replication endpoint and replication endpoint SNI.
    +
    false
    secretNamestring + The name of the secret containing cluster credentials. Must be of the following format: "redis-enterprise-"
    +
    false
    + + +### status +[↩ Parent](#) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    localboolean + Indicates whether this object represents a local or a remote cluster.
    +
    false
    observedGenerationinteger + The most recent generation observed for this RERC. It corresponds to the RERC's generation, which is updated by the API Server.
    +
    false
    specStatusstring + Whether the desired specification is valid.
    +
    false
    statusstring + The status of the remote cluster.
    +
    false
    diff --git a/content/operate/kubernetes/7.4.6/reference/supported_k8s_distributions.md b/content/operate/kubernetes/7.4.6/reference/supported_k8s_distributions.md new file mode 100644 index 0000000000..40a017b51f --- /dev/null +++ b/content/operate/kubernetes/7.4.6/reference/supported_k8s_distributions.md @@ -0,0 +1,237 @@ +--- +Title: Supported Kubernetes distributions +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Support matrix for the current Redis Enterprise K8s operator +linkTitle: Supported distributions +weight: 30 +url: '/operate/kubernetes/7.4.6/reference/supported_k8s_distributions/' +--- + +Each release of Redis Enterprise for Kubernetes is thoroughly tested against a set of Kubernetes distributions. The table below lists Redis Enterprise for Kubernetes versions and the Kubernetes distributions they support. + + Supported – This distribution is supported for this version of Redis Enterprise Software for Kubernetes. + +:warning: Deprecated – This distribution is still supported for this version of Redis Enterprise Software for Kubernetes, but support will be removed in a future release. + + End of life – Support for this distribution ended. + +Any distribution not listed below is not supported for production workloads. + +## Community Kubernetes + +For details on this platform, see the Kubernetes [documentation](https://kubernetes.io/docs/home/supported-doc-versions/). + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Community K8s** | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | +| 1.27 | | | | | | | | | | | | | | | | | | | | | +| 1.26 | :warning: | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | | | :warning: | :warning: | | | | | | | | | | | +| 1.21 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.20 | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.19 | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | +| 1.17 | | | | | | | | | | | | | | | | | | | | :warning: | +| 1.16 | | | | | | | | | | | | | | | | | | | | :warning: | + +{{}} + +## OpenShift Container Platform + +For details on this platform, see the [OpenShift documentation](https://docs.openshift.com/container-platform/4.13/welcome/index.html). + + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **OpenShift** | | | | | | | | | | | | | | | | | | | | | +| 4.16 | | | | | | | | | | | | | | | | | | | | | +| 4.15 | | | | | | | | | | | | | | | | | | | | | +| 4.14 | | | | | | | | | | | | | | | | | | | | | +| 4.13 | | | | | | | | | | | | | | | | | | | | | +| 4.12 | | | :warning: | | | | | | | | | | | | | | | | | | +| 4.11 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 4.10 | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 4.9 | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | +| 4.8 | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | +| 4.7 | | | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | +| 4.6 | | | | | | | | | | | | | | | :warning: | | | | | | +| 4.5 | | | | | | | | | | | | | | | | | | | | | +| 3.11 | | | | | | | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | + +{{}} + +## Amazon Elastic Kubernetes Service (EKS) + +For details on this platform, see the [EKS documentation](https://docs.aws.amazon.com/eks/?icmpid=docs_homepage_containers). + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Amazon EKS** | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | +| 1.27 | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.26 | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.25 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.21 | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | | | +| 1.20 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.19 | | | | | | | | | | | | | | :warning: | :warning: | | | | | | +| 1.18 | | | | | | | | | | | | | | | :warning: | | | | | | + +{{}} + +## Azure Kubernetes Service (AKS) + +For details on this platform, see the [AKS documentation](https://learn.microsoft.com/en-us/azure/aks/). + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Azure AKS** | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | +| 1.27 | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.26 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | +| 1.22 | | | | | | | | | | | | | | | | | | | | | +| 1.21 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.20 | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.19 | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | + +{{}} + +## Google Kubernetes Engine (GKE) + +For details on this platform, see the [GKE documentation](https://cloud.google.com/kubernetes-engine/docs). + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Google GKE** | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | +| 1.27 | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.26 | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.25 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.21 | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | | | +| 1.20 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.19 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | + +{{}} + +## Rancher + +For details on this platform, see the [Rancher documentation](https://ranchermanager.docs.rancher.com/). + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Rancher 2.8** | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | +| 1.27 | | | | | | | | | | | | | | | | | | | | | +| 1.26 | | | | | | | | | | | | | | | | | | | | | +| **Rancher 2.7** | | | | | | | | | | | | | | | | | | | | | +| 1.25 | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | :warning: | | | | | | | | | | | | | | | | | | +| 1.23 | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| **Rancher 2.6** | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | :warning: | :warning: | | | | | | | | | | | | | | | +| 1.23 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.21 | | | | | | | | | :warning: | :warning: | | | | | | | | | | | +| 1.20 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.19 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.18 | | | | | | | | | | | | | | | :warning: | | | | | | +| **Rancher 2.5** | | | | | | | | | | | | | | | | | | | | | +| 1.20 | | | | | | | | | | | | | | | | :warning: | | | | | +| 1.19 | | | | | | | | | | | | | | | | :warning: | | | | | +| 1.18 | | | | | | | | | | | | | | | | :warning: | | | | | +| 1.17 | | | | | | | | | | | | | | | | :warning: | | | | | +| **Rancher 2.4** | | | | | | | | | | | | | | | | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | :warning: | | +| 1.17 | | | | | | | | | | | | | | | | | | | :warning: | | + +{{}} + +## VMware Tanzu Kubernetes Grid (TKG) + +For details on this platform, see the [TKG documentation](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/index.html). + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | +|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | +| **VMWare TKG 2.4** | | | | | | | | | | | | +| 1.27 | | | | | | | | | | | | +| 1.26 | | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | +| **VMware TKG 2.3** | | | | | | | | | | | | +| 1.26 | :warning: | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | +| **VMware TKG 2.2** | | | | | | | | | | | | +| 1.25 | | :warning: | :warning: | | | | | | | | | +| 1.24 | | :warning: | :warning: | | | | | | | | | +| 1.23 | | | | | | | | | | | | +| **VMware TKG 2.1** | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | +| 1.23 | | | | :warning: | :warning: | :warning: | | | | | | +| 1.22 | | | | | :warning: | :warning: | | | | | | +| **VMware TKG 1.6** | | | | | | | | | | | | +| 1.24 | | | | | :warning: | :warning: | | | | | | +| 1.23 | | | | | | | :warning: | :warning: | | | | +| 1.22 | | | | | | | :warning: | :warning: | | | | + +{{}} + +## VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) + +For details on this platform, see the [TKGI documentation](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid-Integrated-Edition/index.html). + +{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **VMware TKGI** | | | | | | | | | | | | | | | | | | | | | +| 1.19 | | | | | | | | | | | | | | | | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | +| 1.17 | | | | | | | | | | | | | | | | | | | | | +| 1.16 | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.15 | | | | | | | | | | | | | | | | | | | | | +| 1.14 | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 1.13 | | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | +| 1.12 | | | | | | | | | | | | | :warning: | | | | | | | | +| 1.11 | | | | | | | | | | | | | :warning: | :warning: | | | | | | | +| 1.10 | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.09 | | | | | | | | | | | | | | | | | | | | | +| 1.08 | | | | | | | | | | | | | | | | | | | | :warning: | +| 1.07 | | | | | | | | | | | | | | | | | | | | :warning: | + +{{}} + +## Supported upgrade paths + + If you are using a version earlier than 6.2.10-45, [you must upgrade]({{< relref "/operate/kubernetes/upgrade" >}}) to 6.2.10-45 before you can upgrade to versions 6.2.18 or later. diff --git a/content/operate/kubernetes/7.4.6/security/_index.md b/content/operate/kubernetes/7.4.6/security/_index.md new file mode 100644 index 0000000000..bb70541417 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/security/_index.md @@ -0,0 +1,17 @@ +--- +Title: Security +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Security settings and configuration for Redis Enterprise for Kubernetes +hideListLinks: false +linkTitle: Security +weight: 50 +url: '/operate/kubernetes/7.4.6/security/' +--- + +This section contains security settings and configuration for Redis Enterprise for Kubernetes. + + diff --git a/content/operate/kubernetes/7.4.6/security/add-client-certificates.md b/content/operate/kubernetes/7.4.6/security/add-client-certificates.md new file mode 100644 index 0000000000..0c11cc5581 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/security/add-client-certificates.md @@ -0,0 +1,44 @@ +--- +categories: +- docs +- operate +- kubernetes +description: Add client certificates to your REDB custom resource. +linkTitle: Add client certificates +title: Add client certificates +weight: 95 +url: '/operate/kubernetes/7.4.6/security/add-client-certificates/' +--- + +For each client certificate you want to use with your database, you need to create a Kubernetes secret to hold it. You can then reference that secret in your Redis Enterprise database (REDB) custom resource spec. + +## Create a secret to hold the new certificate + +1. [Create the secret config file](https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-config-file/) with the required fields shown below. + + ```yaml + apiVersion: v1 + kind: Secret + type: Opaque + metadata: + name: + namespace: + data: + cert: + ``` + +1. Apply the file to create the secret resource. + + ```bash + kubectl apply -f .yaml + ``` + +## Edit the REDB resource + +1. Add the secret name to the REDB custom resource (`redb.yaml`) with the `clientAuthenticationCertificates` property in the `spec` section. + + ```yaml + spec: + clientAuthenticationCertificates: + - + ``` diff --git a/content/operate/kubernetes/7.4.6/security/internode-encryption.md b/content/operate/kubernetes/7.4.6/security/internode-encryption.md new file mode 100644 index 0000000000..4f36152311 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/security/internode-encryption.md @@ -0,0 +1,31 @@ +--- +Title: Enable internode encryption +categories: +- docs +- operate +- kubernetes +description: Enable encryption for communication between REC nodes in your K8s cluster. +linkTitle: Internode encryption +weight: 99 +url: '/operate/kubernetes/7.4.6/security/internode-encryption/' +--- + +Internode encryption provides added security by encrypting communication between nodes in your Redis Enterprise cluster (REC). + +Enable internode encryption in the `spec` section of your REC custom resource file. + +```yaml +spec: + dataInternodeEncryption: true +``` + +This change will apply to all databases created in the REC. You can override the cluster-wide setting for individual databases. + +Edit your Redis Enterprise database (REDB) custom resource file to disable internode encryption for only that database. + +```yaml +spec: + dataInternodeEncryption: false +``` + +To learn more about internode encryption, see [Internode encryption for Redis Enterprise Software]({{< relref "/operate/rs/security/encryption/internode-encryption.md" >}}). diff --git a/content/operate/kubernetes/7.4.6/security/ldap.md b/content/operate/kubernetes/7.4.6/security/ldap.md new file mode 100644 index 0000000000..6aff5185ae --- /dev/null +++ b/content/operate/kubernetes/7.4.6/security/ldap.md @@ -0,0 +1,168 @@ +--- +Title: Enable LDAP authentication +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Enable LDAP authentication for Redis Enterprise for Kubernetes. +linkTitle: Enable LDAP +weight: 95 +url: '/operate/kubernetes/7.4.6/security/ldap/' +--- + +## LDAP support for Redis Enterprise Software + +Redis Enterprise Software supports LDAP authentication and authorization through [role-based access controls]({{< relref "/operate/rs/security/access-control/" >}}) (RBAC). You can map LDAP groups to [Redis Enterprise roles]({{< relref "/operate/rs/security/access-control" >}}) to control access to your database and the Cluster Manager UI. For more details on how LDAP works with Redis Enterprise, see [LDAP authentication]({{< relref "/operate/rs/security/access-control/ldap/" >}}). + +Redis Enterprise for Kubernetes supports enabling and configuring LDAP authentication using the `RedisEnterpriseCluster` (REC) custom resource. Currently, the Redis Enterprise cluster (REC) only supports configuration related to the LDAP server, such as server addresses, connection details, credentials, and query configuration. + +To [map LDAP groups to Redis Enterprise access control roles]({{< relref "/operate/rs/security/access-control/ldap/enable-role-based-ldap.md" >}}), you'll need to use the Redis Enterprise [API]({{< relref "/operate/rs/references/rest-api/requests/ldap_mappings/" >}}) or [admin console]({{< relref "/operate/rs/security/access-control/ldap/enable-role-based-ldap.md" >}}). + +## Enable LDAP + +To enable LDAP for your REC, use the `.spec.ldap` field in the `RedisEnterpriseCluster` custom resource. + +The following `RedisEnterpriseCluster` example resource enables a basic LDAP configuration: + +```yaml +apiVersion: app.redislabs.com/v1 +kind: RedisEnterpriseCluster +metadata: + name: rec +spec: + nodes: 3 + ldap: + protocol: LDAP + servers: + - host: openldap.openldap.svc + port: 389 + bindCredentialsSecretName: ldap-bind-credentials + cacheTTLSeconds: 600 + enabledForControlPlane: true + enabledForDataPlane: true + authenticationQuery: + template: cn=%u,ou=default,dc=example,dc=org + authorizationQuery: + attribute: memberOf +``` + +Refer to the `RedisEnterpriseCluster` [API reference](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/master/redis_enterprise_cluster_api.md#ldapspec) for full details on the available fields. + +### Bind credentials + +For LDAP servers that require authentication for client queries, store the bind credentials in a secret and reference them in the `RedisEnterpriseCluster` custom resource. + +1. Create a secret to store the bind credentials. + + ```sh + kubectl -n create secret generic \ + --from-literal=dn='' \ + --from-literal=password= + ``` + The secret must: + - Reside within the same namespace as the `RedisEnterpriseCluster` custom resource. + - Include a `dn` key with the distinguished name for the user performing the query (such as `cn=admin,dc=example,dc=org`). + - Include a `password` key with the bind password. + + Replace the `` in the command above with your own values. + +1. Reference the secret name in the `.spec.ldap.bindCredentialsSecretName` field of the `RedisEnterpriseCluster` custom resource. + + ```yaml + spec: + ldap: + bindCredentialsSecretName: + ``` + +### LDAPS or STARTTLS protocols + +In addition to plain LDAP protocol, Redis Enterprise Software also supports LDAPS and STARTTLS protocols for secure communication with the LDAP server. + +To enable one of these protocols, edit the `spec.ldap.protocol` field in the `RedisEnterpriseCluster` custom resource: + +#### Enable `LDAPS` + + ```yaml + spec: + ldap: + protocol: LDAPS + ``` + + Default port: 636 + +#### Enable `STARTTLS` + + ```yaml + spec: + ldap: + protocol: STARTTLS + ``` + + Default port: 389 + +### CA certificate + +To use a custom CA certificate for validating the LDAP server certificate, store the CA certificate in a secret and reference the secret in the `RedisEnterpriseCluster` custom resource. + +1. Create a secret to hold the CA certificate. + + ```sh + kubectl -n create secret generic \ + --from-file=cert=.pem + ``` + + The secret must: + - Reside within the same namespace as the `RedisEnterpriseCluster` custom resource. + - Include a `cert` key with a PEM-encoded CA certificate (such as `cacert.pem`). + + Replace the `` in the command above with your own values. + +1. Reference the secret name in the `spec.ldap.caCertificateSecretName` field of the `RedisEnterpriseCluster` custom resource. + + ```yaml + spec: + ldap: + caCertificateSecretName: + ``` + +### Client certificates + +To use an LDAP client certificate, store the certificate in a secret and reference the secret in the `RedisEnterpriseCluster` custom resource. + +1. Create a secret to hold the client certificate. + + ```sh + kubectl -n create secret generic \ + --from-literal=name=ldap_client \ + --from-file=certificate= \ + --from-file=key= + ``` + + The secret must: + - Reside within the same namespace as the `RedisEnterpriseCluster` custom resource. + - Include a `name` key explicitly set to `ldap_client`. + - Include a `certificate` key for the public key (such as `cert.pem`). + - Include a `key` key for the private key (such as `key.pem`). + + + Replace the `` in the command above with your own values. + +1. Reference the secret name in the `.spec.certificates.ldapClientCertificateSecretName` field of the `RedisEnterpriseCluster` custom resource, substituting your own values for ``. + + ```yaml + spec: + certificates: + ldapClientCertificateSecretName: + ``` + +## Known limitations + +Redis Enterprise Software can't resolve DNS names with a `.local` suffix. + If your LDAP server is in the same Kubernetes cluster and exposed via a Service object, *avoid* addresses such as `openldap.openldap.svc.cluster.local`. Instead, *use short-form addresses* such as `openldap.openldap.svc`. + +## Next steps + +To [map LDAP groups to Redis Enterprise access control roles]({{< relref "/operate/rs/security/access-control/ldap/enable-role-based-ldap.md" >}}), you'll need to use the Redis Enterprise [API]({{< relref "/operate/rs/references/rest-api/requests/ldap_mappings/" >}}) or [admin console]({{< relref "/operate/rs/security/access-control/ldap/enable-role-based-ldap.md" >}}). + +For more details on how LDAP works with Redis Enterprise, see [LDAP authentication]({{< relref "/operate/rs/security/access-control/ldap/" >}}). diff --git a/content/operate/kubernetes/7.4.6/security/manage-rec-certificates.md b/content/operate/kubernetes/7.4.6/security/manage-rec-certificates.md new file mode 100644 index 0000000000..be76bef57a --- /dev/null +++ b/content/operate/kubernetes/7.4.6/security/manage-rec-certificates.md @@ -0,0 +1,69 @@ +--- +Title: Manage Redis Enterprise cluster (REC) certificates +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Install your own certificates to be used by the Redis Enterprise cluster's + operator. +linkTitle: Manage REC certificates +weight: 94 +url: '/operate/kubernetes/7.4.6/security/manage-rec-certificates/' +--- + +By default, Redis Enterprise Software for Kubernetes generates TLS certificates for the cluster during creation. These self-signed certificates are generated on the first node of each Redis Enterprise cluster (REC) and are copied to all other nodes added to the cluster. For the list of of certificates used by Redis Enterprise Software and the traffic they encrypt, see the [certificates table]({{< relref "/operate/rs/security/certificates" >}}). + +To install and use your own certificates with Kubernetes on your Redis Enterprise cluster, they need to be stored in [secrets](https://kubernetes.io/docs/concepts/configuration/secret/). The REC custom resource also needs to be configured with those secret names to read and use the certificates. + +## Create a secret to hold the new certificate + +Create the [secret](https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kubectl/) with the required fields shown below. + + ```sh + kubectl create secret generic \ + --from-file=certificate= \ + --from-file=key= \ + --from-literal=name= + ``` + +## Update certificates in the REC custom resource + +Edit the Redis Enterprise cluster (REC) custom resource to add a `certificates` subsection under the `spec` section. You are only required to add the fields for the certificates you are installing. + +```yaml +spec: + certificates: + apiCertificateSecretName: + cmCertificateSecretName: + syncerCertificateSecretName: + metricsExporterCertificateSecretName: + proxyCertificateSecretName: +``` + +### Update certificates through the API + +Alternatively, you can also update the REC certificates via the API: + +```API +PUT /v1/cluster/update_cert +{ + "certificate": , + "key": , + "name": +} +``` + +### Verify the certificate was updated + +Check the operator logs and use the API to verify the certificate has been updated. + + ```api + GET /v1/cluster/certificates + ``` + +## More info + +- [Update certificates]({{< relref "/operate/rs/security/certificates/updating-certificates" >}}) +- [Install your own certificates]({{< relref "/operate/rs/security/certificates/create-certificates" >}}) +- [Glossary/Transport Layer Security (TLS)]({{< relref "/glossary#letter-t" >}}) diff --git a/content/operate/kubernetes/7.4.6/security/manage-rec-credentials.md b/content/operate/kubernetes/7.4.6/security/manage-rec-credentials.md new file mode 100644 index 0000000000..ca3a0dcf0e --- /dev/null +++ b/content/operate/kubernetes/7.4.6/security/manage-rec-credentials.md @@ -0,0 +1,158 @@ +--- +Title: Manage Redis Enterprise cluster (REC) credentials +alwaysopen: false +categories: +- docs +- operate +- kubernetes +linkTitle: Manage REC credentials +weight: 93 +url: '/operate/kubernetes/7.4.6/security/manage-rec-credentials/' +--- +Redis Enterprise for Kubernetes uses a custom resource called [`RedisEnterpriseCluster`]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api" >}}) to create a Redis Enterprise cluster (REC). During creation it generates random credentials for the operator to use. The credentials are saved in a Kubernetes (K8s) [secret](https://kubernetes.io/docs/concepts/configuration/secret/). The secret name defaults to the name of the cluster. + +{{}} +This procedure is only supported for operator versions 6.0.20-12 and above. +{{}} + +## Retrieve the current username and password + +The credentials can be used to access the Redis Enterprise admin console or the API. Connectivity must be configured to the REC [pods](https://kubernetes.io/docs/concepts/workloads/pods/) using an appropriate service (or port forwarding). + +1. Inspect the random username and password created by the operator during creation with the `kubectl get secret` command. + + ```sh + kubectl get secret rec -o jsonpath='{.data}' + ``` + + The command outputs the encoded password and username, similar to the example below. + + ```sh + map[password:MTIzNDU2NzgK username:ZGVtb0BleGFtcGxlLmNvbQo=] + ``` + +1. Decode the password and username with the `echo` command and the password from the previous step. + + ```bash + echo MTIzNDU2NzgK | base64 --decode + ``` + + This outputs the password and username in plain text. In this example, the plain text password is `12345678` and the username is `demo@example.com`. + +## Change the Redis Enterprise cluster (REC) credentials + +### Change the REC password for the current username + +1. Access a [pod](https://kubernetes.io/docs/concepts/workloads/pods/) running a Redis Enterprise cluster. + + ```bash + kubectl exec -it -0 bash + ``` + +1. Add a new password for the existing user. + + ```bash + REC_USER="`cat /opt/redislabs/credentials/username`" \ + REC_PASSWORD="`cat /opt/redislabs/credentials/password`" \ + curl -k --request POST \ + --url https://localhost:9443/v1/users/password \ + -u "$REC_USER:$REC_PASSWORD" \ + --header 'Content-Type: application/json' \ + --data "{\"username\":\"$REC_USER\", \ + \"old_password\":\"$REC_PASSWORD\", \ + \"new_password\":\"\"}" + ``` + +1. From outside the pod, update the REC credential secret. + + 1. Save the existing username to a text file . + ```bash + echo -n "" > username + ``` + + 1. Save the new password to a text file. + ```bash + echo -n "" > password + ``` + + 1. Update the REC credential secret. + ```bash + kubectl create secret generic \ + --from-file=./username \ + --from-file=./password --dry-run \ + -o yaml + kubectl apply -f + ``` + +1. Wait five minutes for all the components to read the new password from the updated secret. If you proceed to the next step too soon, the account could get locked. + +1. Access a pod running a Redis Enterprise cluster again. + + ```bash + kubectl exec -it -0 bash + ``` + + 1. Remove the previous password to ensure only the new one applies. + + ```sh + REC_USER="`cat /opt/redislabs/credentials/username`"; \ + REC_PASSWORD="`cat /opt/redislabs/credentials/password`"; \ + curl -k --request DELETE \ + --url https://localhost:9443/v1/users/password \ + -u "$REC_USER:$REC_PASSWORD" \ + --header 'Content-Type: application/json' \ + --data "{\"username\":\"$REC_USER\", \ + \"old_password\":\"}} The username for the K8s secret is the email displayed on the Redis Enterprise admin console. {{}} + +### Change both the REC username and password + +1. [Connect to the admin console]({{< relref "/operate/kubernetes/re-clusters/connect-to-admin-console.md" >}}) + +1. [Add another admin user]({{< relref "/operate/rs/security/access-control/create-users" >}}) and choose a new password. + +1. Specify the new username in the `username` field of your REC custom resource spec. + +1. Update the REC credential secret: + + 1. Save the existing username to a text file. + + ```bash + echo -n "" > username + ``` + + 1. Save the new password to a text file. + + ```bash + echo -n "" > password + ``` + + 1. Update the REC credential secret. + + ```bash + kubectl create secret generic \ + --from-file=./username \ + --from-file=./password --dry-run \ + -o yaml + kubectl apply -f + ``` + +1. Wait five minutes for all the components to read the new password from the updated secret. If you proceed to the next step too soon, the account could get locked. + +1. Delete the previous admin user from the cluster. + + {{}} +The operator may log errors in the time between updating the username in the REC spec and the secret update. + {{}} + +### Update the credentials secret in Vault + +If you store your secrets with Hashicorp Vault, update the secret for the REC credentials with the following key-value pairs: + +```sh +username:, password: +``` + +For more information about Vault integration with the Redis Enterprise Cluster see [Integrating Redis Enterprise for Kubernetes with Hashicorp Vault](https://github.com/RedisLabs/redis-enterprise-k8s-docs/blob/65eba63a6aac69455a691652218e28b0873e4de3/vault/README.md). diff --git a/content/operate/kubernetes/7.4.6/upgrade/_index.md b/content/operate/kubernetes/7.4.6/upgrade/_index.md new file mode 100644 index 0000000000..f34d642f2b --- /dev/null +++ b/content/operate/kubernetes/7.4.6/upgrade/_index.md @@ -0,0 +1,41 @@ +--- +Title: Upgrade Redis Enterprise for Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Information about upgrading your Redis Enterprise cluster on Kubernetes. +hideListLinks: true +linkTitle: Upgrade +weight: 15 +url: '/operate/kubernetes/7.4.6/upgrade/' +--- + +Redis implements rolling updates for software upgrades in Kubernetes deployments. The upgrade process includes updating three components: + + 1. Upgrade the Redis Enterprise operator + 2. Upgrade the Redis Enterprise cluster (REC) + 3. Upgrade Redis Enterprise databases (REDB) + +To use OpenShift container platform CLI to upgrade your Redis Enterprise, see [Upgrade Redis Enterprise with OpenShift CLI]({{< relref "/operate/kubernetes/upgrade/openshift-cli.md" >}}). + +For all other Kubernetes distributions, see [Upgrade Redis Enterprise for Kubernetes]({{< relref "/operate/kubernetes/upgrade/upgrade-redis-cluster.md" >}}). + +## Upgrade compatibility + +When upgrading, both your Kubernetes version and Redis operator version need to be supported at all times. When upgrading your Kubernetes version, you need to make sure both the current and target K8s version are supported by your Redis operator version. When upgrading your Redis operator version, you need make sure both the current and target operator versions are supported by your K8s version. This means if you are planning a large jump in versions, the upgrade might need to be done in multiple steps. + +The flow chart below can help you decide if your upgrade requires multiple steps. + +{{< image filename="/images/k8s/upgrade-flowchart.jpg" alt="Upgrade flowchart" >}} + +## How does the REC upgrade work? + +The Redis Enterprise cluster (REC) uses a rolling upgrade, meaning it upgrades pods one by one. Each pod is updated after the last one completes successfully. This helps keep your cluster available for use. + +To upgrade, the cluster terminates each pod and deploys a new pod based on the new image. + Before each pod goes down, the operator checks if the pod is a primary (master) for the cluster, and if it hosts any primary (master) shards. If so, a replica on a different pod is promoted to primary. Then when the pod is terminated, the API remains available through the newly promoted primary pod. + +After a pod is updated, the next pod is terminated and updated. +After all of the pods are updated, the upgrade process is complete. diff --git a/content/operate/kubernetes/7.4.6/upgrade/openshift-cli.md b/content/operate/kubernetes/7.4.6/upgrade/openshift-cli.md new file mode 100644 index 0000000000..0e6a3bd5d1 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/upgrade/openshift-cli.md @@ -0,0 +1,212 @@ +--- +Title: Upgrade Redis Enterprise with OpenShift CLI +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This task describes how to upgrade a Redis Enterprise cluster via OpenShift + CLI. +linkTitle: OpenShift CLI +weight: 20 +url: '/operate/kubernetes/7.4.6/upgrade/openshift-cli/' +--- + +Redis implements rolling updates for software upgrades in Kubernetes deployments. The upgrade process includes updating three components: + + 1. [Upgrade the Redis Enterprise operator](#upgrade-the-operator) + 2. [Upgrade the Redis Enterprise cluster (REC)](#upgrade-the-redisenterprisecluster-rec) + 3. [Upgrade Redis Enterprise databases (REDB)](#upgrade-databases) + +## Before upgrading + +1. Check [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) to make sure your Kubernetes distribution is supported. + +2. Use `oc get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. + +3. Verify you are upgrading from Redis Enterprise operator version 6.2.10-45 or later. If you are not, you must upgrade to 6.2.10-45 before upgrading to versions 6.2.18 or later. + +4. When upgrading existing clusters running on RHEL7-based images, make sure to select a RHEL7-based image for the new version. See [release notes]({{< relref "/operate/kubernetes/release-notes/" >}}) for more info. + +5. If you want to migrate from RHEL7-based images to RHEL8-based images, you'll need to upgrade to version 7.2.4-2 with a RHEL7-based image, then you'll be able to migrate to a RHEL8-based image when upgrading to 7.2.4-**TBD**. + +## Upgrade the operator + +### Download the bundle + +Make sure you pull the correct version of the bundle. You can find the version tags +by checking the [operator releases on GitHub](https://github.com/RedisLabs/redis-enterprise-k8s-docs/releases) +or by [using the GitHub API](https://docs.github.com/en/rest/reference/repos#releases). + +For OpenShift environments, the name of the bundle is `openshift.bundle.yaml`, and so the `curl` command to run is: + +```sh +curl --silent -O https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/$VERSION/openshift.bundle.yaml +``` + +If you need a different release, replace `VERSION` in the above with a specific release tag. + +### Apply the bundle + +Apply the bundle to deploy the new operator binary. This will also apply any changes in the new release to custom resource definitions, roles, role binding, or operator service accounts. + +{{< note >}} +If you are not pulling images from Docker Hub, update the operator image spec to point to your private repository. +If you have made changes to the role, role binding, RBAC, or custom resource definition (CRD) in the previous version, merge them with the updated declarations in the new version files. +{{< /note >}} + +If you are using OpenShift, run this instead: + +```sh +oc apply -f openshift.bundle.yaml +``` + +After running this command, you should see a result similar to this: + +```sh +role.rbac.authorization.k8s.io/redis-enterprise-operator configured +serviceaccount/redis-enterprise-operator configured +rolebinding.rbac.authorization.k8s.io/redis-enterprise-operator configured +customresourcedefinition.apiextensions.k8s.io/redisenterpriseclusters.app.redislabs.com configured +customresourcedefinition.apiextensions.k8s.io/redisenterprisedatabases.app.redislabs.com configured +deployment.apps/redis-enterprise-operator configured +``` + +### Reapply the admission controller webhook {#reapply-webhook} + +If you have the admission controller enabled, you need to manually reapply the `ValidatingWebhookConfiguration`. + +{{}} +{{< embed-md "k8s-642-redb-admission-webhook-name-change.md" >}} +{{}} + +{{< embed-md "k8s-admission-webhook-cert.md" >}} + +### Verify the operator is running + +You can check your deployment to verify the operator is running in your namespace. + +```sh +oc get deployment/redis-enterprise-operator +``` + +You should see a result similar to this: + +```sh +NAME READY UP-TO-DATE AVAILABLE AGE +redis-enterprise-operator 1/1 1 1 0m36s +``` + +{{< warning >}} + We recommend upgrading the REC as soon as possible after updating the operator. After the operator upgrade completes, the operator suspends the management of the REC and its associated REDBs, until the REC upgrade completes. + {{< /warning >}} + +### Reapply the SCC + +If you are using OpenShift, you will also need to manually reapply the [security context constraints](https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html) file ([`scc.yaml`]({{< relref "/operate/kubernetes/deployment/openshift/openshift-cli#deploy-the-operator" >}})) and bind it to your service account. + +```sh +oc apply -f openshift/scc.yaml +``` + +```sh +oc adm policy add-scc-to-user redis-enterprise-scc-v2 \ + system:serviceaccount:: +``` + +If you are upgrading from operator version 6.4.2-6 or before, see the ["after upgrading"](#after-upgrading) section to delete the old SCC and role binding after all clusters are running 6.4.2-6 or later. + +## Upgrade the RedisEnterpriseCluster (REC) + + +{{}} +Verify your license is valid before upgrading. Invalid licenses will cause the upgrade to fail. + +Use `oc get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. +{{}} + +The Redis Enterprise cluster (REC) can be updated automatically or manually. To trigger automatic upgrade of the REC after the operator upgrade completes, specify `autoUpgradeRedisEnterprise: true` in your REC spec. If you don't have automatic upgrade enabled, follow the below steps for the manual upgrade. + +Before beginning the upgrade of the Redis Enterprise cluster, check the K8s operator release notes to find the Redis Enterprise image tag. For example, in Redis Enterprise K8s operator release [6.0.12-5](https://github.com/RedisLabs/redis-enterprise-k8s-docs/releases/tag/v6.0.12-5), the `Images` section shows the Redis Enterprise tag is `6.0.12-57`. + +After the operator upgrade is complete, you can upgrade Redis Enterprise cluster (REC). + +### Edit `redisEnterpriseImageSpec` in the REC spec + +1. Edit the REC custom resource YAML file. + + ```sh + oc edit rec + ``` + +1. Replace the `versionTag:` declaration under `redisEnterpriseImageSpec` with the new version tag. + + ```YAML + spec: + redisEnterpriseImageSpec: + imagePullPolicy: IfNotPresent + repository: redislabs/redis + versionTag: + ``` + +1. Save the changes to apply. + +### Reapply roles and role bindings + +If your operator is monitoring multiple namespaces, you'll need to [reapply your role and role bindings]({{< relref "/operate/kubernetes/re-clusters/multi-namespace#create-role-and-role-binding-for-managed-namespaces" >}}) for each managed namespace. See [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace" >}}) for more details. + +### Monitor the upgrade + +You can view the state of the REC with `oc get rec`. + + During the upgrade, the state should be `Upgrade`. + When the upgrade is complete and the cluster is ready to use, the state will change to `Running`. + If the state is `InvalidUpgrade`, there is an error (usually relating to configuration) in the upgrade. + +```sh +$ oc get rec +NAME NODES VERSION STATE SPEC STATUS LICENSE STATE SHARDS LIMIT LICENSE EXPIRATION DATE AGE +rec 3 6.2.10-107 Upgrade Valid Valid 4 2022-07-16T13:59:00Z 92m +``` + +To see the status of the current rolling upgrade, run: + +```sh +oc rollout status sts +``` + +## After upgrading + +For OpenShift users, operator version 6.4.2-6 introduced a new SCC (`redis-enterprise-scc-v2`). If any of your OpenShift RedisEnterpriseClusters are running versions earlier than 6.2.4-6, you need to keep both the new and old versions of the SCC. + +If all of your clusters have been upgraded to operator version 6.4.2-6 or later, you can delete the old version of the SCC (`redis-enterprise-scc`) and remove the binding to your service account. + +1. Delete the old version of the SCC + + ```sh + oc delete scc redis-enterprise-scc + ``` + + The output should look similar to the following: + + ```sh + securitycontextconstraints.security.openshift.io "redis-enterprise-scc" deleted + ``` + +1. Remove the binding to your service account. + + ```sh + oc adm policy remove-scc-from-user redis-enterprise-scc system:serviceaccount:: + ``` + + +## Upgrade databases + +{{}}In version 7.2.4, old module versions and manually uploaded modules are not persisted. If databases are not upgraded after cluster upgrade, and require cluster recovery afterwards, you'll need to contact Redis support. This issue will be fixed in the next maintenance release by moving the stored location of the modules.{{}} + +After the cluster is upgraded, you can upgrade your databases. The process for upgrading databases is the same for both Kubernetes and non-Kubernetes deployments. For more details on how to [upgrade a database]({{< relref "/operate/rs/installing-upgrading/upgrading/upgrade-database" >}}), see the [Upgrade an existing Redis Enterprise Software deployment]({{< relref "/operate/rs/installing-upgrading/upgrading" >}}) documentation. + +Note that if your cluster [`redisUpgradePolicy`]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api#redisupgradepolicy" >}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. + + + diff --git a/content/operate/kubernetes/7.4.6/upgrade/upgrade-olm.md b/content/operate/kubernetes/7.4.6/upgrade/upgrade-olm.md new file mode 100644 index 0000000000..4a0272893c --- /dev/null +++ b/content/operate/kubernetes/7.4.6/upgrade/upgrade-olm.md @@ -0,0 +1,52 @@ +--- +Title: Upgrade Redis Enterprise with OpenShift OperatorHub +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This task describes how to upgrade a Redis Enterprise cluster via OpenShift + OperatorHub. +linkTitle: OpenShift OperatorHub +weight: 40 +url: '/operate/kubernetes/7.4.6/upgrade/upgrade-olm/' +--- + +## Before upgrading + +1. Check [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) to make sure your Kubernetes distribution is supported. + +2. Use `oc get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. + +3. Verify you are upgrading from Redis Enterprise operator version 6.2.10-45 or later. If you are not, you must upgrade to 6.2.10-45 before upgrading to versions 6.2.18 or later. + +## Upgrade the Redis Enterprise operator + +1. Select the **Redis Enterprise Operator** from the **Operators**>**Installed Operators** page. + +2. Select the **Subscription** tab. + +3. Verify your **Update approval** is set to "Manual". + +4. If you wish to upgrade to the most recent version, set your **Update channel** to "production". If you wish to upgrade to an older version, select it for your Update channel. + +5. Select **Upgrade available** shown under **Upgrade status**. + +6. When the "Review manual InstallPlan" section appears, select **Preview installPlan** and then **Approve** after reviewing the details. This will start the operator upgrade. + +You can monitor the upgrade from the **Installed Operators** page. A new Redis Enterprise Operator will appear in the list, with the status "Installing". The OpenShift will delete the old operator, showing the "Cannot update" status during deletion. + +## Reapply the SCC + +If you are using OpenShift, you will also need to manually reapply the [security context constraints](https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html) file ([`scc.yaml`]({{< relref "/operate/kubernetes/deployment/openshift/openshift-cli#deploy-the-operator" >}})) and bind it to your service account. + +```sh +oc apply -f openshift/scc.yaml +``` + +```sh +oc adm policy add-scc-to-user redis-enterprise-scc-v2 \ + system:serviceaccount:: +``` + +If you are upgrading from operator version 6.4.2-6 or before, see the [after upgrading section in the OpenShift CLI upgrade]({{}}) to delete the old SCC and role binding after all clusters are running 6.4.2-6 or later. diff --git a/content/operate/kubernetes/7.4.6/upgrade/upgrade-redis-cluster.md b/content/operate/kubernetes/7.4.6/upgrade/upgrade-redis-cluster.md new file mode 100644 index 0000000000..86c89bb643 --- /dev/null +++ b/content/operate/kubernetes/7.4.6/upgrade/upgrade-redis-cluster.md @@ -0,0 +1,175 @@ +--- +Title: Upgrade Redis Enterprise for Kubernetes +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This task describes how to upgrade a Redis Enterprise cluster via the + operator. +linkTitle: Kubernetes +weight: 10 +url: '/operate/kubernetes/7.4.6/upgrade/upgrade-redis-cluster/' +--- + +Redis implements rolling updates for software upgrades in Kubernetes deployments. The upgrade process includes updating three components: + + 1. [Upgrade the Redis Enterprise operator](#upgrade-the-operator) + 1. [Upgrade the Redis Enterprise cluster (REC)](#upgrade-the-redis-enterprise-cluster-rec) + 1. [Upgrade Redis Enterprise databases (REDB)](#upgrade-databases) + +## Prerequisites + +1. Check [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) to make sure your Kubernetes distribution is supported. + +1. Use `kubectl get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. + +1. Verify you are upgrading from Redis Enterprise operator version 6.2.10-45 or later. If you are not, you must upgrade to 6.2.10-45 before upgrading to versions 6.2.18 or later. + +{{}}**Upgrade cluster operating system** If your databases use modules, you need to update all nodes in the cluster to Redis Enterprise 7.2.4 or later before upgrading your operating system. See [Upgrade a cluster's operating system]({{< relref "/operate/rs/installing-upgrading/upgrading/upgrade-os" >}})in the Redis Enterprise Software documentation for more details.{{}} + +## Upgrade the operator + +### Download the bundle + +Make sure you pull the correct version of the bundle. You can find the version tags +by checking the [operator releases on GitHub](https://github.com/RedisLabs/redis-enterprise-k8s-docs/releases) +or by [using the GitHub API](https://docs.github.com/en/rest/reference/repos#releases). + +You can download the bundle for the latest release with the following `curl` command: + +```sh +VERSION=`curl --silent https://api.github.com/repos/RedisLabs/redis-enterprise-k8s-docs/releases/latest | grep tag_name | awk -F'"' '{print $4}'` +curl --silent -O https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/$VERSION/bundle.yaml +``` + +If you need a different release, replace `VERSION` in the above with a specific release tag. + +### Apply the bundle + +Apply the bundle to deploy the new operator binary. This will also apply any changes in the new release to custom resource definitions, roles, role binding, or operator service accounts. + +{{< note >}} +If you are not pulling images from Docker Hub, update the operator image spec to point to your private repository. +If you have made changes to the role, role binding, RBAC, or custom resource definition (CRD) in the previous version, merge them with the updated declarations in the new version files. +{{< /note >}} + +Upgrade the bundle and operator with a single command, passing in the bundle YAML file: + +```sh +kubectl apply -f bundle.yaml +``` + +After running this command, you should see a result similar to this: + +```sh +role.rbac.authorization.k8s.io/redis-enterprise-operator configured +serviceaccount/redis-enterprise-operator configured +rolebinding.rbac.authorization.k8s.io/redis-enterprise-operator configured +customresourcedefinition.apiextensions.k8s.io/redisenterpriseclusters.app.redislabs.com configured +customresourcedefinition.apiextensions.k8s.io/redisenterprisedatabases.app.redislabs.com configured +deployment.apps/redis-enterprise-operator configured +``` + +### Reapply the admission controller webhook {#reapply-webhook} + +If you have the admission controller enabled, you need to manually reapply the `ValidatingWebhookConfiguration`. + +{{}} +{{< embed-md "k8s-642-redb-admission-webhook-name-change.md" >}} +{{}} + +{{< embed-md "k8s-admission-webhook-cert.md" >}} + +### Verify the operator is running + +You can check your deployment to verify the operator is running in your namespace. + +```sh +kubectl get deployment/redis-enterprise-operator +``` + +You should see a result similar to this: + +```sh +NAME READY UP-TO-DATE AVAILABLE AGE +redis-enterprise-operator 1/1 1 1 0m36s +``` + +{{< warning >}} +We recommend upgrading the REC as soon as possible after updating the operator. After the operator upgrade completes, the operator suspends the management of the REC and its associated REDBs, until the REC upgrade completes. +{{< /warning >}} + +## Upgrade the Redis Enterprise cluster (REC) + +{{}} +Verify your license is valid before upgrading. Invalid licenses will cause the upgrade to fail. + +Use `kubectl get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. +{{}} + +The Redis Enterprise cluster (REC) can be updated automatically or manually. To trigger automatic upgrade of the REC after the operator upgrade completes, specify `autoUpgradeRedisEnterprise: true` in your REC spec. If you don't have automatic upgrade enabled, follow the below steps for the manual upgrade. + +Before beginning the upgrade of the Redis Enterprise cluster, check the K8s operator release notes to find the Redis Enterprise image tag. For example, in Redis Enterprise K8s operator release [6.0.12-5](https://github.com/RedisLabs/redis-enterprise-k8s-docs/releases/tag/v6.0.12-5), the `Images` section shows the Redis Enterprise tag is `6.0.12-57`. + +After the operator upgrade is complete, you can upgrade Redis Enterprise cluster (REC). + +### Upgrade an REC with an Active-Active database + +We recommend upgrading all participating clusters to the same operator version. + +If you are upgrading from a preview version of the Active-Active controller, you can remove the following environment variables: `ACTIVE_ACTIVE_DATABASE_CONTROLLER_ENABLED`, `REMOTE_CLUSTER_CONTROLLER_ENABLED`, and `ENABLE_ALPHA_FEATURES`. + +### Edit `redisEnterpriseImageSpec` in the REC spec + +1. Edit the REC custom resource YAML file. + + ```sh + kubectl edit rec + ``` + +1. Replace the `versionTag:` declaration under `redisEnterpriseImageSpec` with the new version tag. + + ```YAML + spec: + redisEnterpriseImageSpec: + imagePullPolicy: IfNotPresent + repository: redislabs/redis + versionTag: + ``` + +1. Save the changes to apply. + +### Reapply roles and role bindings + +If your operator is monitoring multiple namespaces, you'll need to [reapply your role and role bindings]({{< relref "/operate/kubernetes/re-clusters/multi-namespace#create-role-and-role-binding-for-managed-namespaces" >}}) for each managed namespace. See [Manage databases in multiple namespaces]({{< relref "/operate/kubernetes/re-clusters/multi-namespace" >}}) for more details. + +### Monitor the upgrade + +You can view the state of the REC with `kubectl get rec`. + + During the upgrade, the state should be `Upgrade`. + When the upgrade is complete and the cluster is ready to use, the state will change to `Running`. + If the state is `InvalidUpgrade`, there is an error (usually relating to configuration) in the upgrade. + +```sh +$ kubectl get rec +NAME NODES VERSION STATE SPEC STATUS LICENSE STATE SHARDS LIMIT LICENSE EXPIRATION DATE AGE +rec 3 6.2.10-107 Upgrade Valid Valid 4 2022-07-16T13:59:00Z 92m +``` + +To see the status of the current rolling upgrade, run: + +```sh +kubectl rollout status sts +``` + +### Upgrade databases + +After the cluster is upgraded, you can upgrade your databases. The process for upgrading databases is the same for both Kubernetes and non-Kubernetes deployments. + +For more details on how to [upgrade a database]({{< relref "/operate/rs/installing-upgrading/upgrading/upgrade-database" >}}), see the [Upgrade an existing Redis Enterprise Software deployment]({{< relref "/operate/rs/installing-upgrading/upgrading" >}}) documentation. + +For Active-Active databases, see [Upgrade an Active-Active database]({{}}). + +Note that if your cluster [`redisUpgradePolicy`]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api#redisupgradepolicy" >}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. diff --git a/content/operate/kubernetes/_index.md b/content/operate/kubernetes/_index.md index 5106fb8e36..41799be540 100644 --- a/content/operate/kubernetes/_index.md +++ b/content/operate/kubernetes/_index.md @@ -8,7 +8,7 @@ categories: description: The Redis Enterprise operators allows you to use Redis Enterprise for Kubernetes. hideListLinks: false -linkTitle: Redis Enterprise for Kubernetes +linkTitle: Redis for Kubernetes weight: 50 --- diff --git a/content/operate/kubernetes/old-index.md b/content/operate/kubernetes/old-index.md deleted file mode 100644 index c91b1cc633..0000000000 --- a/content/operate/kubernetes/old-index.md +++ /dev/null @@ -1,178 +0,0 @@ ---- -Title: Redis Enterprise for Kubernetes -alwaysopen: false -categories: -- docs -- operate -- kubernetes -description: null -draft: true -hidden: true -hideListLinks: false -weight: 10 ---- -Kubernetes provides enterprise orchestration of containers and has been widely adopted. Redis Enterprise for Kubernetes provides a -simple way to get a Redis Enterprise cluster on Kubernetes as well as enables more complex deployment scenarios. - - - -{{% comment %}} -## What is Redis Enterprise? - -Redis is the most popular database used with Docker containers. Redis Enterprise (Redise) extends Redis Community Edition and delivers stable high performance, linear scaling and high availability with significant operational savings. - -We use the Docker container for 4.5 version of Redis Enterprise for the steps here. You can find more information on the container image on [Docker Hub](https://hub.docker.com/r/redislabs/redis/) and see details on how to deploy the container locally with Docker below: - -- Getting Started with Redis Enterprise Software on Docker - -## Deploying Redis Enterprise with Kubernetes on Google Cloud - -Here are the 4 steps to set up our cluster with Redis Enterprise: - -- Step 1: Create a Kubernetes cluster on Google Cloud -- Step 2: Deploy the Redis Enterprise containers to Kubernetes cluster -- Step 3: Set up Redis Enterprise cluster -- Step 4: Create a Redis database and test your connectivity - -### Requirements - -The steps below were performed using the latest [Google Cloud sdk](https://cloud.google.com/sdk/) and [kubectl tool](https://kubernetes.io/docs/tasks/kubectl/install/) on MacOS. There may be slight differences in detailed instructions with another operating system. - -## Step 1: Create a Kubernetes cluster on Google Cloud - -Let's first get your CLI environment set up. - -- First authenticate to your Google Cloud environment. - - gcloud auth login - -- Get the default project_ID set. Here is how you can list and set the project context to be used by upcoming commands. If you do not explicitly specify an ID, the containers are assigned a random ID, such as "speedy-lattice-166011". - - gcloud projects list - - gcloud config set project speedy-lattice-166011 - -- Finally, let's get the default zone/geography where you want your cluster set up. Here is how you can list the zones and set the zone context to be used by upcoming commands. - - gcloud compute zones list - - gcloud config set compute/zone europe-west1-c - -Let's get the Kubernetes cluster up and running. - -On your Google Cloud console, click on "Kubernetes Engine" option on the left nav and create a new cluster. - - - -To define your Kubernetes cluster, give it a name and keep the size of the cluster to 3 nodes. we'll use all 3 nodes to deploy the Redis Enterprise cluster. I recommend you keep the size of nodes at least 2 cores and over 7GB RAM. - - - -{{< note >}} -It may take a few mins to create the cluster. Ensure the Kubernetes cluster creation is complete before proceeding to the next step. -{{< /note >}} - -For best placement, Redis Enterprise pods should be placed on separate physical nodes in the Kubernetes cluster. This makes sure that there is better availability during node failures. Placing multiple Redis Enterprise nodes in the same physical host can cause multiple nodes to fail at once and may result in availability and data loss. - - - -{{< note >}} -By the way, If you are a commandline kind of person, here is how you can simplify the three screen above into 2 simple lines; - - gcloud container clusters create cluster-1 --num-nodes=3 -m n1-standard-2 -{{< /note >}} - -Finally to finish the Kubernetes deployment, you need to get the Kubernetes console up and running and start the Kubernetes proxy. on the terminal window, run the following commands; - -Connect to the Kubernetes cluster - - gcloud container clusters get-credentials cluster-1 - -The output shows; - - # Fetching cluster endpoint and auth data. - # kubeconfig entry generated for cluster-1. - -And finally start the Kubernetes proxy: - - kubectl proxy - -## Step 2: Deploy the Redis Enterprise containers to Kubernetes cluster - -You now need to feed the container yaml file to provision Redis Enterprise cluster. You can download a sample [container yaml file](https://docs.redislabs.com/latest/platforms/kubernetes/redis-enterprise.yaml). - - kubectl apply -f redis-enterprise.yaml - -If the deployment is successful, the output should look like this; - - # deployment "redispack-deployment" created - # service "redispack" created - -You can now see the list of container nodes deployed on the Kubernetes cluster. Simply run the following to see the list of nodes - - kubectl get po - -The output looks something like this; - - NAME READY STATUS RESTARTS AGE - - redispack-deployment-709212938-765lg 1/1 Running 0 7s - - redispack-deployment-709212938-k8njr 1/1 Running 0 7s - - redispack-deployment-709212938-kcjd7 1/1 Running 0 7s - -## Step 3: Set up Redis Enterprise cluster - -We are now ready to create the Redis Enterprise cluster. There is one small change that needs to be done to the container to get networking to work properly: we need to change the css binding to 0.0.0.0. To do this, you need to run the following in each container with each iteration using the pods name from the _kubectl get po_ output above. - - kubectl exec -it redispack-deployment-709212938-765lg -- bash - - # sudo su - - # sed 's/bind 127.0.0.1/bind 0.0.0.0/g' -i /opt/redislabs/config/ccs-redis.conf - # cnm_ctl restart - -With this, let's provision the first node or the Redis Enterprise cluster. - - kubectl exec -it redispack-deployment-709212938-765lg "/opt/redislabs/bin/rladmin" cluster create name cluster.local username cihan@redislabs.com password redislabs123 flash_enabled - -We need the ip address of the first node to instruct the following nodes to join the cluster. - - kubectl exec -it redispack-deployment-709212938-765lg ifconfig | grep "inet addr" - -In my case the output was 10.0.2.10. Lets add node 2 and 3 to the cluster - - kubectl exec -it redispack-deployment-709212938-k8njr "/opt/redislabs/bin/rladmin" cluster join username cihan@redislabs.com password redislabs123 nodes 10.0.2.10 flash_enabled - - kubectl exec -it redispack-deployment-709212938-kcjd7 "/opt/redislabs/bin/rladmin" cluster join username cihan@redislabs.com password redislabs123 nodes 10.0.2.10 flash_enabled - -## Step 4: Create a Redis database and test your connectivity - -We are now ready to create the database and connect to it. The following curl command can be used to create a database on port 12000. The default database name is "sample-db". - - kubectl exec -it redispack-deployment-709212938-765lg bash - - # curl -k -u "cihan@redislabs.com:redislabs123" --request POST --url "https://localhost:9443/v1/bdbs" --header 'content-type: application/json' --data '{"name":"sample-db","type":"redis","memory_size":1073741824,"port":12000}' - -To test the connection to the database, we use the _redis-cli_ tool. Here is a simple set followed by a get to validate the Redis deployment. - - kubectl exec -it redispack-deployment-709212938-765lg bash - - # /opt/redislabs/bin/redis-cli -p 12000 - - # 127.0.0.1:12000> set a 1 - - # OK - - # 127.0.0.1:12000> get a - - # "1" - - # 127.0.0.1:12000> - -{{< note >}} -To clean up the deployment you can simply delete the cluster using the following command line - - gcloud container clusters delete cluster-1 -{{< /note >}} -{{% /comment %}} diff --git a/content/operate/kubernetes/re-clusters/delete-custom-resources.md b/content/operate/kubernetes/re-clusters/delete-custom-resources.md new file mode 100644 index 0000000000..375ecdae95 --- /dev/null +++ b/content/operate/kubernetes/re-clusters/delete-custom-resources.md @@ -0,0 +1,134 @@ +--- +Title: Delete custom resources +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: This article explains how to delete Redis Enterprise clusters and Redis + Enterprise databases from your Kubernetes environment. +linkTitle: Delete custom resources +weight: 70 +aliases: [ + /operate/kubernetes/delete-custom-resources/, +] +--- + +## Multi-namespace management + +Before you can delete a namespace, you must remove the Redis custom resources ([REDB](#delete-a-database-redb), [REC](#delete-a-redis-enterprise-cluster-rec), and [operator](#delete-operator-from-one-namespace)) residing within a namespace before you can delete that namespace. Deleting namespace containing an REDB may cause errors or data loss. + +## Delete a database (REDB) + +To delete a database managed by the Redis Enterprise Kubernetes operator, run `kubectl delete redb ` from your K8s cluster. + +When you delete a database, your data and the REDB custom resource are also deleted. + +## Delete a Redis Enterprise cluster (REC) + +To delete a Redis Enterprise cluster managed by the operator: + +1. Delete all the databases in your cluster. + +2. Run `kubectl delete rec ` from your K8s cluster. + +When you delete your cluster, your databases and the REC custom resource are also deleted. However, persistent volume claims (PVCs) for your cluster are not deleted in the process. If you want to delete your PVCs, you'll have to delete them manually. + +## Delete the operator + +There are two ways to delete the operator. You can delete the entire operator bundle, but this will also delete any cluster-wide resources created by the operator. To only delete resources within a specific namespace and leave other cluster-wide resources intact, you need to delete each resource manually. + +Whether you decide to delete the entire bundle or just resources from a specific namespace, it's important to delete the operator ConfigMap (`operator-environment-config`). + +```sh +kubectl delete cm operator-environment-config +``` + +### Delete operator bundle + +To delete the operator from your K8s cluster, you can delete the operator bundle with: + +- `kubectl delete -f bundle.yaml` for non-OpenShift K8s deployments +- `kubectl delete -f openshift.bundle.yaml` for OpenShift deployments + +This will remove the operator and its custom resource definitions (CRDs) from your K8s cluster. + +{{< warning >}} The Redis Enterprise CRDs are non-namespaced resources, meaning they are shared across your entire K8s cluster. Deleting CRDs in one namespace will delete custom resources in every other namespace across the K8s cluster.{{}} + +### Delete operator from one namespace + +If you have Redis Enterprise clusters running in different namespaces on the same K8s cluster, deleting the entire operator bundle might cause data loss. + +To safely delete the operator from one namespace without affecting the others, delete the operator files individually, excluding the CRD files: + +```sh +kubectl delete -f role.yaml +kubectl delete -f role_binding.yaml +kubectl delete -f service_account.yaml +kubectl delete -f admission-service.yaml +kubectl delete -f operator.yaml +``` + +You will also need to remove [the `namespaceSelector` section from the validating webhook]({{< relref "/operate/kubernetes/deployment/quick-start#webhook" >}}). + +## Delete an Active-Active database (REAADB) + +1. On one of the existing participating clusters, delete the REEADB (substituting `` with your database name). + + ```sh + kubectl delete reaadb + ``` + +2. Verify the REAADB no longer exists. + + ```sh + kubectl get reaadb -o=jsonpath='{range .items[*]}{.metadata.name}' + ``` + +## Delete a remote cluster (RERC) + +1. Verify the RERC you want to delete isn't listed as a participating cluster in any REAADB resources. + + If an RERC is still listed as a participating cluster in any database, the deletion will be blocked. + +2. On one of the existing participating clusters, delete the RERC (substituting `` with your database name). + + ```sh + kubectl delete rerc + ``` + +3. Verify the RERC no longer exists. + + ```sh + kubectl get rerc -o=jsonpath='{range .items[*]}{.metadata.name}' + ``` + +## Troubleshoot REDB deletion + +The operator attaches a finalizer to the Redis Enterprise database (REDB) object. This makes sure the database is deleted before the REDB custom resource is removed from the K8s cluster. + +If the operator isn't running, or some other fatal error occurs, the finalizer isn't removed automatically by the operator. In this case, you won't be able to delete your REDB resource. + +If this happens, you can remove the finalizer manually. + +{{}} If you remove the finalizer manually, there is no guarantee that the underlying REDB has been deleted. This may cause resource issues and require manual intervention. {{}} + +```sh +kubectl patch redb --type=json -p \ + '[{"op":"remove","path":"/metadata/finalizers","value":"finalizer.redisenterprisedatabases.app.redislabs.com"}]' +``` + +## Troubleshoot REC deletion + +The operator attaches a finalizer to the Redis Enterprise cluster (REC) object. This makes sure the Redis cluster is deleted before the REC custom resource is removed from the K8s cluster. + +If the operator isn't running, or some other fatal error occurs, the finalizer isn't removed automatically by the operator. In this case, you won't be able to delete your REC resource. + +If this happens, you can remove the finalizer manually. + +{{}} If you remove the finalizer manually, there is no guarantee that the underlying REC has been deleted. This may cause resource issues and require manual intervention. {{}} + +```sh +kubectl patch rec --type=json -p \ + '[{"op":"remove","path":"/metadata/finalizers","value":"redbfinalizer.redisenterpriseclusters.app.redislabs.com"}]' +``` diff --git a/content/operate/kubernetes/re-databases/db-controller.md b/content/operate/kubernetes/re-databases/db-controller.md index 487d091a37..7bd8f96a92 100644 --- a/content/operate/kubernetes/re-databases/db-controller.md +++ b/content/operate/kubernetes/re-databases/db-controller.md @@ -26,11 +26,11 @@ the custom resource with default values to create a full specification. It then database on the specified Redis Enterprise cluster (REC). Once the database is created, it is exposed with the same service mechanisms by the service rigger for the Redis Enterprise cluster. -If the database [custom resource is deleted]({{< relref "/operate/kubernetes/delete-custom-resources.md" >}}), the database and its services are deleted from the cluster. +If the database [custom resource is deleted]({{< relref "/operate/kubernetes/re-clusters/delete-custom-resources" >}}), the database and its services are deleted from the cluster. ### Flexible deployment options -Databases in multiple namespaces can be managed by the same operator. To learn more, see [Manage databases in multiple namespaces]({{}}). +Databases in multiple namespaces can be managed by the same operator. To learn more, see [Manage databases in multiple namespaces]({{}}). To learn more about designing a multi-namespace Redis Enterprise cluster, see [flexible deployment options]({{< relref "/operate/kubernetes/architecture/deployment-options.md" >}}). diff --git a/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md b/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md index b2874e741d..abb0266879 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md +++ b/content/operate/kubernetes/reference/redis_enterprise_active_active_database_api.md @@ -157,7 +157,7 @@ The Active-Active database global configurations, contains the global properties alertSettings object - Settings for database alerts
    + Settings for database alerts. Note - Alert settings are not supported for Active-Active database.
    false @@ -278,7 +278,7 @@ The Active-Active database global configurations, contains the global properties redisVersion string - Redis OSS version. Version can be specified via prefix, or via channels - for existing databases - Upgrade Redis OSS version. For new databases - the version which the database will be created with. If set to 'major' - will always upgrade to the most recent major Redis version. If set to 'latest' - will always upgrade to the most recent Redis version. Depends on 'redisUpgradePolicy' - if you want to set the value to 'latest' for some databases, you must set redisUpgradePolicy on the cluster before. Possible values are 'major' or 'latest' When using upgrade - make sure to backup the database before. This value is used only for database type 'redis'
    + Redis OSS version. Version can be specified via prefix, or via channels - for existing databases - Upgrade Redis OSS version. For new databases - the version which the database will be created with. If set to 'major' - will always upgrade to the most recent major Redis version. If set to 'latest' - will always upgrade to the most recent Redis version. Depends on 'redisUpgradePolicy' - if you want to set the value to 'latest' for some databases, you must set redisUpgradePolicy on the cluster before. Possible values are 'major' or 'latest' When using upgrade - make sure to backup the database before. This value is used only for database type 'redis'. Note - Specifying Redis version is currently not supported for Active-Active database.
    false @@ -401,7 +401,7 @@ Connection/ association to the Active-Active database. ### spec.globalConfigurations.alertSettings [↩ Parent](#specglobalconfigurations) -Settings for database alerts +Settings for database alerts. Note - Alert settings are not supported for Active-Active database. @@ -1516,6 +1516,15 @@ RedisEnterpriseActiveActiveDatabaseStatus defines the observed state of RedisEnt + + + + + + + + + + @@ -26403,6 +26410,13 @@ Volume represents a named volume in a pod that may be accessed by any container Versions of open source databases bundled by Redis Enterprise Software - please note that in order to use a specific version it should be supported by the ‘upgradePolicy’ - ‘major’ or ‘latest’ according to the desired version (major/minor)
    + + + + + @@ -26509,6 +26523,40 @@ Volume represents a named volume in a pod that may be accessed by any container
    clusterCertificatesGenerationinteger + Versions of the cluster's Proxy and Syncer certificates. In Active-Active databases, these are used to detect updates to the certificates, and trigger synchronization across the participating clusters. .
    +
    + Format: int64
    +
    false
    guid string diff --git a/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md b/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md index a1c4b58e10..5f5ced4efe 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md +++ b/content/operate/kubernetes/reference/redis_enterprise_cluster_api.md @@ -1192,6 +1192,13 @@ Cluster-level LDAP configuration, such as server addresses, protocol, authentica The maximum TTL of cached entries.
    false
    directoryTimeoutSecondsinteger + The connection timeout to the LDAP server when authenticating a user, in seconds
    +
    false
    enabledForControlPlane boolean false
    certificatesStatusobject + Stores information about cluster certificates and their update process. In Active-Active databases, this is used to detect updates to the certificates, and trigger synchronization across the participating clusters.
    +
    false
    ingressOrRouteMethodStatus string
    +### status.certificatesStatus +[↩ Parent](#status) + +Stores information about cluster certificates and their update process. In Active-Active databases, this is used to detect updates to the certificates, and trigger synchronization across the participating clusters. + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDescriptionRequired
    generationinteger + Generation stores the version of the cluster's Proxy and Syncer certificate secrets. In Active-Active databases, when a user updates the proxy or syncer certificate, a crdb-update command needs to be triggered to avoid potential sync issues. This helps the REAADB controller detect a change in a certificate and trigger a crdb-update. The version of the cluster's Proxy certificate secret.
    +
    + Format: int64
    +
    false
    updateStatusstring + The status of the cluster's certificates update
    +
    false
    + + ### status.licenseStatus [↩ Parent](#status) diff --git a/content/operate/kubernetes/reference/redis_enterprise_database_api.md b/content/operate/kubernetes/reference/redis_enterprise_database_api.md index 12e68b195b..5205ddf989 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_database_api.md +++ b/content/operate/kubernetes/reference/redis_enterprise_database_api.md @@ -171,7 +171,7 @@ RedisEnterpriseDatabaseSpec defines the desired state of RedisEnterpriseDatabase modulesList []object - List of modules associated with database. Note - For Active-Active databases this feature is currently in preview. For this feature to take effect for Active-Active databases, set a boolean environment variable with the name "ENABLE_ALPHA_FEATURES" to True. This variable can be set via the redis-enterprise-operator pod spec, or through the operator-environment-config Config Map.
    + List of modules associated with database. Note - For Active-Active databases this feature is currently in preview. For this feature to take effect for Active-Active databases, set a boolean environment variable with the name "ENABLE_ALPHA_FEATURES" to True. This variable can be set via the redis-enterprise-operator pod spec, or through the operator-environment-config Config Map. Note - if you do not want to upgrade to the latest version you must set upgradeSpec -> upgradeModulesToLatest to false. if you specify a version and do not set the upgradeModulesToLatest it can result errors in the operator. in addition, the option to specify specific version is Deprecated and will be deleted in next releases.
    false @@ -1154,7 +1154,7 @@ Redis Enterprise Module: https://redislabs.com/redis-enterprise/modules/ version string - Module's semantic version e.g "1.6.12" - optional only in REDB, must be set in REAADB
    + DEPRECATED - Module's semantic version e.g "1.6.12" - optional only in REDB, must be set in REAADB
    false @@ -1303,7 +1303,7 @@ Specifications for DB upgrade. upgradeModulesToLatest boolean - Upgrades the modules to the latest version that supportes the DB version during a DB upgrade action, to upgrade the DB version view the 'redisVersion' field. Notes - All modules must be without specifing the version. in addition, This field is currently not supported for Active-Active databases.
    + DEPRECATED Upgrades the modules to the latest version that supports the DB version during a DB upgrade action, to upgrade the DB version view the 'redisVersion' field. Notes - All modules must be without specifying the version. in addition, This field is currently not supported for Active-Active databases. The default is true
    true diff --git a/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md b/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md index 5b5d8f7e5b..7a12725358 100644 --- a/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md +++ b/content/operate/kubernetes/reference/redis_enterprise_remote_cluster_api.md @@ -103,6 +103,13 @@ RedisEntepriseRemoteCluster represents a remote participating cluster. The namespace of the REC that the RERC is pointing at
    true + + apiPort + integer + + The port number of the cluster's URL used for connectivity/sync
    + + false dbFqdnSuffix string @@ -136,6 +143,13 @@ RedisEntepriseRemoteCluster represents a remote participating cluster. + internalObservedSecretResourceVersion + string + + The observed secret resource version. Used for internal purposes only.
    + + false + local boolean diff --git a/content/operate/kubernetes/reference/supported_k8s_distributions.md b/content/operate/kubernetes/reference/supported_k8s_distributions.md index 2c2263563c..080dcb8b49 100644 --- a/content/operate/kubernetes/reference/supported_k8s_distributions.md +++ b/content/operate/kubernetes/reference/supported_k8s_distributions.md @@ -24,25 +24,29 @@ Any distribution not listed below is not supported for production workloads. For details on this platform, see the Kubernetes [documentation](https://kubernetes.io/docs/home/supported-doc-versions/). -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | ****6.2.10-4**5** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | -|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | -| **Community K8s** | | | | | | | | | | | | | | | | | | | | | -| 1.30 | | | | | | | | | | | | | | | | | | | | | -| 1.29 | | | | | | | | | | | | | | | | | | | | | -| 1.28 | | | | | | | | | | | | | | | | | | | | | -| 1.27 | | | | | | | | | | | | | | | | | | | | | -| 1.26 | :warning: | :warning: | :warning: | | | | | | | | | | | | | | | | | | -| 1.25 | | | | | | | | | | | | | | | | | | | | | -| 1.24 | | | | | | | | | | | | | | | | | | | | | -| 1.23 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | -| 1.22 | | | | | | | | | :warning: | :warning: | | | | | | | | | | | -| 1.21 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.20 | | | | | | | | | | | | | | | :warning: | | | | | | -| 1.19 | | | | | | | | | | | | | | | :warning: | | | | | | -| 1.18 | | | | | | | | | | | | | | | | | | | | | -| 1.17 | | | | | | | | | | | | | | | | | | | | :warning: | -| 1.16 | | | | | | | | | | | | | | | | | | | | :warning: | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Community K8s** | | | | | | | | | | | | | | | | | | | | | | +| 1.31 | | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | | +| 1.27 | | | | | | | | | | | | | | | | | | | | | | +| 1.26 | | :warning: | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | | | | :warning: | :warning: | | | | | | | | | | | +| 1.21 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.20 | | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.19 | | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | | +| 1.17 | | | | | | | | | | | | | | | | | | | | | :warning: | +| 1.16 | | | | | | | | | | | | | | | | | | | | | :warning: | {{}} @@ -50,24 +54,26 @@ For details on this platform, see the Kubernetes [documentation](https://kuberne For details on this platform, see the [OpenShift documentation](https://docs.openshift.com/container-platform/4.13/welcome/index.html). - -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | ****6.2.10-4**5** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | -|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | -| **OpenShift** | | | | | | | | | | | | | | | | | | | | | -| 4.16 | | | | | | | | | | | | | | | | | | | | | -| 4.15 | | | | | | | | | | | | | | | | | | | | | -| 4.14 | | | | | | | | | | | | | | | | | | | | | -| 4.13 | | | | | | | | | | | | | | | | | | | | | -| 4.12 | | | :warning: | | | | | | | | | | | | | | | | | | -| 4.11 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | -| 4.10 | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | -| 4.9 | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | -| 4.8 | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | -| 4.7 | | | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | -| 4.6 | | | | | | | | | | | | | | | :warning: | | | | | | -| 4.5 | | | | | | | | | | | | | | | | | | | | | -| 3.11 | | | | | | | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **OpenShift** | | | | | | | | | | | | | | | | | | | | | | +| 4.16 | | | | | | | | | | | | | | | | | | | | | | +| 4.15 | | | | | | | | | | | | | | | | | | | | | | +| 4.14 | | | | | | | | | | | | | | | | | | | | | | +| 4.13 | | | | | | | | | | | | | | | | | | | | | | +| 4.12 | | | | :warning: | | | | | | | | | | | | | | | | | | +| 4.11 | | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 4.10 | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 4.9 | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | +| 4.8 | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | +| 4.7 | | | | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | +| 4.6 | | | | | | | | | | | | | | | | :warning: | | | | | | +| 4.5 | | | | | | | | | | | | | | | | | | | | | | +| 3.11 | | | | | | | | | | | | | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | {{}} @@ -75,23 +81,26 @@ For details on this platform, see the [OpenShift documentation](https://docs.ope For details on this platform, see the [EKS documentation](https://docs.aws.amazon.com/eks/?icmpid=docs_homepage_containers). -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | ****6.2.10-4**5** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | -|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | -| **Amazon EKS** | | | | | | | | | | | | | | | | | | | | | -| 1.30 | | | | | | | | | | | | | | | | | | | | | -| 1.29 | | | | | | | | | | | | | | | | | | | | | -| 1.28 | | | | | | | | | | | | | | | | | | | | | -| 1.27 | :warning: | | | | | | | | | | | | | | | | | | | | -| 1.26 | :warning: | | | | | | | | | | | | | | | | | | | | -| 1.25 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | -| 1.24 | | | | | | | | | | | | | | | | | | | | | -| 1.23 | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | -| 1.22 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | -| 1.21 | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | | | -| 1.20 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.19 | | | | | | | | | | | | | | :warning: | :warning: | | | | | | -| 1.18 | | | | | | | | | | | | | | | :warning: | | | | | | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Amazon EKS** | | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | | +| 1.27 | :warning: | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.26 | | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.25 | | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.21 | | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | | | +| 1.20 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.19 | | | | | | | | | | | | | | | :warning: | :warning: | | | | | | +| 1.18 | | | | | | | | | | | | | | | | :warning: | | | | | | {{}} @@ -99,23 +108,26 @@ For details on this platform, see the [EKS documentation](https://docs.aws.amazo For details on this platform, see the [AKS documentation](https://learn.microsoft.com/en-us/azure/aks/). -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | ****6.2.10-4**5** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | -|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | -| **Azure AKS** | | | | | | | | | | | | | | | | | | | | | -| 1.30 | | | | | | | | | | | | | | | | | | | | | -| 1.29 | | | | | | | | | | | | | | | | | | | | | -| 1.28 | | | | | | | | | | | | | | | | | | | | | -| 1.27 | :warning: | | | | | | | | | | | | | | | | | | | | -| 1.26 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | -| 1.25 | | | | | | | | | | | | | | | | | | | | | -| 1.24 | | | | | | | | | | | | | | | | | | | | | -| 1.23 | | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | -| 1.22 | | | | | | | | | | | | | | | | | | | | | -| 1.21 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.20 | | | | | | | | | | | | | | | :warning: | | | | | | -| 1.19 | | | | | | | | | | | | | | | :warning: | | | | | | -| 1.18 | | | | | | | | | | | | | | | | | | | | | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Azure AKS** | | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | | +| 1.27 | :warning: | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.26 | | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | +| 1.22 | | | | | | | | | | | | | | | | | | | | | | +| 1.21 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.20 | | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.19 | | | | | | | | | | | | | | | | :warning: | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | | {{}} @@ -123,23 +135,26 @@ For details on this platform, see the [AKS documentation](https://learn.microsof For details on this platform, see the [GKE documentation](https://cloud.google.com/kubernetes-engine/docs). -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | ****6.2.10-4**5** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | -|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | -| **Google GKE** | | | | | | | | | | | | | | | | | | | | | -| 1.30 | | | | | | | | | | | | | | | | | | | | | -| 1.29 | | | | | | | | | | | | | | | | | | | | | -| 1.28 | | | | | | | | | | | | | | | | | | | | | -| 1.27 | :warning: | | | | | | | | | | | | | | | | | | | | -| 1.26 | :warning: | | | | | | | | | | | | | | | | | | | | -| 1.25 | | :warning: | :warning: | | | | | | | | | | | | | | | | | | -| 1.24 | | | | | | | | | | | | | | | | | | | | | -| 1.23 | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | -| 1.22 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | -| 1.21 | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | | | -| 1.20 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.19 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.18 | | | | | | | | | | | | | | | | | | | | | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Google GKE** | | | | | | | | | | | | | | | | | | | | | | +| 1.30 | | | | | | | | | | | | | | | | | | | | | | +| 1.29 | | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | | +| 1.27 | | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.26 | | | | | | | | | | | | | | | | | | | | | | +| 1.25 | | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.21 | | | | | | | | | | | | :warning: | :warning: | :warning: | | | | | | | | +| 1.20 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.19 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | | {{}} @@ -147,33 +162,36 @@ For details on this platform, see the [GKE documentation](https://cloud.google.c For details on this platform, see the [Rancher documentation](https://ranchermanager.docs.rancher.com/). -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | ****6.2.10-4**5** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | -|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | -| **Rancher 2.8** | | | | | | | | | | | | | | | | | | | | | -| 1.28 | | | | | | | | | | | | | | | | | | | | | -| 1.27 | | | | | | | | | | | | | | | | | | | | | -| 1.26 | | | | | | | | | | | | | | | | | | | | | -| **Rancher 2.7** | | | | | | | | | | | | | | | | | | | | | -| 1.25 | :warning: | | | | | | | | | | | | | | | | | | | | -| 1.24 | | | :warning: | | | | | | | | | | | | | | | | | | -| 1.23 | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | -| **Rancher 2.6** | | | | | | | | | | | | | | | | | | | | | -| 1.24 | | | | | :warning: | :warning: | | | | | | | | | | | | | | | -| 1.23 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | -| 1.22 | | | | | | | :warning: | :warning: | | | | | | | | | | | | | -| 1.21 | | | | | | | | | :warning: | :warning: | | | | | | | | | | | -| 1.20 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.19 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.18 | | | | | | | | | | | | | | | :warning: | | | | | | -| **Rancher 2.5** | | | | | | | | | | | | | | | | | | | | | -| 1.20 | | | | | | | | | | | | | | | | :warning: | | | | | -| 1.19 | | | | | | | | | | | | | | | | :warning: | | | | | -| 1.18 | | | | | | | | | | | | | | | | :warning: | | | | | -| 1.17 | | | | | | | | | | | | | | | | :warning: | | | | | -| **Rancher 2.4** | | | | | | | | | | | | | | | | | | | | | -| 1.18 | | | | | | | | | | | | | | | | | | | :warning: | | -| 1.17 | | | | | | | | | | | | | | | | | | | :warning: | | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **Rancher 2.8** | | | | | | | | | | | | | | | | | | | | | | +| 1.28 | | | | | | | | | | | | | | | | | | | | | | +| 1.27 | | | | | | | | | | | | | | | | | | | | | | +| 1.26 | :warning: | | | | | | | | | | | | | | | | | | | | | +| **Rancher 2.7** | | | | | | | | | | | | | | | | | | | | | | +| 1.25 | | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | :warning: | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | :warning: | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| **Rancher 2.6** | | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | :warning: | :warning: | | | | | | | | | | | | | | | +| 1.23 | | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.21 | | | | | | | | | | :warning: | :warning: | | | | | | | | | | | +| 1.20 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.19 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.18 | | | | | | | | | | | | | | | | :warning: | | | | | | +| **Rancher 2.5** | | | | | | | | | | | | | | | | | | | | | | +| 1.20 | | | | | | | | | | | | | | | | | :warning: | | | | | +| 1.19 | | | | | | | | | | | | | | | | | :warning: | | | | | +| 1.18 | | | | | | | | | | | | | | | | | :warning: | | | | | +| 1.17 | | | | | | | | | | | | | | | | | :warning: | | | | | +| **Rancher 2.4** | | | | | | | | | | | | | | | | | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | :warning: | | +| 1.17 | | | | | | | | | | | | | | | | | | | | :warning: | | {{}} @@ -181,29 +199,32 @@ For details on this platform, see the [Rancher documentation](https://rancherman For details on this platform, see the [TKG documentation](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/index.html). -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | -|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | -| **VMWare TKG 2.4** | | | | | | | | | | | | -| 1.27 | | | | | | | | | | | | -| 1.26 | | | | | | | | | | | | -| 1.25 | | | | | | | | | | | | -| **VMware TKG 2.3** | | | | | | | | | | | | -| 1.26 | :warning: | | | | | | | | | | | -| 1.25 | | | | | | | | | | | | -| 1.24 | | | | | | | | | | | | -| **VMware TKG 2.2** | | | | | | | | | | | | -| 1.25 | | :warning: | :warning: | | | | | | | | | -| 1.24 | | :warning: | :warning: | | | | | | | | | -| 1.23 | | | | | | | | | | | | -| **VMware TKG 2.1** | | | | | | | | | | | | -| 1.24 | | | | | | | | | | | | -| 1.23 | | | | :warning: | :warning: | :warning: | | | | | | -| 1.22 | | | | | :warning: | :warning: | | | | | | -| **VMware TKG 1.6** | | | | | | | | | | | | -| 1.24 | | | | | :warning: | :warning: | | | | | | -| 1.23 | | | | | | | :warning: | :warning: | | | | -| 1.22 | | | | | | | :warning: | :warning: | | | | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **VMWare TKG 2.4** | | | | | | | | | | | | | | | | | | | | | | +| 1.27 | | | | | | | | | | | | | | | | | | | | | | +| 1.26 | | | | | | | | | | | | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | | | | | | | | | | | +| **VMware TKG 2.3** | | | | | | | | | | | | | | | | | | | | | | +| 1.26 | :warning: | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.25 | | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | | +| **VMware TKG 2.2** | | | | | | | | | | | | | | | | | | | | | | +| 1.25 | | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.24 | | | :warning: | :warning: | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | | | | | | | | | | | | | | | | | | +| **VMware TKG 2.1** | | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | | | | | | | | | | | | | | | | | +| 1.23 | | | | | :warning: | :warning: | :warning: | | | | | | | | | | | | | | | +| 1.22 | | | | | | :warning: | :warning: | | | | | | | | | | | | | | | +| **VMware TKG 1.6** | | | | | | | | | | | | | | | | | | | | | | +| 1.24 | | | | | | :warning: | :warning: | | | | | | | | | | | | | | | +| 1.23 | | | | | | | | :warning: | :warning: | | | | | | | | | | | | | +| 1.22 | | | | | | | | :warning: | :warning: | | | | | | | | | | | | | {{}} @@ -211,26 +232,27 @@ For details on this platform, see the [TKG documentation](https://docs.vmware.co For details on this platform, see the [TKGI documentation](https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid-Integrated-Edition/index.html). -{{}}| Redis operator | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | ****6.2.10-4**5** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | -|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| -| | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | -| **VMware TKGI** | | | | | | | | | | | | | | | | | | | | | -| 1.19 | | | | | | | | | | | | | | | | | | | | | -| 1.18 | | | | | | | | | | | | | | | | | | | | | -| 1.17 | | | | | | | | | | | | | | | | | | | | | -| 1.16 | :warning: | | | | | | | | | | | | | | | | | | | | -| 1.15 | | | | | | | | | | | | | | | | | | | | | -| 1.14 | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | -| 1.13 | | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | -| 1.12 | | | | | | | | | | | | | :warning: | | | | | | | | -| 1.11 | | | | | | | | | | | | | :warning: | :warning: | | | | | | | -| 1.10 | | | | | | | | | | | | | | :warning: | | | | | | | -| 1.09 | | | | | | | | | | | | | | | | | | | | | -| 1.08 | | | | | | | | | | | | | | | | | | | | :warning: | -| 1.07 | | | | | | | | | | | | | | | | | | | | :warning: | +{{}} + +| | | | | | | | | | | | | | | | | | | | | | | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| Redis operator | **7.8.tbd** | **7.4.6-2** | **7.4.2-12** | **7.4.2-2** | **7.2.4-12** | **7.2.4-7** | **7.2.4-2** | **6.4.2-8** | **6.4.2-6** | **6.4.2-5** | **6.4.2-4** | **6.2.18-41** | **6.2.18-3** | **6.2.12-1** | **6.2.10-45** | **6.2.10-34** | **6.2.10-4** | **6.2.8-15** | **6.2.8-11** | **6.2.8-2** | **6.2.4-1** | +| | Nov 2024 | July 2024 | May 2024 | March 2024 | Dec 2023 | Oct 2023 | Aug 2023 | July 2023 | June 2023 | April 2023 | March 2023 | Jan 2023 | Nov 2022 | Sept 2022 | July 2022 | May 2022 | March 2022 | Jan 2022 | Jan 2022 | Nov 2021 | Sept 2021 | +| **VMware TKGI** | | | | | | | | | | | | | | | | | | | | | | +| 1.19 | | | | | | | | | | | | | | | | | | | | | | +| 1.18 | | | | | | | | | | | | | | | | | | | | | | +| 1.17 | | | | | | | | | | | | | | | | | | | | | | +| 1.16 | | :warning: | | | | | | | | | | | | | | | | | | | | +| 1.15 | | | | | | | | | | | | | | | | | | | | | | +| 1.14 | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | | | +| 1.13 | | | | | | | | :warning: | :warning: | :warning: | :warning: | | | | | | | | | | | +| 1.12 | | | | | | | | | | | | | | :warning: | | | | | | | | +| 1.11 | | | | | | | | | | | | | | :warning: | :warning: | | | | | | | +| 1.10 | | | | | | | | | | | | | | | :warning: | | | | | | | +| 1.09 | | | | | | | | | | | | | | | | | | | | | | +| 1.08 | | | | | | | | | | | | | | | | | | | | | :warning: | +| 1.07 | | | | | | | | | | | | | | | | | | | | | :warning: | {{}} -## Supported upgrade paths - If you are using a version earlier than 6.2.10-45, [you must upgrade]({{< relref "/operate/kubernetes/upgrade" >}}) to 6.2.10-45 before you can upgrade to versions 6.2.18 or later. diff --git a/content/operate/kubernetes/release-notes/6-2-18-releases/_index.md b/content/operate/kubernetes/release-notes/6-2-releases/_index.md similarity index 93% rename from content/operate/kubernetes/release-notes/6-2-18-releases/_index.md rename to content/operate/kubernetes/release-notes/6-2-releases/_index.md index 0bb2877bbc..2176b23702 100644 --- a/content/operate/kubernetes/release-notes/6-2-18-releases/_index.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/_index.md @@ -5,10 +5,10 @@ categories: - docs - operate - kubernetes -description: Release notes for the 6.2.18 releases of Redis Enterprise Software for +description: Release notes for the 6.2.x releases of Redis Enterprise Software for Kubernetes. hideListLinks: true -linkTitle: 6.2.18 releases +linkTitle: 6.2.x releases weight: 58 --- ## Before upgrading diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-10-34-2022-05.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-34-2022-05.md similarity index 97% rename from content/operate/kubernetes/release-notes/k8s-6-2-10-34-2022-05.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-34-2022-05.md index 5b395cc03f..35bcfc9cad 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-10-34-2022-05.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-34-2022-05.md @@ -9,6 +9,9 @@ description: Support for REBD specific upgrade policies, memcached type REDBs, a RHEL8 for OpenShift, as well as feature improvements and bug fixes. linktitle: 6.2.10-34 (May 2022) weight: 62 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-10-34-2022-05/, +] --- ## Overview @@ -17,7 +20,7 @@ The Redis Enterprise K8s 6.2.10-34 supports the Redis Enterprise Software releas The key new features, bug fixes, and known limitations are described below. {{}} - **Do not** upgrade to this 6.2.10-34 release if you are an **OpenShift** customer and **also use modules**. Instead, **use the [6.2.10-45]({{< relref "/operate/kubernetes/release-notes/k8s-6-2-10-45-2022-07.md" >}})** release. + **Do not** upgrade to this 6.2.10-34 release if you are an **OpenShift** customer and **also use modules**. Instead, **use the [6.2.10-45]({{< relref "/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-45-2022-07" >}})** release. There was a change in 6.2.10-34 to a new RHEL 8 base image for the Redis Server image. Due to binary differences in modules between the two operating systems, you cannot directly update RHEL 7 clusters to RHEL 8 when those clusters host databases using modules. diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-10-4-2022-03 copy.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-4-2022-03.md similarity index 97% rename from content/operate/kubernetes/release-notes/k8s-6-2-10-4-2022-03 copy.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-4-2022-03.md index b2b3f66134..690b3c9400 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-10-4-2022-03 copy.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-4-2022-03.md @@ -8,6 +8,10 @@ categories: description: Added support for RS 6.2.10 as well as feature improvements and bug fixes. linktitle: 6.2.10-4 (March 2022) weight: 63 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-10-4-2022-03-copy/, + /operate/kubernetes/release-notes/k8s-6-2-10-4-2022-03/, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-10-45-2022-07.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-45-2022-07.md similarity index 99% rename from content/operate/kubernetes/release-notes/k8s-6-2-10-45-2022-07.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-45-2022-07.md index 4bfea2082a..a84820cb9e 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-10-45-2022-07.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-10-45-2022-07.md @@ -8,6 +8,9 @@ categories: description: Support added for additional distributions as well as some feature improvements. linktitle: 6.2.10-45 (July 2022) weight: 61 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-10-45-2022-07/, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-12-1.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-12-1.md similarity index 99% rename from content/operate/kubernetes/release-notes/k8s-6-2-12-1.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-12-1.md index 65fe5f7cda..c04d49463d 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-12-1.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-12-1.md @@ -9,6 +9,9 @@ description: Support added for additional distributions, as well as feature impr and bug fixes. linktitle: 6.2.12-1 (Sept 2022) weight: 60 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-12-1/, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-3.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-3.md similarity index 98% rename from content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-3.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-3.md index ec95aa9fff..7d9dc3b19d 100644 --- a/content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-3.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-3.md @@ -8,6 +8,9 @@ categories: description: Support added for additional distributions, as well as feature improvements and bug fixes. linktitle: 6.2.18-3 (Nov 2022) weight: 60 +aliases: [ + /operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41/, +] --- ## Overview @@ -16,7 +19,7 @@ The Redis Enterprise K8s 6.2.18-3 supports the Redis Enterprise Software release The key bug fixes, new features, and known limitations are described below. {{}} -If you use NGINX as an ingress controller for Redis Enterprise, **do not upgrade** to the 6.2.18-3 release. Skip this release and upgrade to version [6.2.18-41]({{< relref "/operate/kubernetes/release-notes/6-2-18-releases/" >}}) instead. +If you use NGINX as an ingress controller for Redis Enterprise, **do not upgrade** to the 6.2.18-3 release. Skip this release and upgrade to version [6.2.18-41]({{< relref "/operate/kubernetes/release-notes/6-2-releases/" >}}) instead. {{}} ## Images diff --git a/content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41-jan-2023.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41-jan-2023.md similarity index 85% rename from content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41-jan-2023.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41-jan-2023.md index c77c8c2a1d..f85cfb29f0 100644 --- a/content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41-jan-2023.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41-jan-2023.md @@ -8,12 +8,15 @@ categories: description: This is a maintenance release for 6.2.18 and includes support for Redis Enterprise 6.2.18-72. linktitle: 6.2.18-41 (Jan 2023) weight: 58 +aliases: [ + /operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41-jan-2023/, +] --- ## Overview This is a maintenance release of Redis Enterprise for Kubernetes 6.2.18-41 that adds supports for Redis Enterprise 6.2.18-72. -New images and fixes are listed below. Refer to [6.2.18-41 (Dec 2022]({{< relref "/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41.md" >}}) for compatibility notes and known limitations. +New images and fixes are listed below. Refer to [6.2.18-41 (Dec 2022]({{< relref "/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41.md" >}}) for compatibility notes and known limitations. {{}} Due to a change in the SCC, on OpenShift clusters running version 6.2.12 or earlier upgrading to version 6.2.18 or later, where `node:1` is not the master node, the upgrade might get stuck. @@ -44,7 +47,7 @@ DockerHub images are available at `docker.io/`. ## Compatibility notes -See [Redis Enterprise for Kubernetes release notes 6.2.18-41 (Dec 2022)]({{< relref "/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41.md" >}}). +See [Redis Enterprise for Kubernetes release notes 6.2.18-41 (Dec 2022)]({{< relref "/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41.md" >}}). ## Before upgrading @@ -56,7 +59,7 @@ Be aware the following changes included in this release affect the upgrade proce ## Known limitations -See [Redis Enterprise for Kubernetes release notes 6.2.18-41 (Dec 2022)]({{< relref "/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41.md" >}}). +See [Redis Enterprise for Kubernetes release notes 6.2.18-41 (Dec 2022)]({{< relref "/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41.md" >}}). ## Security diff --git a/content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41.md similarity index 98% rename from content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41.md index f290d10928..1a6bd7830f 100644 --- a/content/operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-18-41.md @@ -8,6 +8,9 @@ categories: description: This is a maintenance release for 6.2.18 and includes bug fixes. linktitle: 6.2.18-41 (Dec 2022) weight: 59 +aliases: [ + /operate/kubernetes/release-notes/6-2-18-releases/k8s-6-2-18-41/, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-4-1-2021-09.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-4-1-2021-09.md similarity index 99% rename from content/operate/kubernetes/release-notes/k8s-6-2-4-1-2021-09.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-4-1-2021-09.md index aab0be148a..90ef1ff3a8 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-4-1-2021-09.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-4-1-2021-09.md @@ -9,6 +9,9 @@ description: Support for RS 6.2.4 and OpenShift 4.8. Support for K8s 1.19 (EKS a AKS), K8s 1.20 (Rancher, EKS, AKS), K8s 1.21 (GKE and kOps). linkTitle: 6.2.4-1 (September 2021) weight: 67 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-4-1-2021-09/, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-8-11-2022-01.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-11-2022-01.md similarity index 99% rename from content/operate/kubernetes/release-notes/k8s-6-2-8-11-2022-01.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-11-2022-01.md index e57b6ae528..de8de554b3 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-8-11-2022-01.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-11-2022-01.md @@ -9,6 +9,9 @@ description: Support for Istio as ingress controller, K8s 1.22 (AKS, kOps, GKE), 4.9 linktitle: 6.2.8-11 (January 2022) weight: 65 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-8-11-2022-01/, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-8-15-2022-01.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-15-2022-01.md similarity index 98% rename from content/operate/kubernetes/release-notes/k8s-6-2-8-15-2022-01.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-15-2022-01.md index cf4269cb1f..cda9299586 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-8-15-2022-01.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-15-2022-01.md @@ -8,6 +8,9 @@ categories: description: Maintenance release with bug fixes linktitle: 6.2.8-15 (January 2022) weight: 64 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-8-15-2022-01.md, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/k8s-6-2-8-2-2021-11.md b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-2-2021-11.md similarity index 98% rename from content/operate/kubernetes/release-notes/k8s-6-2-8-2-2021-11.md rename to content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-2-2021-11.md index c668d8b7d5..f416f0cf9b 100644 --- a/content/operate/kubernetes/release-notes/k8s-6-2-8-2-2021-11.md +++ b/content/operate/kubernetes/release-notes/6-2-releases/k8s-6-2-8-2-2021-11.md @@ -8,6 +8,9 @@ categories: description: Support for RS 6.2.8, certificate management, and Redis upgrade policy. linktitle: 6.2.8-2 (November 2021) weight: 66 +aliases: [ + /operate/kubernetes/release-notes/k8s-6-2-8-2-2021-11/, +] --- ## Overview diff --git a/content/operate/kubernetes/release-notes/7-8-2-releases/7-8-2-6-nov24.md b/content/operate/kubernetes/release-notes/7-8-2-releases/7-8-2-6-nov24.md new file mode 100644 index 0000000000..9acdb4e891 --- /dev/null +++ b/content/operate/kubernetes/release-notes/7-8-2-releases/7-8-2-6-nov24.md @@ -0,0 +1,162 @@ +--- +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Feature release including support for Redis Software 7.8.2 and RHEL9-based images. +hideListLinks: true +linkTitle: 7.8.2-6 (Nov 2024) +title: Redis Enterprise for Kubernetes 7.8.2-6 (Nov 2024) release notes +weight: 80 +--- + +## Highlights + +## New in this release + +### Enhancements + +- Parallel startup and recovery (enabled by default) (RED-117645). +- Azure marketplate deployment (RED-113029) +- Support for [Redis Software 7.8.2-34]({{}}). +- Improved upgrade validations for modules and Redis database versions (RED-132197). +- Support for Community Kubernetes 1.31 (RED-13549). +- New minimal roles required to use the log collector (RED-132686). +- Support proxy certificate updates for Active-Active databases (RED-122552). +- Add `directory_timeout_s` field to LDAP configuration (RED-119079). +- Allow configuring port number for replication endpoints in Active-Active databases (RED-113626). + +### Resolved issues + +- Fixed documentation for REAADB `globalConfigurations` field (RED-138727). +- Allow log collector execution without `kubectl` installed (RED-131537). +- Fix recreation issue for rec-bulletin-board config map (RED-130599). +- Avoid deletion of operator config maps created by users (RED-129214). +- Fixed errors shown in bootstrapper logs (RED-125776). +- Limit the number of calls made to Vault (RED-125396). +- Fixed log collector issue with detecting version (RED-121144). + +### API changes + +| **CRD** | **Field** | **Change** | **Description** | +|---|---|---|---| +| REC | `status.CertificatesUpdateStatus` | Rename | Renamed status field and changed the structure | +| REC | `status.state` | Add value to enum | `runningRollingUpgrade` | +| REDB | `spec.modulesList` | Field enabled | Don't need to set `ENABLE_ALPHA_FEATURES` to enable. | +| RERC | `spec.apiPort` | Added | | +| REDB | `redb.upgradeSpec.upgradeModulesToLatest` | Changed default | Default is now `true` | + +## Version changes + +### Breaking changes + +#### RHEL9-based images + +- Redis Enterprise images are now based on Red Hat Enterprise Linux 9 (RHEL9). This means upgrades to 7.8.2-6 require: + +- Cluster version of 7.4.2-2 or later. +- Database version 7.2 or later. +- RHEL9 compatible binaries for any modules you need. + +See [Upgrade Redis Enterprise for Kubernetes]({{}}) for detailed steps to upgrade to 7.8.2-6. + +### Deprecations + +- Ubuntu-based images are no longer supported. +- REDB field `upgradeSpec.upgradeModulesToLatest is deprecated. +- REDB field `spec.modulesList.version` is deprecated. + +## Supported distributions + +The following table shows supported distributions at the time of this release. You can also find this list in [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}). + + Supported – This distribution is supported for this version of Redis Enterprise Software for Kubernetes. + +:warning: Deprecated – This distribution is still supported for this version of Redis Enterprise Software for Kubernetes, but support will be removed in a future release. + + End of life – Support for this distribution ended. + +Any distribution not listed below is not supported for production workloads. + +| **Kubernetes version** | **1.25** | **1.26** | **1.27** | **1.28** | **1.29** | **1.30** | **1.31** | +|---|---|---|---|---|---|---|---| +| **Community Kubernetes** | | | | | | | | +| **Amazon EKS** | | | :warning: | | | | | +| **Azure AKS** | | | :warning: | | | | | +| **Google GKE** | | | | | | | | +| **Rancher RKE2** | | :warning: | | | | | | +| **VMware TKG 2.3** | | :warning: | | | | | | +| **VMware TKG 2.4** | | | | | | | | +| **OpenShift** | **4.12** | **4.13** | **4.14** | **4.15** | **4.16** | | | +| **** | | | | | | | | +| **VMWare TKGI** | **1.16** | **1.17** | **1.18** | **1.19** | | | | +| **** | | | | | | | | + +## Downloads + +**Redis Enterprise**: `redislabs/redis:7.8.2-34` +**Operator**: `redislabs/operator:7.8.2-6` +**Services Rigger**: `redislabs/k8s-controller:7.8.2-6` +**OLM operator bundle**: `v7.8.2-6.3` + +## Known limitations + +### New limitations + +- **Only upgrades from 7.4.2-2 and later are supported.** If you are using an earlier version, install 7.4.2-2 before upgrading to 7.8.2-6. + +- **When changing the REDB field `spec.modulesList` version might be upgraded to latest even if a different version is specified.** To prevent the upgrade to latest, set `spec.upgradeSpec.setModuleToLatest` to `false` before upgrading to 7.8.2-6. + +### Existing limitations + +- **Missing endpoint for admission endpoint (rare) (RED-119469)** Restart the operator pod. + +- **The REDB “redisVersion” field can’t be used for memcached databases(RED-119152)** + +- **When modifying the database suffix for an Active-Active database, while the service-rigger is in a terminating state, the services-rigger will delete and create the ingress or route resources in a loop (RED-107687)** Wait until the services rigger pod has finished to terminate it. + +- **REAADB changes might fail with "gateway timeout" errors, mostly on OpenShift (RED-103048)** Retry the operation. + +- **Creating two databases with the same name directly on Redis Enterprise software will cause the service to be deleted and the database will not be available (RED-99997)** Avoid duplicating database names. Database creation via K8s has validation in place to prevent this. + +- **Installing the operator bundle produces warning: `Warning: would violate PodSecurity "restricted: v1.24"` (RED-97381)** Ignore the warning. This issue is documented as benign on official Red Hat documentation. + +- **RERC resources must have a unique name (RED-96302)** The string "rec-name"/"rec-namespace" must be different from all other participating clusters in the Active-Active database. + +- **Admission is not blocking REAADB with `shardCount` which exceeds license quota (RED-96301)** Fix the problems with the REAADB and reapply. + +- **Active-Active controller only supports global database options. Configuration specific to location is not supported (RED-86490)** + +- **Active-Active setup removal might keep services or routes undeleted (RED-77752)** Delete services or routes manually if you encounter this problem. + +- **`autoUpgrade` set to `true` can cause unexpected bdb upgrades when `redisUpgradePolicy` is set to `true` (RED-72351)** Contact support if your deployment is impacted. + +- **Following the previous quick start guide version causes issues with creating an REDB due to unrecognized memory field name (RED-69515)** The workaround is to use the newer (current) revision of Deploy Redis Enterprise Software for Kubernetes. + +- **PVC size issues when using decimal value in spec (RED-62132)** Make sure you use integer values for the PVC size. + +- **REC might report error states on initial startup (RED-61707)** There is no workaround at this time except to ignore the errors. + +- **Hashicorp Vault integration - no support for Gesher (RED-55080)** There is no workaround for this issue. Gesher support has been deprecated. + +- **REC clusters fail to start on Kubernetes clusters with unsynchronized clocks (RED-47254)** When REC clusters are deployed on Kubernetes clusters without synchronized clocks, the REC cluster does not start correctly. The fix is to use NTP to synchronize the underlying K8s nodes. + +- **Deleting an OpenShift project with an REC deployed may hang (RED-47192)** When an REC cluster is deployed in a project (namespace) and has REDB resources, the REDB resources must be deleted first before the REC can be deleted. Therefore, until the REDB resources are deleted, the project deletion will hang. The fix is to delete the REDB resources first and the REC second. Then, you can delete the project. + +- **Clusters must be named 'rec' in OLM-based deployments (RED-39825)** In OLM-deployed operators, the deployment of the cluster will fail if the name is not "rec". When the operator is deployed via the OLM, the security context constraints (scc) are bound to a specific service account name (namely, "rec"). The workaround is to name the cluster "rec". + +- **Readiness probe incorrect on failures (RED-39300)** STS Readiness probe does not mark a node as "not ready" when running `rladmin status` on node failure. + +- **Internal DNS and Kubernetes DNS may have conflicts (RED-37462)** DNS conflicts are possible between the cluster `mdns_server` and the K8s DNS. This only impacts DNS resolution from within cluster nodes for Kubernetes DNS names. + +- **K8s-based 5.4.10 clusters seem to negatively affect existing 5.4.6 clusters (RED-37233)** Upgrade clusters to latest version. + +- **Node CPU usage is reported instead of pod CPU usage (RED-36884)** In Kubernetes, the reported node CPU usage is the usage of the Kubernetes worker node hosting the REC pod. + +- **An unreachable cluster has status running (RED-32805)** When a cluster is in an unreachable state, the state remains `running` instead of triggering an error. + +- **Long cluster names cause routes to be rejected (RED-25871)** A cluster name longer than 20 characters will result in a rejected route configuration because the host part of the domain name exceeds 63 characters. The workaround is to limit the cluster name to 20 characters or fewer. + +- **Cluster CR (REC) errors are not reported after invalid updates (RED-25542)** A cluster CR specification error is not reported if two or more invalid CR resources are updated in sequence. + diff --git a/content/operate/kubernetes/release-notes/7-8-2-releases/_index.md b/content/operate/kubernetes/release-notes/7-8-2-releases/_index.md new file mode 100644 index 0000000000..052be3ff91 --- /dev/null +++ b/content/operate/kubernetes/release-notes/7-8-2-releases/_index.md @@ -0,0 +1,96 @@ +--- +alwaysopen: false +categories: +- docs +- operate +- kubernetes +description: Releases with support for Redis Enterprise Software 7.8.2 +hideListLinks: true +linkTitle: 7.8.2-6 +title: Redis Enterprise for Kubernetes 7.8.2-6 release notes +weight: 51 +--- + +Redis Enterprise for Kubernetes 7.8.2-6 is a feature release including support for Redis Software 7.8.2-2. + +## Detailed release notes + +{{}} + +## Breaking changes + +The following changes included in this release affect the upgrade process. Please read carefully before upgrading. + +### RHEL9-based images + +- Redis Enterprise images are now based on RHEL9. +- Ubuntu images are no longer supported. + +This means upgrades to 7.8.2-6 require: + +- Cluster version of 7.4.2-2 or later. +- Database version 7.2 or later. +- RHEL9 compatible binaries for any modules you need. + +See [Upgrade Redis Enterprise for Kubernetes]({{}}) for detailed steps to upgrade to 7.8.2-6. + +## Known limitations + +### New limitations + +- **Only upgrades from 7.4.2-2 and later are supported.** If you are using an earlier version, install 7.4.2-2 before upgrading to 7.8.2-6. + +- **When changing the REDB field `spec.modulesList` version might be upgraded to latest even if a different version is specified.** To prevent the upgrade to latest, set `spec.upgradeSpec.setModuleToLatest` to `false` before upgrading to 7.8.2-6. + +### Existing limitations + +- **Missing endpoint for admission endpoint (rare) (RED-119469)** Restart the operator pod. + +- **The REDB “redisVersion” field can’t be used for memcached databases(RED-119152)** + +- **When modifying the database suffix for an Active-Active database, while the service-rigger is in a terminating state, the services-rigger will delete and create the ingress or route resources in a loop (RED-107687)** Wait until the services rigger pod has finished to terminate it. + +- **REAADB changes might fail with "gateway timeout" errors, mostly on OpenShift (RED-103048)** Retry the operation. + +- **Creating two databases with the same name directly on Redis Enterprise software will cause the service to be deleted and the database will not be available (RED-99997)** Avoid duplicating database names. Database creation via K8s has validation in place to prevent this. + +- **Installing the operator bundle produces warning: `Warning: would violate PodSecurity "restricted: v1.24"` (RED-97381)** Ignore the warning. This issue is documented as benign on official Red Hat documentation. + +- **RERC resources must have a unique name (RED-96302)** The string "rec-name"/"rec-namespace" must be different from all other participating clusters in the Active-Active database. + +- **Admission is not blocking REAADB with `shardCount` which exceeds license quota (RED-96301)** Fix the problems with the REAADB and reapply. + +- **Active-Active controller only supports global database options. Configuration specific to location is not supported (RED-86490)** + +- **Active-Active setup removal might keep services or routes undeleted (RED-77752)** Delete services or routes manually if you encounter this problem. + +- **`autoUpgrade` set to `true` can cause unexpected bdb upgrades when `redisUpgradePolicy` is set to `true` (RED-72351)** Contact support if your deployment is impacted. + +- **Following the previous quick start guide version causes issues with creating an REDB due to unrecognized memory field name (RED-69515)** The workaround is to use the newer (current) revision of Deploy Redis Enterprise Software for Kubernetes. + +- **PVC size issues when using decimal value in spec (RED-62132)** Make sure you use integer values for the PVC size. + +- **REC might report error states on initial startup (RED-61707)** There is no workaround at this time except to ignore the errors. + +- **Hashicorp Vault integration - no support for Gesher (RED-55080)** There is no workaround for this issue. Gesher support has been deprecated. + +- **REC clusters fail to start on Kubernetes clusters with unsynchronized clocks (RED-47254)** When REC clusters are deployed on Kubernetes clusters without synchronized clocks, the REC cluster does not start correctly. The fix is to use NTP to synchronize the underlying K8s nodes. + +- **Deleting an OpenShift project with an REC deployed may hang (RED-47192)** When an REC cluster is deployed in a project (namespace) and has REDB resources, the REDB resources must be deleted first before the REC can be deleted. Therefore, until the REDB resources are deleted, the project deletion will hang. The fix is to delete the REDB resources first and the REC second. Then, you can delete the project. + +- **Clusters must be named 'rec' in OLM-based deployments (RED-39825)** In OLM-deployed operators, the deployment of the cluster will fail if the name is not "rec". When the operator is deployed via the OLM, the security context constraints (scc) are bound to a specific service account name (namely, "rec"). The workaround is to name the cluster "rec". + +- **Readiness probe incorrect on failures (RED-39300)** STS Readiness probe does not mark a node as "not ready" when running `rladmin status` on node failure. + +- **Internal DNS and Kubernetes DNS may have conflicts (RED-37462)** DNS conflicts are possible between the cluster `mdns_server` and the K8s DNS. This only impacts DNS resolution from within cluster nodes for Kubernetes DNS names. + +- **K8s-based 5.4.10 clusters seem to negatively affect existing 5.4.6 clusters (RED-37233)** Upgrade clusters to latest version. + +- **Node CPU usage is reported instead of pod CPU usage (RED-36884)** In Kubernetes, the reported node CPU usage is the usage of the Kubernetes worker node hosting the REC pod. + +- **An unreachable cluster has status running (RED-32805)** When a cluster is in an unreachable state, the state remains `running` instead of triggering an error. + +- **Long cluster names cause routes to be rejected (RED-25871)** A cluster name longer than 20 characters will result in a rejected route configuration because the host part of the domain name exceeds 63 characters. The workaround is to limit the cluster name to 20 characters or fewer. + +- **Cluster CR (REC) errors are not reported after invalid updates (RED-25542)** A cluster CR specification error is not reported if two or more invalid CR resources are updated in sequence. + diff --git a/content/operate/kubernetes/upgrade/_index.md b/content/operate/kubernetes/upgrade/_index.md index 60686a6b51..d34cf8df8f 100644 --- a/content/operate/kubernetes/upgrade/_index.md +++ b/content/operate/kubernetes/upgrade/_index.md @@ -1,5 +1,5 @@ --- -Title: Upgrade Redis Enterprise for Kubernetes +Title: Upgrade Redis Enterprise for Kubernetes 7.8.2-6 alwaysopen: false categories: - docs @@ -11,30 +11,32 @@ linkTitle: Upgrade weight: 15 --- -Redis implements rolling updates for software upgrades in Kubernetes deployments. The upgrade process includes updating three components: +The upgrade process includes updating three components: 1. Upgrade the Redis Enterprise operator 2. Upgrade the Redis Enterprise cluster (REC) 3. Upgrade Redis Enterprise databases (REDB) -To use OpenShift container platform CLI to upgrade your Redis Enterprise, see [Upgrade Redis Enterprise with OpenShift CLI]({{< relref "/operate/kubernetes/upgrade/openshift-cli.md" >}}). +If you are using OpenShift, see [Upgrade Redis Enterprise with OpenShift CLI]({{}}) or [Upgrade Redis Enterprise with OpenShift OperatorHub]({{}}). -For all other Kubernetes distributions, see [Upgrade Redis Enterprise for Kubernetes]({{< relref "/operate/kubernetes/upgrade/upgrade-redis-cluster.md" >}}). +For all other Kubernetes distributions, see [Upgrade Redis Enterprise for Kubernetes]({{}}). ## Upgrade compatibility -When upgrading, both your Kubernetes version and Redis operator version need to be supported at all times. When upgrading your Kubernetes version, you need to make sure both the current and target K8s version are supported by your Redis operator version. When upgrading your Redis operator version, you need make sure both the current and target operator versions are supported by your K8s version. This means if you are planning a large jump in versions, the upgrade might need to be done in multiple steps. +When upgrading, both your Kubernetes version and Redis operator version need to be supported at all times. -The flow chart below can help you decide if your upgrade requires multiple steps. +{{}}If your current Kubernetes distribution is not [supported by 7.8.2-6]({{}}), upgrade to a supported distribution before upgrading. {{}} -{{< image filename="/images/k8s/upgrade-flowchart.jpg" alt="Upgrade flowchart" >}} +## RHEL9-based image -## How does the REC upgrade work? +Redis Enterprise images are now based on Red Hat Enterprise Linux 9 (RHEL9). This means upgrades to 7.8.2-6 require: -The Redis Enterprise cluster (REC) uses a rolling upgrade, meaning it upgrades pods one by one. Each pod is updated after the last one completes successfully. This helps keep your cluster available for use. +- Cluster version of 7.4.2-2 or later. +- Database version 7.2 or later. +- RHEL9 compatible binaries for any modules you need. -To upgrade, the cluster terminates each pod and deploys a new pod based on the new image. - Before each pod goes down, the operator checks if the pod is a primary (master) for the cluster, and if it hosts any primary (master) shards. If so, a replica on a different pod is promoted to primary. Then when the pod is terminated, the API remains available through the newly promoted primary pod. +For detailed steps, see the relevant upgrade page: -After a pod is updated, the next pod is terminated and updated. -After all of the pods are updated, the upgrade process is complete. +- [OpenShift CLI]({{}}) +- [OpenShift OperatorHub]({{}}) +- [Kubernetes]({{}}) \ No newline at end of file diff --git a/content/operate/kubernetes/upgrade/openshift-cli.md b/content/operate/kubernetes/upgrade/openshift-cli.md index a339c4849e..fd148efb3c 100644 --- a/content/operate/kubernetes/upgrade/openshift-cli.md +++ b/content/operate/kubernetes/upgrade/openshift-cli.md @@ -1,5 +1,5 @@ --- -Title: Upgrade Redis Enterprise with OpenShift CLI +Title: Upgrade Redis Enterprise 7.8.2-6 with OpenShift CLI alwaysopen: false categories: - docs @@ -14,21 +14,48 @@ weight: 20 Redis implements rolling updates for software upgrades in Kubernetes deployments. The upgrade process includes updating three components: 1. [Upgrade the Redis Enterprise operator](#upgrade-the-operator) - 2. [Upgrade the Redis Enterprise cluster (REC)](#upgrade-the-redisenterprisecluster-rec) - 3. [Upgrade Redis Enterprise databases (REDB)](#upgrade-databases) + 1. [Upgrade the Redis Enterprise cluster (REC)](#upgrade-the-redis-enterprise-cluster-rec) + 1. [Upgrade Redis Enterprise databases (REDB)](#upgrade-databases) -## Before upgrading +## Prerequisites -1. Check [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) to make sure your Kubernetes distribution is supported. +The following steps ensure you have the minimum versions of all components necessary to upgrade to 7.8.2-6. **Without these minimum versions, the upgrade will freeze and require manual recovery.** -2. Use `oc get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. +See the [troubleshooting](#troubleshooting) section for details on recovering a failed upgrade. -3. Verify you are upgrading from Redis Enterprise operator version 6.2.10-45 or later. If you are not, you must upgrade to 6.2.10-45 before upgrading to versions 6.2.18 or later. +### Kubernetes version -4. When upgrading existing clusters running on RHEL7-based images, make sure to select a RHEL7-based image for the new version. See [release notes]({{< relref "/operate/kubernetes/release-notes/" >}}) for more info. +Check [Supported Kubernetes distributions]({{}}) to make sure your Kubernetes distribution is supported by 7.8.2-6. If not, upgrade your Kubernetes distribution before upgrading the Redis operator. -5. If you want to migrate from RHEL7-based images to RHEL8-based images, you'll need to upgrade to version 7.2.4-2 with a RHEL7-based image, then you'll be able to migrate to a RHEL8-based image when upgrading to 7.2.4-**TBD**. +### Redis operator version +Your Redis Enterprise clusters must be running version 7.4.2-2 or later before upgrading to 7.8.2-6. See the [7.4 upgrade]({{}}) for detailed steps. + +### Redis database version + +Your Redis databases must be running version 7.2 or later before upgrading your cluster version to 7.8.2-6. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). + +### RHEL9-compatible modules + +Upgrading to Redis operator version 7.8.2-6 involves migrating your Redis Enterprise nodes to RHEL9 from either Ubuntu 18 or RHEL8. If your databases use modules, you need to manually install modules compatibile with RHEL9. + +To see which modules you have installed, run: + +```sh +curl -k -u : -X GET https://localhost:9443/v1/modules | jq -r 'map([.module_name, .semantic_version, (.platforms | keys)]) | .[] | .[0] as $name | .[1] as $version | .[2][] | $name + "-" + $version + "-" + .' | sort +``` + +To see which modules are currently in use, run: + +```sh +curl -k -u : -X GET https://localhost:9443/v1/bdbs | jq -r '.[].module_list | map(.module_name + "-" + .semantic_version) | .[]' +``` + +See [Upgrade modules]({{}}) for details on how to upgrade modules with the `rladmin` tool. + +### Valid license + +Use `kubectl get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. ## Upgrade the operator ### Download the bundle @@ -174,38 +201,34 @@ To see the status of the current rolling upgrade, run: oc rollout status sts ``` -## After upgrading - -For OpenShift users, operator version 6.4.2-6 introduced a new SCC (`redis-enterprise-scc-v2`). If any of your OpenShift RedisEnterpriseClusters are running versions earlier than 6.2.4-6, you need to keep both the new and old versions of the SCC. +### Upgrade databases -If all of your clusters have been upgraded to operator version 6.4.2-6 or later, you can delete the old version of the SCC (`redis-enterprise-scc`) and remove the binding to your service account. +After the cluster is upgraded, you can upgrade your databases. Specify your new database version in the `spec.redisVersion` field for your REDB and REAADB custom resources. Supported database versions for operator version 7.8.2-6 include `"7.2"` and `"7.4"` (note this value is a string). -1. Delete the old version of the SCC +Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. - ```sh - oc delete scc redis-enterprise-scc - ``` +## Troubleshooting - The output should look similar to the following: +If you start an upgrade without meeting the [prerequisites](#prerequisites), the operator will freeze the upgrade. Check the operator logs for the source of the error. The REDB reconsilliation doesn't work during an upgrade, so you need to apply a manual fix with the Redis Software API (examples below). The updates will also need to be added to the REDB custom resource. - ```sh - securitycontextconstraints.security.openshift.io "redis-enterprise-scc" deleted - ``` +### Invalid module version -1. Remove the binding to your service account. - - ```sh - oc adm policy remove-scc-from-user redis-enterprise-scc system:serviceaccount:: - ``` +If the operator logs show an event related to an unsupported module, download the updated module locally, and install it using the `v2/modules` API endpoint. +```sh +curl -sfk -u : -X POST -F 'module=@' https://localhost:9443/v2/modules +``` -## Upgrade databases +After updating the modules with the Redis Software API, update the REDB custom resource to reflect the change. -{{}}In version 7.2.4, old module versions and manually uploaded modules are not persisted. If databases are not upgraded after cluster upgrade, and require cluster recovery afterwards, you'll need to contact Redis support. This issue will be fixed in the next maintenance release by moving the stored location of the modules.{{}} +### Invalid database version -After the cluster is upgraded, you can upgrade your databases. The process for upgrading databases is the same for both Kubernetes and non-Kubernetes deployments. For more details on how to [upgrade a database]({{< relref "/operate/rs/installing-upgrading/upgrading/upgrade-database" >}}), see the [Upgrade an existing Redis Enterprise Software deployment]({{< relref "/operate/rs/installing-upgrading/upgrading" >}}) documentation. +If the operator logs show an event related to an incompatible database version, upgrade the database using the Redis Software API. -Note that if your cluster [`redisUpgradePolicy`]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api#redisupgradepolicy" >}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. +```sh +curl -sfk -u : -X POST -H "Content-Type: application/json" -d '{"redis_version": }' https://localhost:9443/v1/bdbs//upgrade +``` +After updating the modules with the Redis Software API, update the REDB custom resource to reflect the change. diff --git a/content/operate/kubernetes/upgrade/upgrade-olm.md b/content/operate/kubernetes/upgrade/upgrade-olm.md index b262eca6cb..436503a805 100644 --- a/content/operate/kubernetes/upgrade/upgrade-olm.md +++ b/content/operate/kubernetes/upgrade/upgrade-olm.md @@ -1,5 +1,5 @@ --- -Title: Upgrade Redis Enterprise with OpenShift OperatorHub +Title: Upgrade Redis Enterprise 7.8.2-6 with OpenShift OperatorHub alwaysopen: false categories: - docs @@ -11,13 +11,51 @@ linkTitle: OpenShift OperatorHub weight: 40 --- -## Before upgrading +Redis implements rolling updates for software upgrades in Kubernetes deployments. The upgrade process includes updating three components: -1. Check [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) to make sure your Kubernetes distribution is supported. + 1. [Upgrade the Redis Enterprise operator](#upgrade-the-operator) + 1. [Upgrade the Redis Enterprise cluster (REC)](#upgrade-the-redis-enterprise-cluster-rec) + 1. [Upgrade Redis Enterprise databases (REDB)](#upgrade-databases) -2. Use `oc get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. +## Prerequisites -3. Verify you are upgrading from Redis Enterprise operator version 6.2.10-45 or later. If you are not, you must upgrade to 6.2.10-45 before upgrading to versions 6.2.18 or later. +The following steps ensure you have the minimum versions of all components necessary to upgrade to 7.8.2-6. **Without these minimum versions, the upgrade will freeze and require manual recovery.** + +See the [troubleshooting](#troubleshooting) section for details on recovering a failed upgrade. + +### Kubernetes version + +Check [Supported Kubernetes distributions]({{}}) to make sure your Kubernetes distribution is supported by 7.8.2-6. If not, upgrade your Kubernetes distribution before upgrading the Redis operator. + +### Redis operator version + +Your Redis Enterprise clusters must be running version 7.4.2-2 or later before upgrading to 7.8.2-6. See the [7.4 upgrade]({{}}) for detailed steps. + +### Redis database version + +Your Redis databases must be running version 7.2 or later before upgrading your cluster version to 7.8.2-6. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). + +### RHEL9-compatible modules + +Upgrading to Redis operator version 7.8.2-6 involves migrating your Redis Enterprise nodes to RHEL9 from either Ubuntu 18 or RHEL8. If your databases use modules, you need to manually install modules compatibile with RHEL9. + +To see which modules you have installed, run: + +```sh +curl -k -u : -X GET https://localhost:9443/v1/modules | jq -r 'map([.module_name, .semantic_version, (.platforms | keys)]) | .[] | .[0] as $name | .[1] as $version | .[2][] | $name + "-" + $version + "-" + .' | sort +``` + +To see which modules are currently in use, run: + +```sh +curl -k -u : -X GET https://localhost:9443/v1/bdbs | jq -r '.[].module_list | map(.module_name + "-" + .semantic_version) | .[]' +``` + +See [Upgrade modules]({{}}) for details on how to upgrade modules with the `rladmin` tool. + +### Valid license + +Use `kubectl get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. ## Upgrade the Redis Enterprise operator @@ -48,4 +86,32 @@ oc adm policy add-scc-to-user redis-enterprise-scc-v2 \ system:serviceaccount:: ``` -If you are upgrading from operator version 6.4.2-6 or before, see the [after upgrading section in the OpenShift CLI upgrade]({{}}) to delete the old SCC and role binding after all clusters are running 6.4.2-6 or later. +### Upgrade databases + +After the cluster is upgraded, you can upgrade your databases. Specify your new database version in the `spec.redisVersion` field for your REDB and REAADB custom resources. Supported database versions for operator version 7.8.2-6 include `"7.2"` and `"7.4"` (note this value is a string). + +Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. + +## Troubleshooting + +If you start an upgrade without meeting the [prerequisites](#prerequisites), the operator will freeze the upgrade. Check the operator logs for the source of the error. The REDB reconsilliation doesn't work during an upgrade, so you need to apply a manual fix with the Redis Software API (examples below). The updates will also need to be added to the REDB custom resource. + +### Invalid module version + +If the operator logs show an event related to an unsupported module, download the updated module locally, and install it using the `v2/modules` API endpoint. + +```sh +curl -sfk -u : -X POST -F 'module=@' https://localhost:9443/v2/modules +``` + +After updating the modules with the Redis Software API, update the REDB custom resource to reflect the change. + +### Invalid database version + +If the operator logs show an event related to an incompatible database version, upgrade the database using the Redis Software API. + +```sh +curl -sfk -u : -X POST -H "Content-Type: application/json" -d '{"redis_version": }' https://localhost:9443/v1/bdbs//upgrade +``` + +After updating the modules with the Redis Software API, update the REDB custom resource to reflect the change. diff --git a/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md b/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md index e95947e35c..65706688f4 100644 --- a/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md +++ b/content/operate/kubernetes/upgrade/upgrade-redis-cluster.md @@ -1,5 +1,5 @@ --- -Title: Upgrade Redis Enterprise for Kubernetes +Title: Upgrade Redis Enterprise for Kubernetes 7.8.2-6 alwaysopen: false categories: - docs @@ -9,6 +9,9 @@ description: This task describes how to upgrade a Redis Enterprise cluster via t operator. linkTitle: Kubernetes weight: 10 +aliases: [ + operate/kubernetes/re-clusters/upgrade-redis-cluster/, +] --- Redis implements rolling updates for software upgrades in Kubernetes deployments. The upgrade process includes updating three components: @@ -19,13 +22,43 @@ Redis implements rolling updates for software upgrades in Kubernetes deployments ## Prerequisites -1. Check [Supported Kubernetes distributions]({{< relref "/operate/kubernetes/reference/supported_k8s_distributions" >}}) to make sure your Kubernetes distribution is supported. +The following steps ensure you have the minimum versions of all components necessary to upgrade to 7.8.2-6. **Without these minimum versions, the upgrade will freeze and require manual recovery.** -1. Use `kubectl get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. +See the [troubleshooting](#troubleshooting) section for details on recovering a failed upgrade. -1. Verify you are upgrading from Redis Enterprise operator version 6.2.10-45 or later. If you are not, you must upgrade to 6.2.10-45 before upgrading to versions 6.2.18 or later. +### Kubernetes version -{{}}**Upgrade cluster operating system** If your databases use modules, you need to update all nodes in the cluster to Redis Enterprise 7.2.4 or later before upgrading your operating system. See [Upgrade a cluster's operating system]({{< relref "/operate/rs/installing-upgrading/upgrading/upgrade-os" >}})in the Redis Enterprise Software documentation for more details.{{}} +Check [Supported Kubernetes distributions]({{}}) to make sure your Kubernetes distribution is supported by 7.8.2-6. If not, upgrade your Kubernetes distribution before upgrading the Redis operator. + +### Redis operator version + +Your Redis Enterprise clusters must be running version 7.4.2-2 or later before upgrading to 7.8.2-6. See the [7.4 upgrade]({{}}) for detailed steps. + +### Redis database version + +Your Redis databases must be running version 7.2 or later before upgrading your cluster version to 7.8.2-6. See [upgrade databases](#upgrade-databases) for detailed steps. You can find your database version in the [REDB `spec.redisVersion` field]({{}}). + +### RHEL9-compatible modules + +Upgrading to Redis operator version 7.8.2-6 involves migrating your Redis Enterprise nodes to RHEL9 from either Ubuntu 18 or RHEL8. If your databases use modules, you need to manually install modules compatibile with RHEL9. + +To see which modules you have installed, run: + +```sh +curl -k -u : -X GET https://localhost:9443/v1/modules | jq -r 'map([.module_name, .semantic_version, (.platforms | keys)]) | .[] | .[0] as $name | .[1] as $version | .[2][] | $name + "-" + $version + "-" + .' | sort +``` + +To see which modules are currently in use, run: + +```sh +curl -k -u : -X GET https://localhost:9443/v1/bdbs | jq -r '.[].module_list | map(.module_name + "-" + .semantic_version) | .[]' +``` + +See [Upgrade modules]({{}}) for details on how to upgrade modules with the `rladmin` tool. + +### Valid license + +Use `kubectl get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. ## Upgrade the operator @@ -101,15 +134,9 @@ We recommend upgrading the REC as soon as possible after updating the operator. ## Upgrade the Redis Enterprise cluster (REC) -{{}} -Verify your license is valid before upgrading. Invalid licenses will cause the upgrade to fail. - -Use `kubectl get rec` and verify the `LICENSE STATE` is valid on your REC before you start the upgrade process. -{{}} - The Redis Enterprise cluster (REC) can be updated automatically or manually. To trigger automatic upgrade of the REC after the operator upgrade completes, specify `autoUpgradeRedisEnterprise: true` in your REC spec. If you don't have automatic upgrade enabled, follow the below steps for the manual upgrade. -Before beginning the upgrade of the Redis Enterprise cluster, check the K8s operator release notes to find the Redis Enterprise image tag. For example, in Redis Enterprise K8s operator release [6.0.12-5](https://github.com/RedisLabs/redis-enterprise-k8s-docs/releases/tag/v6.0.12-5), the `Images` section shows the Redis Enterprise tag is `6.0.12-57`. +Before beginning the upgrade of the Redis Enterprise cluster, check the [Redis Enterprise for Kubernetes release notes]({{}}) to find the Redis Enterprise image tag. After the operator upgrade is complete, you can upgrade Redis Enterprise cluster (REC). @@ -165,10 +192,30 @@ kubectl rollout status sts ### Upgrade databases -After the cluster is upgraded, you can upgrade your databases. The process for upgrading databases is the same for both Kubernetes and non-Kubernetes deployments. +After the cluster is upgraded, you can upgrade your databases. Specify your new database version in the `spec.redisVersion` field for your REDB and REAADB custom resources. Supported database versions for operator version 7.8.2-6 include `"7.2"` and `"7.4"` (note this value is a string). + +Note that if your cluster [`redisUpgradePolicy`]({{}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. + +## Troubleshooting + +If you start an upgrade without meeting the [prerequisites](#prerequisites), the operator will freeze the upgrade. Check the operator logs for the source of the error. The REDB reconsilliation doesn't work during an upgrade, so you need to apply a manual fix with the Redis Software API (examples below). The updates will also need to be added to the REDB custom resource. + +### Invalid module version -For more details on how to [upgrade a database]({{< relref "/operate/rs/installing-upgrading/upgrading/upgrade-database" >}}), see the [Upgrade an existing Redis Enterprise Software deployment]({{< relref "/operate/rs/installing-upgrading/upgrading" >}}) documentation. +If the operator logs show an event related to an unsupported module, download the updated module locally, and install it using the `v2/modules` API endpoint. -For Active-Active databases, see [Upgrade an Active-Active database]({{}}). +```sh +curl -sfk -u : -X POST -F 'module=@' https://localhost:9443/v2/modules +``` + +After updating the modules with the Redis Software API, update the REDB custom resource to reflect the change. + +### Invalid database version + +If the operator logs show an event related to an incompatible database version, upgrade the database using the Redis Software API. + +```sh +curl -sfk -u : -X POST -H "Content-Type: application/json" -d '{"redis_version": }' https://localhost:9443/v1/bdbs//upgrade +``` -Note that if your cluster [`redisUpgradePolicy`]({{< relref "/operate/kubernetes/reference/redis_enterprise_cluster_api#redisupgradepolicy" >}}) or your database [`redisVersion`]({{< relref "/operate/kubernetes/reference/redis_enterprise_database_api#redisversion" >}}) are set to `major`, you won't be able to upgrade those databases to minor versions. See [Redis upgrade policy]({{< relref "/operate/rs/installing-upgrading/upgrading#redis-upgrade-policy" >}}) for more details. +After updating the modules with the Redis Software API, update the REDB custom resource to reflect the change. \ No newline at end of file diff --git a/layouts/partials/docs-nav.html b/layouts/partials/docs-nav.html index b9138f17f7..9144473034 100644 --- a/layouts/partials/docs-nav.html +++ b/layouts/partials/docs-nav.html @@ -26,6 +26,7 @@ {{else if (eq (.Params.linkTitle) "Redis Software")}}