├── README.md ├── redis-svc.yml ├── app-deployment-service.yml ├── redis-sts.yml └── redis-pv.yml /README.md: -------------------------------------------------------------------------------- 1 | # redis-sts 2 | 3 | - https://rancher.com/blog/2019/deploying-redis-cluster/ 4 | -------------------------------------------------------------------------------- /redis-svc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: redis-cluster 6 | spec: 7 | type: ClusterIP 8 | clusterIP: 10.1.0.106 9 | ports: 10 | - port: 6379 11 | targetPort: 6379 12 | name: client 13 | - port: 16379 14 | targetPort: 16379 15 | name: gossip 16 | selector: 17 | app: redis-cluster 18 | -------------------------------------------------------------------------------- /app-deployment-service.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Service 4 | metadata: 5 | name: hit-counter-lb 6 | spec: 7 | type: ClusterIP 8 | ports: 9 | - port: 80 10 | protocol: TCP 11 | targetPort: 5000 12 | selector: 13 | app: myapp 14 | --- 15 | apiVersion: apps/v1 16 | kind: Deployment 17 | metadata: 18 | name: hit-counter-app 19 | spec: 20 | replicas: 1 21 | selector: 22 | matchLabels: 23 | app: myapp 24 | template: 25 | metadata: 26 | labels: 27 | app: myapp 28 | spec: 29 | containers: 30 | - name: myapp 31 | image: calinrus/api-redis-ha:1.0 32 | ports: 33 | - containerPort: 5000 34 | -------------------------------------------------------------------------------- /redis-sts.yml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: ConfigMap 4 | metadata: 5 | name: redis-cluster 6 | data: 7 | update-node.sh: | 8 | #!/bin/sh 9 | REDIS_NODES="/data/nodes.conf" 10 | sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES} 11 | exec "$@" 12 | redis.conf: |+ 13 | cluster-enabled yes 14 | cluster-require-full-coverage no 15 | cluster-node-timeout 15000 16 | cluster-config-file /data/nodes.conf 17 | cluster-migration-barrier 1 18 | appendonly yes 19 | protected-mode no 20 | --- 21 | apiVersion: apps/v1 22 | kind: StatefulSet 23 | metadata: 24 | name: redis-cluster 25 | spec: 26 | serviceName: redis-cluster 27 | replicas: 6 28 | selector: 29 | matchLabels: 30 | app: redis-cluster 31 | template: 32 | metadata: 33 | labels: 34 | app: redis-cluster 35 | spec: 36 | containers: 37 | - name: redis 38 | image: redis:5.0.5-alpine 39 | ports: 40 | - containerPort: 6379 41 | name: client 42 | - containerPort: 16379 43 | name: gossip 44 | command: ["/conf/update-node.sh", "redis-server", "/conf/redis.conf"] 45 | env: 46 | - name: POD_IP 47 | valueFrom: 48 | fieldRef: 49 | fieldPath: status.podIP 50 | volumeMounts: 51 | - name: conf 52 | mountPath: /conf 53 | readOnly: false 54 | - name: data 55 | mountPath: /data 56 | readOnly: false 57 | volumes: 58 | - name: conf 59 | configMap: 60 | name: redis-cluster 61 | defaultMode: 0755 62 | volumeClaimTemplates: 63 | - metadata: 64 | name: data 65 | spec: 66 | accessModes: [ "ReadWriteOnce" ] 67 | resources: 68 | requests: 69 | storage: 5Gi 70 | storageClassName: redis-cluster 71 | -------------------------------------------------------------------------------- /redis-pv.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: PersistentVolume 3 | metadata: 4 | name: redis-pv1 5 | spec: 6 | capacity: 7 | storage: 5Gi 8 | accessModes: 9 | - ReadWriteOnce 10 | persistentVolumeReclaimPolicy: Recycle 11 | storageClassName: "redis-cluster" 12 | nfs: 13 | path: /data/pv1 14 | server: 10.0.0.11 15 | --- 16 | apiVersion: v1 17 | kind: PersistentVolume 18 | metadata: 19 | name: redis-pv2 20 | spec: 21 | capacity: 22 | storage: 5Gi 23 | accessModes: 24 | - ReadWriteOnce 25 | persistentVolumeReclaimPolicy: Recycle 26 | storageClassName: "redis-cluster" 27 | nfs: 28 | path: /data/pv2 29 | server: 10.0.0.11 30 | --- 31 | apiVersion: v1 32 | kind: PersistentVolume 33 | metadata: 34 | name: redis-pv3 35 | spec: 36 | capacity: 37 | storage: 5Gi 38 | accessModes: 39 | - ReadWriteOnce 40 | persistentVolumeReclaimPolicy: Recycle 41 | storageClassName: "redis-cluster" 42 | nfs: 43 | path: /data/pv3 44 | server: 10.0.0.11 45 | --- 46 | apiVersion: v1 47 | kind: PersistentVolume 48 | metadata: 49 | name: redis-pv4 50 | spec: 51 | capacity: 52 | storage: 5Gi 53 | accessModes: 54 | - ReadWriteOnce 55 | persistentVolumeReclaimPolicy: Recycle 56 | storageClassName: "redis-cluster" 57 | nfs: 58 | path: /data/pv4 59 | server: 10.0.0.11 60 | --- 61 | apiVersion: v1 62 | kind: PersistentVolume 63 | metadata: 64 | name: redis-pv5 65 | spec: 66 | capacity: 67 | storage: 5Gi 68 | accessModes: 69 | - ReadWriteOnce 70 | persistentVolumeReclaimPolicy: Recycle 71 | storageClassName: "redis-cluster" 72 | nfs: 73 | path: /data/pv5 74 | server: 10.0.0.11 75 | --- 76 | apiVersion: v1 77 | kind: PersistentVolume 78 | metadata: 79 | name: redis-pv6 80 | spec: 81 | capacity: 82 | storage: 5Gi 83 | accessModes: 84 | - ReadWriteOnce 85 | persistentVolumeReclaimPolicy: Recycle 86 | storageClassName: "redis-cluster" 87 | nfs: 88 | path: /data/pv6 89 | server: 10.0.0.11 90 | --------------------------------------------------------------------------------