313 lines
10 KiB
YAML
313 lines
10 KiB
YAML
---
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: ${NAME}-runner-work-dir
|
|
labels:
|
|
content: ${NAME}-runner-work-dir
|
|
provisioner: rancher.io/local-path
|
|
reclaimPolicy: Delete
|
|
volumeBindingMode: WaitForFirstConsumer
|
|
---
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: ${NAME}
|
|
# In kind environments, the provider writes:
|
|
# /var/lib/docker/volumes/KIND_NODE_CONTAINER_VOL_ID/_data/local-path-provisioner/PV_NAME
|
|
# It can be hundreds of gigabytes depending on what you cache in the test workflow. Beware to not encounter `no space left on device` errors!
|
|
# If you did encounter no space errorrs try:
|
|
# docker system prune
|
|
# docker buildx prune #=> frees up /var/lib/docker/volumes/buildx_buildkit_container-builder0_state
|
|
# sudo rm -rf /var/lib/docker/volumes/KIND_NODE_CONTAINER_VOL_ID/_data/local-path-provisioner #=> frees up local-path-provisioner's data
|
|
provisioner: rancher.io/local-path
|
|
reclaimPolicy: Retain
|
|
volumeBindingMode: WaitForFirstConsumer
|
|
---
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: ${NAME}-var-lib-docker
|
|
labels:
|
|
content: ${NAME}-var-lib-docker
|
|
provisioner: rancher.io/local-path
|
|
reclaimPolicy: Retain
|
|
volumeBindingMode: WaitForFirstConsumer
|
|
---
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: ${NAME}-cache
|
|
labels:
|
|
content: ${NAME}-cache
|
|
provisioner: rancher.io/local-path
|
|
reclaimPolicy: Retain
|
|
volumeBindingMode: WaitForFirstConsumer
|
|
---
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: ${NAME}-runner-tool-cache
|
|
labels:
|
|
content: ${NAME}-runner-tool-cache
|
|
provisioner: rancher.io/local-path
|
|
reclaimPolicy: Retain
|
|
volumeBindingMode: WaitForFirstConsumer
|
|
---
|
|
apiVersion: storage.k8s.io/v1
|
|
kind: StorageClass
|
|
metadata:
|
|
name: ${NAME}-rootless-dind-work-dir
|
|
labels:
|
|
content: ${NAME}-rootless-dind-work-dir
|
|
provisioner: rancher.io/local-path
|
|
reclaimPolicy: Delete
|
|
volumeBindingMode: WaitForFirstConsumer
|
|
---
|
|
apiVersion: actions.summerwind.dev/v1alpha1
|
|
kind: RunnerSet
|
|
metadata:
|
|
name: ${NAME}
|
|
spec:
|
|
# MANDATORY because it is based on StatefulSet: Results in a below error when omitted:
|
|
# missing required field "selector" in dev.summerwind.actions.v1alpha1.RunnerSet.spec
|
|
selector:
|
|
matchLabels:
|
|
app: ${NAME}
|
|
|
|
# MANDATORY because it is based on StatefulSet: Results in a below error when omitted:
|
|
# missing required field "serviceName" in dev.summerwind.actions.v1alpha1.RunnerSet.spec]
|
|
serviceName: ${NAME}
|
|
|
|
#replicas: 1
|
|
|
|
# From my limited testing, `ephemeral: true` is more reliable.
|
|
# Seomtimes, updating already deployed runners from `ephemeral: false` to `ephemeral: true` seems to
|
|
# result in queued jobs hanging forever.
|
|
ephemeral: ${TEST_EPHEMERAL}
|
|
|
|
enterprise: ${TEST_ENTERPRISE}
|
|
group: ${TEST_GROUP}
|
|
organization: ${TEST_ORG}
|
|
repository: ${TEST_REPO}
|
|
|
|
#
|
|
# Custom runner image
|
|
#
|
|
image: ${RUNNER_NAME}:${RUNNER_TAG}
|
|
|
|
#
|
|
# dockerd within runner container
|
|
#
|
|
## Replace `mumoshu/actions-runner-dind:dev` with your dind image
|
|
#dockerdWithinRunnerContainer: true
|
|
dockerdWithinRunnerContainer: ${RUNNER_DOCKERD_WITHIN_RUNNER_CONTAINER}
|
|
|
|
#
|
|
# Set the MTU used by dockerd-managed network interfaces (including docker-build-ubuntu)
|
|
#
|
|
#dockerMTU: 1450
|
|
#Runner group
|
|
# labels:
|
|
# - "mylabel 1"
|
|
# - "mylabel 2"
|
|
labels:
|
|
- "${RUNNER_LABEL}"
|
|
#
|
|
# Non-standard working directory
|
|
#
|
|
# workDir: "/"
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: ${NAME}
|
|
spec:
|
|
serviceAccountName: ${RUNNER_SERVICE_ACCOUNT_NAME}
|
|
terminationGracePeriodSeconds: ${RUNNER_TERMINATION_GRACE_PERIOD_SECONDS}
|
|
containers:
|
|
# # Uncomment only when non-dind-runner / you're using docker sidecar
|
|
# - name: docker
|
|
# # Image is required for the dind sidecar definition within RunnerSet spec
|
|
# image: "docker:dind"
|
|
# env:
|
|
# - name: RUNNER_GRACEFUL_STOP_TIMEOUT
|
|
# value: "${RUNNER_GRACEFUL_STOP_TIMEOUT}"
|
|
- name: runner
|
|
imagePullPolicy: IfNotPresent
|
|
env:
|
|
- name: RUNNER_GRACEFUL_STOP_TIMEOUT
|
|
value: "${RUNNER_GRACEFUL_STOP_TIMEOUT}"
|
|
- name: RUNNER_FEATURE_FLAG_EPHEMERAL
|
|
value: "${RUNNER_FEATURE_FLAG_EPHEMERAL}"
|
|
- name: GOMODCACHE
|
|
value: "/home/runner/.cache/go-mod"
|
|
- name: ROLLING_UPDATE_PHASE
|
|
value: "${ROLLING_UPDATE_PHASE}"
|
|
# PV-backed runner work dir
|
|
volumeMounts:
|
|
# Comment out the ephemeral work volume if you're going to test the kubernetes container mode
|
|
# The volume and mount with the same names will be created by workVolumeClaimTemplate and the kubernetes container mode support.
|
|
# - name: work
|
|
# mountPath: /runner/_work
|
|
# Cache docker image layers, in case dockerdWithinRunnerContainer=true
|
|
- name: var-lib-docker
|
|
mountPath: /var/lib/docker
|
|
# Cache go modules and builds
|
|
# - name: gocache
|
|
# # Run `goenv | grep GOCACHE` to verify the path is correct for your env
|
|
# mountPath: /home/runner/.cache/go-build
|
|
# - name: gomodcache
|
|
# # Run `goenv | grep GOMODCACHE` to verify the path is correct for your env
|
|
# # mountPath: /home/runner/go/pkg/mod
|
|
- name: cache
|
|
# go: could not create module cache: stat /home/runner/.cache/go-mod: permission denied
|
|
mountPath: "/home/runner/.cache"
|
|
- name: runner-tool-cache
|
|
# This corresponds to our runner image's default setting of RUNNER_TOOL_CACHE=/opt/hostedtoolcache.
|
|
#
|
|
# In case you customize the envvar in both runner and docker containers of the runner pod spec,
|
|
# You'd need to change this mountPath accordingly.
|
|
#
|
|
# The tool cache directory is defined in actions/toolkit's tool-cache module:
|
|
# https://github.com/actions/toolkit/blob/2f164000dcd42fb08287824a3bc3030dbed33687/packages/tool-cache/src/tool-cache.ts#L621-L638
|
|
#
|
|
# Many setup-* actions like setup-go utilizes the tool-cache module to download and cache installed binaries:
|
|
# https://github.com/actions/setup-go/blob/56a61c9834b4a4950dbbf4740af0b8a98c73b768/src/installer.ts#L144
|
|
mountPath: "/opt/hostedtoolcache"
|
|
# Valid only when dockerdWithinRunnerContainer=false
|
|
# - name: docker
|
|
# # PV-backed runner work dir
|
|
# volumeMounts:
|
|
# - name: work
|
|
# mountPath: /runner/_work
|
|
# # Cache docker image layers, in case dockerdWithinRunnerContainer=false
|
|
# - name: var-lib-docker
|
|
# mountPath: /var/lib/docker
|
|
# # image: mumoshu/actions-runner-dind:dev
|
|
|
|
# # For buildx cache
|
|
# - name: cache
|
|
# mountPath: "/home/runner/.cache"
|
|
|
|
# For fixing no space left error on rootless dind runner
|
|
- name: rootless-dind-work-dir
|
|
# Omit the /share/docker part of the /home/runner/.local/share/docker as
|
|
# that part is created by dockerd.
|
|
mountPath: /home/runner/.local
|
|
readOnly: false
|
|
|
|
# Comment out the ephemeral work volume if you're going to test the kubernetes container mode
|
|
# volumes:
|
|
# - name: work
|
|
# ephemeral:
|
|
# volumeClaimTemplate:
|
|
# spec:
|
|
# accessModes:
|
|
# - ReadWriteOnce
|
|
# storageClassName: "${NAME}-runner-work-dir"
|
|
# resources:
|
|
# requests:
|
|
# storage: 10Gi
|
|
|
|
# Fix the following no space left errors with rootless-dind runners that can happen while running buildx build:
|
|
# ------
|
|
# > [4/5] RUN go mod download:
|
|
# ------
|
|
# ERROR: failed to solve: failed to prepare yxsw8lv9hqnuafzlfta244l0z: mkdir /home/runner/.local/share/docker/vfs/dir/yxsw8lv9hqnuafzlfta244l0z/usr/local/go/src/cmd/compile/internal/types2/testdata: no space left on device
|
|
# Error: Process completed with exit code 1.
|
|
#
|
|
volumes:
|
|
- name: rootless-dind-work-dir
|
|
ephemeral:
|
|
volumeClaimTemplate:
|
|
spec:
|
|
accessModes: [ "ReadWriteOnce" ]
|
|
storageClassName: "${NAME}-rootless-dind-work-dir"
|
|
resources:
|
|
requests:
|
|
storage: 3Gi
|
|
volumeClaimTemplates:
|
|
- metadata:
|
|
name: vol1
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
resources:
|
|
requests:
|
|
storage: 10Mi
|
|
storageClassName: ${NAME}
|
|
## Dunno which provider supports auto-provisioning with selector.
|
|
## At least the rancher local path provider stopped with:
|
|
## waiting for a volume to be created, either by external provisioner "rancher.io/local-path" or manually created by system administrator
|
|
# selector:
|
|
# matchLabels:
|
|
# runnerset-volume-id: ${NAME}-vol1
|
|
- metadata:
|
|
name: vol2
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
resources:
|
|
requests:
|
|
storage: 10Mi
|
|
storageClassName: ${NAME}
|
|
# selector:
|
|
# matchLabels:
|
|
# runnerset-volume-id: ${NAME}-vol2
|
|
- metadata:
|
|
name: var-lib-docker
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
resources:
|
|
requests:
|
|
storage: 10Mi
|
|
storageClassName: ${NAME}-var-lib-docker
|
|
- metadata:
|
|
name: cache
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
resources:
|
|
requests:
|
|
storage: 10Mi
|
|
storageClassName: ${NAME}-cache
|
|
- metadata:
|
|
name: runner-tool-cache
|
|
# It turns out labels doesn't distinguish PVs across PVCs and the
|
|
# end result is PVs are reused by wrong PVCs.
|
|
# The correct way seems to be to differentiate storage class per pvc template.
|
|
# labels:
|
|
# id: runner-tool-cache
|
|
spec:
|
|
accessModes:
|
|
- ReadWriteOnce
|
|
resources:
|
|
requests:
|
|
storage: 10Mi
|
|
storageClassName: ${NAME}-runner-tool-cache
|
|
---
|
|
apiVersion: actions.summerwind.dev/v1alpha1
|
|
kind: HorizontalRunnerAutoscaler
|
|
metadata:
|
|
name: ${NAME}
|
|
spec:
|
|
scaleTargetRef:
|
|
kind: RunnerSet
|
|
name: ${NAME}
|
|
scaleUpTriggers:
|
|
- githubEvent:
|
|
workflowJob: {}
|
|
amount: 1
|
|
duration: "10m"
|
|
minReplicas: ${RUNNER_MIN_REPLICAS}
|
|
maxReplicas: 10
|
|
scaleDownDelaySecondsAfterScaleOut: ${RUNNER_SCALE_DOWN_DELAY_SECONDS_AFTER_SCALE_OUT}
|
|
# Comment out the whole metrics if you'd like to solely test webhook-based scaling
|
|
metrics:
|
|
- type: PercentageRunnersBusy
|
|
scaleUpThreshold: '0.75'
|
|
scaleDownThreshold: '0.25'
|
|
scaleUpFactor: '2'
|
|
scaleDownFactor: '0.5'
|