k8s部署Redis服务
一、Redis介绍
Redis 是一款开源的高性能键值对(Key-Value)数据库,核心优势是基于内存存储、读写速度极快,还支持多种数据结构,能适配缓存、分布式锁等多种业务场景。
核心特性
- 高性能内存存储:数据主要存于内存,读写响应时间可达微秒级,单台服务器支持每秒数万次操作。
- 丰富数据结构:支持字符串、哈希、列表、集合、有序集合等多种结构,满足不同业务需求。
- 高可用与可扩展:支持主从复制、哨兵模式保障高可用,集群模式可横向扩容提升存储和并发能力。
二、Redis配置挂载
Redis挂载配置的方式有两种,一种是直接使用现有的redis.conf文件,另一种是编写redis-conf.yaml文件。这里介绍直接挂载redis.conf文件。
使用以下命令应用
kubectl create configmap redis-config --from-file=redis.conf=redis.conf -n zhongchuan141
配置文件注意事项
# 1. 移除重复的 bind 127.0.0.1(冲突,仅保留 0.0.0.0 允许K8s内部访问)
# bind 127.0.0.1 # 注释或删除此行
bind 0.0.0.0
# 2. 强制Redis前台运行(容器必须依赖前台进程存活,核心修改)
daemonize no # 从 yes 改为 no
# 3. 注释 logfile(避免因日志目录不存在导致启动失败,日志可通过 kubectl logs 查看)
# logfile "/home/logs/redis/redis.log" # 注释此行(容器中默认输出到stdout)
三、Reids持久卷和声明创建
持久卷的存在主要是用于存储镜像产生的数据,即使重新部署或者升版都不会影响对应数据,反之,没有持久卷存储数据时,每次重新部署镜像都需要将以前的数据导入,或者引发数据丢失,服务崩溃等一系列问题。
redis-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: redis-pv
namespace: zhongchuan141
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /home/data/redis/data
redis-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc
namespace: zhongchuan141
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
声明完成后k8s集群会自动进行匹配适合的持久卷,但更推荐使用storageClassName做区分,集群会优先使用storageClassName类名匹配持久卷和声明。
四、创建deployment.yaml文件和service.yaml文件
deployment.yaml文件,用于创建redis的控制器和对应的pod容器,在文件中指明了控制器deployment的资源大小、标签、创建的容器镜像、启动命令等,后续对容器水平扩容时可对deployment.yaml文件进行修改。
service.yaml文件,用于负责负载均衡和服务发现,暴露redis的端口号和访问模式,其中,端口号可分pod容器对service暴露的端口,service对k8s集群暴露的端口,以及访问模式。
apiVersion: apps/v1
kind: Deployment
metadata:
name: zhongchuan141-redis
namespace: zhongchuan141
spec:
replicas: 1
selector:
matchLabels:
app: zhongchuan141-redis
template:
metadata:
labels:
app: zhongchuan141-redis
spec:
securityContext:
runAsUser: 0
runAsGroup: 0
containers:
- name: zhongchuan141-redis
image: dockerhub.kubekey.local/tiangang/redis:4.0.9
command: ["redis-server","/etc/redis/redis.conf"] #使用命令启动并指定redis的配置文件
ports:
- containerPort: 6379
volumeMounts:
- name: redis-config
mountPath: /etc/redis/
readOnly: true
- name: redis-data
mountPath: /home/data/redis
subPath: redis-data
securityContext:
readOnlyRootFilesystem: false
allowPrivilegeEscalation: true
privileged: true
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "1Gi"
cpu: "500m"
volumes:
- name: redis-config
configMap:
name: redis-config
- name: redis-data
persistentVolumeClaim:
claimName: redis-pvc
---
apiVersion: v1
kind: Service
metadata:
name: zhongchuan141-redis
namespace: zhongchuan141
spec:
selector:
app: zhongchuan141-redis
ports:
- port: 6379
targetPort: 6379
nodePort: 30379
type: NodePort
五、验证是否部署成功
在RedisDesktopManager工具中使用master节点或者work节点的IP+对外暴露的端口号如30379建立连接,连接成功并能访问则视为部署成功。

更多推荐

所有评论(0)