ScyllaDB University Live | Free Virtual Training Event
Learn more
ScyllaDB Documentation Logo Documentation
  • Deployments
    • Cloud
    • Server
  • Tools
    • ScyllaDB Manager
    • ScyllaDB Monitoring Stack
    • ScyllaDB Operator
  • Drivers
    • CQL Drivers
    • DynamoDB Drivers
    • Supported Driver Versions
  • Resources
    • ScyllaDB University
    • Community Forum
    • Tutorials
Install
Search Ask AI
ScyllaDB Docs ScyllaDB Operator Deploy ScyllaDB Reference deployments Reference deployment: EKS

Reference deployment: EKS¶

This guide deploys a production-ready ScyllaDB cluster on Amazon Elastic Kubernetes Service (EKS). By the end, you will have a 3-node ScyllaDB cluster spread across 3 availability zones, with performance tuning and local NVMe storage configured.

Prerequisites¶

  • An EKS cluster provisioned with a dedicated ScyllaDB node group with local NVMe SSDs. If you do not have one yet, follow Set up an EKS cluster for ScyllaDB.

  • Dedicated nodes labeled and tainted per Set up dedicated node pools. The EKS cluster setup guide handles this automatically.

  • ScyllaDB Operator installed. Follow Install ScyllaDB Operator if you have not done so yet.

  • kubectl configured and pointed at the cluster.

  • The environment variables from the EKS cluster setup guide exported in your shell (at minimum AWS_REGION, EKS_AZ_1, EKS_AZ_2, EKS_AZ_3).

Work around the ScyllaDB utils image issue¶

The default ScyllaDB utils image used by the operator for node tuning jobs contains a broken systemctl binary that fails on EKS nodes running irqbalance. Until this is fixed upstream, override the utils image with an older version that includes a working systemctl:

kubectl apply --server-side -f=- <<EOF
apiVersion: scylla.scylladb.com/v1alpha1
kind: ScyllaOperatorConfig
metadata:
  name: cluster
spec:
  scyllaUtilsImage: "docker.io/scylladb/scylla:2025.1"
