Skip to content

Latest commit

 

History

History
160 lines (122 loc) · 3.5 KB

README.md

File metadata and controls

160 lines (122 loc) · 3.5 KB

GitHub Actions Self Hosted Runner (Autoscaling with Kubernetes)

YouTube Tutorial

Content

  • Create GitHub Repository
  • Create EKS Cluster with Terraform
  • Install Cert-Manager on Kubernetes
  • Install actions-runner-controller
  • Create Single GitHub Actions Self Hosted Runner
  • Create Multiple GitHub Actions Self Hosted Runners
  • Autoscaling with Kubernetes

Create GitHub Repository

  • Create private GitHub repository lesson-089

Create EKS Cluster with Terraform

  • Go over each file under terraform folder

  • Create EKS with terraform

terraform init
terraform apply
  • Configure kubectl
aws eks --region us-east-1 update-kubeconfig --name demo

if you get an error 'NoneType' object is not iterable, run rm ~/.kube/config

  • Check connection with Kubernetes
kubectl get svc

Install Cert-Manager on Kubernetes

  • Add Helm repo
helm repo add jetstack https://charts.jetstack.io
  • Update Helm
helm repo update
  • Search for latest verion
helm search repo cert-manager
  • Split the screen and install Helm chart
watch kubectl get pods -A
  • Install Helm chart
helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.6.0 \
  --set prometheus.enabled=false \
  --set installCRDs=true

Install actions-runner-controller

  • Create GitHub App, call it k8s-actions-89

  • Create namespace

kubectl create ns actions
  • Create secret to authenticate with GitHub
kubectl create secret generic controller-manager \
    -n actions \
    --from-literal=github_app_id=<> \
    --from-literal=github_app_installation_id=<> \
    --from-file=github_app_private_key=<>
  • Add actions helm repo
helm repo add actions-runner-controller https://actions-runner-controller.github.io/actions-runner-controller
helm repo update
helm search repo actions
  • Install Helm chart
helm install actions \
    actions-runner-controller/actions-runner-controller \
    --namespace actions \
    --version 0.14.0 \
    --set syncPeriod=1m

Create Single GitHub Actions Self Hosted Runner

  • Create k8s/runner.yaml
kubectl apply -f k8s/runner.yaml
kubectl get pods -n actions
kubectl logs -f k8s-single-runner -c runner -n actions
  • Go to GitHub to check self hosted runners

  • Clone lesson-089 repository

git clone git@github.com:antonputra/lesson-089.git
  • Create .github/workflows/main.yaml
  • Commit & push
  • Check pods
kubectl get pods -n actions

Create Multiple GitHub Actions Self Hosted Runners

  • Create k8s/runner-deployment.yaml
kubectl apply -f k8s/runner-deployment.yaml
kubectl get pods -n actions
  • Check in GitHub repo self-hosted runners

  • Create 2 build jobs with docker

  • Create Dockerfile

  • Ceate .github/workflows/example-2.yaml

Autoscaling with Kubernetes

  • Deploy k8s/horizontal-runner-autoscaler.yaml
kubectl apply -f k8s/horizontal-runner-autoscaler.yaml
  • Ceate .github/workflows/example-3.yaml

Links