k8s安装 Redis Operator 实现 Redis 集群的自动化管理(部署、扩缩容、故障恢复等)

在 Kubernetes 上安装 Redis Operator 可以实现 Redis 集群的自动化管理(部署、扩缩容、故障恢复等)。以下是基于 Spotahome Redis Operator(目前最受欢迎的开源 Redis Operator)的详细安装指南:


前置条件

  1. Kubernetes 集群(v1.16+)
  2. kubectl 已配置访问集群
  3. 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

关键功能说明

  1. 自动故障转移
    Sentinel 监控主节点,故障时自动提升副本为主节点。

  2. 持久化存储
    使用 persistentVolumeClaim 确保数据持久化。

  3. 资源配置
    通过 resources 限制 CPU/内存,避免资源争抢。

  4. 监控集成
    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

生产环境建议

  1. 版本固定
    避免使用 latest 标签,指定稳定版本:

    --set redisOperator.image.tag=v3.2.0
    
  2. 资源限制
    根据负载调整资源请求/限制:

    resources:
      requests:
        cpu: "200m"
        memory: "512Mi"
      limits:
        cpu: "1"
        memory: "1Gi"
    
  3. 持久化存储
    使用高性能存储类(如 SSD):

    storage:
      persistentVolumeClaim:
        spec:
          storageClassName: "gp2"  # AWS EBS
          resources:
            requests:
              storage: 10Gi
    
  4. 备份策略
    集成 Velero 或 cronJob 定期备份 RDB 文件。

  5. 网络策略
    限制访问权限:

    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 集群的运维工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值