Was this page helpful?
Caution
You're viewing documentation for an unstable version of ScyllaDB Operator. Switch to the latest stable version.
Reference deployment: OKE¶
This guide deploys a production-ready ScyllaDB cluster on Oracle Container Engine for Kubernetes (OKE). By the end, you will have a 3-node ScyllaDB cluster spread across 3 fault domains, with performance tuning and local NVMe storage configured.
Prerequisites¶
An OKE cluster provisioned with a dedicated Dense I/O node pool for ScyllaDB. If you do not have one yet, follow Set up an OKE cluster for ScyllaDB.
Dedicated nodes labeled and tainted per Set up dedicated node pools. The OKE cluster setup guide handles this automatically.
ScyllaDB Operator installed. Follow Install ScyllaDB Operator if you have not done so yet.
kubectlconfigured and pointed at the cluster.The environment variables from the OKE cluster setup guide exported in your shell (at minimum
OCI_REGION).
Set up nodes¶
Before deploying a ScyllaCluster, the dedicated nodes must be prepared with local disk setup and kernel tuning via NodeConfig, and the Local CSI Driver must be installed to provision PersistentVolumes from the local NVMe storage.
Follow Configure nodes, selecting the OKE tab where applicable, then return here to deploy the cluster.
Deploy a ScyllaDB cluster¶
Tip
You can run your ScyllaDB cluster in the Kubernetes namespace of your choice (you can change the namespace used in this guide to your preference). It is a best practice (but not strictly required) to run your ScyllaDB cluster in a namespace separate from other applications.
Create a ScyllaDB cluster with one rack per fault domain.
The resource requests are sized for VM.DenseIO2.8 (8 OCPUs, 120 GB RAM), leaving headroom for the OS, kubelet, and DaemonSets.
See the ScyllaDB system requirements for general sizing guidance.
Adjust if you use a different shape.
kubectl apply --server-side -f=- <<EOF
apiVersion: scylla.scylladb.com/v1
kind: ScyllaCluster
metadata:
name: scylladb
spec:
repository: docker.io/scylladb/scylla
version: 2026.1.3
agentVersion: 3.10.1
automaticOrphanedNodeCleanup: true
datacenter:
name: ${OCI_REGION}
racks:
- name: fault-domain-1
members: 1
storage:
capacity: 100Gi
storageClassName: scylladb-local-xfs
resources:
requests:
cpu: 6
memory: 90Gi
limits:
cpu: 6
memory: 90Gi
agentResources:
requests:
cpu: 100m
memory: 20Mi
limits:
cpu: 100m
memory: 20Mi
placement:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: scylla.scylladb.com/node-type
operator: In
values:
- scylla
- key: oci.oraclecloud.com/fault-domain
operator: In
values:
- FAULT-DOMAIN-1
tolerations:
- key: scylla-operator.scylladb.com/dedicated
operator: Equal
value: scyllaclusters
effect: NoSchedule
- name: fault-domain-2
members: 1
storage:
capacity: 100Gi
storageClassName: scylladb-local-xfs
resources:
requests:
cpu: 6
memory: 90Gi
limits:
cpu: 6
memory: 90Gi
agentResources:
requests:
cpu: 100m
memory: 20Mi
limits:
cpu: 100m
memory: 20Mi
placement:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: scylla.scylladb.com/node-type
operator: In
values:
- scylla
- key: oci.oraclecloud.com/fault-domain
operator: In
values:
- FAULT-DOMAIN-2
tolerations:
- key: scylla-operator.scylladb.com/dedicated
operator: Equal
value: scyllaclusters
effect: NoSchedule
- name: fault-domain-3
members: 1
storage:
capacity: 100Gi
storageClassName: scylladb-local-xfs
resources:
requests:
cpu: 6
memory: 90Gi
limits:
cpu: 6
memory: 90Gi
agentResources:
requests:
cpu: 100m
memory: 20Mi
limits:
cpu: 100m
memory: 20Mi
placement:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: scylla.scylladb.com/node-type
operator: In
values:
- scylla
- key: oci.oraclecloud.com/fault-domain
operator: In
values:
- FAULT-DOMAIN-3
tolerations:
- key: scylla-operator.scylladb.com/dedicated
operator: Equal
value: scyllaclusters
effect: NoSchedule
EOF
Verify the deployment¶
Wait for the cluster to become ready:
kubectl wait --for='condition=Progressing=False' scyllacluster.scylla.scylladb.com/scylladb
kubectl wait --for='condition=Degraded=False' scyllacluster.scylla.scylladb.com/scylladb
kubectl wait --for='condition=Available=True' scyllacluster.scylla.scylladb.com/scylladb
Verify the cluster status:
kubectl get scyllaclusters.scylla.scylladb.com/scylladb
Expected output:
NAME READY MEMBERS RACKS AVAILABLE PROGRESSING DEGRADED AGE
scylladb 3 3 3 True False False 5m
Clean up¶
Delete the ScyllaDB cluster first so the underlying PersistentVolumes are released cleanly:
kubectl delete scyllaclusters.scylla.scylladb.com/scylladb
To tear down the OKE infrastructure, follow the Clean up section of the OKE cluster setup guide.
Next steps¶
Set up monitoring with Prometheus and Grafana dashboards.
Review the production checklist before going live.
Learn how to connect your application to ScyllaDB.