使用 Helm 安装 Redis 集群

在 Kubernetes 集群中使用 Helm 安装 Redis 集群可以极大地简化部署和管理 Redis 的过程。本文将详细介绍如何使用 Helm 安装 Redis 集群,并提供一些常见问题的解决方案。

前提条件

  • Kubernetes 集群。(略)
  • 已安装 Helm 工具。
  • 搭建了存储类nfs-storage

提示:搭建存储类 nfs-storage,可以参考另一篇文章-第二小节, 点击查看

一、安装 Helm

  1. 下载 Helm

首先,访问 Helm 官网 下载适用于您 Kubernetes 版本的 Helm。这里假设 Kubernetes 版本是 1.27.7,因此需要下载对应版本的 Helm。

bash 复制代码
wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
tar xf helm-v3.9.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
helm version
  1. 配置 Helm 仓库

安装完成后,添加一些常见的 Helm 仓库,如 Bitnami、Aliyun 和 Azure 等。

bash 复制代码
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator
helm repo update
  1. 搜索 Redis Chart

使用 Helm 搜索可用的 Redis Chart。

bash 复制代码
helm search repo redis
  1. 拉取 Redis Cluster Chart

根据搜索结果拉取所需的 Redis 集群 Chart。此时,我们可以下载 Redis 集群的 Chart 包:

bash 复制代码
helm pull bitnami/redis-cluster

如果此操作失败,您还可以通过直接下载 Chart 包来解决:

bash 复制代码
wget https://charts.bitnami.com/bitnami/redis-cluster-11.4.0.tgz
tar xf redis-cluster-11.4.0.tgz
cd redis-cluster

二、配置 Redis 集群

  1. 修改 values.yaml 配置文件

编辑 values.yaml 文件,以指定存储类、密码等配置:

yaml 复制代码
global:
  imageRegistry: ""
  imagePullSecrets: []
  storageClass: "nfs-storage"  # 这里使用的是 NFS 存储类
  redis:
    password: "123456"
usePassword: true
password: "123456"
persistence:
  storageClass: "nfs-storage"
  accessModes:
    - ReadWriteMany
  size: 8Gi
updateJob:
  resources:
     requests:
       cpu: 2
       memory: 512Mi
     limits:
       cpu: 3
       memory: 1024Mi
service:
  type: NodePort  # 这里可以修改ClusterIP或者NodePort
  1. 安装 Redis 集群

完成配置后,使用 Helm 安装 Redis 集群:

bash 复制代码
helm install redis-cluster ./redis-cluster
  1. 查看 Redis Pod

安装完成后,您可以查看 Redis 集群的 Pod 状态,确保它们已成功启动:

bash 复制代码
kubectl get pod -n default

三、常见错误及解决方法

  1. Redis 镜像版本问题

如果安装失败,可能是由于 Redis 集群镜像版本不匹配。您可以尝试使用 latest 标签来拉取最新的镜像。

bash 复制代码
docker images
REPOSITORY                                  TAG                  IMAGE ID       CREATED       SIZE
docker-0.unsee.tech/bitnami/redis-cluster   latest               b26f68aaf802   10 days ago   144MB
  1. PVC 无法绑定 PV

如果 PVC 无法绑定 PV,您需要手动创建 PersistentVolume(PV)以供使用:

yaml 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-cluster-pv-0
spec:
  capacity:
    storage: 8Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs-storage
  nfs:
    server: 192.168.80.130
    path: /data/nfs-demo/redis-data-redis-cluster-0
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-cluster-pv-1
spec:
  capacity:
    storage: 8Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs-storage
  nfs:
    server: 192.168.80.130
    path: /data/nfs-demo/redis-data-redis-cluster-1
....依次类推

说明 :PVC 和 PV 之间的绑定关系是通过 storageClassName 和 accessModes 来进行匹配的,而 PVC 请求的存储容量应小于等于 PV 的容量。

  1. 确保 NFS 服务器目录已创建并有写权限

在 NFS 服务器上,您需要确保相关目录已经创建并具有适当的写权限。例如:

