使用 Helm 安装 Redis 集群

embedded/2025/1/23 10:51:23/

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

前提条件

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

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

一、安装 Helm

  1. 下载 Helm

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

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 等。

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。

helm search repo redis
  1. 拉取 Redis Cluster Chart

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

helm pull bitnami/redis-cluster

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

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 文件,以指定存储类、密码等配置:

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

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

helm install redis-cluster ./redis-cluster
  1. 查看 Redis Pod

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

kubectl get pod -n default

三、常见错误及解决方法

  1. Redis 镜像版本问题

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

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)以供使用:

apiVersion: v1
kind: PersistentVolume
metadata:name: redis-cluster-pv-0
spec:capacity:storage: 8GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: nfs-storagenfs:server: 192.168.80.130path: /data/nfs-demo/redis-data-redis-cluster-0
---
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-cluster-pv-1
spec:capacity:storage: 8GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: nfs-storagenfs:server: 192.168.80.130path: /data/nfs-demo/redis-data-redis-cluster-1
....依次类推

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

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

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

/data/nfs-demo/redis-data-redis-cluster-0
/data/nfs-demo/redis-data-redis-cluster-1
  1. Redis 集群未正确创建

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

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

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

kubectl exec -it redis-cluster-0 -- redis-cli -c -h 10.0.1.247 -p 6379 cluster info

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

kubectl exec -it redis-cluster-0 -- redis-cli -c -h 10.0.1.247 -p 6379 cluster nodes

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

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 配置:
kubectl -n kube-system get configmap coredns -o yaml
  1. 修改 /etc/systemd/resolved.conf 配置并重启:
sudo vi /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 1.1.1.1

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

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

将 DNS 配置修改为:

forward . 8.8.8.8 1.1.1.1

重启 CoreDNS 部署:

kubectl -n kube-system rollout restart deployment coredns

验证网络连接和 DNS 配置:

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

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


http://www.ppmy.cn/embedded/156283.html

相关文章

【统计信号处理基础——估计与检测理论】Vol1.Ch2. 最小方差无偏估计

系列目录 【统计信号处理基础——估计与检测理论】Vol1.Ch1. 引言 文章目录 1. 无偏估计量2. 最小方差准则3. 最小方差无偏估计的存在性4. 求最小方差无偏估计量5. 扩展到矢量参数习题2.12.22.32.42.52.6 本章寻找未知确定性参数的好的估计量。我们将注意力限制在通过平均产生真…

5G 核心网 相关概念快速入门

在我们开始阅读3GPP协议来学习5G核心网之前&#xff0c; 不妨来看看我之前整理的PPT&#xff0c;快速学习核心网相关概念&#xff0c; 以及5G转发面PFCP协议的相关核心知识。 涵盖了最精简的核心骨干内容&#xff0c;助你轻松上阵。 讲解目标 3GPP和相关协议 5G核心网架构模…

云原生作业(四)

简述mysql 主从复制原理及其工作过程&#xff0c;配置一主两从并验证。 主从复制原理 主从原理&#xff1a;MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将…

Linux之socket编程(上)

目录 理解IP和端口号 socket编程接口 简单UDP网络小程序实现 本期我们将开始学习Linux计算机网络的相关知识。 理解IP和端口号 IP&#xff1a;一个IP唯一标识一个网络中的主机。 端口号&#xff1a;唯一标识一个主机中的一个进程。 IP端口号我们也称作套接字。 所以我们可以得…

通过frm和ibd文件恢复mysql数据

1.提取所有的文件名并查找出以frm结尾的 dir /t /b >1.txt 2.要准备的软件 1.mysql-utilities-1.6.5-winx64.msi 2.vcredist_x64.exe(c 2013) 3.利用frm生成sql文件 mysqlfrm --serverroot:123456localhost:3306 --port3308 D:\phpstudy_pro\Extensions\MySQL5.7.26\da…

PyQt5 超详细入门级教程上篇

PyQt5 超详细入门级教程 上篇&#xff1a;1-3部分&#xff1a;PyQt5基础与常用控件 第1部分&#xff1a;初识 PyQt5 和安装 1.1 什么是 PyQt5&#xff1f; PyQt5 是 Python 的图形用户界面 (GUI) 框架&#xff0c;它基于强大的 Qt 库。Qt 是一个跨平台的 C 框架&#xff0c;用…

三层软电话技术

随着信息技术的飞速发展&#xff0c;企业通讯方式也在不断演进。三层软电话技术作为一种先进的通讯解决方案&#xff0c;正在被越来越多的企业所采纳。本文将全面解析三层软电话的定义、应用场景、工作原理、优势以及劣势&#xff0c;并对其进行拓展探讨。 一、三层软电话 三层…

Linux网络 序列化与反序列化

概念 序列化&#xff08;Serialization&#xff09;是将对象的状态信息转换为可以存储或传输的形式的过程。以下是关于序列化与反序列化的介绍&#xff1a; 序列化&#xff1a;将对象的状态信息转换为可以存储或传输的格式&#xff0c;通常是字节序列或文本格式。反序列化&am…