|
| 1 | +## githubConfigUrl is the GitHub url for where you want to configure runners |
| 2 | +## ex: https://github.com/myorg/myrepo or https://github.com/myorg |
| 3 | +githubConfigUrl: https://github.com/enterprises/cncf |
| 4 | + |
| 5 | +## githubConfigSecret is the k8s secrets to use when auth with GitHub API. |
| 6 | +## You can choose to use GitHub App or a PAT token |
| 7 | +githubConfigSecret: github-arc-secret |
| 8 | + |
| 9 | +controllerServiceAccount: |
| 10 | + namespace: arc-systems |
| 11 | + name: cncf-gha-controller-gha-rs-controller |
| 12 | + |
| 13 | +## maxRunners is the max number of runners the autoscaling runner set will scale up to. |
| 14 | +maxRunners: 100 |
| 15 | + |
| 16 | +## minRunners is the min number of idle runners. The target number of runners created will be |
| 17 | +## calculated as a sum of minRunners and the number of jobs assigned to the scale set. |
| 18 | +minRunners: 1 |
| 19 | + |
| 20 | +# runnerGroup: "default" |
| 21 | + |
| 22 | +## name of the runner scale set to create. Defaults to the helm release name |
| 23 | +# runnerScaleSetName: "" |
| 24 | + |
| 25 | +## A self-signed CA certificate for communication with the GitHub server can be |
| 26 | +## provided using a config map key selector. If `runnerMountPath` is set, for |
| 27 | +## each runner pod ARC will: |
| 28 | +## - create a `github-server-tls-cert` volume containing the certificate |
| 29 | +## specified in `certificateFrom` |
| 30 | +## - mount that volume on path `runnerMountPath`/{certificate name} |
| 31 | +## - set NODE_EXTRA_CA_CERTS environment variable to that same path |
| 32 | +## - set RUNNER_UPDATE_CA_CERTS environment variable to "1" (as of version |
| 33 | +## 2.303.0 this will instruct the runner to reload certificates on the host) |
| 34 | +## |
| 35 | +## If any of the above had already been set by the user in the runner pod |
| 36 | +## template, ARC will observe those and not overwrite them. |
| 37 | +## Example configuration: |
| 38 | +# |
| 39 | +# githubServerTLS: |
| 40 | +# certificateFrom: |
| 41 | +# configMapKeyRef: |
| 42 | +# name: config-map-name |
| 43 | +# key: ca.crt |
| 44 | +# runnerMountPath: /usr/local/share/ca-certificates/ |
| 45 | + |
| 46 | +## Container mode is an object that provides out-of-box configuration |
| 47 | +## for dind and kubernetes mode. Template will be modified as documented under the |
| 48 | +## template object. |
| 49 | +## |
| 50 | +## If any customization is required for dind or kubernetes mode, containerMode should remain |
| 51 | +## empty, and configuration should be applied to the template. |
| 52 | +containerMode: |
| 53 | + type: "dind" ## type can be set to dind or kubernetes |
| 54 | +# ## the following is required when containerMode.type=kubernetes |
| 55 | +# kubernetesModeWorkVolumeClaim: |
| 56 | +# accessModes: ["ReadWriteOnce"] |
| 57 | +# # For local testing, use https://github.com/openebs/dynamic-localpv-provisioner/blob/develop/docs/quickstart.md to provide dynamic provision volume with storageClassName: openebs-hostpath |
| 58 | +# storageClassName: "dynamic-blob-storage" |
| 59 | +# resources: |
| 60 | +# requests: |
| 61 | +# storage: 1Gi |
| 62 | +# kubernetesModeServiceAccount: |
| 63 | +# annotations: |
| 64 | + |
| 65 | +## template is the PodSpec for each listener Pod |
| 66 | +## For reference: https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec |
| 67 | +listenerTemplate: |
| 68 | + spec: |
| 69 | + tolerations: |
| 70 | + - effect: NoSchedule |
| 71 | + key: node-role.kubernetes.io/control-plane |
| 72 | + # Node affinity is used to force cluster-autoscaler to stick |
| 73 | + # to the master node. This allows the cluster to reliably downscale |
| 74 | + # to zero worker nodes when needed. |
| 75 | + affinity: |
| 76 | + nodeAffinity: |
| 77 | + requiredDuringSchedulingIgnoredDuringExecution: |
| 78 | + nodeSelectorTerms: |
| 79 | + - matchExpressions: |
| 80 | + - key: node-role.kubernetes.io/control-plane |
| 81 | + operator: Exists |
| 82 | + containers: |
| 83 | + - name: listener |
| 84 | + securityContext: |
| 85 | + runAsUser: 1000 |
| 86 | +# containers: |
| 87 | +# # Use this section to append additional configuration to the listener container. |
| 88 | +# # If you change the name of the container, the configuration will not be applied to the listener, |
| 89 | +# # and it will be treated as a side-car container. |
| 90 | +# - name: listener |
| 91 | +# securityContext: |
| 92 | +# runAsUser: 1000 |
| 93 | +# # Use this section to add the configuration of a side-car container. |
| 94 | +# # Comment it out or remove it if you don't need it. |
| 95 | +# # Spec for this container will be applied as is without any modifications. |
| 96 | +# - name: side-car |
| 97 | +# image: example-sidecar |
| 98 | + |
| 99 | +## template is the PodSpec for each runner Pod |
| 100 | +## For reference: https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec |
| 101 | +template: |
| 102 | + ## template.spec will be modified if you change the container mode |
| 103 | + ## with containerMode.type=dind, we will populate the template.spec with following pod spec |
| 104 | + ## template: |
| 105 | + ## spec: |
| 106 | + ## initContainers: |
| 107 | + ## - name: init-dind-externals |
| 108 | + ## image: ghcr.io/actions/actions-runner:latest |
| 109 | + ## command: ["cp", "-r", "-v", "/home/runner/externals/.", "/home/runner/tmpDir/"] |
| 110 | + ## volumeMounts: |
| 111 | + ## - name: dind-externals |
| 112 | + ## mountPath: /home/runner/tmpDir |
| 113 | + ## containers: |
| 114 | + ## - name: runner |
| 115 | + ## image: ghcr.io/actions/actions-runner:latest |
| 116 | + ## command: ["/home/runner/run.sh"] |
| 117 | + ## env: |
| 118 | + ## - name: DOCKER_HOST |
| 119 | + ## value: unix:///run/docker/docker.sock |
| 120 | + ## volumeMounts: |
| 121 | + ## - name: work |
| 122 | + ## mountPath: /home/runner/_work |
| 123 | + ## - name: dind-sock |
| 124 | + ## mountPath: /run/docker |
| 125 | + ## readOnly: true |
| 126 | + ## - name: dind |
| 127 | + ## image: docker:dind |
| 128 | + ## args: |
| 129 | + ## - dockerd |
| 130 | + ## - --host=unix:///run/docker/docker.sock |
| 131 | + ## - --group=$(DOCKER_GROUP_GID) |
| 132 | + ## env: |
| 133 | + ## - name: DOCKER_GROUP_GID |
| 134 | + ## value: "123" |
| 135 | + ## securityContext: |
| 136 | + ## privileged: true |
| 137 | + ## volumeMounts: |
| 138 | + ## - name: work |
| 139 | + ## mountPath: /home/runner/_work |
| 140 | + ## - name: dind-sock |
| 141 | + ## mountPath: /run/docker |
| 142 | + ## - name: dind-externals |
| 143 | + ## mountPath: /home/runner/externals |
| 144 | + ## volumes: |
| 145 | + ## - name: work |
| 146 | + ## emptyDir: {} |
| 147 | + ## - name: dind-sock |
| 148 | + ## emptyDir: {} |
| 149 | + ## - name: dind-externals |
| 150 | + ## emptyDir: {} |
| 151 | + ###################################################################################################### |
| 152 | + ## with containerMode.type=kubernetes, we will populate the template.spec with following pod spec |
| 153 | + ## template: |
| 154 | + ## spec: |
| 155 | + ## containers: |
| 156 | + ## - name: runner |
| 157 | + ## image: ghcr.io/actions/actions-runner:latest |
| 158 | + ## command: ["/home/runner/run.sh"] |
| 159 | + ## env: |
| 160 | + ## - name: ACTIONS_RUNNER_CONTAINER_HOOKS |
| 161 | + ## value: /home/runner/k8s/index.js |
| 162 | + ## - name: ACTIONS_RUNNER_POD_NAME |
| 163 | + ## valueFrom: |
| 164 | + ## fieldRef: |
| 165 | + ## fieldPath: metadata.name |
| 166 | + ## - name: ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER |
| 167 | + ## value: "true" |
| 168 | + ## volumeMounts: |
| 169 | + ## - name: work |
| 170 | + ## mountPath: /home/runner/_work |
| 171 | + ## volumes: |
| 172 | + ## - name: work |
| 173 | + ## ephemeral: |
| 174 | + ## volumeClaimTemplate: |
| 175 | + ## spec: |
| 176 | + ## accessModes: [ "ReadWriteOnce" ] |
| 177 | + ## storageClassName: "local-path" |
| 178 | + ## resources: |
| 179 | + ## requests: |
| 180 | + ## storage: 1Gi |
| 181 | + spec: |
| 182 | + containers: |
| 183 | + - name: runner |
| 184 | + image: ghcr.io/cncf/external-gha-runner:main |
| 185 | + imagePullPolicy: Always |
| 186 | + command: ["/home/runner/run.sh"] |
| 187 | + resources: |
| 188 | + requests: |
| 189 | + memory: 56Gi |
| 190 | + cpu: 16 |
| 191 | + limits: |
| 192 | + memory: 60Gi |
| 193 | + cpu: 20 |
| 194 | + - name: dind |
| 195 | + image: docker:dind |
| 196 | + args: |
| 197 | + - dockerd |
| 198 | + - --host=unix:///run/docker/docker.sock |
| 199 | + - --group=$(DOCKER_GROUP_GID) |
| 200 | + - --mtu=1400 |
| 201 | + - --default-network-opt=bridge=com.docker.network.driver.mtu=1400 |
| 202 | + env: |
| 203 | + - name: DOCKER_GROUP_GID |
| 204 | + value: "123" |
| 205 | + securityContext: |
| 206 | + privileged: true |
| 207 | + volumeMounts: |
| 208 | + - name: work |
| 209 | + mountPath: /home/runner/_work |
| 210 | + - name: dind-sock |
| 211 | + mountPath: /run/docker |
| 212 | + - name: dind-externals |
| 213 | + mountPath: /home/runner/externals |
| 214 | + volumes: |
| 215 | + - name: work |
| 216 | + emptyDir: {} |
| 217 | + # We need to assume the DIND socket volumes are being provided |
| 218 | + # This is because Helm + Argo is busted :) The previous values won't work properly |
| 219 | + |
| 220 | +## Optional controller service account that needs to have required Role and RoleBinding |
| 221 | +## to operate this gha-runner-scale-set installation. |
| 222 | +## The helm chart will try to find the controller deployment and its service account at installation time. |
| 223 | +## In case the helm chart can't find the right service account, you can explicitly pass in the following value |
| 224 | +## to help it finish RoleBinding with the right service account. |
| 225 | +## Note: if your controller is installed to only watch a single namespace, you have to pass these values explicitly. |
| 226 | +# controllerServiceAccount: |
| 227 | +# namespace: arc-system |
| 228 | +# name: test-arc-gha-runner-scale-set-controller |
0 commit comments