#!/usr/bin/env bash set -o errexit set -o errtrace set -o pipefail if [ -n "${REGION}" ]; then TARGET_REGION=${REGION} else TARGET_REGION=eu-west-1 fi if [ -n "${CLUSTER}" ]; then CLUSTER_NAME=${CLUSTER} else NOW=$(date '+%s') CLUSTER_NAME=$GITHUB_ACTOR-$NOW fi echo "Provisioning EKS on Fargate cluster $CLUSTER_NAME in $TARGET_REGION" # create EKS on Fargate cluster: tmpdir=$(mktemp -d) cat <<EOF >> ${tmpdir}/fg-cluster-spec.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: $CLUSTER_NAME region: $TARGET_REGION version: '1.16' iam: withOIDC: true fargateProfiles: - name: defaultfp selectors: - namespace: serverless - namespace: kube-system cloudWatch: clusterLogging: enableTypes: ["*"] EOF eksctl create cluster -f ${tmpdir}/fg-cluster-spec.yaml # check if cluster if available echo "Waiting for cluster $CLUSTER_NAME in $TARGET_REGION to become available" sleep 10 cluster_status="UNKNOWN" until [ "$cluster_status" == "ACTIVE" ] do cluster_status=$(eksctl get cluster $CLUSTER_NAME --region $TARGET_REGION -o json | jq -r '.[0].Status') sleep 3 done # create serverless namespace for Fargate pods, make it the active namespace: echo "EKS on Fargate cluster $CLUSTER_NAME is ready, configuring it:" kubectl create namespace serverless kubectl config set-context $(kubectl config current-context) --namespace=serverless # patch kube-system namespace to run also on Fargate: kubectl --namespace kube-system patch deployment coredns \ --type json -p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'