This is an automated email from the ASF dual-hosted git repository.

shahar1 pushed a commit to branch gha-arc-rebase
in repository https://gitbox.apache.org/repos/asf/airflow-ci-infra.git

commit c4e8315489c19f7d94c96bf9e437d99c1ec8e354
Author: hussein-awala <[email protected]>
AuthorDate: Fri Aug 30 01:28:39 2024 +0200

    switch to Autoscaling Runner Scale Sets mode
---
 README.rst                                         |   2 +-
 helm/{ci-helmfile.yaml => ci.yaml}                 |  22 ++--
 helm/infra-helmfile.yaml                           |   9 ++
 helm/runners-config/templates/runners.yaml         |  71 -------------
 helm/runners-config/values.yaml                    | 117 ---------------------
 .../Chart.yaml => values/ebs-csi-dirver.yaml}      |  10 +-
 ...r.yaml => gha-runner-scale-set-controller.yaml} |   4 +-
 .../gha-runner-scale-sets/common.yaml.gotmpl       |  61 +++++++++++
 .../runners.yaml}                                  |  42 ++++++--
 runner/Dockerfile                                  |  52 +++++----
 terraform/eks/eks.tf                               |   9 +-
 terraform/eks/iam.tf                               |  44 +++++++-
 terraform/eks/variables.tf                         |  17 +--
 13 files changed, 212 insertions(+), 248 deletions(-)

diff --git a/README.rst b/README.rst
index aa47573..12fa8ef 100644
--- a/README.rst
+++ b/README.rst
@@ -52,7 +52,7 @@ you need to follow the steps below:
 
 3. Update kubeconfig to access the EKS cluster::
 
-       AWS_PROFILE=airflow aws eks --region us-east-2 update-kubeconfig --name 
airflow
+       AWS_PROFILE=airflow aws eks --region us-east-2 update-kubeconfig --name 
airflow --alias airflow
 
    This command will update the kubeconfig file located at `~/.kube/config` to 
include the EKS cluster.
    You can verify that the cluster is added by running `kubectl get nodes`.
diff --git a/helm/ci-helmfile.yaml b/helm/ci.yaml
similarity index 62%
rename from helm/ci-helmfile.yaml
rename to helm/ci.yaml
index eda1b4b..e1da5a0 100644
--- a/helm/ci-helmfile.yaml
+++ b/helm/ci.yaml
@@ -15,18 +15,24 @@
 # specific language governing permissions and limitations
 # under the License.
 ---
-repositories:
-  - name: actions-runner-controller
-    url: https://actions-runner-controller.github.io/actions-runner-controller
+environments:
+  default:
+    values:
+      - ./values/gha-runner-scale-sets/runners.yaml
 
 releases:
   - name: actions-runner-controller
-    chart: actions-runner-controller/actions-runner-controller
+    chart: 
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
     namespace: ci
-    version: 0.23.7
+    version: 0.9.3
     values:
-      - ./values/actions-runner-controller.yaml
+      - ./values/gha-runner-scale-set-controller.yaml
 
-  - name: runners-config
-    chart: ./runners-config
+  {{- range $key, $value := .Values.runnerScaleSets }}
+  - name: {{ $key }}
+    chart: 
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
     namespace: ci
+    version: 0.9.3
+    values:
+      - ./values/gha-runner-scale-sets/common.yaml.gotmpl
+  {{- end }}
diff --git a/helm/infra-helmfile.yaml b/helm/infra-helmfile.yaml
index f69bc41..d8c49e5 100644
--- a/helm/infra-helmfile.yaml
+++ b/helm/infra-helmfile.yaml
@@ -20,12 +20,21 @@ repositories:
     url: https://charts.jetstack.io
   - name: autoscaler
     url: https://kubernetes.github.io/autoscaler
+  - name: aws-ebs-csi-driver
+    url: https://kubernetes-sigs.github.io/aws-ebs-csi-driver
 
 releases:
   - name: cluster-config
     chart: ./cluster-config
     namespace: kube-system
 
