
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-ssredis-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