Warning: Under Construction
This scenario introduces the components of a cloud-native application deployed with Cassandra in Kubernetes, including the components of the K8ssandra ecosystem.
In this scenario, we'll deploy the example Pet Clinic app on K8ssandra. Then we'll take a tour of the K8ssandra ecosystem.
What is K8ssandra?
According to the K8ssandra website, K8ssandra provides a production-ready platform for running Apache Cassandra on Kubernetes. This includes automation for operational tasks such as repairs, backups, and monitoring. Read more here.
Let's get started!
This scenario showed you how to run the example Reactive Spring Pet Clinic app in Kubernetes using K8ssandra.
In this scenario, we:
- Installed the K8ssandra ecosystem
- Deployed the Pet Clinic app
- Used Prometheus to collect system metrics
- Used Grafana to monitor the Cassandra database
- Used Reaper to manage Cassandra data replica consistency
K8ssandra gives you all the tools you need to have a scalable, world-class, cloud-native app!
Introduction: Deploying a Sample Application with Cassandra in Kubernetes
Deploy K8ssandra and the Pet Clinic app
In this step we'll install K8ssandra and deploy the example app.
Want to know what is going on in the terminal window?We are setting up a Kubernetes cluster for you. The cluster consists of an admin node and three worker nodes. We will run the entire cluster in a single container using something called KinD.
KinDis Kubernetes running inside a Docker container. As you know, most people use Kubernetes to manage systems of Docker containers. So,
KinDis a Docker container that runs Kubernetes to manage other Docker containers - it's a bit recursive.
KinDso we can create a many-node Kubernetes cluster on a single machine.
KinDis great because it's relatively lightweight, easy to install and easy to use.
For your reference, here are the commands we used to install
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.7.0/kind-$(uname)-amd64 chmod +x ./kind mv ./kind /usr/local/bin/kind
Once the cluster is ready, you can launch K8ssandra using Helm by clicking the following.
# Deploy K8ssandra helm install k8ssandra-cluster-a k8ssandra/k8ssandra \ -f grafana-config-values.yaml
Helm is a package manager (like
yum) for Kubernetes. Helm allows you to install and update Kubernetes applications. You will notice in the previous command, the sub-command is install followed what we will name the installed package and the chart used to specify the installation. A chart is a specification file we use to tell Helm how to do the installation. Helm downloads the charts from a Helm repo. We'll see more about this later in the course, but you can read more here.
Now, let's wait for the Cassandra to completely initialize. The following command will complete when the Cassandra database is ready (this may take a minute or two).
# Wait for Cassandra to initialize kubectl wait \ --for=condition=Ready cassandradatacenter/dc1 \ --timeout=240s
kubectlis the command you use to interact with your Kubernetes cluster. It is a very versatile command with many sub-commands and options. Read more here.
Once the previous command completes, you have a running Cassandra database inside the K8ssandra ecosystem. Let's launch the app using Kubernetes by clicking the following.
# Deploy the Pet Clinic app kubectl apply -f petclinic.yaml
How does Kubernetes use the yaml files (like petclinic.yaml)?
The magic of Kubernetes is its declarative nature. You describe what you want your system to look like and Kubernetes figures out the how to make it so. The yaml files that you use in Kubernetes are called manifests and are the declarative description of the components within your Kubernetes cluster. We'll look into this petclinic.yaml file later in this course, but if you are curious, you can take a look at the file by clicking the following.
It may take another minute for the app to make the initial connection to Cassandra. The following commands will wait for a successful connection.
Please be patient as it takes a little while for the app to completely initialize and make the connection to the database.
# Waiting for the app pod to be ready kubectl wait \ --for=condition=Ready pod \ --selector=app=petclinic-backend \ --timeout=90s # Waiting for the app to connect to Cassandra while [ $(curl localhost:80/petclinic/api/pettypes 2> /dev/null | wc -l) -gt 0 ]; do sleep 1 done