+  # 
https://github.com/kubernetes-sigs/aws-ebs-csi-driver/tree/master/charts/aws-ebs-csi-driver
+  - name: aws-ebs-csi-driver
+    chart: aws-ebs-csi-driver/aws-ebs-csi-driver
+    namespace: kube-system
+    values:
+      - ./values/ebs-csi-dirver.yaml
+
   # https://cert-manager.io/docs/installation/helm/
   - name: cert-manager
     chart: jetstack/cert-manager
diff --git a/helm/runners-config/templates/runners.yaml 
b/helm/runners-config/templates/runners.yaml
deleted file mode 100644
index b11257f..0000000
--- a/helm/runners-config/templates/runners.yaml
+++ /dev/null
@@ -1,71 +0,0 @@
-{{/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-*/}}
-
-################################################################################
-# Airflow GitHub Actions Runner Deployments and HRAutoscaler
-################################################################################
-{{ $common := .Values.common }}
-{{ $values := .Values }}
-{{ range $runner := $values.runners }}
----
-apiVersion: actions.summerwind.dev/v1alpha1
-kind: RunnerDeployment
-metadata:
-  name: {{ $runner.name }}-runners-deployment
-spec:
-  template:
-    spec:
-      repository: {{ $values.githubRepository }}
-      nodeSelector:
-        {{- $runner.nodeSelector | toYaml | nindent 8 }}
-      tolerations:
-        {{- $runner.tolerations | toYaml | nindent 8 }}
-      labels:
-        {{- $common.runnersLabels | toYaml | nindent 8 }}
-        {{- $runner.labels | toYaml | nindent 8 }}
-      affinity:
-        podAntiAffinity:
-          requiredDuringSchedulingIgnoredDuringExecution:
-            - labelSelector:
-                matchExpressions:
-                  - key: runner-deployment-name
-                    operator: In
-                    values:
-                      - {{ $runner.name }}-runners-deployment
-              topologyKey: kubernetes.io/hostname
-      env:
-        - name: DISABLE_RUNNER_UPDATE
-          value: "false"  # TODO: Set to true to disable runner update after 
patching the latest version
----
-apiVersion: actions.summerwind.dev/v1alpha1
-kind: HorizontalRunnerAutoscaler
-metadata:
-  name: {{ $runner.name }}-runners-deployment-autoscaler
-spec:
-  scaleDownDelaySecondsAfterScaleOut: {{ 
$values.scaleDownDelaySecondsAfterScaleOut }}
-  scaleTargetRef:
-    kind: RunnerDeployment
-    name: {{ $runner.name }}-runners-deployment
-  minReplicas: {{ $runner.minReplicas }}
-  maxReplicas: {{ $runner.maxReplicas }}
-  metrics:
-    - type: TotalNumberOfQueuedAndInProgressWorkflowRuns
-      repositoryNames:
-        - {{ $values.githubRepository }}
-{{ end }}
diff --git a/helm/runners-config/values.yaml b/helm/runners-config/values.yaml
deleted file mode 100644
index e22ed43..0000000
--- a/helm/runners-config/values.yaml
+++ /dev/null
@@ -1,117 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
----
-githubRepository: apache/airflow
-
-scaleDownDelaySecondsAfterScaleOut: 30
-
-common:
-  runnersLabels:
-    - airflow-runner
-    - eks-runner
-
-runners:
-  - name: small
-    minReplicas: 0
-    maxReplicas: 30
-    labels:
-      - small
-      - arm64
-    nodeSelector:
-      node-type: gha-runners
-      size: small
-      arch: arm64
-    tolerations:
-      - key: node-type
-        operator: Equal
-        value: gha-runners
-        effect: NoSchedule
-  - name: medium
-    minReplicas: 0
-    maxReplicas: 30
-    labels:
-      - medium
-      - arm64
-    nodeSelector:
-      node-type: gha-runners
-      size: medium
-      arch: arm64
-    tolerations:
-      - key: node-type
-        operator: Equal
-        value: gha-runners
-        effect: NoSchedule
-  - name: large
-    minReplicas: 0
-    maxReplicas: 30
-    labels:
-      - large
-      - arm64
-    nodeSelector:
-      node-type: gha-runners
-      size: large
-      arch: arm64
-    tolerations:
-      - key: node-type
-        operator: Equal
-        value: gha-runners
-        effect: NoSchedule
-  - name: small-x64
-    minReplicas: 0
-    maxReplicas: 30
-    labels:
-      - small
-      - X64
-    nodeSelector:
-      node-type: gha-runners
-      size: small
-      arch: x64
-    tolerations:
-      - key: node-type
-        operator: Equal
-        value: gha-runners
-        effect: NoSchedule
-  - name: medium-x64
-    minReplicas: 0
-    maxReplicas: 30
-    labels:
-      - medium
-      - X64
-    nodeSelector:
-      node-type: gha-runners
-      size: medium
-      arch: x64
-    tolerations:
-      - key: node-type
-        operator: Equal
-        value: gha-runners
-        effect: NoSchedule
-  - name: large-x64
-    minReplicas: 0
-    maxReplicas: 30
-    labels:
-      - large
-      - X64
-    nodeSelector:
-      node-type: gha-runners
-      size: large
-      arch: x64
-    tolerations:
-      - key: node-type
-        operator: Equal
-        value: gha-runners
-        effect: NoSchedule
diff --git a/helm/runners-config/Chart.yaml b/helm/values/ebs-csi-dirver.yaml
similarity index 84%
rename from helm/runners-config/Chart.yaml
rename to helm/values/ebs-csi-dirver.yaml
index 7113941..7f8f0d0 100644
--- a/helm/runners-config/Chart.yaml
+++ b/helm/values/ebs-csi-dirver.yaml
@@ -15,9 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 ---
-apiVersion: v2
-name: runners-config
-description: A Helm chart to manage the ARC runners
-type: application
-version: 0.1.0
-appVersion: "1.16.0"
+controller:
+  serviceAccount:
+    annotations:
+      eks.amazonaws.com/role-arn: arn:aws:iam::827901512104:role/ebs-csi-driver
diff --git a/helm/values/actions-runner-controller.yaml 
b/helm/values/gha-runner-scale-set-controller.yaml
similarity index 94%
copy from helm/values/actions-runner-controller.yaml
copy to helm/values/gha-runner-scale-set-controller.yaml
index bb5786f..63ab994 100644
--- a/helm/values/actions-runner-controller.yaml
+++ b/helm/values/gha-runner-scale-set-controller.yaml
@@ -19,9 +19,7 @@ replicaCount: 1
 
 labels:
   type: ci
