apiVersion: apps/v1 kind: StatefulSet metadata: name: redis spec: selector: matchLabels: app: redis-sts serviceName: redis-service replicas: 3 template: metadata: labels: app: redis-sts spec: terminationGracePeriodSeconds: 10 initContainers: - name: init-redis image: redis:latest command: - bash - "-c" - | set -ex # Generate server-id from Pod ordinal index. [[ `hostname` =~ -([0-9]+)$ ]] || exit 1 ordinal=${BASH_REMATCH[1]} echo "ordinal ${ordinal}" # Copy appropriate config files from config-map to emptyDir. mkdir -p /redis/conf/ if [[ $ordinal -eq 0 ]]; then cp /mnt/redis-configmap/primary.conf /redis/conf/redis.conf else cp /mnt/redis-configmap/replica.conf /redis/conf/redis.conf fi cat /redis/conf/redis.conf volumeMounts: - name: redis-config-volume mountPath: /redis/conf/ - name: redis-configmap-volume mountPath: /mnt/redis-configmap containers: - name: redis-container image: redis:latest command: ["redis-server"] args: ["/redis/conf/redis.conf"] volumeMounts: - name: redis-config-volume mountPath: /redis/conf/ - name: redis-pvc mountPath: /redis/data resources: requests: cpu: 1 memory: 4Gi volumes: - name: redis-configmap-volume configMap: name: redis-role-config - name: redis-config-volume emptyDir: {} volumeClaimTemplates: - metadata: name: redis-pvc spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi --- apiVersion: v1 kind: Service metadata: name: redis-service spec: ports: - port: 6379 clusterIP: None selector: app: redis-sts