Kubernetes Helm快速部署Redis Cluster & Redisinsight

2023年 7月 27日 114.1k 0

软件 版本 注解
helm v3.4.0
Kubernetes v1.24.0
Redis Cluster 7.0.11
Chart 8.6.4

添加Helm chart

  1. [root@k8s-01 ~]]# helm repo add bitnami https://charts.bitnami.com/bitnami

查询 Redis 资源

  1. [root@k8s-01 ~]# helm search repo redis
  2. NAME CHART VERSION APP VERSION DESCRIPTION
  3. bitnami/redis 17.11.6 7.0.11 Redis(R) is an open source, advanced key-value ...
  4. bitnami/redis-cluster 8.6.4 7.0.11 Redis(R) is an open source, scalable, distribut...

拉取 chart 到本地

  1. #拉取最新
  2. helm pull bitnami/redis-cluster
  3. #选择版本拉取
  4. helm pull bitnami/redis-cluster --version 8.6.4
  • 默认拉取完毕就是redis-cluster-8.6.4.tgz

解压helm包

  1. tar xf redis-cluster-8.6.4.tgz

数据存储需要创建sc,我这里有默认的sc就不创建,例子如下

  1. [root@k8s-01 nfs]# cat sc.yaml
  2. kind: StorageClass
  3. apiVersion: storage.k8s.io/v1
  4. metadata:
  5. annotations:
  6. storageclass.kubernetes.io/is-default-class: "true"
  7. name: nfs-storage
  8. provisioner: nfs-provisioner
  9. volumeBindingMode: Immediate
  10. #我这里是nfs的sc,我们将nfs sc设置为默认存储后,后面就不需要在修改value.yaml中的sc

如果不想使用nfs sc,就自行创建其它存储类型的sc

  1. [root@k8s-01 ~]# kubectl get sc
  2. NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
  3. nfs-storage (default) nfs-provisioner Delete Immediate false 48d

修改Values.yaml

  1. cd redis-cluster/
  2. vim values.yaml
  3. storageClass: "" #前面设置了默认的sc,如果不想使用默认sc,这里可以额外填写
  4. redis:
  5. password: "redis123" #Redis密码
  6. service:
  7. ## @param service.ports.redis Kubernetes Redis service port
  8. ##
  9. ports:
  10. redis: 6379 # 定义Cluster redis 服务端口
  11. #下面的探测时间不修改,第一次启动的时候会让Redis Cluster自动重启
  12. redis:
  13. livenessProbe: # 修改了 livenessProbe 的探测时间
  14. enabled: true
  15. initialDelaySeconds: 60
  16. periodSeconds: 30
  17. timeoutSeconds: 10
  18. successThreshold: 1
  19. failureThreshold: 5
  20. readinessProbe: # 修改了 readinessProbe 的探测时间
  21. enabled: true
  22. initialDelaySeconds: 60
  23. periodSeconds: 30
  24. timeoutSeconds: 10
  25. successThreshold: 1
  26. failureThreshold: 5
  27. startupProbe: # 修改了 startupProbe 的探测时间
  28. enabled: false
  29. path: /
  30. initialDelaySeconds: 300
  31. periodSeconds: 30
  32. timeoutSeconds: 10
  33. failureThreshold: 6
  34. successThreshold: 1
  35. metrics: #redis metrics,可以选择开启,会自动为我们创建一个Export
  36. ## @param metrics.enabled Start a side-car prometheus exporter
  37. ##
  38. enabled: false
  39. cluster:
  40. ## nodes:是包括副本在内的节点总数。
  41. ## 这意味着将有 3 个主节点和 3 个副本节点
  42. ##(由于 replicas 默认设置为 1,每个主节点将有 1 个副本)。
  43. ## 因此,nodes = numberOfMasterNodes + numberOfMasterNodes * replicas
  44. nodes: 6
  45. replicas: 1
  46. ...
  47. #其它参数可以自行修改