EOF

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 EKS 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 availability zone. The resource requests are sized for i4i.2xlarge (8 vCPU, 64 GiB RAM), leaving headroom for the OS, kubelet, and DaemonSets. See the ScyllaDB system requirements for general sizing guidance. Adjust if you use a different instance type.

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: ${AWS_REGION}
    racks:
    - name: ${EKS_AZ_1}
      members: 1
      storage:
        capacity: 1500Gi
        storageClassName: scylladb-local-xfs
      resources:
        requests:
          cpu: 6
          memory: 50Gi
        limits:
          cpu: 6
          memory: 50Gi
      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: topology.kubernetes.io/zone
                operator: In
                values:
                - ${EKS_AZ_1}
        tolerations:
        - key: scylla-operator.scylladb.com/dedicated
          operator: Equal
          value: scyllaclusters
          effect: NoSchedule
    - name: ${EKS_AZ_2}
      members: 1
      storage:
        capacity: 1500Gi
        storageClassName: scylladb-local-xfs
      resources:
        requests:
          cpu: 6
          memory: 50Gi
        limits:
          cpu: 6
          memory: 50Gi
      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: topology.kubernetes.io/zone
                operator: In
                values:
                - ${EKS_AZ_2}
        tolerations:
        - key: scylla-operator.scylladb.com/dedicated
          operator: Equal
          value: scyllaclusters
          effect: NoSchedule
    - name: ${EKS_AZ_3}
      members: 1
      storage:
        capacity: 1500Gi
        storageClassName: scylladb-local-xfs
      resources:
        requests:
          cpu: 6
          memory: 50Gi
        limits:
          cpu: 6
          memory: 50Gi
      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: topology.kubernetes.io/zone
                operator: In
                values:
                - ${EKS_AZ_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 EKS infrastructure, follow the Clean up section of the EKS 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.

Was this page helpful?

PREVIOUS
Reference deployment: GKE
NEXT
Reference deployment: OKE
  • Create an issue
  • Edit this page

On this page

  • Reference deployment: EKS
    • Prerequisites
    • Work around the ScyllaDB utils image issue
    • Set up nodes
    • Deploy a ScyllaDB cluster
    • Verify the deployment
    • Clean up
    • Next steps
ScyllaDB Operator
Search Ask AI
  • v1.21
    • master
    • v1.21
    • v1.20
    • v1.19
    • v1.18
  • Get Started
    • What Is ScyllaDB Operator?
    • ScyllaDB Concepts on Kubernetes
  • Install Operator
    • Provision infrastructure
      • Set up a GKE cluster for ScyllaDB
      • Set up an EKS cluster for ScyllaDB
      • Set up an OKE cluster for ScyllaDB
      • Set up an OpenShift cluster for ScyllaDB
    • Install with GitOps
    • Install with Helm
    • Install on OpenShift
  • Deploy ScyllaDB
    • Before you deploy
      • Set up dedicated node pools
      • Configure CPU pinning
      • Configure nodes
      • Configure ScyllaDB Operator
    • Deploy your first cluster
    • Reference deployments
      • Reference deployment: GKE
      • Reference deployment: EKS
      • Reference deployment: OKE
      • Reference deployment: OpenShift
    • Install ScyllaDB Manager
    • Set up networking
      • Configure external access
      • IPv6 networking
        • Getting started with IPv6 networking
        • Configure dual-stack networking
        • Configure IPv6-only networking
        • Migrate clusters to IPv6
        • Troubleshoot IPv6 networking issues
        • IPv6 networking concepts
    • Set up monitoring
      • Set up ScyllaDB Monitoring
      • Set up ScyllaDB Monitoring on OpenShift
      • Expose Grafana
    • Production checklist
  • Connect Your App
    • Connect via CQL
    • Alternator (DynamoDB API)
    • Discovery endpoint
  • Understand
    • Storage
    • Tuning
    • ScyllaDB Manager
    • Networking
    • ScyllaDB Monitoring overview
    • Bootstrap synchronisation
    • Automatic data cleanup
    • Sidecar and pod anatomy
    • Ignition
    • Pod disruption budgets
    • Security
    • StatefulSets and racks
  • Operate
    • Scale, add, remove racks
    • Replace nodes
    • Expand storage volumes
    • Use maintenance mode
    • Back up and restore
    • Restore from backup
    • Perform a rolling restart
    • Migrate a rack to a new node pool
    • Pass additional ScyllaDB arguments
    • Configure precomputed IO properties
  • Upgrade
    • Upgrading ScyllaDB Operator
    • Upgrading ScyllaDB clusters
  • Troubleshoot
    • Investigate pod restarts
    • Change log level on a live cluster
    • Recover from a failed node replace
    • Troubleshoot performance
    • Collect debugging information
      • Collect data with must-gather
      • must-gather contents
      • Query system tables for debugging
    • Collect core dumps
  • Reference
    • API Reference
      • scylla.scylladb.com
        • NodeConfig (scylla.scylladb.com/v1alpha1)
        • RemoteKubernetesCluster (scylla.scylladb.com/v1alpha1)
        • RemoteOwner (scylla.scylladb.com/v1alpha1)
        • ScyllaCluster (scylla.scylladb.com/v1)
        • ScyllaDBCluster (scylla.scylladb.com/v1alpha1)
        • ScyllaDBDatacenterNodesStatusReport (scylla.scylladb.com/v1alpha1)
        • ScyllaDBDatacenter (scylla.scylladb.com/v1alpha1)
        • ScyllaDBManagerClusterRegistration (scylla.scylladb.com/v1alpha1)
        • ScyllaDBManagerTask (scylla.scylladb.com/v1alpha1)
        • ScyllaDBMonitoring (scylla.scylladb.com/v1alpha1)
        • ScyllaOperatorConfig (scylla.scylladb.com/v1alpha1)
    • Feature gates
    • IPv6 configuration reference
    • Releases
    • Known issues
    • Conditions reference
    • nodetool alternatives
  • Contributing to ScyllaDB Operator
Docs Tutorials University Contact Us About Us
© 2026, ScyllaDB. All rights reserved. | Terms of Service | Privacy Policy | ScyllaDB, and ScyllaDB Cloud, are registered trademarks of ScyllaDB, Inc.
Last updated on 22 May 2026.
Powered by Sphinx 9.1.0 & ScyllaDB Theme 1.9.2