A Closer Look: Sample Kubernetes Operator for Apache Cassandra Configuration Files
Load the operator
DataStax provides sample manifest YAML. Apply the manifest to your cluster.
For example:
kubectl apply -f https://raw.githubusercontent.com/k8ssandra/cass-operator/v1.7.1/docs/user/cass-operator-manifests.yaml
Because the manifest installs a Custom Resource Definition (CRD), the user running the command needs cluster-admin privileges. |
The kubectl
command deployed the operator, along with any requisite resources such as Role
and RoleBinding
, to the cass-operator namespace.
To check whether the operator is ready and in a Running state, issue:
kubectl -n cass-operator get pods --selector name=cass-operator
Sample output:
NAME READY STATUS RESTARTS AGE
cass-operator-555577b9f8-zgx6j 1/1 Running 0 25h
[Optional] Loading the operator via Helm
Optionally, you can use Helm to load the Kubernetes Operator for Apache Cassandra.
-
Create the destination namespace:
kubectl create namespace cass-operator-system
-
Load the Kubernetes Operator for Apache Cassandra.
helm install --namespace=cass-operator-system cass-operator ./charts/cass-operator-chart
-
[Optional] You can override the following default Helm values:
clusterWideInstall: false serviceAccountName: cass-operator clusterRoleName: cass-operator-cr clusterRoleBindingName: cass-operator-crb roleName: cass-operator roleBindingName: cass-operator webhookClusterRoleName: cass-operator-webhook webhookClusterRoleBindingName: cass-operator-webhook deploymentName: cass-operator deploymentReplicas: 1 image: "datastax/cass-operator:1.7.1" imagePullPolicy: IfNotPresent
If you set
clusterWideInstall
totrue
:-
roleName
androleBindingName
are used forclusterRole
andclusterRoleBinding
. -
Kubernetes Operator for Apache Cassandra can administer the CassandraDatacenters in all namespaces of the Kubernetes (K8s) cluster. A namespace must still be provided because some of the Kubernetes resources for the Kubernetes Operator for Apache Cassandra require a namespace. For example:
kubectl create namespace cass-operator-system helm install --set clusterWideInstall=true --namespace=cass-operator-system cass-operator ./charts/cass-operator-chart
Helm does not install a storage-class for the Cassandra pods. For help with that requirement, see Create and apply a StorageClass.
-
Create and apply a StorageClass
Create an appropriate StorageClass
to define the type of storage to use for Cassandra nodes in a cluster. For example, here is a StorageClass
for using Solid State Drives (SSDs) in a Google Kubernetes Engine (GKE). This YAML file is available at storage.yaml
.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: server-storage
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
replication-type: none
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
Apply the StorageClass YAML:
kubectl apply -f https://raw.githubusercontent.com/k8ssandra/cass-operator/master/operator/k8s-flavors/gke/storage.yaml
Create and apply a CassandraDatacenter
The following resource defines a Cassandra 3.11.7 datacenter with three nodes on one rack. This YAML is available at example-cassdc-minimal.yaml
.
# Sized to work on 3 k8s workers nodes with 1 core / 4 GB RAM
# See neighboring example-cassdc-full.yaml for docs for each parameter
apiVersion: cassandra.datastax.com/v1beta1
kind: CassandraDatacenter
metadata:
name: dc1
spec:
clusterName: cluster1
serverType: cassandra
serverVersion: "3.11.7"
managementApiAuth:
insecure: {}
size: 3
storageConfig:
cassandraDataVolumeClaimSpec:
storageClassName: server-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
config:
cassandra-yaml:
authenticator: org.apache.cassandra.auth.PasswordAuthenticator
authorizer: org.apache.cassandra.auth.CassandraAuthorizer
role_manager: org.apache.cassandra.auth.CassandraRoleManager
jvm-options:
initial_heap_size: "800M"
max_heap_size: "800M"
Apply the CassandraDatacenter YAML
:
kubectl -n cass-operator apply -f https://raw.githubusercontent.com/k8ssandra/cass-operator/v1.7.1/operator/example-cassdc-yaml/cassandra-3.11.x/example-cassdc-minimal.yaml
Verify status
-
To check the status of pods in the Cassandra cluster:
kubectl -n cass-operator get pods --selector cassandra.datastax.com/cluster=cluster1
Sample output:
NAME READY STATUS RESTARTS AGE cluster1-dc1-r1-sts-0 2/2 Running 0 26h cluster1-dc1-r1-sts-1 2/2 Running 0 26h cluster1-dc1-r1-sts-2 2/2 Running 0 26h
-
To see the current progress of bringing the Cassandra datacenter online, check the
cassandraOperatorProgress
field of the CassandraDatacenter’s status sub-resource:kubectl -n cass-operator get cassdc/dc1 -o "jsonpath={.status.cassandraOperatorProgress}"
Sample output:
Ready
cassdc
andcassdcs
are supported short forms of CassandraDatacenter.A returned value of
Ready
indicates that the operator has finished setting up the Cassandra datacenter. -
You can also check the Cassandra cluster status by invoking
nodetool
on one of the pods in the cluster:kubectl -n cass-operator exec -it -c cassandra cluster1-dc1-r1-sts-0 -- nodetool status
Sample output:
Datacenter: dc1 =============== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving/Stopped -- Address Load Tokens Owns (effective) Host ID Rack UN 10.233.105.125 224.82 KiB 1 65.4% 5e29b4c9-aa69-4d53-97f9-a3e26115e625 r1 UN 10.233.92.96 186.48 KiB 1 61.6% b119eae5-2ff4-4b06-b20b-c492474e59a6 r1 UN 10.233.90.54 205.1 KiB 1 73.1% 0a96e814-dcf6-48b9-a2ca-663686c8a495 r1
What’s next?
Review options within key sections of the configuration YAML files.