Fix example manifests for webhooks-based scaling (#1354)
* Fix example manifests for webhook based scaling I tried running these on my k8s cluster and I got some easy to fix errors, so I am committing them here. * Fix example manifests for webhook autoscaling with workflow_jobs * Fix the explation on how to setup webhooks on your cluster * Replace unclear comment with actual code examples There was a comment instructing users to add minReplicas and maxReplicas to all the HRA yamls, so I just removed it and added these attributes to the yamls themselves for clarity. * Make clear that using the ingress example is just a suggestion * Apply some text improvements suggested by @mumoshu * Update examples so the webhook server is exposed on a NodePort Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com> * Remove an unnecessary field from one the examples Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com> * Apply suggestion from @mumoshu Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com> * Remove namespace fields from webhook autoscaler examples This change was suggested by @mumoshu * Apply final suggestion from @mumoshu Co-authored-by: Callum Tait <15716903+toast-gear@users.noreply.github.com> Co-authored-by: Yusuke Kuoka <ykuoka@gmail.com>
This commit is contained in:
parent
7c4db63718
commit
01c8dc237e
131
README.md
131
README.md
|
|
@ -732,24 +732,118 @@ _[see the values documentation for all configuration options](https://github.com
|
||||||
```console
|
```console
|
||||||
$ helm upgrade --install --namespace actions-runner-system --create-namespace \
|
$ helm upgrade --install --namespace actions-runner-system --create-namespace \
|
||||||
--wait actions-runner-controller actions-runner-controller/actions-runner-controller \
|
--wait actions-runner-controller actions-runner-controller/actions-runner-controller \
|
||||||
--set "githubWebhookServer.enabled=true,githubWebhookServer.ports[0].nodePort=33080"
|
--set "githubWebhookServer.enabled=true,service.type=NodePort,githubWebhookServer.ports[0].nodePort=33080"
|
||||||
```
|
```
|
||||||
|
|
||||||
The above command will result in exposing the node port 33080 for Webhook events. Usually, you need to create an
|
The above command will result in exposing the node port 33080 for Webhook events.
|
||||||
external load balancer targeted to the node port, and register the hostname or the IP address of the external load balancer
|
Usually, you need to create an external load balancer targeted to the node port,
|
||||||
to the GitHub Webhook.
|
and register the hostname or the IP address of the external load balancer to the GitHub Webhook.
|
||||||
|
|
||||||
Once you were able to confirm that the Webhook server is ready and running from GitHub - this is usually verified by the
|
**With a custom Kubernetes ingress controller:**
|
||||||
GitHub sending PING events to the Webhook server - create or update your `HorizontalRunnerAutoscaler` resources
|
|
||||||
by learning the following configuration examples.
|
> **CAUTION:** The Kubernetes ingress controllers described below is just a suggestion from the community and
|
||||||
|
> the ARC team will not provide any user support for ingress controllers as it's not a part of this project.
|
||||||
|
>
|
||||||
|
> The following guide on creating an ingress has been contributed by the awesome ARC community and is provided here as-is.
|
||||||
|
> You may, however, still be able to ask for help on the community on GitHub Discussions if you have any problems.
|
||||||
|
|
||||||
|
Kubernetes provides `Ingress` resources to let you configure your ingress controller to expose a Kubernetes service.
|
||||||
|
If you plan to expose ARC via Ingress, you might not be required to make it a `NodePort` service
|
||||||
|
(although nothing would prevent an ingress controller to expose NodePort services too):
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ helm upgrade --install --namespace actions-runner-system --create-namespace \
|
||||||
|
--wait actions-runner-controller actions-runner-controller/actions-runner-controller \
|
||||||
|
--set "githubWebhookServer.enabled=true"
|
||||||
|
```
|
||||||
|
|
||||||
|
The command above will create a new deployment and a service for receiving Github Webhooks on the `actions-runner-system` namespace.
|
||||||
|
|
||||||
|
Now we need to expose this service so that GitHub can send these webhooks over the network with TSL protection.
|
||||||
|
|
||||||
|
You can do it in any way you prefer, here we'll suggest doing it with a k8s Ingress.
|
||||||
|
For the sake of this example we'll expose this service on the following URL:
|
||||||
|
|
||||||
|
- https://your.domain.com/actions-runner-controller-github-webhook-server
|
||||||
|
|
||||||
|
Where `your.domain.com` should be replaced by your own domain.
|
||||||
|
|
||||||
|
> Note: This step assumes you already have a configured `cert-manager` and domain name for your cluster.
|
||||||
|
|
||||||
|
Let's start by creating an Ingress file called `arc-webhook-server.yaml` with the following contents:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: actions-runner-controller-github-webhook-server
|
||||||
|
namespace: actions-runner-system
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: nginx
|
||||||
|
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
|
||||||
|
spec:
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- your.domain.com
|
||||||
|
secretName: your-tls-secret-name
|
||||||
|
rules:
|
||||||
|
- http:
|
||||||
|
paths:
|
||||||
|
- path: /actions-runner-controller-github-webhook-server
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: actions-runner-controller-github-webhook-server
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure to set the `spec.tls.secretName` to the name of your TLS secret and
|
||||||
|
`spec.tls.hosts[0]` to your own domain.
|
||||||
|
|
||||||
|
Then create this resource on your cluster with the following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply -n actions-runner-system -f arc-webhook-server.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configuring GitHub for sending webhooks for our newly created webhook server:**
|
||||||
|
|
||||||
|
After this step your webhook server should be ready to start receiving webhooks from GitHub.
|
||||||
|
|
||||||
|
To configure GitHub to start sending you webhooks, go to the settings page of your repository
|
||||||
|
or organization then click on `Webhooks`, then on `Add webhook`.
|
||||||
|
|
||||||
|
There set the "Payload URL" field with the webhook URL you just created,
|
||||||
|
if you followed the example ingress above the URL would be something like this:
|
||||||
|
|
||||||
|
- https://your.domain.com/actions-runner-controller-github-webhook-server
|
||||||
|
|
||||||
|
> Remember to replace `your.domain.com` with your own domain.
|
||||||
|
|
||||||
|
Then click on "let me select individual events" and choose `Workflow Jobs`.
|
||||||
|
|
||||||
|
You may also want to choose the following event(s) if you use it as a scale trigger in your HRA spec:
|
||||||
|
|
||||||
|
- Check runs
|
||||||
|
- Pushes
|
||||||
|
- Pull Requests
|
||||||
|
|
||||||
|
Later you can remove any of these you are not using to reduce the amount of data sent to your server.
|
||||||
|
|
||||||
|
Then click on `Add Webhook`.
|
||||||
|
|
||||||
|
GitHub will then send a `ping` event to your webhook server to check if it is working, if it is you'll see a green V mark
|
||||||
|
alongside your webhook on the Settings -> Webhooks page.
|
||||||
|
|
||||||
|
Once you were able to confirm that the Webhook server is ready and running from GitHub create or update your
|
||||||
|
`HorizontalRunnerAutoscaler` resources by learning the following configuration examples.
|
||||||
|
|
||||||
- [Example 1: Scale on each `workflow_job` event](#example-1-scale-on-each-workflow_job-event)
|
- [Example 1: Scale on each `workflow_job` event](#example-1-scale-on-each-workflow_job-event)
|
||||||
- [Example 2: Scale up on each `check_run` event](#example-2-scale-up-on-each-check_run-event)
|
- [Example 2: Scale up on each `check_run` event](#example-2-scale-up-on-each-check_run-event)
|
||||||
- [Example 3: Scale on each `pull_request` event against a given set of branches](#example-3-scale-on-each-pull_request-event-against-a-given-set-of-branches)
|
- [Example 3: Scale on each `pull_request` event against a given set of branches](#example-3-scale-on-each-pull_request-event-against-a-given-set-of-branches)
|
||||||
- [Example 4: Scale on each `push` event](#example-4-scale-on-each-push-event)
|
- [Example 4: Scale on each `push` event](#example-4-scale-on-each-push-event)
|
||||||
|
|
||||||
**Note:** All these examples should have **minReplicas** & **maxReplicas** as mandatory parameters even for webhook driven scaling.
|
|
||||||
|
|
||||||
##### Example 1: Scale on each `workflow_job` event
|
##### Example 1: Scale on each `workflow_job` event
|
||||||
|
|
||||||
> This feature requires controller version => [v0.20.0](https://github.com/actions-runner-controller/actions-runner-controller/releases/tag/v0.20.0)
|
> This feature requires controller version => [v0.20.0](https://github.com/actions-runner-controller/actions-runner-controller/releases/tag/v0.20.0)
|
||||||
|
|
@ -761,6 +855,7 @@ The most flexible webhook GitHub offers is the `workflow_job` webhook, it includ
|
||||||
This webhook should cover most people's needs, please experiment with this webhook first before considering the others.
|
This webhook should cover most people's needs, please experiment with this webhook first before considering the others.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
apiVersion: actions.summerwind.dev/v1alpha1
|
||||||
kind: RunnerDeployment
|
kind: RunnerDeployment
|
||||||
metadata:
|
metadata:
|
||||||
name: example-runners
|
name: example-runners
|
||||||
|
|
@ -769,8 +864,14 @@ spec:
|
||||||
spec:
|
spec:
|
||||||
repository: example/myrepo
|
repository: example/myrepo
|
||||||
---
|
---
|
||||||
|
apiVersion: actions.summerwind.dev/v1alpha1
|
||||||
kind: HorizontalRunnerAutoscaler
|
kind: HorizontalRunnerAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: example-runners
|
||||||
spec:
|
spec:
|
||||||
|
scaleDownDelaySecondsAfterScaleOut: 300
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
scaleTargetRef:
|
scaleTargetRef:
|
||||||
name: example-runners
|
name: example-runners
|
||||||
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
||||||
|
|
@ -804,6 +905,8 @@ spec:
|
||||||
---
|
---
|
||||||
kind: HorizontalRunnerAutoscaler
|
kind: HorizontalRunnerAutoscaler
|
||||||
spec:
|
spec:
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
scaleTargetRef:
|
scaleTargetRef:
|
||||||
name: example-runners
|
name: example-runners
|
||||||
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
||||||
|
|
@ -830,6 +933,8 @@ spec:
|
||||||
---
|
---
|
||||||
kind: HorizontalRunnerAutoscaler
|
kind: HorizontalRunnerAutoscaler
|
||||||
spec:
|
spec:
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
scaleTargetRef:
|
scaleTargetRef:
|
||||||
name: example-runners
|
name: example-runners
|
||||||
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
||||||
|
|
@ -860,6 +965,8 @@ spec:
|
||||||
---
|
---
|
||||||
kind: HorizontalRunnerAutoscaler
|
kind: HorizontalRunnerAutoscaler
|
||||||
spec:
|
spec:
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
scaleTargetRef:
|
scaleTargetRef:
|
||||||
name: example-runners
|
name: example-runners
|
||||||
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
||||||
|
|
@ -888,6 +995,8 @@ spec:
|
||||||
---
|
---
|
||||||
kind: HorizontalRunnerAutoscaler
|
kind: HorizontalRunnerAutoscaler
|
||||||
spec:
|
spec:
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
scaleTargetRef:
|
scaleTargetRef:
|
||||||
name: example-runners
|
name: example-runners
|
||||||
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
# Uncomment the below in case the target is not RunnerDeployment but RunnerSet
|
||||||
|
|
@ -1472,8 +1581,8 @@ spec:
|
||||||
value: "true"
|
value: "true"
|
||||||
# Configure runner with legacy --once instead of --ephemeral flag
|
# Configure runner with legacy --once instead of --ephemeral flag
|
||||||
# WARNING | THIS ENV VAR IS DEPRECATED AND WILL BE REMOVED
|
# WARNING | THIS ENV VAR IS DEPRECATED AND WILL BE REMOVED
|
||||||
# IN A FUTURE VERSION OF ARC.
|
# THIS ENV VAR WILL BE REMOVED SOON.
|
||||||
# THIS ENV VAR WILL BE REMOVED, SEE ISSUE #1196 FOR DETAILS
|
# SEE ISSUE #1196 FOR DETAILS
|
||||||
- name: RUNNER_FEATURE_FLAG_ONCE
|
- name: RUNNER_FEATURE_FLAG_ONCE
|
||||||
value: "true"
|
value: "true"
|
||||||
```
|
```
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue