Deploy workspace and e6data
Create the workspace namespace and NodePool, deploy the e6data workspace components with Helm, wait for reconciliation, and configure DNS.
With the infrastructure and platform components in place, deploy the e6data workspace. This creates the workspace namespace, a dedicated Karpenter NodePool, and the workspace components (the NamespaceConfig, QueryRouter, and supporting resources).
Step 1: Create the workspace namespace
export WORKSPACE_NAME="my-workspace" # Replace with your workspace name
export NAMESPACE="${WORKSPACE_NAME}"
kubectl create namespace "${NAMESPACE}" --dry-run=client -o yaml | kubectl apply -f -Step 2: Create the workspace NodePool and EC2NodeClass
cat << EOF | kubectl apply -f -
apiVersion: karpenter.k8s.aws/v1
kind: EC2NodeClass
metadata:
name: ${WORKSPACE_NAME}-nodeclass
spec:
amiSelectorTerms:
- alias: al2023@latest
instanceProfile: ${CLUSTER_NAME}-karpenter
subnetSelectorTerms:
- tags:
karpenter.sh/discovery: ${CLUSTER_NAME}-eks
securityGroupSelectorTerms:
- tags:
karpenter.sh/discovery: ${CLUSTER_NAME}-eks
blockDeviceMappings:
- deviceName: /dev/xvda
ebs:
volumeSize: 100Gi
volumeType: gp3
deleteOnTermination: true
tags:
Name: ${CLUSTER_NAME}-${WORKSPACE_NAME}
workspace: ${WORKSPACE_NAME}
EOF
cat << EOF | kubectl apply -f -
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: ${WORKSPACE_NAME}-nodepool
spec:
template:
spec:
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: ${WORKSPACE_NAME}-nodeclass
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot", "on-demand"]
- key: kubernetes.io/arch
operator: In
values: ["arm64"]
- key: karpenter.k8s.aws/instance-family
operator: In
values: [r6g, r6gd, r7g, r7gd, m7g, c7g]
- key: topology.kubernetes.io/zone
operator: In
values: ["${AZ1}", "${AZ2}"]
taints:
- key: workspace-name
value: ${WORKSPACE_NAME}
effect: NoSchedule
limits:
cpu: 1000
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 1h
budgets:
- nodes: "10%"
EOF
kubectl get nodepools.karpenter.sh ${WORKSPACE_NAME}-nodepool
kubectl get ec2nodeclasses.karpenter.k8s.aws ${WORKSPACE_NAME}-nodeclassStep 3: Configure the TLS certificate
Query traffic reaches the workspace over HTTPS, so you need a valid TLS certificate for your workspace hostname. Choose one of the options below. Options B and C create a Kubernetes secret named envoy-tls; Option A is referenced later by its ACM ARN.
Option A: AWS ACM certificate (recommended on AWS)
AWS Certificate Manager provisions and renews the certificate, and it integrates with the Network Load Balancer:
You set ACM_CERTIFICATE_ARN in the workspace values in the next step.
Option B: Let's Encrypt via cert-manager
Use cert-manager (installed earlier) to obtain and auto-renew a certificate from Let's Encrypt:
Option C: Customer-procured certificate
If you have a certificate from a third-party CA (DigiCert, Namecheap, Sectigo, and so on), create the envoy-tls secret from your certificate files. Make sure certificate.crt includes the full chain (your certificate plus intermediates):
Step 4: Deploy the workspace components
e6data provides the e6-workspace Helm chart. It creates the NamespaceConfig, QueryRouter, and all workspace resources. Set the variables from your onboarding details, build the values file, and apply:
Step 5: Wait for reconciliation
Step 6: Configure DNS
After the LoadBalancer is provisioned, get the NLB DNS name and create a DNS record:
Next
Register a catalog - connect your data lake.
Run your first query - verify the install.
Last updated
Was this helpful?