-  app: actions-runner-controller
-
-syncPeriod: 10s
+  app: gha-runner-scale-set-controller
 
 nodeSelector:
   node-type: default
diff --git a/helm/values/gha-runner-scale-sets/common.yaml.gotmpl 
b/helm/values/gha-runner-scale-sets/common.yaml.gotmpl
new file mode 100644
index 0000000..9ed5238
--- /dev/null
+++ b/helm/values/gha-runner-scale-sets/common.yaml.gotmpl
@@ -0,0 +1,61 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+---
+{{ $config := index .Values.runnerScaleSets .Release.Name }}
+
+githubConfigUrl: https://github.com/apache
+
+githubConfigSecret: github-config
+
+runnerGroup: airflow-ci
+
+minRunners: {{ $config.minRunners }}
+
+maxRunners: {{ $config.maxRunners }}
+
+containerMode:
+  type: "dind"
+
+template:
+  spec:
+    containers:
+      - name: runner
+        image: {{ .Values.image }}
+        command: [ "/home/runner/run.sh" ]
+    nodeSelector:
+      node-type: gha-runners
+      size: {{ $config.size }}
+      arch: {{ $config.arch }}
+    tolerations:
+      - key: node-type
+        operator: Equal
+        value: gha-runners
+        effect: NoSchedule
+    affinity:
+      podAntiAffinity:
+        requiredDuringSchedulingIgnoredDuringExecution:
+          - labelSelector:
+              matchExpressions:
+                - key: actions.github.com/scale-set-name
+                  operator: In
+                  values:
+                    - {{ .Release.Name }}
+            topologyKey: kubernetes.io/hostname
+
+controllerServiceAccount:
+  name: actions-runner-controller-gha-rs-controller
+  namespace: {{ .Release.Namespace }}
diff --git a/helm/values/actions-runner-controller.yaml 
b/helm/values/gha-runner-scale-sets/runners.yaml
similarity index 52%
rename from helm/values/actions-runner-controller.yaml
rename to helm/values/gha-runner-scale-sets/runners.yaml
index bb5786f..40268eb 100644
--- a/helm/values/actions-runner-controller.yaml
+++ b/helm/values/gha-runner-scale-sets/runners.yaml
@@ -15,13 +15,35 @@
 # specific language governing permissions and limitations
 # under the License.
 ---