创建Redis Cluster集群

  1. [root@k8s-01 redis-cluster]# cd redis-cluster
  2. [root@k8s-01 redis-cluster]# kubectl create ns redis
  3. [root@k8s-01 redis-cluster]# helm install redis-cluster -n redis .
  4. NAME: redis-cluster
  5. LAST DEPLOYED: Tue Jun 27 14:31:38 2023
  6. NAMESPACE: redis
  7. STATUS: deployed
  8. REVISION: 1
  9. TEST SUITE: None
  10. NOTES:
  11. CHART NAME: redis-cluster
  12. CHART VERSION: 8.6.4
  13. APP VERSION: 7.0.11** Please be patient while the chart is being deployed **
  14. To get your password run:
  15. export REDIS_PASSWORD=$(kubectl get secret --namespace "redis" redis-cluster -o jsonpath="{.data.redis-password}" | base64 -d)
  16. 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:
  17. 1. Run a Redis® pod that you can use as a client:
  18. kubectl run --namespace redis redis-cluster-client --rm --tty -i --restart='Never'
  19. --env REDIS_PASSWORD=$REDIS_PASSWORD
  20. --image docker.io/bitnami/redis-cluster:7.0.11-debian-11-r21 -- bash
  21. 2. Connect using the Redis® CLI:
  22. redis-cli -c -h redis-cluster -a $REDIS_PASSWORD

创建完成后可以使用下面的命令查看helm集群

  1. [root@k8s-01 ~]# helm -n redis list
  2. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  3. redis-cluster redis 1 2023-06-27 14:31:38.202235845 +0800 CST deployed redis-cluster-8.6.4 7.0.11

检查Pod状态

  1. [root@k8s-01 ~]# kubectl get pod -n redis
  2. NAME READY STATUS RESTARTS AGE
  3. redis-cluster-0 1/1 Running 1 (102m ago) 103m
  4. redis-cluster-1 1/1 Running 1 (102m ago) 103m
  5. redis-cluster-2 1/1 Running 1 (102m ago) 103m
  6. redis-cluster-3 1/1 Running 1 (102m ago) 103m
  7. redis-cluster-4 1/1 Running 1 (102m ago) 103m
  8. redis-cluster-5 1/1 Running 1 (102m ago) 103m

检查svc

  1. [root@k8s-01 ~]# kubectl get svc -n redis
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. redis-cluster ClusterIP 10.96.64.112 <none> 6379/TCP 103m
  4. redis-cluster-headless ClusterIP None <none> 6379/TCP,16379/TCP 103m
  5. [root@k8s-01 ~]#

集群内部访问

  1. 默认 redis-cluster-0 redis-cluster-1 为主从,01
  2. 默认 redis-cluster-2 redis-cluster-3 为主从,01
  3. 默认 redis-cluster-4 redis-cluster-5 为主从,01
  4. 所以集群主节点为:redis-cluster-0 redis-cluster-2 redis-cluster-4
  5. 所以集群从节点为:redis-cluster-1 redis-cluster-3 redis-cluster-5

访问测试

我这里直接在node节点上使用redis-cli测试,当然也可以像上面那样启动一个容器来测试

  1. [root@k8s-node2 ~]# redis-cli -c -h 10.96.64.112 -p 6379 -a redis123
  2. #这里的IP我采用的是Cluster IP
  3. 10.96.64.112 :6379> KEYS *
  4. 1) "ab"
  5. 2) "jjj"

查看集群信息

  1. cluster info
  2. cluster 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集群

  1. cat >>RedisInsight.yaml <<EOF
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: redisinsight
  6. namespace: redis
  7. spec:
  8. replicas: 1
  9. selector:
  10. matchLabels:
  11. app: redisinsight
  12. template:
  13. metadata:
  14. labels:
  15. app: redisinsight
  16. spec:
  17. containers:
  18. - name: redisinsight
  19. image: redislabs/redisinsight:1.12.1
  20. imagePullPolicy: IfNotPresent
  21. ports:
  22. - containerPort: 8001
  23. volumeMounts:
  24. - name: db
  25. mountPath: /db
  26. volumes:
  27. - name: db
  28. emptyDir: {}
  29. ---
  30. apiVersion: v1
  31. kind: Service
  32. metadata:
  33. name: redisinsight-service
  34. namespace: redis
  35. spec:
  36. type: NodePort
  37. ports:
  38. - port: 80
  39. targetPort: 8001
  40. nodePort: 31888
  41. selector:
  42. app: redisinsight
  43. EOF

创建redisinsight

  1. kubectl apply -f RedisInsight.yaml

如果需要持久化自行添加即可

默认 http://nodeport IP:31888 访问

  1. redis-cluster-headless.redis.svc.cluster.local
  2. #redis-cluster-headless svc名称
  3. #redis namespace名称

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论