通过 Helm Bitnami Chart 部署 Redis 服务

Published: 2023-12-28

Tags: k8s Helm

本文总阅读量

手动在集群内部署 Redis 会比较零散,本文通过 Helm 安装 Redis 单节点和集群模式的服务,使用 Bitnami 社区维护的 Redis Chart 仓库,其中的服务大多经过良好封装及验证,可靠性及易用性都有所保障,适合在测试、要求不高的生产环境中使用。

准备 StorageClass

一般由集群维护者创建 StorageClass 及 Elastic File System (EFS) 。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: efs-sc
mountOptions:
  - tls
parameters:
  directoryPerms: '700'
  fileSystemId: fs-01bfa2ujlc834285d
  provisioningMode: efs-ap
provisioner: efs.csi.aws.com
reclaimPolicy: Delete
volumeBindingMode: Immediate

开发人员使用存储时知晓 StorageClass 的名称(efs-sc)

部署 6.2 版本 Redis Standalone

Bitnami Redis Chart 页面: Bitnami Redis Chart

部署命令如下

# 添加仓库
$ helm repo add bitnami https://charts.bitnami.com/bitnami

# 安装 Redis
$ helm install redis-62 bitnami/redis --version 16.13.2 \
  --set-string master.persistence.storageClass=efs-sc \
  --set-string replica.persistence.storageClass=efs-sc \
  --set-string image.tag=6.2.14-debian-11-r2 \
  --set replica.replicaCount=0 \
  --set auth.enabled=false \
  -n common

# 卸载 Redis
# $ helm uninstall redis-62 -n common

参数说明:

  1. 因项目对 Redis 版本有要求,指定 Redis Chart 的版本为 16.13.2 是因为其是最后一个使用 6.2.x 版本的 Helm Chart
  2. 此处指定了 StorageClass,如果所需的 StorageClass 为 Default 默认时,无需通过参数显示指定
  3. 16.13.2 版本 Chart 内默认是 6.2.7 版本的 Redis,通过参数设置为 6.2.14 是因为这个 Tag 只支持 linux/amd64(此处查看)直到近期 bitnami/redis 镜像才支持 linux/arm64 架构(此处查看)并且推送了 6.2 版本的多架构镜像。因 EKS 集群使用的是 Arm 架构的节点,所以此处进行了替换,否则不推荐替换镜像版本。
  4. 默认创建 3 个副本,在测试环境只部署单个主节点即可
  5. 集群内服务访问 Redis 无需密码,通过开关关闭
  6. Redis 服务被部署到 common 命名空间

部署 7.x 版本 Redis Standalone

跟 6.2 部署同理,命令如下,7.x 版本镜像支持 arm64,无需替换

7.0 版本

$ helm install redis-70 bitnami/redis --version 17.17.1 \
  --set-string master.persistence.storageClass=efs-sc \
  --set-string replica.persistence.storageClass=efs-sc \
  --set replica.replicaCount=0 \
  --set auth.enabled=false \
  -n common

7.2 版本

$ helm install redis-72 bitnami/redis --version 18.6.1 \
  --set-string master.persistence.storageClass=efs-sc \
  --set-string replica.persistence.storageClass=efs-sc \
  --set replica.replicaCount=0 \
  --set auth.enabled=false \
  -n common

部署 6.2 版本 Redis Cluster

Bitnami Redis Cluster Chart 页面:Bitnami Redis Cluster Chart

$ helm install redis-cluster-62 bitnami/redis-cluster --version 7.6.4 \
  --set-string global.storageClass=efs-sc \
  --set-string image.tag=6.2.14-debian-11-r2 \
  --set cluster.nodes=3 \
  --set cluster.replicas=0 \
  --set usePassword=false \
  -n common

参数说明:

  1. 跟 Standalone Redis 一样,6.2 版本的镜像标签需要替换。
  2. 可以通过 cluster.nodes 设置主从数量,此处从节点如果设置为 1,那么 nodes 值需为 6,因为 nodes = masters + masters * replicas,文档说明中,masters 最少为 3 个,本例从节点设置为 0,nodes 可以设置为 3
  3. 集群部署变量中指定 StorageClass 和关闭密码的变量不一样,需要注意下

部署 7.x 版本 Redis Cluster

跟 6.2 部署同理,7.x 版本镜像支持 arm64,无需替换

7.0 版本

$ helm install redis-cluster-70 bitnami/redis-cluster --version 8.8.2 \
  --set-string global.storageClass=efs-sc \
  --set cluster.nodes=3 \
  --set cluster.replicas=0 \
  --set usePassword=false \
  -n common

7.2 版本

$ helm install redis-cluster-72 bitnami/redis-cluster --version 9.1.4 \
  --set-string global.storageClass=efs-sc \
  --set cluster.nodes=3 \
  --set cluster.replicas=0 \
  --set usePassword=false \
  -n common

连接集群内 Redis 服务

访问地址

在集群中可以通过以下地址访问 Redis(如果 replica.replicaCount 设置为 0,则没有 read-only 副本可用)

# Redis Standalone 地址
redis-62-master.common.svc.cluster.local for read/write operations (port 6379)
redis-62-replicas.common.svc.cluster.local for read-only operations (port 6379)

# Redis Cluster 地址
redis-cluster-62.common.svc.cluster.local  (port 6379)

获取密码

默认 Redis 部署会生成随机登录密码,可以使用 kubectl 获取(如果 auth.enabled=false,则 Redis 无密码)

export REDIS_PASSWORD=$(kubectl get secret --namespace common redis-62 -o jsonpath="{.data.redis-password}" | base64 -d)

执行后,密码存储在 REDIS_PASSWORD 环境变量中

本地访问

获取到密码后,可以通过集群内容器访问,也可以直接通过命令,通过 port-forward 从本地访问到 EKS 内的 Redis

$ kubectl port-forward --namespace common svc/redis-62-master 6379:6379 &
    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379