使用 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 集群。

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

相关推荐
SelectDB7 分钟前
Apache Doris AI 能力揭秘(四):HSAP 一体化混合搜索架构全解
数据库·人工智能·agent
程序人生51829 分钟前
解决Dbeaver 连上 MySQL 数据库后不显示 information_schame、mysql 等数据库
数据库·mysql
与衫30 分钟前
SQLFlow × 高斯数据库:构建可治理、可追溯的数据底座
数据库·oracle
小小测试开发1 小时前
SQL常用语法全解析:从入门到进阶的实战指南
数据库·sql
暗之星瞳1 小时前
mysql练习
数据库·mysql
月上林梢1 小时前
QT圆形加载进度条
数据库·c++·qt·进度条
3824278271 小时前
汇编:条件汇编、
前端·汇编·数据库
蜘蛛小助理2 小时前
研发团队效率神器:手把手教你用蜘蛛表格构建自动化任务管理中枢
数据库·自动化·任务管理·多维表格·蜘蛛表格
计算机毕设VX:Fegn08952 小时前
计算机毕业设计|基于springboot + vue酒店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
Hui Baby2 小时前
全局事务入口感知子事务方法-TCC
java·开发语言·数据库