命令记不住

登陆

k8s 部署 Redis 主从 Master-Slave

k8s部署Redis主从Master-Slave

1.存储

Pv: pv-redis-sentinel-0

Pv: pv-redis-sentinel-1

Pv: pv-redis-sentinel-2

apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-redis-sentinel-0
namespace: redis-cluster
spec:
capacity:
 storage: 4Gi
accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: "redis-sentinel-storage-class"
  nfs:
    # real share directory
    path: /cfs
    # nfs real ip
    server:  172.20.96.12

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-redis-sentinel-1
  namespace: redis-cluster
spec:
  capacity:
    storage: 4Gi
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: "redis-sentinel-storage-class"
  nfs:
    # real share directory
    path: /cfs
    # nfs real ip
    server: 172.20.96.12

---

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-redis-sentinel-2
  namespace: redis-cluster
spec:
  capacity:
    storage: 4Gi
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: "redis-sentinel-storage-class"
  nfs:
    # real share directory
    path: /cfs
    # nfs real ip
    server: 172.20.96.12

2. configMap

redis-config.yam

kind: ConfigMap
apiVersion: v1
metadata:
name: redis-sentinel-config
namespace: redis-cluster
labels:
 addonmanager.kubernetes.io/mode: Reconcile
data:
 redis-master.conf: |
   port 6379
   tcp-backlog 511
   timeout 0
   tcp-keepalive 0
   loglevel notice
   databases 16
   save 900 1
   save 300 10
   save 60 10000
   stop-writes-on-bgsave-error yes
   rdbcompression yes
   rdbchecksum yes
   dbfilename dump.rdb
   dir /data/
   slave-serve-stale-data yes
   repl-diskless-sync no
   repl-diskless-sync-delay 5
   repl-disable-tcp-nodelay no
   slave-priority 100
   appendonly no
   appendfilename "appendonly.aof"
   appendfsync everysec
   no-appendfsync-on-rewrite no
   auto-aof-rewrite-percentage 100
   auto-aof-rewrite-min-size 64mb
   aof-load-truncated yes
   lua-time-limit 5000
   slowlog-log-slower-than 10000
   slowlog-max-len 128
   latency-monitor-threshold 0
   notify-keyspace-events ""
   hash-max-ziplist-entries 512
   hash-max-ziplist-value 64
   list-max-ziplist-entries 512
   list-max-ziplist-value 64
   set-max-intset-entries 512
   zset-max-ziplist-entries 128
   zset-max-ziplist-value 64
   hll-sparse-max-bytes 3000
   activerehashing yes
   client-output-buffer-limit normal 0 0 0
   client-output-buffer-limit slave 256mb 64mb 60
   client-output-buffer-limit pubsub 64mb 16mb 60
   hz 10
   aof-rewrite-incremental-fsync yes      
 redis-slave.conf: |
   port 6379
   slaveof redis-sentinel-master-ss-0.redis-sentinel-master-ss.database.svc.cluster.local 6379
   tcp-backlog 511
   timeout 0
   tcp-keepalive 0
   loglevel notice
   databases 16
   save 900 1
   save 300 10
   save 60 10000
   stop-writes-on-bgsave-error yes
   rdbcompression yes
   rdbchecksum yes
   dbfilename dump.rdb
   dir /data/
   slave-serve-stale-data yes
   slave-read-only yes
   repl-diskless-sync no
   repl-diskless-sync-delay 5
   repl-disable-tcp-nodelay no
   slave-priority 100
   appendonly no
   appendfilename "appendonly.aof"
   appendfsync everysec
   no-appendfsync-on-rewrite no
   auto-aof-rewrite-percentage 100
   auto-aof-rewrite-min-size 64mb
   aof-load-truncated yes
   lua-time-limit 5000
   slowlog-log-slower-than 10000
   slowlog-max-len 128
   latency-monitor-threshold 0
   notify-keyspace-events ""
   hash-max-ziplist-entries 512
   hash-max-ziplist-value 64
   list-max-ziplist-entries 512
   list-max-ziplist-value 64
   set-max-intset-entries 512
   zset-max-ziplist-entries 128
   zset-max-ziplist-value 64
   hll-sparse-max-bytes 3000
   activerehashing yes
   client-output-buffer-limit normal 0 0 0
   client-output-buffer-limit slave 256mb 64mb 60
   client-output-buffer-limit pubsub 64mb 16mb 60
   hz 10
   aof-rewrite-incremental-fsync yes      
 redis-sentinel.conf: |
   port 26379
   dir /data
   sentinel monitor mymaster redis-sentinel-master-ss-0.redis-sentinel-master-ss.database.svc.cluster.local 6379 2
   sentinel down-after-milliseconds mymaster 30000
   sentinel parallel-syncs mymaster 1
   sentinel failover-timeout mymaster 180000      

