Kubernetes部署Redis集群——三主三从模式

本文详细介绍如何使用Dockerfile和YAML文件在Kubernetes中部署一个Redis集群,包括创建PersistentVolume、PersistentVolumeClaim、ConfigMap和StatefulSet,实现六节点的三主三从模式,以及配置更新IP的脚本和必要的服务设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kubernetes部署Redis集群——三主三从模式

一、Dockerfile的编写

在虚拟中安装一个redis

FROM redis:5.0.14

ADD logs /opt/redis/logs
ADD data /opt/redis/data
ADD bin/redis.conf /etc/redis/redis.conf

二、YAML文件的编写

创建 PersistentVolume

创建六个PV,持久化redis的数据

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv0
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.1.236
    path: /data/redis/cluster0

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv1
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.1.236
    path: /data/redis/cluster1

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv2
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.1.236
    path: /data/redis/cluster2

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv3
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.1.236
    path: /data/redis/cluster3

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv4
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.1.236
    path: /data/redis/cluster4

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv5
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 192.168.1.236
    path: /data/redis/cluster5

创建PVC

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-redis-0
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-redis-1
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-redis-2
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-redis-3
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
      
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-redis-4
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
      
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: data-redis-5
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Config Yaml

update-ip.sh 是用于Pod停掉后,将nodes.conf中的旧的Ip替换为新的IP,从而达到不会因为IP变化导致集群无法正常使用

apiVersion: v1
data:
  update-ip.sh: "#!/bin/sh\n    CLUSTER_CONFIG=\"/data/nodes.conf\"\n  echo \"POD_IP
    is ${POD_IP}\"\n    if [ -f ${CLUSTER_CONFIG} ]; then\n      if [ -z \"${POD_IP}\"
    ]; then \n        echo \"Unable to determine Pod IP address!\"\n        exit 1\n
    \     fi\n      echo \"Updating my IP to ${POD_IP} in ${CLUSTER_CONFIG}\"\n sed
    -i.bak -e \"/myself/ s/[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}\\.[0-9]\\{1,3\\}/${POD_IP}/\"
    ${CLUSTER_CONFIG} \n    fi\n    exec \"$@\""
  redis.conf: |-
    appendonly yes
    cluster-enabled yes
    cluster-config-file /data/nodes.conf
    cluster-require-full-coverage no
    cluster-migration-barrier 1
    cluster-node-timeout 15000
    protected-mode  no
    port 6379
    requirepass datablau
    masterauth datablau
kind: ConfigMap
metadata:
  name: redis-conf


Redis Yaml

apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: sp-bdg
  labels:
    app: redis
spec:
  selector:
    app: redis
    appCluster: redis-cluster
  ports:
  - name: redis
    port: 6379
  clusterIP: None
  

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
  namespace: sp-bdg
spec:
  serviceName: redis
  replicas: 6
  selector:
    matchLabels:
      app: redis
      appCluster: redis-cluster
  updateStrategy:
    type: RollingUpdate
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: redis
        appCluster: redis-cluster
    spec:
      terminationGracePeriodSeconds: 20
      containers:
      - name: redis
        resources:
          limits:
            cpu: "2"
            memory: 8Gi
          requests:
            cpu: "1"
            memory: 4Gi
        image: redis:5.0.14
        command: ["/conf/update-ip.sh", "redis-server", "/conf/redis.conf"]
        env:
        - name: TZ
          value: "Asia/Shanghai"
        - name: POD_IP
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
        ports:
        - containerPort: 6379
          name: redis
          protocol: TCP
        - containerPort: 16379
          name: cluster
          protocol: TCP
        volumeMounts:
        - name: conf
          mountPath: /conf
        - name: data
          mountPath: /data
      volumes:
      - configMap:
          defaultMode: 0755
          name: redis-conf
        name: conf
  volumeClaimTemplates:
  - metadata:
      name: data
      namespace: sp-bdg
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: dtc-local-storage
      resources:
        requests:
          storage: 1Gi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值