Skip to content

Commit

Permalink
Improve Redis support, add username and Sentinel (#549)
Browse files Browse the repository at this point in the history
Signed-off-by: Jeroen Bobbeldijk <[email protected]>
  • Loading branch information
jerbob92 authored Nov 1, 2021
1 parent 67f4702 commit 45bffc6
Show file tree
Hide file tree
Showing 6 changed files with 325 additions and 15 deletions.
13 changes: 10 additions & 3 deletions content/docs/2.5/scalers/redis-cluster-lists.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ triggers:
- type: redis-cluster
metadata:
addresses: localhost:6379 # Comma separated list of the format host:port
usernameFromEnv: REDIS_USERNAME # optional
passwordFromEnv: REDIS_PASSWORD
listName: mylist # Required
listLength: "5" # Required
Expand All @@ -30,8 +31,9 @@ triggers:
- `addresses` - Comma separated list of hosts and ports of the Redis Cluster nodes.
- `hosts` - Comma separated list of hosts of the Redis Cluster nodes. Alternative to `addresses` and requires `ports` to be configured as well.
- `ports` - Comma separated list of corresponding ports for the hosts of the Redis Cluster nodes. Alternative to `addresses` and requires `hosts` to be configured as well.
- `usernameFromEnv` - Environment variable to read the authentication username from to authenticate with the Redis server.
- `passwordFromEnv` - Environment variable to read the authentication password from to authenticate with the Redis server.
- Both the hostname and password fields need to be set to the names of the environment variables in the target deployment that contain the host name and password respectively.
- Both the hostname, username and password fields need to be set to the names of the environment variables in the target deployment that contain the host name, username and password respectively.
- `listName` - Name of the Redis List that you want to monitor.
- `listLength` - Average target value to trigger scaling actions.
- `enableTLS` - Allow a connection to a redis queue using tls. (Values: `true`, `false`, Default: `false`, Optional)
Expand All @@ -52,15 +54,16 @@ You can authenticate by using a password.
- `hosts` - Comma separated list of hostname of the Redis Cluster nodes. If specified, the `ports` should also be specified.
- `ports` - Comma separated list of ports of the Redis Cluster nodes. If specified, the `hosts` should also be specified.

**Password Authentication:**
**Authentication:**

- `username` - Redis username to authenticate with.
- `password` - Redis password to authenticate with.

### Example

Here is an example of how to deploy a scaled object with the `redis-cluster` scale trigger which uses `TriggerAuthentication`.

You can also provide the `passwordFromEnv` on the `ScaledObject` directly.
You can also provide the `usernameFromEnv` and `passwordFromEnv` on the `ScaledObject` directly.

```yaml
apiVersion: v1
Expand All @@ -70,6 +73,7 @@ metadata:
namespace: my-project
type: Opaque
data:
redis_username: YWRtaW4=
redis_password: YWRtaW4=
---
apiVersion: keda.sh/v1alpha1
Expand All @@ -79,6 +83,9 @@ metadata:
namespace: my-project
spec:
secretTargetRef:
- parameter: username
name: votes-db-secret
key: redis_username
- parameter: password
name: votes-db-secret
key: redis_password
Expand Down
15 changes: 11 additions & 4 deletions content/docs/2.5/scalers/redis-cluster-streams.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ triggers:
addresses: localhost:6379 # Required if hosts and ports are not provided. Format - comma separated list of host:port
hosts: localhost # Comma separated lists of hosts. Required if address is not provided
ports: "6379" # Comma separated lists of ports. Required if addresses are not provided and hosts has been provided.
usernameFromEnv: REDIS_USERNAME # optional (can also use authenticationRef)
passwordFromEnv: REDIS_PASSWORD # optional (can also use authenticationRef)
stream: my-stream # Required - name of the Redis Stream
consumerGroup: my-consumer-group # Required - name of consumer group associated with Redis Stream
Expand All @@ -49,6 +50,7 @@ triggers:

> It is only to be used along with the `hosts`/`hostsFromEnv` attribute and not required if `addresses` has been provided.

- `usernameFromEnv` - Name of the environment variable your deployment uses to get the Redis username. (Optional)
- `passwordFromEnv` - Name of the environment variable your deployment uses to get the Redis password. (Optional)

- `stream` - Name of the Redis Stream.
Expand All @@ -66,9 +68,9 @@ Some parameters could be provided using environmental variables, instead of sett

The scaler supports two modes of authentication:

#### Using password authentication
#### Using username/password authentication

Use the `password` field in the `metadata` to specify the name of an environment variable that your deployment uses to get the Redis password.
Use the `username` and `password` field in the `metadata` to specify the name of an environment variable that your deployment uses to get the Redis username/password.

This is usually resolved from a `Secret V1` or a `ConfigMap V1` collections. `env` and `envFrom` are both supported.

Expand All @@ -91,6 +93,7 @@ spec:
- type: redis-cluster-streams
metadata:
addressesFromEnv: REDIS_ADDRESSES
usernameFromEnv: REDIS_USERNAME # name of the environment variable in the Deployment
passwordFromEnv: REDIS_PASSWORD # name of the environment variable in the Deployment
stream: my-stream
consumerGroup: consumer-group-1
Expand All @@ -105,9 +108,10 @@ You can use `TriggerAuthentication` CRD to configure the authentication. For exa
apiVersion: v1
kind: Secret
metadata:
name: redis-streams-password
name: redis-streams-auth
type: Opaque
data:
redis_username: <encoded redis username>
redis_password: <encoded redis password>
---
apiVersion: keda.sh/v1alpha1
Expand All @@ -116,8 +120,11 @@ metadata:
name: keda-redis-stream-triggerauth
spec:
secretTargetRef:
- parameter: username
name: redis-streams-auth # name of the Secret
key: redis_username # name of the key in the Secret
- parameter: password
name: redis-streams-password # name of the Secret
name: redis-streams-auth # name of the Secret
key: redis_password # name of the key in the Secret
---
apiVersion: keda.sh/v1alpha1
Expand Down
15 changes: 11 additions & 4 deletions content/docs/2.5/scalers/redis-lists.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ triggers:
- type: redis
metadata:
address: localhost:6379 # Format must be host:port
usernameFromEnv: REDIS_USERNAME # optional
passwordFromEnv: REDIS_PASSWORD
listName: mylist # Required
listLength: "5" # Required
Expand All @@ -31,8 +32,9 @@ triggers:
- `address` - The host and port of the Redis server.
- `host` - The host of the Redis server. Alternative to `address` and requires `port` to be configured as well.
- `port` - The port of the Redis server. Alternative to `address` and requires `host` to be configured as well.
- `usernameFromEnv` - Environment variable to read the authentication username from to authenticate with the Redis server.
- `passwordFromEnv` - Environment variable to read the authentication password from to authenticate with the Redis server.
- Both the hostname and password fields need to be set to the names of the environment variables in the target deployment that contain the host name and password respectively.
- Both the hostname, username and password fields need to be set to the names of the environment variables in the target deployment that contain the host name, username and password respectively.
- `listName` - Name of the Redis List that you want to monitor.
- `listLength` - Average target value to trigger scaling actions.
- `enableTLS` - Allow a connection to a redis queue using tls. (Values: `true`, `false`, Default: `false`, Optional)
Expand All @@ -46,23 +48,24 @@ Some parameters could be provided using environmental variables, instead of sett

### Authentication Parameters

You can authenticate by using a password.
You can authenticate by using a username (optional) and password.

**Connection Authentication:**

- `address` - The hostname and port for the Redis server (host:port format).
- `host` - The hostname of the Redis server. If specified, the `port` should also be specified.
- `port` - The port of the Redis server. If specified, the `host` should also be specified.

**Password Authentication:**
**Authentication:**

- `username` - Redis username to authenticate with.
- `password` - Redis password to authenticate with.

### Example

Here is an example of how to deploy a scaled object with the `redis` scale trigger which uses `TriggerAuthentication`.

You can also provide the `passwordFromEnv` on the `ScaledObject` directly.
You can also provide the `usernameFromEnv` and `passwordFromEnv` on the `ScaledObject` directly.

```yaml
apiVersion: v1
Expand All @@ -72,6 +75,7 @@ metadata:
namespace: my-project
type: Opaque
data:
redis_username: YWRtaW4=
redis_password: YWRtaW4=
---
apiVersion: keda.sh/v1alpha1
Expand All @@ -81,6 +85,9 @@ metadata:
namespace: my-project
spec:
secretTargetRef:
- parameter: username
name: votes-db-secret
key: redis_username
- parameter: password
name: votes-db-secret
key: redis_password
Expand Down
124 changes: 124 additions & 0 deletions content/docs/2.5/scalers/redis-sentinel-lists.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
+++
title = "Redis Lists (supports Redis Sentinel)"
layout = "scaler"
availability = "v2.5+"
maintainer = "Community"
description = "Redis Lists scaler with support for Redis Sentinel topology"
go_file = "redis_scaler"
+++

### Trigger Specification

This specification describes the `redis-sentinel` trigger that scales based on the length of a list in a Redis Sentinel setup.

```yaml
triggers:
- type: redis-sentinel
metadata:
addresses: localhost:26379 # Comma separated list of the format host:port
usernameFromEnv: REDIS_USERNAME # optional
passwordFromEnv: REDIS_PASSWORD # optional
sentinelUsernameFromEnv: REDIS_SENTINEL_USERNAME # optional
sentinelPasswordFromEnv: REDIS_SENTINEL_PASSWORD # optional
sentinelMasterFromEnv: REDIS_SENTINEL_MASTER # optional
listName: mylist # Required
listLength: "5" # Required
enableTLS: "false" # optional
# Alternatively, you can use existing environment variables to read configuration from:
# See details in "Parameter list" section
addressesFromEnv: REDIS_ADDRESSES # Optional. You can use this instead of `addresses` parameter
```
**Parameter list:**
- `addresses` - Comma separated list of hosts and ports of the Redis Sentinel nodes.
- `hosts` - Comma separated list of hosts of the Redis Sentinel nodes. Alternative to `addresses` and requires `ports` to be configured as well.
- `ports` - Comma separated list of corresponding ports for the hosts of the Redis Sentinel nodes. Alternative to `addresses` and requires `hosts` to be configured as well.
- `usernameFromEnv` - Environment variable to read the authentication username from to authenticate with the Redis server.
- `passwordFromEnv` - Environment variable to read the authentication password from to authenticate with the Redis server.
- Both the hostname, username and password fields need to be set to the names of the environment variables in the target deployment that contain the host name, username and password respectively.
- `sentinelUsernameFromEnv` - Environment variable to read the authentication username from to authenticate with the Redis Sentinel server.
- `sentinelPasswordFromEnv` - Environment variable to read the authentication password from to authenticate with the Redis Sentinel server.
- `sentinelMaster` - The name of the master in Sentinel to get the Redis server address for.
- `listName` - Name of the Redis List that you want to monitor.
- `listLength` - Average target value to trigger scaling actions.
- `enableTLS` - Allow a connection to a redis queue using tls. (Values: `true`, `false`, Default: `false`, Optional)

Some parameters could be provided using environmental variables, instead of setting them directly in metadata. Here is a list of parameters you can use to retrieve values from environment variables:

- `addressesFromEnv` - The hosts and their respective ports of the Redis Sentinel nodes, similar to `addresses`, but reads it from an environment variable on the scale target.
- `hostsFromEnv` - The hosts of the Redis Sentinel nodes, similar to `hosts`, but reads it from an environment variable on the scale target.
- `portsFromEnv` - The corresponding ports for the hosts of the Redis Sentinel nodes, similar to `ports`, but reads it from an environment variable on the scale target.
- `sentinelMasterFromEnv` - The name of the master in Sentinel to get the Redis server address for, similar to `sentinelMaster`, but reads it from an environment variable on the scale target.

### Authentication Parameters

You can authenticate by using a password.

**Connection Authentication:**

- `addresses` - Comma separated list of host:port format.
- `hosts` - Comma separated list of hostname of the Redis Sentinel nodes. If specified, the `ports` should also be specified.
- `ports` - Comma separated list of ports of the Redis Sentinel nodes. If specified, the `hosts` should also be specified.
- `sentinelMaster` - The name of the master in Sentinel to get the Redis server address for.

**Authentication:**

- `username` - Redis username to authenticate with.
- `password` - Redis password to authenticate with.

**Sentinel Authentication:**

- `sentinelUsername` - Redis Sentinel username to authenticate with.
- `sentinelPassword` - Redis Sentinel password to authenticate with.


### Example

Here is an example of how to deploy a scaled object with the `redis-sentinel` scale trigger which uses `TriggerAuthentication`.

You can also provide the `usernameFromEnv` and `passwordFromEnv` on the `ScaledObject` directly.

```yaml
apiVersion: v1
kind: Secret
metadata:
name: votes-db-secret
namespace: my-project
type: Opaque
data:
redis_username: YWRtaW4=
redis_password: YWRtaW4=
---
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-redis-secret
namespace: my-project
spec:
secretTargetRef:
- parameter: username
name: votes-db-secret
key: redis_username
- parameter: password
name: votes-db-secret
key: redis_password
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: redis-scaledobject
namespace: my-project
spec:
scaleTargetRef:
name: votes
triggers:
- type: redis-sentinel
metadata:
addresses: node1:26379, node2:26379, node3:26379
listName: mylist
listLength: "10"
sentinelMaster: "mymaster"
authenticationRef:
name: keda-trigger-auth-redis-secret
```
Loading

0 comments on commit 45bffc6

Please sign in to comment.