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环境和应用特点,仔细调整资源配置、持久化、网络策略和安全设置(如密码、加密)。

相关推荐
難釋懷21 分钟前
Redis分片集群手动故障转移
数据库·redis·缓存
Sst的头号粉丝1 小时前
Kubernetes——介绍
云原生·容器·kubernetes
木二_1 小时前
057.Kubernetes cert-manager ACME方案介绍
云原生·容器·kubernetes·证书·cert-manager·证书管理
危笑ioi2 小时前
基于Kubeconfig实现K8s节点免密登录
云原生·容器·kubernetes
木二_3 小时前
058.Kubernetes cert-manager 申请证书及ingress注解介绍
云原生·容器·kubernetes·cert-manager·证书管理
用什么都重名3 小时前
Redis 入门与实践:从基础到 Stream 消息队列
数据库·redis·缓存
苦瓜小生3 小时前
【黑马点评学习笔记 | 实战篇 】| 7-达人探店
redis·笔记·后端·学习
大树学长3 小时前
【QT开发】Redis通信相关(一)
redis·qt
知识分享小能手4 小时前
Redis入门学习教程,从入门到精通,Redis进阶编程知识点详解(5)
数据库·redis·学习