项目作者: coordinadora-mercantil

项目描述 :
Proyecto donde se alojará la plantilla para crear un runner para Github Actions
高级语言: Shell
项目地址: git://github.com/coordinadora-mercantil/gke-github-runners.git


Self Hosted Runners en GKE con ADC usando Workload Identity

Este repositorio esta basado en GH-Runners by bharathkkb. En este ejemplo se muestra como desplegar GitHub Actions Self Hosted Runners en GKE con Application Default Credentials usando Workload Identity.

Paso a paso para desplegar este ejemplo

  • Paso 1: Configurar la variables de entorno requeridas.
  1. $ export PROJECT_ID=xxxxx
  2. $ export CLUSTER_NAME=runner-cluster
  3. $ export GITHUB_TOKEN=xxxxx
  4. $ export REPO_OWNER=coordinadora-mercantil
  5. $ export ACTION_URL=https://github.com/coordinadora-mercantil
  6. $ export ACTION_TOKEN=xxxxx

Nota: Para la variable de ACTION_URL si eres organización la encontrarías en la pestañana Configuración > Actions > Agregar nuevo.
Si quieres mejor ejecutar un runner solo para un repositorio sería en Repositorio > Configuración > Actions > Agregar nuevo

  • Paso 2: Habilitar las APIs de GCP requeridas.
  1. $ gcloud config set project $PROJECT_ID
  2. $ gcloud services enable container.googleapis.com \
  3. containerregistry.googleapis.com \
  4. cloudbuild.googleapis.com
  • Paso 3: Contruir la imagen de Docker para Self Hosted Runner usando CloudBuild.
  1. $ gcloud builds submit --tag gcr.io/${PROJECT_ID}/runner:XXX .

Reemplazar XXX por la versión que desear utilizar

Ejemplo: 1.0.0

  • Paso 4: Crear un Cluster en GKE y generar el kubeconfig.
  1. $ gcloud container clusters create ${CLUSTER_NAME} \
  2. --release-channel regular \
  3. --workload-pool=${PROJECT_ID}.svc.id.goog
  4. $ gcloud container clusters get-credentials ${CLUSTER_NAME}

Nota: Para crear el cluster es necesario que tengas una region seleccionada o por lo contrario poner el flag —region en los pasos de creación y obtención del kubeconfig

  • Paso 5: Crear la cuenta de servicios de Google que se usará como ADC dentros de los pods del runner.
  1. $ gcloud iam service-accounts create runner-sa --display-name "runner-sa"
  2. $ SA_EMAIL=$(gcloud iam service-accounts list --filter="displayName:runner-sa" --format='value(email)')

Opcionalmente darle permisos de rol a la cuenta de servicios.

  1. $ gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  2. --member serviceAccount:$SA_EMAIL \
  3. --role roles/editor
  • Paso 6: Enlazar la cuenta de servicios creada en el paso 5 con la cuenta de servicio de Kubernetes.
  1. $ kubectl create serviceaccount gke-runner-sa
  2. $ gcloud iam service-accounts add-iam-policy-binding \
  3. --role roles/iam.workloadIdentityUser \
  4. --member "serviceAccount:${PROJECT_ID}.svc.id.goog[default/gke-runner-sa]" \
  5. runner-sa@${PROJECT_ID}.iam.gserviceaccount.com
  6. $ kubectl annotate serviceaccount \
  7. gke-runner-sa \
  8. iam.gke.io/gcp-service-account=runner-sa@${PROJECT_ID}.iam.gserviceaccount.com
  • Paso 7: Guardar el token de Github en un secreto y configurar la imagen para el despliegue.
  1. $ kubectl create secret generic runner-k8s-secret --from-literal=GITHUB_TOKEN=$GITHUB_TOKEN
  2. $ kustomize edit set image gcr.io/PROJECT_ID/runner:latest=gcr.io/$PROJECT_ID/runner:XXX

Reemplazar XXX por la versión que pusite en el paso 3

  • Paso 8: Crear el archivo de variables de entorno que usará Kustomize para generar un config map.
  1. $ cat > runner.env << EOF
  2. ACTION_URL=${ACTION_URL}
  3. ACTION_TOKEN=${ACTION_TOKEN}
  4. EOF
  • Paso 9: Desplegar el Self Hosted Runner deployment usando Kustomize.
  1. $ kustomize build . | kubectl apply -f -