k8s集群部署redis
Redis介绍
Redis是一个完全开源免费的高性能(NOSQL)的key-value数据库。遵守BSD协议,使用ANSI C语言编写,支持丰富的数据类型,包括String、Hash、List、Set和Ordered Set。总之,Redis是一个简单、高效、分布式、基于内存的缓存工具,通过网络连接提供Key-Value式的缓存服务。
前置:k8s集群环境,若没有配置完成,可以参考以下链接:
https://www.cnblogs.com/OM-dyc/articles/18957330
https://www.cnblogs.com/OM-dyc/articles/18959567
开始部署Redis
1.创建redis命名空间和目录
kubectl create namespaces redis
sudo mkdir -p /data/redis
sudo chmod 777 /data/redis
2.创建Redis的配置文件,包含Redis的启动参数和配置选项
vim redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-config
namespaces:redis
data:
redis.conf: |
port 6379
bind 0.0.0.0
appendonly yes
save 60 1000
maxmemory 512mb
maxmemory-policy allkeys-lru
3.创建Deployment来管理Redis容器,通过设置当容器失败时自动重启,保证Redis容器始终运行
vim redis-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespaces:redis
spec:
replicas: 1 #副本数,设置为1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:6.2.19 #官方Redis镜像
ports:
- containerPort: 6379 #端口映射
volumeMounts: #配置文件和数据卷挂载
- name: redis-data
mountPath: /data
- name: redis-config
mountPath: /usr/local/etc/redis/redis.conf
subPath: redis.conf
volumes:
- name: redis-data
persistentVolumeClaim:
claimName: redis-pvc
- name: redis-config
configMap:
name: redis-config
4.创建pv
`vim redis-pv.yaml`
apiVersion: v1
kind: PersistentVolume
metadata:
name: redis-pv # Redis 专用 PV 名称
spec:
capacity:
storage: 5Gi # 容量至少满足 Redis PVC 的请求(例如 5Gi)
accessModes:
- ReadWriteOnce # 与 Redis PVC 的访问模式一致
persistentVolumeReclaimPolicy: Retain # 保留数据,避免意外删除
storageClassName: redis-storage # 必须与 Redis PVC 的存储类一致(关键!)
local:
path: /data/redis # Redis 数据存储的本地路径(需提前创建)
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- master
5.创建PVC以持久化Redis数据
vim redis-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-pvc
namespaces:redis
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-storage
6.创建Service让其他服务访问Redis
vim redis-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis
namespaces:redis
spec:
ports:
- port: 6379
targetPort: 6379
nodePort: 30000 # 自定义 NodePort(范围 30000-32767)
selector:
app: redis
type: NodePort # NodePort 类型 允许外部redis可视化工具连接
7.创建存储类
vim local-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
annotations:
storageclass.kubernetes.io/is-default-class: "true" # 设置为默认
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
6.应用部署
kubectl apply -f local-storageclass.yaml
kubectl apply -f redis-config.yaml
kubectl apply -f redis-pv.yaml
kubectl apply -f redis-pvc.yaml
kubectl apply -f redis-deployment.yaml
kubectl apply -f redis-service.yaml
7.测试Redis的服务和数据持久化
服务验证
POD_NAME=$(kubectl get pods -l app=redis -o jsonpath='{.items[0].metadata.name}')
kubectl exec -it $POD_NAME -- sh
redis-cli ping
输出为PONG说明服务正常

数据持久化验证
# 在 Redis 中设置键值对
redis-cli set mykey "Hello Redis"
# 获取键值对
redis-cli get mykey
# 退出 Redis 客户端
exit
# 模拟 Pod 重启(删除 Pod 使其重新创建)
kubectl delete pod $POD_NAME
# 获取新POD_NAME
POD_NAME=$(kubectl get pods -l app=redis -o jsonpath='{.items[0].metadata.name}')
# 再次进入新 Pod
kubectl exec -it $POD_NAME -- sh
# 检查数据是否保留
redis-cli get mykey
最后输出结果为Hello Redis说明数据持久化部署成功

8.下载Redis可视化工具并通过IP:端口访问Redis
这里选择AnotherRedisDesktopManager工具
下载地址在这,根据自己的系统选择合适的版本:https://gitee.com/qishibo/AnotherRedisDesktopManager/releases
下载安装完之后新建连接
输入两个必填项就行

这样的页面代表连接成功

至此,Redis部署完毕!
希望这篇博客能对你提供些许帮助,如果你有任何的问题和建议,欢迎在评论区相互交流。
我们下期再见!
浙公网安备 33010602011771号