-replicaCount: 1
-
-labels:
-  type: ci
-  app: actions-runner-controller
-
-syncPeriod: 10s
-
-nodeSelector:
-  node-type: default
+image: ghcr.io/apache/airflow-ci-infra/actions-runner:20240830-rc1
+runnerScaleSets:
+    arc-small-amd:
+        minRunners: 0
+        maxRunners: 30
+        size: small
+        arch: x64
+    arc-medium-amd:
+        minRunners: 0
+        maxRunners: 30
+        size: medium
+        arch: x64
+    arc-large-amd:
+        minRunners: 0
+        maxRunners: 30
+        size: large
+        arch: x64
+    arc-small-arm:
+        minRunners: 0
+        maxRunners: 30
+        size: small
+        arch: arm64
+    arc-medium-arm:
+        minRunners: 0
+        maxRunners: 30
+        size: medium
+        arch: arm64
+    arc-large-arm:
+        minRunners: 0
+        maxRunners: 30
+        size: large
+        arch: arm64
diff --git a/runner/Dockerfile b/runner/Dockerfile
index d1ee441..05daa82 100644
--- a/runner/Dockerfile
+++ b/runner/Dockerfile
@@ -1,27 +1,35 @@
-ARG ACTIONS_RUNNER_VERSION=v2.309.0-ubuntu-22.04-ead26ab
-
-FROM summerwind/actions-runner:${ACTIONS_RUNNER_VERSION}
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+FROM ghcr.io/actions/actions-runner:latest
 
 USER root
 
