SlideShare a Scribd company logo
meetup 28/10/2018
Kubernetes
Redise
- Open Source & Proprietary Technology
Redise
Node
Cluster Manager
Redise
Cluster
• Shared nothing, symmetrical cluster
architecture
• Fully compatible with open source
commands & data structures
Enterprise Layer
Open Source Layer
REST API
Zero latency proxy
• Faster time to market with continuity between
dev/test and production environments that use
Redise
Pack
• Highly available, easier to scale, simpler to manage
Redis technology, integrated with orchestration tools
such as PCF, Kubernetes, Mesosphere...
• Node in a container approach — All Redise
services
inside each container.
Run Redise
clusters on single or multiple nodes
Redise
in Containers
Node in a Pod Approach
Node 1
Vs
Node 2 Node 3 Node 1 Node 2 Node 3
One pod, multiple services per nodeMultiple pods, multiple services per node
Double Orchestration
For fun and profit!
6
What’s Double Orchestration ?
Kubernetes PKS
External
Redis Cluster
Orchestration
Node 1
Redis Shards
Node 2 Node N
Internal
Why like this?
• Resource management - Orchestration platforms are
designed to be generic.
• Again - Performance is king.
• Last but not least, it allows us to maintain a common
architecture - regardless of running environment, be it bare
metal, VM, K8s, Pivotal Cloud Foundry.
(.… Surprisingly enough, not everybody in the world uses containers…)
Who Does What
• Node auto-healing
• Node scaling
• Failover & scaling
• Configuration & monitoring
• Service discovery
• Upgrade
+
• Provide a solid primary db solution for end-users
• Stateful application
– Some changes cannot be performed
– Some changes need to mutate the state before applying the actual change
– Data-loss is unacceptable
• Support multiple k8s deployments
– Cloud: GKE, AWS, etc
– Openshift
– PKS
– Vanilla
– On-prem hardware vendor
• Ingress
• Packaging
Redis Labs Challenges
Our Kubernetes Solution
Building our deployment puzzle
Redis Enterprise Nodes
Persistence
High Availability
DBs proxies
Cluster Login
pod-1 pod-2
Anti Affinity
Stateful Set
pod-0
PV-1PV-0 PV-2
k8s Node-A k8s Node-B k8s Node-C
Secrets Resource
db-1.ns.svc
Deployment
Services
management
db-2.ns.svc
Started out with 9 static yaml files
– Hard to deploy
– Hard to maintain
– Hard to distribute
– No control over the deployment life-cycle
Our journey
.yaml
.yaml
Helm - A package manager
– Customized deployment
– Easier to maintain (templating)
– Not fully supported everywhere
– No control over the deployment life-cycle
• Operator
– Simple deployment (2 yaml files)
– Full control over life-cycle
– K8s compatible - no plugin needed
Operator
15
Kubernetes Controllers
Stateful Set controller
Deployment controllerNode controller
Cronjob controller
GC controller
Endpoints controller
PV controller
. . .
API
Resource
X
Resource X
Controller
watch
act
16
Custom Resource
+
Custom Controller
=
Operator
17
kubectl
K8s API
StatefulSet Controller
Watch(StatefulSet)
pod-0 pod-1 pod-2
my-sts
kubectl create -f my-sts.yaml
PV PV PV
18
kubectl
StatefulSet Controller
Watch(StatefulSet)
pod-0 pod-1 pod-2
my-sts
kubectl scale statefulset my-sts --replicas=5
pod-3 pod-4
K8s API
19
kubectl
K8s API
RedisCluster Controller
Watch(RedisCluster)
my-redis-cluster
kubectl create -f my-redis-cluster.yaml
Stateful
Set
UI
service
Service
Account
...
20
kubectl
K8s API
RedisCluster Controller
Watch(RedisCluster)
my-redis-cluster
kubectl apply -f my-redis-cluster.yaml
Stateful
Set
UI
service
Service
Account
...
Redis
Enterprise
Cluster
get-status()
example: downscale
Building our deployment puzzle
Nodes
Persistence
High Availability
DBs and UI endpoints
Secrets
pod-1 pod-2
Pod Disruption Budget
Anti Affinity
stateful set
pod-0
PVPV PV
k8s Node-A k8s Node-B k8s Node-C
Secrets resource
db-1.svc
deployment
Services
manager
db-2.svc
Management Layer
Redis
Enterprise
Cluster
Resource
Operator
22
my-cluster.yaml
kubectl apply -f my-cluster.yaml
23
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
labelSelector:
matchExpressions:
key: app
operator: In
values:
{{ template "redisenterprise.name" . }}
key: release
operator: In
values:
{{ .Release.Name }}
key: redis.io/role
operator: In
values:
node
topologyKey: kubernetes.io/hostname
terminationGracePeriodSeconds: 31536000
serviceAccountName: {{ template "redisenterprise.serviceAccountName" . }}
{{ with .Values.imagePullSecrets }}
imagePullSecrets:
{{ toYaml . | indent 8 }}
{{ end }}
containers:
name: redis
image: {{ .Values.redisImage.repository }}:{{ .Values.redisImage.tag }}
imagePullPolicy: {{ .Values.redisImage.pullPolicy }}
readinessProbe:
exec:
command:
# check that the node is bootstrapped and that its connected and synced.
bash
c
curl silent localhost:8080/v1/bootstrap && /opt/redislabs/bin/rladmin status
nodes | grep node:$(cat /etc/opt/redislabs/node.id) | grep OK
initialDelaySeconds: 20
timeoutSeconds: 5
lifecycle:
preStop:
exec:
command:
# enslave the node, if this current node is master, change the master to
the first slave node.
bash
c
/opt/redislabs/bin/rladmin node $(cat /etc/opt/redislabs/node.id) enslave
&& ((/opt/redislabs/bin/rladmin status nodes | grep node:$(cat
/etc/opt/redislabs/node.id) | grep q master) && /opt/redislabs/bin/rlutil
change_master master=$(/opt/redislabs/bin/rladmin status nodes | grep slave |
head 1 | cut d " " f 1| cut d ":" f2) && sleep 10) || /bin/true
resources:
{{ toYaml .Values.redisResources | indent 10 }}
ports:
containerPort: 8001
containerPort: 8443
containerPort: 9443
securityContext:
capabilities:
add:
SYS_RESOURCE
{{ if .Values.persistentVolume.enabled }}
volumeMounts:
mountPath: "/opt/persistent"
name: redisstorage
{{ end }}
env:
name: K8S_ORCHASTRATED_DEPLOYMENT
value: "yes"
name: JOIN_HOSTNAME
value: {{ template "redisenterprise.fullname" . }}
{{ if .Values.persistentVolume.enabled }}
name: PERSISTANCE_PATH
value: /opt/persistent
{{ end }}
name: K8S_SERVICE_NAME
value: {{ template "redisenterprise.fullname" . }}
name: BOOTSTRAP_HANDLE_REDIRECTS
value: "enabled"
name: BOOTSTRAP_CLUSTER_FQDN
value: {{ template "redisenterprise.clusterDNS" . }}
name: BOOTSTRAP_DMC_THREADS
value: "10"
name: BOOTSTRAP_USERNAME
valueFrom:
secretKeyRef:
name: {{ template "redisenterprise.fullname" . }}
key: username
name: BOOTSTRAP_PASSWORD
valueFrom:
secretKeyRef:
name: {{ template "redisenterprise.fullname" . }}
key: password
name: BOOTSTRAP_LICENSE
valueFrom:
secretKeyRef:
name: {{ template "redisenterprise.fullname" . }}
key: license
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: {{ template "redisenterprise.statefulsetName" . }}
labels:
app: {{ template "redisenterprise.name" . }}
chart: {{ template "redisenterprise.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
{{ if .Values.persistentVolume.enabled }}
volumeClaimTemplates:
metadata:
name: redisstorage
labels:
app: {{ template "redisenterprise.name" . }}
chart: {{ template "redisenterprise.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: {{ .Values.persistentVolume.size | quote }}
{{ if .Values.persistentVolume.storageClass }}
{{ if (eq "" .Values.persistentVolume.storageClass) }}
storageClassName: ""
{{ else }}
storageClassName: "{{ .Values.persistentVolume.storageClass }}"
{{ end }}
{{ end }}
{{ end }}
serviceName: {{ template "redisenterprise.fullname" . }}
replicas: {{ .Values.replicas }}
updateStrategy:
type: "RollingUpdate"
template:
metadata:
labels:
redis.io/role: node
app: {{ template "redisenterprise.name" . }}
chart: {{ template "redisenterprise.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
{{ with .Values.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{ end }}
Demo

More Related Content

PDF
Ceph Performance: Projects Leading up to Jewel
PDF
Kubernetes in Hybrid Environments with Submariner
PDF
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
PDF
Kubernetes Walk Through from Technical View
PDF
Managing Redis with Kubernetes - Kelsey Hightower, Google
PDF
Ceph and Mirantis OpenStack
PDF
Red Hat Ceph Storage Roadmap: January 2016
PPTX
Kubernetes introduction
Ceph Performance: Projects Leading up to Jewel
Kubernetes in Hybrid Environments with Submariner
Kubernetes Architecture and Introduction – Paris Kubernetes Meetup
Kubernetes Walk Through from Technical View
Managing Redis with Kubernetes - Kelsey Hightower, Google
Ceph and Mirantis OpenStack
Red Hat Ceph Storage Roadmap: January 2016
Kubernetes introduction

What's hot (20)

PDF
CEPH DAY BERLIN - DEPLOYING CEPH IN KUBERNETES WITH ROOK
PDF
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
PDF
Community Update at OpenStack Summit Boston
PPTX
MySQL on Ceph
PDF
Ceph storage for ocp deploying and managing ceph on top of open shift conta...
PDF
AtlasCamp 2015: The age of orchestration: From Docker basics to cluster manag...
PDF
K8s storage-glusterfs-20180210
PDF
Paris container day june17
PPTX
Kubernetes @ Squarespace: Kubernetes in the Datacenter
PDF
Ceph - A distributed storage system
PPTX
Ceph and OpenStack - Feb 2014
PDF
Tutorial ceph-2
PDF
Storing VMs with Cinder and Ceph RBD.pdf
PDF
Container-relevant Upstream Kernel Developments
KEY
Handling Redis failover with ZooKeeper
PDF
Experiences building a distributed shared log on RADOS - Noah Watkins
PPTX
Ceph at Work in Bloomberg: Object Store, RBD and OpenStack
PDF
Storage tiering and erasure coding in Ceph (SCaLE13x)
PPTX
Rook - cloud-native storage
PDF
RBD: What will the future bring? - Jason Dillaman
CEPH DAY BERLIN - DEPLOYING CEPH IN KUBERNETES WITH ROOK
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...
Community Update at OpenStack Summit Boston
MySQL on Ceph
Ceph storage for ocp deploying and managing ceph on top of open shift conta...
AtlasCamp 2015: The age of orchestration: From Docker basics to cluster manag...
K8s storage-glusterfs-20180210
Paris container day june17
Kubernetes @ Squarespace: Kubernetes in the Datacenter
Ceph - A distributed storage system
Ceph and OpenStack - Feb 2014
Tutorial ceph-2
Storing VMs with Cinder and Ceph RBD.pdf
Container-relevant Upstream Kernel Developments
Handling Redis failover with ZooKeeper
Experiences building a distributed shared log on RADOS - Noah Watkins
Ceph at Work in Bloomberg: Object Store, RBD and OpenStack
Storage tiering and erasure coding in Ceph (SCaLE13x)
Rook - cloud-native storage
RBD: What will the future bring? - Jason Dillaman
Ad

Similar to Redis Meetup TLV - K8s Session 28/10/2018 (20)

PDF
Orchestrating Redis & K8s Operators
PDF
Kubernetes Operators And The Redis Enterprise Journey: Michal Rabinowitch
PPTX
Redis on Kubernetes
PDF
Shipping NodeJS with Docker and CoreOS (No Notes)
PPTX
Kubernetes20151017a
PDF
Kubernetes 101 - an Introduction to Containers, Kubernetes, and OpenShift
PDF
Deploying PostgreSQL on Kubernetes
PPT
Kubernetes on CloudStack with coreOS
PPTX
K8s in 3h - Kubernetes Fundamentals Training
PPTX
Containers orchestrators: Docker vs. Kubernetes
PDF
Red Hat multi-cluster management & what's new in OpenShift
PPTX
[DevDay 2017] OpenShift Enterprise - Speaker: Linh Do - DevOps Engineer at Ax...
PPTX
Automated container-deployment-on-kubernetes
PDF
Container orchestration k8s azure kubernetes services
PDF
Kubernetes or OpenShift - choosing your container platform for Dev and Ops
PPTX
Application Portability with Kubernetes (k8)
PPTX
OpenShift Enterprise 3.1 vs kubernetes
PDF
Scaling docker with kubernetes
PDF
게임 고객사를 위한 ‘AWS 컨테이너 교육’ 자료 - 유재석 솔루션즈 아키텍트, AWS :: Gaming Immersion Day 201...
PPTX
Kubernetes - Container Management PaaS Journey
Orchestrating Redis & K8s Operators
Kubernetes Operators And The Redis Enterprise Journey: Michal Rabinowitch
Redis on Kubernetes
Shipping NodeJS with Docker and CoreOS (No Notes)
Kubernetes20151017a
Kubernetes 101 - an Introduction to Containers, Kubernetes, and OpenShift
Deploying PostgreSQL on Kubernetes
Kubernetes on CloudStack with coreOS
K8s in 3h - Kubernetes Fundamentals Training
Containers orchestrators: Docker vs. Kubernetes
Red Hat multi-cluster management & what's new in OpenShift
[DevDay 2017] OpenShift Enterprise - Speaker: Linh Do - DevOps Engineer at Ax...
Automated container-deployment-on-kubernetes
Container orchestration k8s azure kubernetes services
Kubernetes or OpenShift - choosing your container platform for Dev and Ops
Application Portability with Kubernetes (k8)
OpenShift Enterprise 3.1 vs kubernetes
Scaling docker with kubernetes
게임 고객사를 위한 ‘AWS 컨테이너 교육’ 자료 - 유재석 솔루션즈 아키텍트, AWS :: Gaming Immersion Day 201...
Kubernetes - Container Management PaaS Journey
Ad

Recently uploaded (20)

PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
System and Network Administration Chapter 2
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
CHAPTER 2 - PM Management and IT Context
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Digital Strategies for Manufacturing Companies
PPTX
L1 - Introduction to python Backend.pptx
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
System and Network Administration Chapter 2
2025 Textile ERP Trends: SAP, Odoo & Oracle
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
CHAPTER 2 - PM Management and IT Context
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
VVF-Customer-Presentation2025-Ver1.9.pptx
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Odoo POS Development Services by CandidRoot Solutions
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
How to Choose the Right IT Partner for Your Business in Malaysia
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Digital Strategies for Manufacturing Companies
L1 - Introduction to python Backend.pptx
PTS Company Brochure 2025 (1).pdf.......
Adobe Illustrator 28.6 Crack My Vision of Vector Design

Redis Meetup TLV - K8s Session 28/10/2018

  • 3. Redise - Open Source & Proprietary Technology Redise Node Cluster Manager Redise Cluster • Shared nothing, symmetrical cluster architecture • Fully compatible with open source commands & data structures Enterprise Layer Open Source Layer REST API Zero latency proxy
  • 4. • Faster time to market with continuity between dev/test and production environments that use Redise Pack • Highly available, easier to scale, simpler to manage Redis technology, integrated with orchestration tools such as PCF, Kubernetes, Mesosphere... • Node in a container approach — All Redise services inside each container. Run Redise clusters on single or multiple nodes Redise in Containers
  • 5. Node in a Pod Approach Node 1 Vs Node 2 Node 3 Node 1 Node 2 Node 3 One pod, multiple services per nodeMultiple pods, multiple services per node
  • 7. What’s Double Orchestration ? Kubernetes PKS External Redis Cluster Orchestration Node 1 Redis Shards Node 2 Node N Internal
  • 8. Why like this? • Resource management - Orchestration platforms are designed to be generic. • Again - Performance is king. • Last but not least, it allows us to maintain a common architecture - regardless of running environment, be it bare metal, VM, K8s, Pivotal Cloud Foundry. (.… Surprisingly enough, not everybody in the world uses containers…)
  • 9. Who Does What • Node auto-healing • Node scaling • Failover & scaling • Configuration & monitoring • Service discovery • Upgrade +
  • 10. • Provide a solid primary db solution for end-users • Stateful application – Some changes cannot be performed – Some changes need to mutate the state before applying the actual change – Data-loss is unacceptable • Support multiple k8s deployments – Cloud: GKE, AWS, etc – Openshift – PKS – Vanilla – On-prem hardware vendor • Ingress • Packaging Redis Labs Challenges
  • 12. Building our deployment puzzle Redis Enterprise Nodes Persistence High Availability DBs proxies Cluster Login pod-1 pod-2 Anti Affinity Stateful Set pod-0 PV-1PV-0 PV-2 k8s Node-A k8s Node-B k8s Node-C Secrets Resource db-1.ns.svc Deployment Services management db-2.ns.svc
  • 13. Started out with 9 static yaml files – Hard to deploy – Hard to maintain – Hard to distribute – No control over the deployment life-cycle Our journey .yaml .yaml Helm - A package manager – Customized deployment – Easier to maintain (templating) – Not fully supported everywhere – No control over the deployment life-cycle • Operator – Simple deployment (2 yaml files) – Full control over life-cycle – K8s compatible - no plugin needed
  • 15. 15 Kubernetes Controllers Stateful Set controller Deployment controllerNode controller Cronjob controller GC controller Endpoints controller PV controller . . . API Resource X Resource X Controller watch act
  • 17. 17 kubectl K8s API StatefulSet Controller Watch(StatefulSet) pod-0 pod-1 pod-2 my-sts kubectl create -f my-sts.yaml PV PV PV
  • 18. 18 kubectl StatefulSet Controller Watch(StatefulSet) pod-0 pod-1 pod-2 my-sts kubectl scale statefulset my-sts --replicas=5 pod-3 pod-4 K8s API
  • 19. 19 kubectl K8s API RedisCluster Controller Watch(RedisCluster) my-redis-cluster kubectl create -f my-redis-cluster.yaml Stateful Set UI service Service Account ...
  • 20. 20 kubectl K8s API RedisCluster Controller Watch(RedisCluster) my-redis-cluster kubectl apply -f my-redis-cluster.yaml Stateful Set UI service Service Account ... Redis Enterprise Cluster get-status() example: downscale
  • 21. Building our deployment puzzle Nodes Persistence High Availability DBs and UI endpoints Secrets pod-1 pod-2 Pod Disruption Budget Anti Affinity stateful set pod-0 PVPV PV k8s Node-A k8s Node-B k8s Node-C Secrets resource db-1.svc deployment Services manager db-2.svc Management Layer Redis Enterprise Cluster Resource Operator
  • 23. 23 affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: labelSelector: matchExpressions: key: app operator: In values: {{ template "redisenterprise.name" . }} key: release operator: In values: {{ .Release.Name }} key: redis.io/role operator: In values: node topologyKey: kubernetes.io/hostname terminationGracePeriodSeconds: 31536000 serviceAccountName: {{ template "redisenterprise.serviceAccountName" . }} {{ with .Values.imagePullSecrets }} imagePullSecrets: {{ toYaml . | indent 8 }} {{ end }} containers: name: redis image: {{ .Values.redisImage.repository }}:{{ .Values.redisImage.tag }} imagePullPolicy: {{ .Values.redisImage.pullPolicy }} readinessProbe: exec: command: # check that the node is bootstrapped and that its connected and synced. bash c curl silent localhost:8080/v1/bootstrap && /opt/redislabs/bin/rladmin status nodes | grep node:$(cat /etc/opt/redislabs/node.id) | grep OK initialDelaySeconds: 20 timeoutSeconds: 5 lifecycle: preStop: exec: command: # enslave the node, if this current node is master, change the master to the first slave node. bash c /opt/redislabs/bin/rladmin node $(cat /etc/opt/redislabs/node.id) enslave && ((/opt/redislabs/bin/rladmin status nodes | grep node:$(cat /etc/opt/redislabs/node.id) | grep q master) && /opt/redislabs/bin/rlutil change_master master=$(/opt/redislabs/bin/rladmin status nodes | grep slave | head 1 | cut d " " f 1| cut d ":" f2) && sleep 10) || /bin/true resources: {{ toYaml .Values.redisResources | indent 10 }} ports: containerPort: 8001 containerPort: 8443 containerPort: 9443 securityContext: capabilities: add: SYS_RESOURCE {{ if .Values.persistentVolume.enabled }} volumeMounts: mountPath: "/opt/persistent" name: redisstorage {{ end }} env: name: K8S_ORCHASTRATED_DEPLOYMENT value: "yes" name: JOIN_HOSTNAME value: {{ template "redisenterprise.fullname" . }} {{ if .Values.persistentVolume.enabled }} name: PERSISTANCE_PATH value: /opt/persistent {{ end }} name: K8S_SERVICE_NAME value: {{ template "redisenterprise.fullname" . }} name: BOOTSTRAP_HANDLE_REDIRECTS value: "enabled" name: BOOTSTRAP_CLUSTER_FQDN value: {{ template "redisenterprise.clusterDNS" . }} name: BOOTSTRAP_DMC_THREADS value: "10" name: BOOTSTRAP_USERNAME valueFrom: secretKeyRef: name: {{ template "redisenterprise.fullname" . }} key: username name: BOOTSTRAP_PASSWORD valueFrom: secretKeyRef: name: {{ template "redisenterprise.fullname" . }} key: password name: BOOTSTRAP_LICENSE valueFrom: secretKeyRef: name: {{ template "redisenterprise.fullname" . }} key: license apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: {{ template "redisenterprise.statefulsetName" . }} labels: app: {{ template "redisenterprise.name" . }} chart: {{ template "redisenterprise.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: {{ if .Values.persistentVolume.enabled }} volumeClaimTemplates: metadata: name: redisstorage labels: app: {{ template "redisenterprise.name" . }} chart: {{ template "redisenterprise.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: {{ .Values.persistentVolume.size | quote }} {{ if .Values.persistentVolume.storageClass }} {{ if (eq "" .Values.persistentVolume.storageClass) }} storageClassName: "" {{ else }} storageClassName: "{{ .Values.persistentVolume.storageClass }}" {{ end }} {{ end }} {{ end }} serviceName: {{ template "redisenterprise.fullname" . }} replicas: {{ .Values.replicas }} updateStrategy: type: "RollingUpdate" template: metadata: labels: redis.io/role: node app: {{ template "redisenterprise.name" . }} chart: {{ template "redisenterprise.chart" . }} release: {{ .Release.Name }} heritage: {{ .Release.Service }} spec: {{ with .Values.nodeSelector }} nodeSelector: {{ toYaml . | indent 8 }} {{ end }}
  • 24. Demo