Was this page helpful?
Set up an EKS cluster for ScyllaDB¶
This guide provisions an Amazon Elastic Kubernetes Service (EKS) cluster suitable for running ScyllaDB. At the end, you will have:
An EKS cluster with an infrastructure node group.
A dedicated ScyllaDB node group with local NVMe SSDs, static CPU manager policy, and ScyllaDB labels and taints.
Tip
All the steps in this guide are also available as a single executable script:
examples/eks/setup-eks-cluster.sh.
Set AWS_REGION, then run the script to provision everything in one go.
Prerequisites¶
An AWS account with permissions to create EKS clusters, EC2 instances, and VPC resources.
The
eksctlCLI installed.kubectlinstalled.AWS credentials configured (
aws configureor environment variables).Sufficient quota for
i4i.2xlargeinstances in your target region. See ScyllaDB cloud instance recommendations for AWS for recommended instance types and system requirements for minimum specifications.
Set environment variables¶
The rest of the guide refers to the variables defined here.
Set your AWS region — this has no default and must be provided:
export AWS_REGION="<your-region>" # e.g. eu-central-1
The remaining variables have sensible defaults and can be copied as-is. Override any value before running if needed:
# Cluster name.
export EKS_CLUSTER_NAME="${EKS_CLUSTER_NAME:-scylladb-demo}"
# Availability zones — one per ScyllaDB rack.
export EKS_AZ_1="${EKS_AZ_1:-${AWS_REGION}a}"
export EKS_AZ_2="${EKS_AZ_2:-${AWS_REGION}b}"
export EKS_AZ_3="${EKS_AZ_3:-${AWS_REGION}c}"
# Dedicated ScyllaDB node group. i4i.2xlarge provides 8 vCPU, 64 GiB RAM, and 1x1875 GB NVMe.
# See https://docs.scylladb.com/manual/stable/getting-started/cloud-instance-recommendations.html#amazon-web-services-aws
export SCYLLA_INSTANCE_TYPE="${SCYLLA_INSTANCE_TYPE:-i4i.2xlarge}"
export SCYLLA_NODE_COUNT="${SCYLLA_NODE_COUNT:-3}"
# Infrastructure node group.
export INFRA_INSTANCE_TYPE="${INFRA_INSTANCE_TYPE:-i3.large}"
export INFRA_NODE_COUNT="${INFRA_NODE_COUNT:-1}"
Create a temporary directory¶
Create a temporary directory for configuration files used in this guide:
TMPDIR="$(mktemp -d)"
trap 'rm -rf "${TMPDIR}"' EXIT
Create the eksctl cluster configuration¶
eksctl uses a declarative ClusterConfig to define the cluster and its node groups.
Generate the configuration file:
cat > "${TMPDIR}/clusterconfig.eksctl.yaml" <<EOF
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: ${EKS_CLUSTER_NAME}
region: ${AWS_REGION}
availabilityZones:
- ${EKS_AZ_1}
- ${EKS_AZ_2}
- ${EKS_AZ_3}
nodeGroups:
- name: scylla-pool
instanceType: ${SCYLLA_INSTANCE_TYPE}
desiredCapacity: ${SCYLLA_NODE_COUNT}
amiFamily: AmazonLinux2023
labels:
scylla.scylladb.com/node-type: scylla
taints:
scylla-operator.scylladb.com/dedicated: "scyllaclusters:NoSchedule"
kubeletExtraConfig:
cpuManagerPolicy: static
availabilityZones:
- ${EKS_AZ_1}
- ${EKS_AZ_2}
- ${EKS_AZ_3}
- name: infra-pool
instanceType: ${INFRA_INSTANCE_TYPE}
desiredCapacity: ${INFRA_NODE_COUNT}
amiFamily: AmazonLinux2023
labels:
scylla.scylladb.com/node-type: infra
EOF
The ScyllaDB node group uses i4i.2xlarge instances (8 vCPU, 64 GiB RAM, 1x1875 GB NVMe SSD) with:
cpuManagerPolicy: staticfor CPU pinning.ScyllaDB labels and taints so only ScyllaDB pods are scheduled on these nodes.
Nodes spread across 3 availability zones for fault tolerance.
Create the EKS cluster¶
eksctl create cluster -f="${TMPDIR}/clusterconfig.eksctl.yaml"
Note
Cluster creation typically takes 15–20 minutes.
eksctl automatically configures kubectl to use the new cluster.
Verify connectivity and node readiness:
kubectl get nodes -L scylla.scylladb.com/node-type
Example expected output:
NAME STATUS ROLES AGE VERSION NODE-TYPE
ip-192-168-xx-xx.eu-central-1.compute.internal Ready <none> 10m v1.32.1 scylla
ip-192-168-xx-xx.eu-central-1.compute.internal Ready <none> 10m v1.32.1 scylla
ip-192-168-xx-xx.eu-central-1.compute.internal Ready <none> 10m v1.32.1 scylla
ip-192-168-xx-xx.eu-central-1.compute.internal Ready <none> 10m v1.32.1 infra
Clean up¶
Delete the EKS cluster and all associated resources:
eksctl delete cluster --name="${EKS_CLUSTER_NAME}" --region="${AWS_REGION}" --force --disable-nodegroup-eviction
Next steps¶
Follow the Reference deployment: EKS for a complete ScyllaDB deployment on this cluster.