Kubernetes Helm快速部署Redis Cluster & Redisinsight
| 软件 | 版本 | 注解 | |
|---|---|---|---|
| helm | v3.4.0 | ||
| Kubernetes | v1.24.0 | ||
| Redis Cluster | 7.0.11 | ||
| Chart | 8.6.4 |
添加Helm chart
[root@k8s-01 ~]]# helm repo add bitnami https://charts.bitnami.com/bitnami
查询 Redis 资源
[root@k8s-01 ~]# helm search repo redisNAME CHART VERSION APP VERSION DESCRIPTIONbitnami/redis 17.11.6 7.0.11 Redis(R) is an open source, advanced key-value ...bitnami/redis-cluster 8.6.4 7.0.11 Redis(R) is an open source, scalable, distribut...
拉取 chart 到本地
#拉取最新helm pull bitnami/redis-cluster#选择版本拉取helm pull bitnami/redis-cluster --version 8.6.4
- 默认拉取完毕就是
redis-cluster-8.6.4.tgz
解压helm包
tar xf redis-cluster-8.6.4.tgz
数据存储需要创建sc,我这里有默认的sc就不创建,例子如下
[root@k8s-01 nfs]# cat sc.yamlkind: StorageClassapiVersion: storage.k8s.io/v1metadata:annotations:storageclass.kubernetes.io/is-default-class: "true"name: nfs-storageprovisioner: nfs-provisionervolumeBindingMode: Immediate#我这里是nfs的sc,我们将nfs sc设置为默认存储后,后面就不需要在修改value.yaml中的sc
如果不想使用nfs sc,就自行创建其它存储类型的sc
[root@k8s-01 ~]# kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGEnfs-storage (default) nfs-provisioner Delete Immediate false 48d
修改Values.yaml
cd redis-cluster/vim values.yamlstorageClass: "" #前面设置了默认的sc,如果不想使用默认sc,这里可以额外填写redis:password: "redis123" #Redis密码service:## @param service.ports.redis Kubernetes Redis service port##ports:redis: 6379 # 定义Cluster redis 服务端口#下面的探测时间不修改,第一次启动的时候会让Redis Cluster自动重启redis:livenessProbe: # 修改了 livenessProbe 的探测时间enabled: trueinitialDelaySeconds: 60periodSeconds: 30timeoutSeconds: 10successThreshold: 1failureThreshold: 5readinessProbe: # 修改了 readinessProbe 的探测时间enabled: trueinitialDelaySeconds: 60periodSeconds: 30timeoutSeconds: 10successThreshold: 1failureThreshold: 5startupProbe: # 修改了 startupProbe 的探测时间enabled: falsepath: /initialDelaySeconds: 300periodSeconds: 30timeoutSeconds: 10failureThreshold: 6successThreshold: 1metrics: #redis metrics,可以选择开启,会自动为我们创建一个Export## @param metrics.enabled Start a side-car prometheus exporter##enabled: falsecluster:## nodes:是包括副本在内的节点总数。## 这意味着将有 3 个主节点和 3 个副本节点##(由于 replicas 默认设置为 1,每个主节点将有 1 个副本)。## 因此,nodes = numberOfMasterNodes + numberOfMasterNodes * replicasnodes: 6replicas: 1...#其它参数可以自行修改
创建Redis Cluster集群
[root@k8s-01 redis-cluster]# cd redis-cluster[root@k8s-01 redis-cluster]# kubectl create ns redis[root@k8s-01 redis-cluster]# helm install redis-cluster -n redis .NAME: redis-clusterLAST DEPLOYED: Tue Jun 27 14:31:38 2023NAMESPACE: redisSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:CHART NAME: redis-clusterCHART VERSION: 8.6.4APP VERSION: 7.0.11** Please be patient while the chart is being deployed **To get your password run:export REDIS_PASSWORD=$(kubectl get secret --namespace "redis" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)You have deployed a Redis® Cluster accessible only from within you Kubernetes Cluster.INFO: The Job to create the cluster will be created.To connect to your Redis® cluster:1. Run a Redis® pod that you can use as a client:kubectl run --namespace redis redis-cluster-client --rm --tty -i --restart='Never'--env REDIS_PASSWORD=$REDIS_PASSWORD--image docker.io/bitnami/redis-cluster:7.0.11-debian-11-r21 -- bash2. Connect using the Redis® CLI:redis-cli -c -h redis-cluster -a $REDIS_PASSWORD
创建完成后可以使用下面的命令查看helm集群
[root@k8s-01 ~]# helm -n redis listNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONredis-cluster redis 1 2023-06-27 14:31:38.202235845 +0800 CST deployed redis-cluster-8.6.4 7.0.11
检查Pod状态
[root@k8s-01 ~]# kubectl get pod -n redisNAME READY STATUS RESTARTS AGEredis-cluster-0 1/1 Running 1 (102m ago) 103mredis-cluster-1 1/1 Running 1 (102m ago) 103mredis-cluster-2 1/1 Running 1 (102m ago) 103mredis-cluster-3 1/1 Running 1 (102m ago) 103mredis-cluster-4 1/1 Running 1 (102m ago) 103mredis-cluster-5 1/1 Running 1 (102m ago) 103m
检查svc
[root@k8s-01 ~]# kubectl get svc -n redisNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEredis-cluster ClusterIP 10.96.64.112 <none> 6379/TCP 103mredis-cluster-headless ClusterIP None <none> 6379/TCP,16379/TCP 103m[root@k8s-01 ~]#
集群内部访问
默认 redis-cluster-0 和 redis-cluster-1 为主从,0主1从默认 redis-cluster-2 和 redis-cluster-3 为主从,0主1从默认 redis-cluster-4 和 redis-cluster-5 为主从,0主1从所以集群主节点为:redis-cluster-0 redis-cluster-2 redis-cluster-4所以集群从节点为:redis-cluster-1 redis-cluster-3 redis-cluster-5
访问测试
我这里直接在node节点上使用redis-cli测试,当然也可以像上面那样启动一个容器来测试
[root@k8s-node2 ~]# redis-cli -c -h 10.96.64.112 -p 6379 -a redis123#这里的IP我采用的是Cluster IP10.96.64.112 :6379> KEYS *1) "ab"2) "jjj"
查看集群信息
cluster infocluster nodes
创建Redisinsight
RedisInsight 是一个直观且高效的 Redis GUI,允许您与数据库交互并管理数据 - 内置对 Redis 模块的支持。
RedisInsight 亮点:
- 浏览、过滤、可视化您的键值 Redis 数据结构并查看不同格式的键值(包括 JSON、Hex、ASCII 等)
- 对列表、哈希、字符串、集合、排序集和流的 CRUD 支持
- RedisJSON的 CRUD 支持
- Profiler - 实时分析发送到 Redis 的每条命令
- SlowLog - 基于Slowlog命令分析Redis实例中的慢操作
- Pub/Sub - 支持Redis pub/sub,支持订阅频道并向频道发布消息
- 批量操作 - 根据浏览器或树视图中设置的过滤器批量删除键
- Workbench 简介 - 先进的命令行界面,具有智能命令自动完成、复杂数据可视化和对原始模式的支持
- 命令自动完成支持RediSearch、RedisJSON、RedisGraph、RedisTimeSeries、RedisAI
- RediSearch索引、查询和聚合的可视化
- 能够构建自己的数据可视化插件
- Redis 功能的内置点击指南
- 正式支持Redis OSS、Redis Cloud。可与 Microsoft Azure Redis 缓存配合使用(即将推出官方支持)。
- 适用于 macOS(包括 M1)、Windows 和 Linux
使用Redisinsight来快速管理Redis集群
cat >>RedisInsight.yaml <<EOFapiVersion: apps/v1kind: Deploymentmetadata:name: redisinsightnamespace: redisspec:replicas: 1selector:matchLabels:app: redisinsighttemplate:metadata:labels:app: redisinsightspec:containers:- name: redisinsightimage: redislabs/redisinsight:1.12.1imagePullPolicy: IfNotPresentports:- containerPort: 8001volumeMounts:- name: dbmountPath: /dbvolumes:- name: dbemptyDir: {}---apiVersion: v1kind: Servicemetadata:name: redisinsight-servicenamespace: redisspec:type: NodePortports:- port: 80targetPort: 8001nodePort: 31888selector:app: redisinsightEOF
创建redisinsight
kubectl apply -f RedisInsight.yaml
如果需要持久化自行添加即可
默认 http://nodeport IP:31888 访问



redis-cluster-headless.redis.svc.cluster.local#redis-cluster-headless svc名称#redis namespace名称


