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说明服务正常

微信截图_20250701164511

数据持久化验证

# 在 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说明数据持久化部署成功

微信截图_20250701164902

8.下载Redis可视化工具并通过IP:端口访问Redis

这里选择AnotherRedisDesktopManager工具
下载地址在这,根据自己的系统选择合适的版本:https://gitee.com/qishibo/AnotherRedisDesktopManager/releases

下载安装完之后新建连接
输入两个必填项就行
微信截图_20250701165213

这样的页面代表连接成功

微信截图_20250701165309

至此,Redis部署完毕!

希望这篇博客能对你提供些许帮助,如果你有任何的问题和建议,欢迎在评论区相互交流。

我们下期再见!

posted @ 2025-07-01 16:59  努力成为OM大师  阅读(308)  评论(0)    收藏  举报