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

方案一:基础单实例/主从部署
这是最简单的部署方式,适合开发测试或非关键应用。搜索结果提供了两种主流实现路径。
1. 使用原生YAML文件
这种方案与Deployment和Service组合类似,其重点在于使用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环境和应用特点,仔细调整资源配置、持久化、网络策略和安全设置(如密码、加密)。