# yaml-language-server: $schema=https://raw.githubusercontent.com/weaveworks/eksctl/main/pkg/apis/eksctl.io/v1alpha5/assets/schema.json
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: wallarooAWS # change to your cluster name
  region: us-west-2 # change to your region
  version: "1.30"

addons:
  - name: aws-ebs-csi-driver

# create the required IAM roles and kubernetes service account for the cluster-autoscaler
iam:
  withOIDC: true
  serviceAccounts:
  - metadata:
      name: cluster-autoscaler
      namespace: kube-system
    wellKnownPolicies:
      autoScaler: true

# ONLY use if you want to reuse existing VPC and subnet.
# The VPC and subnets have many requirements https://eksctl.io/usage/vpc-configuration/#use-existing-vpc-other-custom-configuration
# vpc:
#   id: "vpc-11111"
#   subnets:
#     private:
#       us-west-2a:
#           id: "subnet-0ff156e0c4a6d300c"
#       us-west-2c:
#           id: "subnet-0426fb4a607393184"
#     public:
#       us-west-2a:
#           id: "subnet-0153e560b3129a696"
#       us-west-2c:
#           id: "subnet-009fa0199ec203c37"

managedNodeGroups:
  - name: general
    instanceSelector:
      vCPUs: 8
      memory: 16GiB 
      gpus: 0
      cpuArchitecture: x86_64
    minSize: 1
    maxSize: 3
    volumeSize: 100 
    desiredCapacity: 1
    labels:
      wallaroo.ai/node-purpose: general
    iam:
      withAddonPolicies:
        autoScaler: true # add iam role for cluster-autoscaler; any nodegroup that should autoscale needs this and below
    propagateASGTags: true # add the labels and taints as appropriate autoscaling groups for cluster-autoscaler
  - name: persistent
    instanceSelector:
      vCPUs: 8
      memory: 16GiB 
      gpus: 0
      cpuArchitecture: x86_64
    desiredCapacity: 1
    minSize: 1
    maxSize: 3
    volumeSize: 100 
    iam:
      withAddonPolicies:
        autoScaler: true
    propagateASGTags: true
    labels:
      wallaroo.ai/node-purpose: persistent
    taints:
      - key: wallaroo.ai/persistent
        value: "true"
        effect: NoSchedule
    availabilityZones:
      - us-west-2c
  - name: pipelines-x86
    instanceTypes:
    - c7i.2xlarge
    - c7a.2xlarge
    - c6i.2xlarge
    - c6a.2xlarge
    desiredCapacity: 2
    minSize: 2
    maxSize: 3
    volumeSize: 100 
    iam:
      withAddonPolicies:
        autoScaler: true
    propagateASGTags: true
    labels:
      wallaroo.ai/node-purpose: pipelines
    taints:
      - key: wallaroo.ai/pipelines
        value: "true"
        effect: NoSchedule
  # Example GPU pool - not default
  # - name: pipelines-v100
  #   instanceTypes:
  #   - p3.8xlarge
  #   desiredCapacity: 0
  #   minSize: 0
  #   maxSize: 1
  #   volumeSize: 100 # particularly important for large models
  #   iam:
  #     withAddonPolicies:
  #       autoScaler: true
  #   propagateASGTags: true
  #   labels:
  #     wallaroo.ai/node-purpose: pipelines
  #     wallaroo.ai/accelerator: v100
  #   taints:
  #     - key: wallaroo.ai/pipelines
  #       value: "true"
  #       effect: NoSchedule
  #     - key: nvidia.com/gpu
  #       value: "v100"
  #       effect: NoSchedule
  # Example A100 GPU pool - not default
  # - name: pipelines-a100
  #   instanceTypes:
  #   - p4d.24xlarge
  #   desiredCapacity: 0
  #   minSize: 0
  #   maxSize: 1
  #   volumeSize: 100 # particularly important for large models
  #   iam:
  #     withAddonPolicies:
  #       autoScaler: true
  #   propagateASGTags: true
  #   labels:
  #     wallaroo.ai/node-purpose: pipelines
  #     wallaroo.ai/accelerator: a100
  #   taints:
  #     - key: wallaroo.ai/pipelines
  #       value: "true"
  #       effect: NoSchedule
  #     - key: nvidia.com/gpu
  #       value: "a100"
  #       effect: NoSchedule
  # Example ARM pipeline pool - not default
  # - name: pipelines-ARM
  #   instanceTypes:
  #   - m7g.2xlarge
  #   - m6g.2xlarge
  #   desiredCapacity: 0
  #   minSize: 0
  #   maxSize: 1
  #   volumeSize: 100 # particularly important for large models
  #   iam:
  #     withAddonPolicies:
  #       autoScaler: true
  #   propagateASGTags: true
  #   labels:
  #     wallaroo.ai/node-purpose: pipelines
  #   taints:
  #     - key: wallaroo.ai/pipelines
  #       value: "true"
  #       effect: NoSchedule

  # Example ARM conversion pool - not default
  # - name: general-ARM
  #   instanceTypes:
  #   - m7g.2xlarge
  #   - m6g.2xlarge
  #   desiredCapacity: 0
  #   minSize: 0
  #   maxSize: 1
  #   volumeSize: 100 # particularly important for large models
  #   iam:
  #     withAddonPolicies:
  #       autoScaler: true
  #   propagateASGTags: true
  #   labels:
  #     wallaroo.ai/node-purpose: general
