使用 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 之间的绑定关系是通过 storageClassNameaccessModes 来进行匹配的,而 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 集群。

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

相关推荐
qq_5470261794 小时前
SpringBoot+Redis实现电商秒杀方案
spring boot·redis·后端
程序新视界4 小时前
MySQL“索引失效”的隐形杀手:隐式类型转换,你了解多少?
数据库·mysql·dba
Logintern095 小时前
windows如何设置mongodb的副本集
数据库·windows·mongodb
酷ku的森5 小时前
Redis的缓存更新策略
缓存
RestCloud6 小时前
在制造业数字化转型浪潮中,数据已成为核心生产要素。然而,系统割裂、数据滞后、开发运维成本高等问题,却像顽固的 “数据枷锁”,阻碍着企业发展。ETLCloud与
数据库·postgresql
!chen6 小时前
【Spring Boot】自定义starter
java·数据库·spring boot
十碗饭吃不饱7 小时前
sql报错:java.sql.SQLSyntaxErrorException: Unknown column ‘as0‘ in ‘where clause‘
java·数据库·sql
我是Superman丶7 小时前
【优化】Mysql指定索引查询或忽略某个索引
数据库·mysql
程序定小飞7 小时前
基于springboot的在线商城系统设计与开发
java·数据库·vue.js·spring boot·后端
呆呆小金人7 小时前
SQL入门: HAVING用法全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师