bash 复制代码
/data/nfs-demo/redis-data-redis-cluster-0
/data/nfs-demo/redis-data-redis-cluster-1
  1. Redis 集群未正确创建

如果 Pod 已经启动,但 Redis 集群没有创建,您可以通过以下命令手动创建 Redis 集群:

bash 复制代码
kubectl exec -it redis-cluster-0 -- redis-cli --cluster create \
  10.0.1.247:6379 \
  10.0.1.61:6379 \
  10.0.1.190:6379 \
  10.0.1.91:6379 \
  10.0.1.35:6379 \
  10.0.1.2:6379 \
  --cluster-replicas 1

然后,可以使用以下命令验证集群状态:

bash 复制代码
kubectl exec -it redis-cluster-0 -- redis-cli -c -h 10.0.1.247 -p 6379 cluster info

查看所有节点的详细信息:

bash 复制代码
kubectl exec -it redis-cluster-0 -- redis-cli -c -h 10.0.1.247 -p 6379 cluster nodes

如果使用的NodePort类型的Service,可通过以下命令测试:

bash 复制代码
redis-cli -h <节点IP地址> -p <端口> -a <密码>
查看端口:
kubectl get svc
  1. CoreDNS 配置问题

如果运行 kubectl logs -n kube-system -l k8s-app=kube-dns 时遇到以下错误:

复制代码
[ERROR] plugin/errors: 2 redis-cluster-0.redis-cluster-headless. AAAA: read udp 10.0.0.180:35846->8.8.8.8:53: i/o timeout

说明 CoreDNS 在解析 Redis 集群的域名时出现问题,您可以通过以下步骤解决:

  1. 检查 CoreDNS 配置:
bash 复制代码
kubectl -n kube-system get configmap coredns -o yaml
  1. 修改 /etc/systemd/resolved.conf 配置并重启:
bash 复制代码
sudo vi /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 1.1.1.1

然后执行以下命令重启服务:

bash 复制代码
sudo systemctl restart systemd-resolved
  1. 修改 Kubernetes 节点的 /etc/resolv.conf:
bash 复制代码
sudo vi /etc/resolv.conf
nameserver 8.8.8.8
nameserver 1.1.1.1
  1. 更新 CoreDNS 配置:
bash 复制代码
kubectl -n kube-system edit configmap coredns

将 DNS 配置修改为:

yaml 复制代码
forward . 8.8.8.8 1.1.1.1

重启 CoreDNS 部署:

bash 复制代码
kubectl -n kube-system rollout restart deployment coredns

验证网络连接和 DNS 配置:

bash 复制代码
ping 8.8.8.8
nslookup google.com
kubectl exec -it redis-cluster-0 -- nslookup redis-cluster-1.redis-cluster-headless

总结

使用 Helm 安装 Redis 集群是一种简单而高效的方式,能够帮助我们快速部署 Redis 服务。在安装过程中,可能会遇到一些常见问题,例如镜像版本不匹配、PVC 无法绑定 PV 等。通过本文的步骤和解决方案,您应该能够顺利解决这些问题并成功部署 Redis 集群。

希望本文对您有所帮助,如果有任何问题,请随时与我联系!

相关推荐
PaperData2 小时前
1985-2025年全国区县专利申请与授权面板数据
数据库
snpgroupcn2 小时前
大数据量SAP迁移方案:系统越大,越不能硬搬
数据库·sap
Flynt3 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
笃行3503 小时前
KingbaseES 数据加密全解:从 SSL 到全密态
数据库
Ivanqhz3 小时前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
java1234_小锋4 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据类型简介
数据库·mysql
知行EDI5 小时前
知行之桥 MaBang 端口使用指南——Create Order 订单创建篇
java·服务器·数据库
成旭先生5 小时前
【2026】企业信息模糊查询 API 实战:名称、注册号、统一社会信用代码、企业类型与法人一次查全
服务器·数据库·数据服务
JosieBook5 小时前
【数据库】MySQL 实战精通系列 · 第10篇:分库分表与分布式事务实战
数据库·分布式·mysql
写后端的胖头鱼5 小时前
一文详解Cache Aside(旁路缓存模式)
redis·缓存·延迟双删·缓存一致