How to use the K8ssandra operator
Tags: devops, kubernetes, cassandra, helm
Published: 2022-02-03 11:15:51

## What is K8ssandra?

It is the kubernetes cluster version of the Database [Apache-Cassandra](https://www.apache.org/) along with Stargate, Prometheus operators, it is a simple and quick method to setup a near-full stack of the database instance


## Requisites:
 -  4 CPU cores
 - 8128 MB

#### Software Requirements:
 - Minikube
 - Helm (v3)


## Installation
 - Install the Rancher Local path provisoner by running the command
`kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml`

 - Add the lightweight K8ssandra chart running the following command
`helm repo add dokc https://dokc.github.io/Helm-Charts/`

 - Check whether the repo was installed

`helm repo list`

It must show something like this:
```
NAME                    URL
cassandra               https://helm.k8ssandra.io/stable
traefik                 https://helm.traefik.io/traefik
minio                   https://helm.min.io
dok                     https://dokc.github.io/Helm-Charts/
```

The chart now has been configured for installation, to install the K8ssandra Chart

You can run the k8ssandra configuration yaml with the chart

```yaml
 cassandra:
  version: < Cassandra Version Number, preferred version = 4.0.1 >  
  cassandraLibDirVolume:
    storageClass: local-path
    size: 5Gi
  allowMultipleNodesPerWorker: true
  heap:
   size: 1G
   newGenSize: 1G
  resources:
    requests:
      cpu: 1000m
      memory: 2Gi
    limits:
      cpu: 1000m
      memory: 2Gi
  datacenters:
  - name: < Data Center Name >
    size: < Size >
    racks:
    - name: < Rack Name >
    
kube-prometheus-stack:
  grafana:
    adminUser: < Grafana Admin User >
    adminPassword: < Grafana Password >
    
    
stargate:
  enabled: < Boolean >
  replicas: 1
  heapMB: 256
  cpuReqMillicores: 200
  cpuLimMillicores: 1000
  
```

To run this:
`helm install <cluster_name> dok/k8s-lightweight -f <filename>.yaml`

This will run your Kubernetes cluster, To check the pods that are running, you can run the `kubectl get pods` and it must be like this

```
NAME                                                   READY   STATUS    RESTARTS   AGE
prometheus-test-dep-kube-prometheus-s-prometheus-0     2/2     Running   0          2m43s
test-dep-cass-operator-6c75d6d684-vh2ts                1/1     Running   0          2m45s
test-dep-datacenter1-default-sts-0                     2/2     Running   0          2m28s
test-dep-datacenter1-stargate-699f64f646-w85kw         1/1     Running   0          2m45s
test-dep-grafana-57fd996d9-c58tf                       2/2     Running   0          2m45s
test-dep-kube-prometheus-s-operator-767fc8984c-9rlmj   1/1     Running   0          2m45s
```


** The pods may take up to 4 minutes to setup, please be patient **

Once the pods are setup, you can run `kubectl get services`

```
NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                 AGE
kubernetes                                 ClusterIP   10.96.0.1        <none>        443/TCP                                                 144m
prometheus-operated                        ClusterIP   None             <none>        9090/TCP                                                33s
test-dep-dc-test-additional-seed-service   ClusterIP   None             <none>        <none>                                                  32s
test-dep-dc-test-all-pods-service          ClusterIP   None             <none>        9042/TCP,8080/TCP,9103/TCP                              32s
test-dep-dc-test-service                   ClusterIP   None             <none>        9042/TCP,9142/TCP,8080/TCP,9103/TCP,9160/TCP            33s
test-dep-dc-test-stargate-service          ClusterIP   10.96.125.32     <none>        8080/TCP,8081/TCP,8082/TCP,8084/TCP,8085/TCP,9042/TCP   35s
test-dep-grafana                           ClusterIP   10.106.69.131    <none>        80/TCP                                                  35s
test-dep-kube-prometheus-s-operator        ClusterIP   10.100.170.208   <none>        443/TCP                                                 35s
test-dep-kube-prometheus-s-prometheus      ClusterIP   10.109.19.63     <none>        9090/TCP                                                35s
test-dep-seed-service                      ClusterIP   None             <none>        <none>                                                  32s
```




You can port-forward these services as per your requirement

Example: `kubectl port-foward svc/test-dep-grafana 80`


You can use the [kube-forwarder](https://kube-forwarder.pixelpoint.io/) tool to port-forward the services in your local machines