CockroachDB is a distributed SQL database that replicates data across nodes for high availability. If a node fails, the cluster elects new nodes and rebalances automatically, and an automated repair feature detects and corrects data inconsistencies. This guide deploys CockroachDB on Kubernetes via the CockroachDB Operator, and covers access through both the SQL client and the graphical console.
Prerequisites: a Kubernetes cluster with at least 3 nodes, 8GB RAM and 4 vCPUs each, and a workstation with kubectl configured against the cluster.
Install the CockroachDB Operator
The operator automates scaling and maintenance of CockroachDB nodes.
$ kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach-operator/v2.12.0/install/crds.yaml
$ kubectl apply -f https://raw.githubusercontent.com/cockroachdb/cockroach-operator/v2.12.0/install/operator.yaml
Check the operator tags page for the latest version before installing.
Wait ~2 minutes, then verify:
$ kubectl get pods -n cockroach-operator-system
You should see cockroach-operator-manager-* running.
Create a CockroachDB Cluster
Production minimums: a PVC-backed volume of at least 60GB, 2 vCPUs, 8GB memory per node.
$ mkdir cockroachdb-cluster
$ cd cockroachdb-cluster
$ nano cluster.yaml
apiVersion: crdb.cockroachlabs.com/v1alpha1
kind: CrdbCluster
metadata:
name: cockroachdb
spec:
dataStore:
pvc:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: "60Gi"
volumeMode: Filesystem
resources:
requests:
cpu: 2
memory: 4Gi
limits:
cpu: 2
memory: 8Gi
tlsEnabled: true
image:
name: cockroachdb/cockroach:v23.1.11
nodes: 3
additionalLabels:
crdb: cockroachdb-cluster
$ kubectl apply -f cluster.yaml
Wait ~3 minutes for the cluster and its backing volumes to provision, then verify:
$ kubectl get crdbcluster
$ kubectl get pods
You should see cockroachdb-0, cockroachdb-1, cockroachdb-2 all Running.
Access the Cluster
CockroachDB is reachable internally via the cockroachdb-public service.
1. Check services:
$ kubectl get svc
2. Deploy a secure SQL client pod:
$ kubectl create -f https://raw.githubusercontent.com/cockroachdb/cockroach-operator/v2.12.0/examples/client-secure-operator.yaml
$ kubectl get pods
3. Open a SQL shell against the cluster:
$ kubectl exec -it cockroachdb-client-secure -- ./cockroach sql --certs-dir=/cockroach/cockroach-certs --host=cockroachdb-public
4. Create a database and admin user:
> CREATE DATABASE exampledb;
> CREATE USER example_admin WITH PASSWORD 'strong-pass';
> GRANT admin TO example_admin;
> \q
5. Expose the graphical console via a LoadBalancer:
$ kubectl expose service cockroachdb-public --type=LoadBalancer --name=cockroachdb-external
Wait a few minutes for an external IP, then:
$ kubectl get svc
6. Open the console at https://<external-ip>:8080 and log in with example_admin. From there you can inspect cluster status, nodes, and databases.
Next Steps
CockroachDB is running as a 3-node cluster with TLS enabled and both SQL and console access. From here:
- Scale
nodesin the cluster spec to add capacity - Set up automated backups to object storage via
BACKUPscheduled jobs - Point application connection strings at
cockroachdb-publicfor in-cluster access, or the LoadBalancer IP for external clients
For the full guide, visit the original article on Vultr Docs.
Top comments (0)