Kubernetes--k8s中部署redis数据库服务

在Kubernetes中部署Redis,有多种成熟方案可选,从简单的单实例到企业级集群,能满足不同场景的需求。下图梳理了这几种核心方案,帮助你快速决策。

方案一:基础单实例/主从部署

这是最简单的部署方式,适合开发测试或非关键应用。搜索结果提供了两种主流实现路径。

1. 使用原生YAML文件

这种方案与DeploymentService组合类似,其重点在于使用ConfigMap来管理Redis配置文件,使配置与镜像解耦。

yaml 复制代码
# 1. 创建存储配置的ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
data:
  redis-config: |
    maxmemory 512mb
    maxmemory-policy allkeys-lru
    appendonly yes

# 2. 创建Pod,将ConfigMap挂载为文件
apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis:8.0.2
    command: [ "redis-server", "/redis-master/redis.conf" ] # 指定配置文件
    volumeMounts:
    - name: config
      mountPath: /redis-master
  volumes:
    - name: config
      configMap:
        name: redis-config
        items:
        - key: redis-config
          path: redis.conf # ConfigMap中的键成为文件

关键点 :修改ConfigMap后,需要重启Pod (如执行 kubectl delete pod redis)才能加载新配置。

2. 使用Helm Chart快速部署

对于主从复制等更复杂的部署,推荐使用 Bitnami Redis Helm Chart,它能一键部署包含主节点、副本节点以及可选Sentinel(用于自动故障转移)的完整架构。

bash 复制代码
# 添加Bitnami仓库并安装
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-redis bitnami/redis

安装后,注意查看输出的NOTES,它会给出访问密码和连接方式。该Chart支持三种拓扑结构:

  • Standalone:单节点。
  • Replication(默认):一主多从,提供读写分离。
  • Replication with Sentinel:在主从基础上增加Sentinel容器,实现高可用。

方案二:Redis Cluster集群部署

当数据量巨大或写入压力大,需要水平分片时,应选择Redis Cluster。

1. 使用Bitnami Redis Cluster Helm Chart(推荐)

这是部署Cluster最简单的方式。Chart默认会创建一个6节点集群(3主3从),并提供连接服务。

bash 复制代码
helm install my-redis-cluster bitnami/redis-cluster

重要概念

  • 数据分片:数据被自动分片到多个主节点(如3个)。
  • 高可用:每个主节点有对应的从节点(副本),主节点故障时从节点会接管。
  • 连接方式 :客户端需要支持集群协议。连接时,任何节点都可能将请求重定向到正确的分片,因此客户端需支持重定向或使用-c标志(在redis-cli中)。

2. 使用原生StatefulSet手动搭建

此方案控制粒度更细,但步骤繁琐。核心是为每个Redis节点创建带持久化存储的StatefulSet,然后手动执行命令初始化集群。

方案三:企业级部署(Redis Enterprise K8s Operator)

如果需要多租户、图形化管理界面、Active-Active全球分布式数据库等高级功能,可以使用Redis官方提供的Kubernetes Operator。

bash 复制代码
# 1. 创建命名空间
kubectl create namespace redis-enterprise

# 2. 部署Operator
kubectl apply -f https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/<VERSION>/bundle.yaml -n redis-enterprise

# 3. 创建Redis Enterprise集群(至少3节点)
cat <<EOF | kubectl apply -n redis-enterprise -f -
apiVersion: app.redislabs.com/v1
kind: RedisEnterpriseCluster
metadata:
  name: my-rec
spec:
  nodes: 3
EOF

Operator会创建并管理整个集群的生命周期。之后,你可以通过创建RedisEnterpriseDatabase自定义资源来按需创建数据库。

Spring Boot应用如何连接

在K8s中,应用通过Service名称访问Redis。根据你选择的部署方案,配置文件需相应调整:

连接单实例或主从服务

properties 复制代码
spring.redis.host=<SERVICE_NAME>  # 例如:my-redis-master(Bitnami Chart的主服务名)
spring.redis.port=6379
# 如果设置了密码
spring.redis.password=${REDIS_PASSWORD}

连接Redis Cluster

Spring Boot 2.0+ 支持集群模式,配置略有不同。假设Cluster的服务名为 my-redis-cluster

yaml 复制代码
spring:
  redis:
    cluster:
      nodes:
        - my-redis-cluster-0.my-redis-cluster-headless:6379
        - my-redis-cluster-1.my-redis-cluster-headless:6379
        - my-redis-cluster-2.my-redis-cluster-headless:6379
    password: ${REDIS_PASSWORD}

注意 :这里通常连接的是无头服务(headless service,名称带 -headless),因为它能返回所有Pod的DNS记录,让客户端可以感知到所有节点。

方案选择与生产建议

不同需求对应不同选择:

  • 学习/开发测试:单实例或Bitnami Standalone模式。
  • 常规生产环境,需高可用与读写分离 :Bitnami Replication with Sentinel
  • 大数据量,需水平扩展与分片 :Bitnami Redis Cluster
  • 企业级需求,需要高级功能与管理Redis Enterprise Operator

无论选择哪种方案,都建议你根据自身K8s环境和应用特点,仔细调整资源配置、持久化、网络策略和安全设置(如密码、加密)。

相关推荐
Hello.Reader2 小时前
Flink Kubernetes HA(高可用)实战原理、前置条件、配置项与数据保留机制
贪心算法·flink·kubernetes
惊讶的猫2 小时前
Redis持久化介绍
数据库·redis·缓存
ShiLiu_mtx4 小时前
k8s - 7
云原生·容器·kubernetes
啦啦啦_99994 小时前
Redis-5-doFormatAsync()方法
数据库·redis·c#
生产队队长4 小时前
Redis:Windows环境安装Redis,并将 Redis 进程注册为服务
数据库·redis·缓存
xu_yule5 小时前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式
清风拂山岗 明月照大江7 小时前
Redis笔记汇总
java·redis·缓存
消失的旧时光-19439 小时前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
消失的旧时光-194310 小时前
第十四课 · 实战篇:Redis 缓存系统落地指南(Spring Boot 从 0 到可用)
spring boot·redis·缓存