{ "title": "Chart Values", "type": "object", "properties": { "global": { "type": "object", "properties": { "imageRegistry": { "type": "string", "description": "Global Docker image registry", "default": "" }, "imagePullSecrets": { "type": "array", "description": "Global Docker registry secret names as an array", "default": [], "items": {} }, "storageClass": { "type": "string", "description": "Global StorageClass for Persistent Volume(s)", "default": "" } } }, "nameOverride": { "type": "string", "description": "String to partially override common.names.fullname", "default": "" }, "fullnameOverride": { "type": "string", "description": "String to fully override common.names.fullname", "default": "" }, "kubeVersion": { "type": "string", "description": "Force target Kubernetes version (using Helm capabilities if not set)", "default": "" }, "commonLabels": { "type": "object", "description": "Labels to add to all deployed objects (sub-charts are not considered)", "default": {} }, "commonAnnotations": { "type": "object", "description": "Annotations to add to all deployed objects", "default": {} }, "clusterDomain": { "type": "string", "description": "Kubernetes cluster domain name", "default": "cluster.local" }, "extraDeploy": { "type": "array", "description": "Array of extra objects to deploy with the release", "default": [], "items": {} }, "diagnosticMode": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enable diagnostic mode (all probes will be disabled and the command will be overridden)", "default": false }, "command": { "type": "array", "description": "Command to override all containers in the deployment", "default": [ "sleep" ], "items": { "type": "string" } }, "args": { "type": "array", "description": "Args to override all containers in the deployment", "default": [ "infinity" ], "items": { "type": "string" } } } }, "image": { "type": "object", "properties": { "registry": { "type": "string", "description": "Cassandra image registry", "default": "docker.io" }, "repository": { "type": "string", "description": "Cassandra image repository", "default": "bitnami/cassandra" }, "tag": { "type": "string", "description": "Cassandra image tag (immutable tags are recommended)", "default": "4.1.3-debian-11-r24" }, "digest": { "type": "string", "description": "Cassandra image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag", "default": "" }, "pullPolicy": { "type": "string", "description": "image pull policy", "default": "IfNotPresent" }, "pullSecrets": { "type": "array", "description": "Cassandra image pull secrets", "default": [], "items": {} }, "debug": { "type": "boolean", "description": "Enable image debug mode", "default": false } } }, "dbUser": { "type": "object", "properties": { "user": { "type": "string", "description": "Cassandra admin user", "default": "cassandra" }, "forcePassword": { "type": "boolean", "description": "Force the user to provide a non", "default": false }, "password": { "type": "string", "description": "Password for `dbUser.user`. Randomly generated if empty", "default": "" }, "existingSecret": { "type": "string", "description": "Use an existing secret object for `dbUser.user` password (will ignore `dbUser.password`)", "default": "" } } }, "initDBConfigMap": { "type": "string", "description": "ConfigMap with cql scripts. Useful for creating a keyspace and pre-populating data", "default": "" }, "initDBSecret": { "type": "string", "description": "Secret with cql script (with sensitive data). Useful for creating a keyspace and pre-populating data", "default": "" }, "existingConfiguration": { "type": "string", "description": "ConfigMap with custom cassandra configuration files. This overrides any other Cassandra configuration set in the chart", "default": "" }, "cluster": { "type": "object", "properties": { "name": { "type": "string", "description": "Cassandra cluster name", "default": "cassandra" }, "seedCount": { "type": "number", "description": "Number of seed nodes", "default": 1 }, "numTokens": { "type": "number", "description": "Number of tokens for each node", "default": 256 }, "datacenter": { "type": "string", "description": "Datacenter name", "default": "dc1" }, "rack": { "type": "string", "description": "Rack name", "default": "rack1" }, "endpointSnitch": { "type": "string", "description": "Endpoint Snitch", "default": "SimpleSnitch" }, "internodeEncryption": { "type": "string", "description": "DEPRECATED: use tls.internode and tls.client instead. Encryption values.", "default": "none" }, "clientEncryption": { "type": "boolean", "description": "Client Encryption", "default": false }, "extraSeeds": { "type": "array", "description": "For an external/second cassandra ring.", "default": [], "items": {} }, "enableUDF": { "type": "boolean", "description": "Enable User defined functions", "default": false } } }, "jvm": { "type": "object", "properties": { "extraOpts": { "type": "string", "description": "Set the value for Java Virtual Machine extra options", "default": "" }, "maxHeapSize": { "type": "string", "description": "Set Java Virtual Machine maximum heap size (MAX_HEAP_SIZE). Calculated automatically if `nil`", "default": "" }, "newHeapSize": { "type": "string", "description": "Set Java Virtual Machine new heap size (HEAP_NEWSIZE). Calculated automatically if `nil`", "default": "" } } }, "command": { "type": "array", "description": "Command for running the container (set to default if not set). Use array form", "default": [], "items": {} }, "args": { "type": "array", "description": "Args for running the container (set to default if not set). Use array form", "default": [], "items": {} }, "extraEnvVars": { "type": "array", "description": "Extra environment variables to be set on cassandra container", "default": [], "items": {} }, "extraEnvVarsCM": { "type": "string", "description": "Name of existing ConfigMap containing extra env vars", "default": "" }, "extraEnvVarsSecret": { "type": "string", "description": "Name of existing Secret containing extra env vars", "default": "" }, "replicaCount": { "type": "number", "description": "Number of Cassandra replicas", "default": 1 }, "updateStrategy": { "type": "object", "properties": { "type": { "type": "string", "description": "updateStrategy for Cassandra statefulset", "default": "RollingUpdate" } } }, "hostAliases": { "type": "array", "description": "Add deployment host aliases", "default": [], "items": {} }, "podManagementPolicy": { "type": "string", "description": "StatefulSet pod management policy", "default": "OrderedReady" }, "priorityClassName": { "type": "string", "description": "Cassandra pods' priority.", "default": "" }, "podAnnotations": { "type": "object", "description": "Additional pod annotations", "default": {} }, "podLabels": { "type": "object", "description": "Additional pod labels", "default": {} }, "podAffinityPreset": { "type": "string", "description": "Pod affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`", "default": "" }, "podAntiAffinityPreset": { "type": "string", "description": "Pod anti-affinity preset. Ignored if `affinity` is set. Allowed values: `soft` or `hard`", "default": "soft" }, "nodeAffinityPreset": { "type": "object", "properties": { "type": { "type": "string", "description": "Node affinity preset type. Ignored if `affinity` is set. Allowed values: `soft` or `hard`", "default": "" }, "key": { "type": "string", "description": "Node label key to match. Ignored if `affinity` is set", "default": "" }, "values": { "type": "array", "description": "Node label values to match. Ignored if `affinity` is set", "default": [], "items": {} } } }, "affinity": { "type": "object", "description": "Affinity for pod assignment", "default": {} }, "nodeSelector": { "type": "object", "description": "Node labels for pod assignment", "default": {} }, "tolerations": { "type": "array", "description": "Tolerations for pod assignment", "default": [], "items": {} }, "topologySpreadConstraints": { "type": "array", "description": "Topology Spread Constraints for pod assignment", "default": [], "items": {} }, "podSecurityContext": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enabled Cassandra pods' Security Context", "default": true }, "fsGroup": { "type": "number", "description": "Set Cassandra pod's Security Context fsGroup", "default": 1001 } } }, "containerSecurityContext": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enabled Cassandra containers' Security Context", "default": true }, "runAsUser": { "type": "number", "description": "Set Cassandra container's Security Context runAsUser", "default": 1001 }, "runAsNonRoot": { "type": "boolean", "description": "Force the container to be run as non root", "default": true } } }, "resources": { "type": "object", "properties": { "limits": { "type": "object", "description": "The resources limits for Cassandra containers", "default": {} }, "requests": { "type": "object", "description": "The requested resources for Cassandra containers", "default": {} } } }, "livenessProbe": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enable livenessProbe", "default": true }, "initialDelaySeconds": { "type": "number", "description": "Initial delay seconds for livenessProbe", "default": 60 }, "periodSeconds": { "type": "number", "description": "Period seconds for livenessProbe", "default": 30 }, "timeoutSeconds": { "type": "number", "description": "Timeout seconds for livenessProbe", "default": 30 }, "failureThreshold": { "type": "number", "description": "Failure threshold for livenessProbe", "default": 5 }, "successThreshold": { "type": "number", "description": "Success threshold for livenessProbe", "default": 1 } } }, "readinessProbe": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enable readinessProbe", "default": true }, "initialDelaySeconds": { "type": "number", "description": "Initial delay seconds for readinessProbe", "default": 60 }, "periodSeconds": { "type": "number", "description": "Period seconds for readinessProbe", "default": 10 }, "timeoutSeconds": { "type": "number", "description": "Timeout seconds for readinessProbe", "default": 30 }, "failureThreshold": { "type": "number", "description": "Failure threshold for readinessProbe", "default": 5 }, "successThreshold": { "type": "number", "description": "Success threshold for readinessProbe", "default": 1 } } }, "startupProbe": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enable startupProbe", "default": false }, "initialDelaySeconds": { "type": "number", "description": "Initial delay seconds for startupProbe", "default": 0 }, "periodSeconds": { "type": "number", "description": "Period seconds for startupProbe", "default": 10 }, "timeoutSeconds": { "type": "number", "description": "Timeout seconds for startupProbe", "default": 5 }, "failureThreshold": { "type": "number", "description": "Failure threshold for startupProbe", "default": 60 }, "successThreshold": { "type": "number", "description": "Success threshold for startupProbe", "default": 1 } } }, "customLivenessProbe": { "type": "object", "description": "Custom livenessProbe that overrides the default one", "default": {} }, "customReadinessProbe": { "type": "object", "description": "Custom readinessProbe that overrides the default one", "default": {} }, "schedulerName": { "type": "string", "description": "Alternative scheduler", "default": "" }, "terminationGracePeriodSeconds": { "type": "string", "description": "In seconds, time the given to the Cassandra pod needs to terminate gracefully", "default": "" }, "extraVolumes": { "type": "array", "description": "Optionally specify extra list of additional volumes for cassandra container", "default": [], "items": {} }, "extraVolumeMounts": { "type": "array", "description": "Optionally specify extra list of additional volumeMounts for cassandra container", "default": [], "items": {} }, "initContainers": { "type": "array", "description": "Add additional init containers to the cassandra pods", "default": [], "items": {} }, "sidecars": { "type": "array", "description": "Add additional sidecar containers to the cassandra pods", "default": [], "items": {} }, "pdb": { "type": "object", "properties": { "create": { "type": "boolean", "description": "Enable/disable a Pod Disruption Budget creation", "default": false }, "minAvailable": { "type": "number", "description": "Mininimum number of pods that must still be available after the eviction", "default": 1 }, "maxUnavailable": { "type": "string", "description": "Max number of pods that can be unavailable after the eviction", "default": "" } } }, "hostNetwork": { "type": "boolean", "description": "Enable HOST Network", "default": false }, "containerPorts": { "type": "object", "properties": { "intra": { "type": "number", "description": "Intra Port on the Host and Container", "default": 7000 }, "tls": { "type": "number", "description": "TLS Port on the Host and Container", "default": 7001 }, "jmx": { "type": "number", "description": "JMX Port on the Host and Container", "default": 7199 }, "cql": { "type": "number", "description": "CQL Port on the Host and Container", "default": 9042 } } }, "hostPorts": { "type": "object", "properties": { "intra": { "type": "string", "description": "Intra Port on the Host", "default": "" }, "tls": { "type": "string", "description": "TLS Port on the Host", "default": "" }, "jmx": { "type": "string", "description": "JMX Port on the Host", "default": "" }, "cql": { "type": "string", "description": "CQL Port on the Host", "default": "" } } }, "serviceAccount": { "type": "object", "properties": { "create": { "type": "boolean", "description": "Enable the creation of a ServiceAccount for Cassandra pods", "default": true }, "name": { "type": "string", "description": "The name of the ServiceAccount to use.", "default": "" }, "annotations": { "type": "object", "description": "Annotations for Cassandra Service Account", "default": {} }, "automountServiceAccountToken": { "type": "boolean", "description": "Automount API credentials for a service account.", "default": true } } }, "service": { "type": "object", "properties": { "type": { "type": "string", "description": "Cassandra service type", "default": "ClusterIP" }, "ports": { "type": "object", "properties": { "cql": { "type": "number", "description": "Cassandra service CQL Port", "default": 9042 }, "metrics": { "type": "number", "description": "Cassandra service metrics port", "default": 8080 } } }, "nodePorts": { "type": "object", "properties": { "cql": { "type": "string", "description": "Node port for CQL", "default": "" }, "metrics": { "type": "string", "description": "Node port for metrics", "default": "" } } }, "extraPorts": { "type": "array", "description": "Extra ports to expose in the service (normally used with the `sidecar` value)", "default": [], "items": {} }, "loadBalancerIP": { "type": "string", "description": "LoadBalancerIP if service type is `LoadBalancer`", "default": "" }, "loadBalancerSourceRanges": { "type": "array", "description": "Service Load Balancer sources", "default": [], "items": {} }, "clusterIP": { "type": "string", "description": "Service Cluster IP", "default": "" }, "externalTrafficPolicy": { "type": "string", "description": "Service external traffic policy", "default": "Cluster" }, "annotations": { "type": "object", "description": "Provide any additional annotations which may be required.", "default": {} }, "sessionAffinity": { "type": "string", "description": "Session Affinity for Kubernetes service, can be \"None\" or \"ClientIP\"", "default": "None" }, "sessionAffinityConfig": { "type": "object", "description": "Additional settings for the sessionAffinity", "default": {} }, "headless": { "type": "object", "properties": { "annotations": { "type": "object", "description": "Annotations for the headless service.", "default": {} } } } } }, "networkPolicy": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Specifies whether a NetworkPolicy should be created", "default": false }, "allowExternal": { "type": "boolean", "description": "Don't require client label for connections", "default": true } } }, "persistence": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enable Cassandra data persistence using PVC, use a Persistent Volume Claim, If false, use emptyDir", "default": true }, "existingClaim": { "type": "string", "description": "Name of an existing PVC to use", "default": "" }, "storageClass": { "type": "string", "description": "PVC Storage Class for Cassandra data volume", "default": "" }, "commitStorageClass": { "type": "string", "description": "PVC Storage Class for Cassandra Commit Log volume", "default": "" }, "annotations": { "type": "object", "description": "Persistent Volume Claim annotations", "default": {} }, "accessModes": { "type": "array", "description": "Persistent Volume Access Mode", "default": [ "ReadWriteOnce" ], "items": { "type": "string" } }, "size": { "type": "string", "description": "PVC Storage Request for Cassandra data volume", "default": "8Gi" }, "commitLogsize": { "type": "string", "description": "PVC Storage Request for Cassandra commit log volume. Unset by default", "default": "2Gi" }, "mountPath": { "type": "string", "description": "The path the data volume will be mounted at", "default": "/bitnami/cassandra" }, "commitLogMountPath": { "type": "string", "description": "The path the commit log volume will be mounted at. Unset by default. Set it to '/bitnami/cassandra/commitlog' to enable a separate commit log volume", "default": "" } } }, "volumePermissions": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Enable init container that changes the owner and group of the persistent volume", "default": false }, "image": { "type": "object", "properties": { "registry": { "type": "string", "description": "Init container volume image registry", "default": "docker.io" }, "repository": { "type": "string", "description": "Init container volume image repository", "default": "bitnami/os-shell" }, "tag": { "type": "string", "description": "Init container volume image tag (immutable tags are recommended)", "default": "11-debian-11-r40" }, "digest": { "type": "string", "description": "Init container volume image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag", "default": "" }, "pullPolicy": { "type": "string", "description": "Init container volume pull policy", "default": "IfNotPresent" }, "pullSecrets": { "type": "array", "description": "Specify docker-registry secret names as an array", "default": [], "items": {} } } }, "resources": { "type": "object", "properties": { "limits": { "type": "object", "description": "The resources limits for the container", "default": {} }, "requests": { "type": "object", "description": "The requested resources for the container", "default": {} } } }, "securityContext": { "type": "object", "properties": { "runAsUser": { "type": "number", "description": "User ID for the init container", "default": 0 } } } } }, "metrics": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Start a side-car prometheus exporter", "default": false }, "image": { "type": "object", "properties": { "registry": { "type": "string", "description": "Cassandra exporter image registry", "default": "docker.io" }, "repository": { "type": "string", "description": "Cassandra exporter image name", "default": "bitnami/cassandra-exporter" }, "tag": { "type": "string", "description": "Cassandra exporter image tag", "default": "2.3.8-debian-11-r383" }, "digest": { "type": "string", "description": "Cassandra exporter image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag", "default": "" }, "pullPolicy": { "type": "string", "description": "image pull policy", "default": "IfNotPresent" }, "pullSecrets": { "type": "array", "description": "Specify docker-registry secret names as an array", "default": [], "items": {} } } }, "resources": { "type": "object", "properties": { "limits": { "type": "object", "description": "The resources limits for the container", "default": {} }, "requests": { "type": "object", "description": "The requested resources for the container", "default": {} } } }, "readinessProbe": { "type": "object", "properties": { "initialDelaySeconds": { "type": "number", "description": "Initial delay seconds for readinessProbe", "default": 20 }, "periodSeconds": { "type": "number", "description": "Period seconds for readinessProbe", "default": 10 }, "timeoutSeconds": { "type": "number", "description": "Timeout seconds for readinessProbe", "default": 45 }, "failureThreshold": { "type": "number", "description": "Failure threshold for readinessProbe", "default": 3 }, "successThreshold": { "type": "number", "description": "Success threshold for readinessProbe", "default": 1 } } }, "extraVolumeMounts": { "type": "array", "description": "Optionally specify extra list of additional volumeMounts for cassandra-exporter container", "default": [], "items": {} }, "podAnnotations": { "type": "object", "properties": { "prometheus": { "type": "object", "properties": { "io/scrape": { "type": "string", "description": "", "default": "true" }, "io/port": { "type": "string", "description": "", "default": "8080" } } } } }, "serviceMonitor": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "If `true`, creates a Prometheus Operator ServiceMonitor (also requires `metrics.enabled` to be `true`)", "default": false }, "namespace": { "type": "string", "description": "Namespace in which Prometheus is running", "default": "monitoring" }, "interval": { "type": "string", "description": "Interval at which metrics should be scraped.", "default": "" }, "scrapeTimeout": { "type": "string", "description": "Timeout after which the scrape is ended", "default": "" }, "selector": { "type": "object", "description": "Prometheus instance selector labels", "default": {} }, "metricRelabelings": { "type": "array", "description": "Specify Metric Relabelings to add to the scrape endpoint", "default": [], "items": {} }, "relabelings": { "type": "array", "description": "RelabelConfigs to apply to samples before scraping", "default": [], "items": {} }, "honorLabels": { "type": "boolean", "description": "Specify honorLabels parameter to add the scrape endpoint", "default": false }, "jobLabel": { "type": "string", "description": "The name of the label on the target service to use as the job name in prometheus.", "default": "" }, "labels": { "type": "object", "description": "Used to pass Labels that are required by the installed Prometheus Operator", "default": {} } } }, "containerPorts": { "type": "object", "properties": { "http": { "type": "number", "description": "HTTP Port on the Host and Container", "default": 8080 }, "jmx": { "type": "number", "description": "JMX Port on the Host and Container", "default": 5555 } } }, "hostPorts": { "type": "object", "properties": { "http": { "type": "string", "description": "HTTP Port on the Host", "default": "" }, "jmx": { "type": "string", "description": "JMX Port on the Host", "default": "" } } }, "configuration": { "type": "string", "description": "Configure Cassandra-exporter with a custom config.yml file", "default": "host: localhost:{{ .Values.containerPorts.jmx }}\nssl: False\nuser:\npassword:\nlistenPort: {{ .Values.metrics.containerPorts.http }}\nblacklist:\n # To profile the duration of jmx call you can start the program with the following options\n # > java -Dorg.slf4j.simpleLogger.defaultLogLevel=trace -jar cassandra_exporter.jar config.yml --oneshot\n #\n # To get intuition of what is done by cassandra when something is called you can look in cassandra\n # https://github.com/apache/cassandra/tree/trunk/src/java/org/apache/cassandra/metrics\n # Please avoid to scrape frequently those calls that are iterating over all sstables\n\n # Unaccessible metrics (not enough privilege)\n - java:lang:memorypool:.*usagethreshold.*\n\n # Leaf attributes not interesting for us but that are presents in many path\n - .*:999thpercentile\n - .*:95thpercentile\n - .*:fifteenminuterate\n - .*:fiveminuterate\n - .*:durationunit\n - .*:rateunit\n - .*:stddev\n - .*:meanrate\n - .*:mean\n - .*:min\n\n # Path present in many metrics but uninterresting\n - .*:viewlockacquiretime:.*\n - .*:viewreadtime:.*\n - .*:cas[a-z]+latency:.*\n - .*:colupdatetimedeltahistogram:.*\n\n # Mostly for RPC, do not scrap them\n - org:apache:cassandra:db:.*\n\n # columnfamily is an alias for Table metrics\n # https://github.com/apache/cassandra/blob/8b3a60b9a7dbefeecc06bace617279612ec7092d/src/java/org/apache/cassandra/metrics/TableMetrics.java#L162\n - org:apache:cassandra:metrics:columnfamily:.*\n\n # Should we export metrics for system keyspaces/tables ?\n - org:apache:cassandra:metrics:[^:]+:system[^:]*:.*\n\n # Don't scrap us\n - com:criteo:nosql:cassandra:exporter:.*\n\nmaxScrapFrequencyInSec:\n 50:\n - .*\n\n # Refresh those metrics only every hour as it is costly for cassandra to retrieve them\n 3600:\n - .*:snapshotssize:.*\n - .*:estimated.*\n - .*:totaldiskspaceused:.*\n" } } }, "tls": { "type": "object", "properties": { "internodeEncryption": { "type": "string", "description": "Set internode encryption", "default": "none" }, "clientEncryption": { "type": "boolean", "description": "Set client-server encryption", "default": false }, "autoGenerated": { "type": "boolean", "description": "Generate automatically self-signed TLS certificates. Currently only supports PEM certificates", "default": false }, "existingSecret": { "type": "string", "description": "Existing secret that contains Cassandra Keystore and truststore", "default": "" }, "passwordsSecret": { "type": "string", "description": "Secret containing the Keystore and Truststore passwords if needed", "default": "" }, "keystorePassword": { "type": "string", "description": "Password for the keystore, if needed.", "default": "" }, "truststorePassword": { "type": "string", "description": "Password for the truststore, if needed.", "default": "" }, "resources": { "type": "object", "properties": { "limits": { "type": "object", "description": "The resources limits for the TLS init container", "default": {} }, "requests": { "type": "object", "description": "The requested resources for the TLS init container", "default": {} } } }, "certificatesSecret": { "type": "string", "description": "Secret with the TLS certificates.", "default": "" }, "tlsEncryptionSecretName": { "type": "string", "description": "Secret with the encryption of the TLS certificates", "default": "" } } } } }