--- /dev/null
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: {{ template "cassandra.fullname" . }}
+ labels:
+ app: {{ template "cassandra.name" . }}
+ chart: {{ template "cassandra.chart" . }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ selector:
+ matchLabels:
+ app: {{ template "cassandra.name" . }}
+ release: {{ .Release.Name }}
+ serviceName: {{ template "cassandra.fullname" . }}
+ replicas: {{ .Values.config.cluster_size }}
+ podManagementPolicy: {{ .Values.podManagementPolicy }}
+ updateStrategy:
+ type: {{ .Values.updateStrategy.type }}
+ template:
+ metadata:
+ labels:
+ app: {{ template "cassandra.name" . }}
+ release: {{ .Release.Name }}
+{{- if .Values.podLabels }}
+{{ toYaml .Values.podLabels | indent 8 }}
+{{- end }}
+{{- if .Values.podAnnotations }}
+ annotations:
+{{ toYaml .Values.podAnnotations | indent 8 }}
+{{- end }}
+ spec:
+ hostNetwork: {{ .Values.hostNetwork }}
+{{- if .Values.selector }}
+{{ toYaml .Values.selector | indent 6 }}
+{{- end }}
+ {{- if .Values.securityContext.enabled }}
+ securityContext:
+ fsGroup: {{ .Values.securityContext.fsGroup }}
+ runAsUser: {{ .Values.securityContext.runAsUser }}
+ {{- end }}
+{{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity | indent 8 }}
+{{- end }}
+{{- if .Values.tolerations }}
+ tolerations:
+{{ toYaml .Values.tolerations | indent 8 }}
+{{- end }}
+ containers:
+{{- if .Values.exporter.enabled }}
+ - name: cassandra-exporter
+ image: "{{ .Values.exporter.image.repo }}:{{ .Values.exporter.image.tag }}"
+ env:
+ - name: CASSANDRA_EXPORTER_CONFIG_listenPort
+ value: {{ .Values.exporter.port | quote }}
+ - name: JVM_OPTS
+ value: {{ .Values.exporter.jvmOpts | quote }}
+ ports:
+ - name: metrics
+ containerPort: {{ .Values.exporter.port }}
+ protocol: TCP
+ - name: jmx
+ containerPort: 5555
+ livenessProbe:
+ tcpSocket:
+ port: {{ .Values.exporter.port }}
+ readinessProbe:
+ httpGet:
+ path: /metrics
+ port: {{ .Values.exporter.port }}
+ initialDelaySeconds: 20
+ timeoutSeconds: 45
+{{- end }}
+ - name: {{ template "cassandra.fullname" . }}
+ image: "{{ .Values.image.repo }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
+{{- if .Values.commandOverrides }}
+ command: {{ .Values.commandOverrides }}
+{{- end }}
+{{- if .Values.argsOverrides }}
+ args: {{ .Values.argsOverrides }}
+{{- end }}
+ resources:
+{{ toYaml .Values.resources | indent 10 }}
+ env:
+ {{- $seed_size := default 1 .Values.config.seed_size | int -}}
+ {{- $global := . }}
+ - name: CASSANDRA_SEEDS
+ {{- if .Values.hostNetwork }}
+ value: {{ required "You must fill \".Values.config.seeds\" with list of Cassandra seeds when hostNetwork is set to true" .Values.config.seeds | quote }}
+ {{- else }}
+ value: "{{- range $i, $e := until $seed_size }}{{ template "cassandra.fullname" $global }}-{{ $i }}.{{ template "cassandra.fullname" $global }}.{{ $global.Release.Namespace }}.svc.{{ $global.Values.config.cluster_domain }}{{- if (lt ( add1 $i ) $seed_size ) }},{{- end }}{{- end }}"
+ {{- end }}
+ - name: MAX_HEAP_SIZE
+ value: {{ default "8192M" .Values.config.max_heap_size | quote }}
+ - name: HEAP_NEWSIZE
+ value: {{ default "200M" .Values.config.heap_new_size | quote }}
+ - name: CASSANDRA_ENDPOINT_SNITCH
+ value: {{ default "SimpleSnitch" .Values.config.endpoint_snitch | quote }}
+ - name: CASSANDRA_CLUSTER_NAME
+ value: {{ default "Cassandra" .Values.config.cluster_name | quote }}
+ - name: CASSANDRA_DC
+ value: {{ default "DC1" .Values.config.dc_name | quote }}
+ - name: CASSANDRA_RACK
+ value: {{ default "RAC1" .Values.config.rack_name | quote }}
+ - name: CASSANDRA_START_RPC
+ value: {{ default "false" .Values.config.start_rpc | quote }}
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ {{- range $key, $value := .Values.env }}
+ - name: {{ $key | quote }}
+ value: {{ $value | quote }}
+ {{- end }}
+ livenessProbe:
+ exec:
+ command: [ "/bin/sh", "-c", "nodetool status" ]
+ initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.livenessProbe.successThreshold }}
+ failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
+ readinessProbe:
+ exec:
+ command: [ "/bin/sh", "-c", "nodetool status | grep -E \"^UN\\s+${POD_IP}\"" ]
+ initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
+ timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
+ successThreshold: {{ .Values.readinessProbe.successThreshold }}
+ failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
+ ports:
+ - name: intra
+ containerPort: 7000
+ - name: tls
+ containerPort: 7001
+ - name: jmx
+ containerPort: 7199
+ - name: cql
+ containerPort: {{ default 9042 .Values.config.ports.cql }}
+ - name: thrift
+ containerPort: {{ default 9160 .Values.config.ports.thrift }}
+ {{- if .Values.config.ports.agent }}
+ - name: agent
+ containerPort: {{ .Values.config.ports.agent }}
+ {{- end }}
+ volumeMounts:
+ - name: data
+ mountPath: /var/lib/cassandra
+{{- range $key, $value := .Values.configOverrides }}
+ - name: cassandra-config-{{ $key | replace "." "-" }}
+ mountPath: /etc/cassandra/{{ $key }}
+ subPath: {{ $key }}
+{{- end }}
+ {{- if not .Values.persistence.enabled }}
+ lifecycle:
+ preStop:
+ exec:
+ command: ["/bin/sh", "-c", "exec nodetool decommission"]
+ {{- end }}
+ terminationGracePeriodSeconds: {{ default 30 .Values.podSettings.terminationGracePeriodSeconds }}
+ {{- if .Values.image.pullSecrets }}
+ imagePullSecrets:
+ - name: {{ .Values.image.pullSecrets }}
+ {{- end }}
+{{- if or .Values.configOverrides (not .Values.persistence.enabled) }}
+ volumes:
+{{- end }}
+{{- range $key, $value := .Values.configOverrides }}
+ - configMap:
+ name: cassandra
+ name: cassandra-config-{{ $key | replace "." "-" }}
+{{- end }}
+{{- if not .Values.persistence.enabled }}
+ - name: data
+ emptyDir: {}
+{{- else }}
+ volumeClaimTemplates:
+ - metadata:
+ name: data
+ labels:
+ app: {{ template "cassandra.name" . }}
+ chart: {{ template "cassandra.chart" . }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+ spec:
+ accessModes:
+ - {{ .Values.persistence.accessMode | quote }}
+ resources:
+ requests:
+ storage: {{ .Values.persistence.size | quote }}
+ {{- if .Values.persistence.storageClass }}
+ {{- if (eq "-" .Values.persistence.storageClass) }}
+ storageClassName: ""
+ {{- else }}
+ storageClassName: "{{ .Values.persistence.storageClass }}"
+ {{- end }}
+ {{- end }}
+{{- end }}