在 Kubernetes 上安装 Redis Operator 可以实现 Redis 集群的自动化管理(部署、扩缩容、故障恢复等)。以下是基于 Spotahome Redis Operator(目前最受欢迎的开源 Redis Operator)的详细安装指南:
前置条件
- Kubernetes 集群(v1.16+)
kubectl
已配置访问集群- Helm(v3+,推荐方式)或直接使用 YAML 文件
安装方式 1:使用 Helm(推荐)
步骤 1:添加 Helm 仓库
helm repo add redisfailover https://spotahome.github.io/redis-operator
helm repo update
步骤 2:创建命名空间
kubectl create namespace redis-operator
步骤 3:安装 Redis Operator
helm install redis-operator redisfailover/redis-operator \
--namespace redis-operator \
--set redisOperator.image.tag=latest # 指定版本(推荐固定版本如 v3.2.0)
验证 Operator 安装
kubectl get pods -n redis-operator -l app.kubernetes.io/name=redis-operator
# 应看到 redis-operator Pod 状态为 Running
安装方式 2:使用 YAML 清单
步骤 1:克隆仓库
git clone https://github.com/Spotahome/redis-operator.git
cd redis-operator
步骤 2:安装 RBAC 和 Operator
kubectl apply -f example/role.yaml
kubectl apply -f example/role_binding.yaml
kubectl apply -f example/service_account.yaml
kubectl apply -f example/operator.yaml
验证安装
kubectl get pods -l app=redisoperator
部署 Redis 集群(RedisFailover)
Operator 安装后,通过 RedisFailover
自定义资源创建 Redis 集群。
步骤 1:创建 RedisFailover 配置文件
创建 redis-cluster.yaml
:
apiVersion: databases.spotahome.com/v1
kind: RedisFailover
metadata:
name: my-redis-cluster
namespace: default # 与您的应用同命名空间
spec:
redis:
replicas: 3 # Redis 主节点数
resources:
requests:
cpu: "100m"
memory: "100Mi"
storage:
persistentVolumeClaim:
metadata:
name: redis-data
spec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 1Gi
sentinel:
replicas: 3 # Sentinel 节点数(至少3个)
resources:
requests:
cpu: "50m"
memory: "50Mi"
步骤 2:部署 Redis 集群
kubectl apply -f redis-cluster.yaml
步骤 3:验证集群状态
kubectl get redisfailover -w # 查看集群状态
kubectl get pods -l app=redis # Redis 节点
kubectl get pods -l app=sentinel # Sentinel 节点
kubectl get svc -l app=redis # 服务列表
关键服务:
rfr-<name>
:Redis 主节点服务(读写)rfs-<name>
:Sentinel 服务(用于故障切换)
访问 Redis 集群
从集群内部访问
# 应用部署示例片段
containers:
- name: my-app
env:
- name: REDIS_HOST
value: "rfr-my-redis-cluster" # 指向 Redis 服务
- name: REDIS_PORT
value: "6379"
从外部访问(临时测试)
# 端口转发
kubectl port-forward svc/rfr-my-redis-cluster 6379:6379
# 本地连接
redis-cli -h 127.0.0.1 -p 6379
关键功能说明
-
自动故障转移
Sentinel 监控主节点,故障时自动提升副本为主节点。 -
持久化存储
使用persistentVolumeClaim
确保数据持久化。 -
资源配置
通过resources
限制 CPU/内存,避免资源争抢。 -
监控集成
Operator 暴露 Prometheus 指标:spec: redis: exporter: true # 启用 Prometheus Exporter
卸载 Redis 集群
kubectl delete redisfailover my-redis-cluster
卸载 Redis Operator
Helm 安装方式
helm uninstall redis-operator -n redis-operator
kubectl delete ns redis-operator
YAML 安装方式
kubectl delete -f example/operator.yaml
kubectl delete -f example/role_binding.yaml
kubectl delete -f example/role.yaml
kubectl delete -f example/service_account.yaml
生产环境建议
-
版本固定
避免使用latest
标签,指定稳定版本:--set redisOperator.image.tag=v3.2.0
-
资源限制
根据负载调整资源请求/限制:resources: requests: cpu: "200m" memory: "512Mi" limits: cpu: "1" memory: "1Gi"
-
持久化存储
使用高性能存储类(如 SSD):storage: persistentVolumeClaim: spec: storageClassName: "gp2" # AWS EBS resources: requests: storage: 10Gi
-
备份策略
集成 Velero 或 cronJob 定期备份 RDB 文件。 -
网络策略
限制访问权限:spec: redis: serviceAccountName: redis-service-account podSecurityContext: {} securityContext: {}
故障排查命令
# 查看 Operator 日志
kubectl logs -n redis-operator deploy/redis-operator
# 检查 Redis/Sentinel 日志
kubectl logs <redis-pod> -c redis
kubectl logs <sentinel-pod> -c sentinel
# 诊断集群状态
kubectl exec -it <redis-pod> -- redis-cli info replication
kubectl exec -it <sentinel-pod> -- redis-cli -p 26379 sentinel master mymaster
通过以上步骤,可以在 Kubernetes 上快速部署高可用的 Redis 集群。Redis Operator 自动化处理了故障转移、配置管理等复杂操作,大幅简化了 Redis 集群的运维工作。