For the complete documentation index, see llms.txt. This page is also available as Markdown.

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}-nodeclass

Step 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.

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

Last updated

Was this helpful?