Deploying Stargate API using Helm

Stargate

The need for Helm based deployment

Environment setup

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-cluster-1-default-pool-xxa2e8bd-xxxx Ready <none> 4d2h v1.23.12-gke.100
gke-cluster-1-default-pool-xxa2e8bd-xxxx Ready <none> 4d2h v1.23.12-gke.100
gke-cluster-1-default-pool-xxa2e8bd-xxxx Ready <none> 4d2h v1.23.12-gke.100

Installing Helm

Installing Cassandra

$ helm install my-release bitnami/cassandra --set image.tag=4.0.7 --set persistence.enabled=false
$ kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/my-release-cassandra-0 1/1 Running 0 8m10s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 30d
service/my-release-cassandra ClusterIP 10.8.1.170 <none> 9042/TCP,8080/TCP 3d4h
service/my-release-cassandra-headless ClusterIP None <none> 7000/TCP,7001/TCP,7199/TCP,9042/TCP 3d4hInstalling Ingress Controller

Installing Ingress Controller

$  helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace

Installing Metrics Server for Autoscaling

$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlStargate deployment
$ git clone -b main https://github.com/stargate/stargate.git
Cloning into 'stargate'...
remote: Enumerating objects: 56232, done.
remote: Counting objects: 100% (823/823), done.
remote: Compressing objects: 100% (515/515), done.
remote: Total 56232 (delta 323), reused 622 (delta 192), pack-reused 55409
Receiving objects: 100% (56232/56232), 13.91 MiB | 22.68 MiB/s, done.
Resolving deltas: 100% (23439/23439), done.
$ cd stargate/helm/
$ helm install stargate stargate
NAME: stargate
LAST DEPLOYED: Thu Dec 8 20:10:13 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pod/my-release-cassandra-0 1/1 Running 0 11m
pod/stargate-coordinator-5cf79d4bd7-nmqbk 0/1 Running 0 11s
pod/stargate-docsapi-66c8659744-gd27z 0/1 Init:0/1 0 11s
pod/stargate-graphqlapi-6949665fd9-dcg56 0/1 Init:0/1 0 11s
pod/stargate-restapi-7f958f6895-jrxsr 0/1 Init:0/1 0 11s
$ kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/my-release-cassandra-0 1/1 Running 0 13m
pod/stargate-coordinator-5cf79d4bd7-nmqbk 1/1 Running 0 5m13s
pod/stargate-docsapi-66c8659744-gd27z 1/1 Running 0 5m13s
pod/stargate-graphqlapi-6949665fd9-dcg56 1/1 Running 0 5m13s
pod/stargate-restapi-7f958f6895-jrxsr 1/1 Running 0 5m13s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 30d
service/my-release-cassandra ClusterIP 10.8.1.170 <none> 9042/TCP,8080/TCP 3d5h
service/my-release-cassandra-headless ClusterIP None <none> 7000/TCP,7001/TCP,7199/TCP,9042/TCP 3d5h
service/stargate-auth ClusterIP 10.8.12.225 <none> 8081/TCP 5m13s
service/stargate-bridge ClusterIP 10.8.10.195 <none> 8091/TCP 5m13s
service/stargate-cql ClusterIP 10.8.0.70 <none> 9042/TCP 5m13s
service/stargate-docsapi ClusterIP 10.8.0.205 <none> 8180/TCP 5m13s
service/stargate-graphqlapi ClusterIP 10.8.0.251 <none> 8080/TCP 5m13s
service/stargate-grpc ClusterIP 10.8.3.154 <none> 8090/TCP 5m13s
service/stargate-restapi ClusterIP 10.8.6.96 <none> 8082/TCP


$ kubectl get ingress -A
NAMESPACE NAME CLASS HOSTS ADDRESS PORTS AGE
default stargate-auth-ingress nginx * 35.XX.XX.48 80 104s
default stargate-docsapi-ingress nginx * 35.XX.XX.48 80 104s
default stargate-graphqlapi-ingress nginx * 35.XX.XX.48 80 104s
default stargate-grpc-ingress nginx * 35.XX.XX.48 80 105s
default stargate-restapi-ingress nginx * 35.XX.XX.48 80 104s

Testing the deployment

curl -L -X POST ‘http://localhost/api/auth/v1/auth' \
-H ‘Content-Type: application/json’ \
— data-raw ‘{
“username”: “cassandra”,
“password”: “XXXXX”
}’
{“authToken”:”23e63c16–7af3–4029–8a17–1c61ce86297b”}XX
export AUTH_TOKEN=23e63c16–7af3–4029–8a17–1c61ce86297b
curl -s — location — request POST ‘http://localhost/api/rest/v2/schemas/keyspaces' \
— header “X-Cassandra-Token: $AUTH_TOKEN” \
— header ‘Content-Type: application/json’ \
— data ‘{
“name”: “users_keyspace”
}’
{“name”:”users_keyspace”}

Conclusion

Resources

--

--

We’re huge believers in modern, cloud native technologies like Kubernetes; we are making Cassandra ready for millions of developers through simple APIs; and we are committed to delivering the industry’s first and only open, multi-cloud serverless database: DataStax Astra DB.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
DataStax

DataStax is the company behind the massively scalable, highly available, cloud-native NoSQL data platform built on Apache Cassandra®.