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

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

相关推荐
Code季风几秒前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
weixin_4786897615 分钟前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql
九皇叔叔1 小时前
【7】PostgreSQL 事务
数据库·postgresql
kk在加油1 小时前
Mysql锁机制与优化实践以及MVCC底层原理剖析
数据库·sql·mysql
Kookoos1 小时前
ABP VNext + Cosmos DB Change Feed:搭建实时数据变更流服务
数据库·分布式·后端·abp vnext·azure cosmos
hello 早上好2 小时前
MsSql 其他(2)
数据库·mysql
高压锅_12202 小时前
SQLAlchemy数据库连接密码特殊字符处理完全指南
数据库·mysql·django·sqlalchemy
都叫我大帅哥3 小时前
Redis AOF持久化深度解析:命令日志的终极生存指南
redis
都叫我大帅哥3 小时前
Redis RDB持久化深度解析:内存快照的魔法与陷阱
redis
Hello.Reader7 小时前
Redis 延迟监控深度指南
数据库·redis·缓存