-ARG AIRFLOW_RUNNER_VERSION=2.309.0-airflow11
-
-RUN rm -rf $RUNNER_ASSETS_DIR/* \
-    && export ARCH=$(arch) \
-    && if [ "$ARCH" = "amd64" ] || [ "$ARCH" = "x86_64" ] || [ "$ARCH" = 
"i386" ]; then export ARCH=x64 ; fi \
-    && if [ "$ARCH" = "aarch64" ]; then export ARCH=arm64 ; fi \
-    && cd "$RUNNER_ASSETS_DIR" \
-    && curl -fLo runner.tar.gz 
"https://github.com/ashb/runner/releases/download/v${AIRFLOW_RUNNER_VERSION}/actions-runner-linux-${ARCH}-${AIRFLOW_RUNNER_VERSION}.tar.gz";
 \
-    && tar xzf ./runner.tar.gz \
-    && rm runner.tar.gz \
-    && ./bin/installdependencies.sh \
-    && mv ./externals ./externalstmp
-
-# TODO: Remove this once https://github.com/actions/setup-python/issues/705 is 
solved
-RUN apt-get update && \
-    apt-get install -y --no-install-recommends \
-    curl nodejs wget unzip vim git jq build-essential libssl-dev libffi-dev 
python3 python3-venv python3-dev python3-pip python-is-python3 \
-    && chown -R runner:runner /usr/local/lib/ --recursive \
-    && chown -R runner:runner /usr/local/bin/ --recursive
+RUN apt-get update \
+    && apt-get install -y --no-install-recommends \
+    ca-certificates curl nodejs npm wget unzip vim git jq build-essential 
netcat \
+    libssl-dev libffi-dev python3 python3-venv python3-dev python3-pip 
python-is-python3 \
+    && npm install -g yarn \
+    && install -m 0755 -d /etc/apt/keyrings \
+    && curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o 
/etc/apt/keyrings/docker.asc \
+    && chmod a+r /etc/apt/keyrings/docker.asc \
+    && echo "deb [arch=$(dpkg --print-architecture) 
signed-by=/etc/apt/keyrings/docker.asc] 
https://download.docker.com/linux/ubuntu \
+    $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee 
/etc/apt/sources.list.d/docker.list > /dev/null \
+    && apt-get update \
+    && apt-get install -y docker-compose-plugin
 
 USER runner
\ No newline at end of file
diff --git a/terraform/eks/eks.tf b/terraform/eks/eks.tf
index adf6fdb..5b4203a 100644
--- a/terraform/eks/eks.tf
+++ b/terraform/eks/eks.tf
@@ -45,7 +45,14 @@ module "eks" {
     default_nodes = {
       name = "default"
 
-      instance_types = ["t4g.medium"]
+      instance_types = [
+        "t4g.medium",
+        "t4g.large",
+        "t4g.xlarge",
+        "m7g.medium",
+        "m7g.large",
+        "m7g.xlarge",
+      ]
 
       min_size     = 0
       max_size     = 5
diff --git a/terraform/eks/iam.tf b/terraform/eks/iam.tf
index 983ee0e..e2c3000 100644
--- a/terraform/eks/iam.tf
+++ b/terraform/eks/iam.tf
@@ -89,4 +89,46 @@ resource "aws_iam_role" "autoscaler_role" {
 resource "aws_iam_role_policy_attachment" "autoscaler_policy_attachment" {
   role       = aws_iam_role.autoscaler_role.name
   policy_arn = aws_iam_policy.autoscaler_policy.arn
-}
\ No newline at end of file
+}
+
+data "aws_iam_policy_document" "ebs_csi_driver_assume_policy_document" {
+  statement {
+    actions = [
+      "sts:AssumeRoleWithWebIdentity"
+    ]
+
+    principals {
+      type = "Federated"
+      identifiers = [
+        module.eks.oidc_provider_arn
+      ]
+    }
+
+    condition {
+      test     = "StringEquals"
+      variable = "${module.eks.oidc_provider}:sub"
+      values = [
+        "system:serviceaccount:kube-system:ebs-csi-controller-sa"
+      ]
+    }
+
+    condition {
+      test     = "StringEquals"
+      variable = "${module.eks.oidc_provider}:aud"
+      values = [
+        "sts.amazonaws.com"
+      ]
+    }
+
+  }
+}
+
+resource "aws_iam_role" "ebs_csi_driver" {
+  name = "ebs-csi-driver"
+  assume_role_policy = 
data.aws_iam_policy_document.ebs_csi_driver_assume_policy_document.json
+}
+
+resource "aws_iam_role_policy_attachment" "ebs_csi_driver" {
+  role       = aws_iam_role.ebs_csi_driver.name
+  policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
+}
diff --git a/terraform/eks/variables.tf b/terraform/eks/variables.tf
index d04ce6b..045c496 100644
--- a/terraform/eks/variables.tf
+++ b/terraform/eks/variables.tf
@@ -24,20 +24,21 @@ variable "region" {
 variable "runners_node_types" {
     description = "Node type for the runners"
     type        = list(string)
-    default     = ["t4g"]
+    default     = [
+      "t4g",
+      "m7g",
+      "m6g",
+    ]
 }
 
 variable "x64_runners_node_types" {
   description = "X64 node type for the runners"
   type        = list(string)
   default     = [
-    "r6a",
-    "r5",
-    "r5ad",
-    "r5n",
-    "r5b",
-    "r5a",
-    "r6i",
+    "m7a",
+    "m6a",
+    "t3",
+    "t3a",
   ]
 }
 

Reply via email to