Inject Containers and Volumes
Since v1.2, K8ssandra-operator allows injecting custom init containers, containers and volumes into the Cassandra pods.
Injecting (init-)containers
Custom init-containers and containers can be injected into the Cassandra pods through the .spec.cassandra.initContainers
and .spec.cassandra.containers
fields.
These can be overriden at the datacenter level by setting the .spec.cassandra.datacenters[].initContainers
and .spec.cassandra.dataceners[].containers
fields.
apiVersion: k8ssandra.io/v1alpha1
kind: K8ssandraCluster
metadata:
name: test
spec:
cassandra:
serverVersion: 4.0.3
datacenters:
- metadata:
name: dc1
size: 1
storageConfig:
cassandraDataVolumeClaimSpec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
initContainers:
- name: init-busybox
image: busybox
command: ["sleep", "10"]
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
The above example will inject the init-busybox
init-container and the busybox
container into the Cassandra pods, respectively in first position within their kinds.
Fine grained control over the order of the injected init-containers can be achieved by also specifying the init-containers that K8ssandra-operator or cass-operator will add during the reconcile, and that should appear before the custom containers:
apiVersion: k8ssandra.io/v1alpha1
kind: K8ssandraCluster
metadata:
name: test
spec:
cassandra:
serverVersion: 4.0.3
datacenters:
- metadata:
name: dc1
size: 1
storageConfig:
cassandraDataVolumeClaimSpec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
initContainers:
- name: server-config-init
- name: init-busybox
image: busybox
command: ["sleep", "10"]
containers:
- name: busybox
image: busybox
command: ["sleep", "3600"]
In the above example, the init-busybox
container will be injected right after the server-config-init
init-container.
The order of the main containers doesn’t have any impact as they all start concurrently.
K8ssandra-operator is likely to generate the following init-containers in this order:
jmx-credentials
: always generated (Removed in v1.5.0)medusa-restore
: generated if Medusa is enabled
cass-operator will generate the following init-container:
server-config-init
: always generated
Note: The medusa-restore
init-container must always be placed after the server-config-init
one.
K8ssandra-operator is likely to generate the following container:
medusa
: generated if Medusa is enabled
cass-operator will generate the following containers in this order:
cassandra
: always generatedserver-system-logger
: always generated
Injecting volumes
Extra volumes can be injected into the Cassandra pods through the .spec.cassandra.extraVolumes
field.
This field allows to specify two types of volumes:
- standard volume definitions that will be added to the Cassandra pods (
.spec.cassandra.extraVolumes.volumes
), and required to be mounted explicitly in the containers. - PVC volumes which will be mounted automatically by cass-operator and managed by the Cassandra statefulset (
.spec.cassandra.extraVolumes.pvcs
).
apiVersion: k8ssandra.io/v1alpha1
kind: K8ssandraCluster
metadata:
name: test
spec:
cassandra:
serverVersion: 4.0.3
datacenters:
- metadata:
name: dc1
k8sContext: kind-k8ssandra-0
size: 1
storageConfig:
cassandraDataVolumeClaimSpec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
initContainers:
- name: "server-config-init"
- name: init-busybox
image: busybox
command: ["sleep", "10"]
volumeMounts:
- name: busybox-vol
mountPath: /etc/busybox
containers:
- name: "cassandra"
- name: "server-system-logger"
- name: busybox
image: busybox
command: ["sleep", "3600"]
volumeMounts:
- name: busybox-vol
mountPath: /etc/busybox
extraVolumes:
volumes:
- name: busybox-vol
emptyDir: {}
pvcs:
- name: sts-extra-vol
mountPath: "/etc/extra"
pvcSpec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
The above example adds an emptyDir volume named busybox-vol
, which is mounted in the init-busybox
init-container and the busybox
container.
It also adds a PVC volume named sts-extra-vol
, which is managed by the Cassandra statefulset and mounted on all containers created by cass-operator under /etc/extra
. That includes server-system-logger
and cassandra
. Mounting this volume into other (init-)containers should be done explicitly.
Next steps
- Explore other K8ssandra Operator tasks.
- See the Reference topics for information about K8ssandra Operator Custom Resource Definitions (CRDs) and the single K8ssandra Operator Helm chart.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.