3.Redis Service

redis-master-service.yaml

kind: Service
apiVersion: v1
metadata:
labels:
 app: redis-sentinel-master-ss
name: redis-sentinel-master-ss
namespace: redis-cluster
spec:
clusterIP: None
ports:
  - name: redis
    port: 6379
    targetPort: 6379
  selector:
    app: redis-sentinel-master-ss

redis-slave-service.yaml

kind: Service
apiVersion: v1
metadata:
  labels:
    app: redis-sentinel-slave-ss
  name: redis-sentinel-slave-ss
  namespace: redis-cluster
spec:
  clusterIP: None
  ports:
  - name: redis
    port: 6379
    targetPort: 6379
  selector:
    app: redis-sentinel-slave-ss

4.Redis RBAC

redis-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
name: redis-sentinel
namespace: redis-cluster
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: redis-sentinel
namespace: redis-cluster
rules:
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - get
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: redis-sentinel
  namespace: redis-cluster
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: redis-sentinel
subjects:
- kind: ServiceAccount
  name: redis-sentinel
  namespace: redis-cluster

5.Redis StatefulSet

redis-sfs.yaml

kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
 app: redis-sentinel-master-ss
name: redis-sentinel-master-ss
namespace: redis-cluster
spec:
replicas: 1
selector:
 matchLabels:
   app: redis-sentinel-master-ss
serviceName: redis-sentinel-master-ss
template:
 metadata:
   labels:
     app: redis-sentinel-master-ss
 spec:
   containers:
      - args:
        - -c
        - cp /mnt/redis-master.conf /data/ ; redis-server /data/redis-master.conf
        command:
        - sh
        image: tk-harbor.tikrnews.com/opsproject/redis4.0:v1.0
        imagePullPolicy: IfNotPresent
        name: redis-master
        ports:
        - containerPort: 6379
          name: masterport
          protocol: TCP
        volumeMounts:
        - mountPath: /mnt/
          name: config-volume
          readOnly: false
        - mountPath: /data/
          name: redis-sentinel-master-storage
          readOnly: false
      serviceAccountName: redis-sentinel
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          items:
          - key: redis-master.conf
            path: redis-master.conf
          name: redis-sentinel-config 
        name: config-volume
  volumeClaimTemplates:
  - metadata:
      name: redis-sentinel-master-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: "redis-sentinel-storage-class"
      resources:
        requests:
          storage: 4Gi

redis-slave-sfs.yaml

kind: StatefulSet
apiVersion: apps/v1
metadata:
labels:
 app: redis-sentinel-slave-ss
name: redis-sentinel-slave-ss
namespace: redis-cluster
spec:
replicas: 2
selector:
 matchLabels:
   app: redis-sentinel-slave-ss
serviceName: redis-sentinel-slave-ss
template:
 metadata:
   labels:
     app: redis-sentinel-slave-ss
 spec:
   containers:
      - args:
        - -c
        - cp /mnt/redis-slave.conf /data/ ; redis-server /data/redis-slave.conf
        command:
        - sh
        image: tk-harbor.tikrnews.com/opsproject/redis4.0:v1.0
        imagePullPolicy: IfNotPresent
        name: redis-slave
        ports:
        - containerPort: 6379
          name: slaveport
          protocol: TCP
        volumeMounts:
        - mountPath: /mnt/
          name: config-volume
          readOnly: false
        - mountPath: /data/
          name: redis-sentinel-slave-storage
          readOnly: false
      serviceAccountName: redis-sentinel
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          items:
          - key: redis-slave.conf
            path: redis-slave.conf
          name: redis-sentinel-config 
        name: config-volume
  volumeClaimTemplates:
  - metadata:
      name: redis-sentinel-slave-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: "redis-sentinel-storage-class"
      resources:
        requests:
          storage: 4Gi

6.验证

kubectl exec -ti redis-sentinel-slave-ss-1 -n redis-cluster -- redis-cli -h redis-sentinel-master-ss-0.redis-sentinel-master-ss.redis-cluster.svc.cluster.local info replication


kubectl exec -ti redis-sentinel-slave-ss-1 -n redis-cluster -- redis-cli -h redis-sentinel-master-ss-0.redis-sentinel-master-ss.redis-cluster.svc.cluster.local info replication