Развертывание масштабируемого набора runner
Чтобы развернуть масштабируемый набор runner, необходимо иметь ARC и запустить его. Дополнительные сведения см. в разделеКраткое руководство по контроллеру запуска действий.
Масштабируемые наборы runner можно развернуть с диаграммами Helm arc или развернуть необходимые манифесты. Использование диаграмм Helm ARC является предпочтительным методом, особенно если у вас нет предыдущего опыта использования ARC.
Примечание.
- Рекомендуется создать модули pod runner в другом пространстве имен, отличном от пространства имен, содержащего модули pod оператора.
- В качестве рекомендации по обеспечению безопасности создайте секреты Kubernetes и передайте ссылки на секреты. Передача секретов в виде обычного текста через CLI может представлять угрозу безопасности.
- Рекомендуется выполнять рабочие нагрузки в изоляции. Рабочие процессы GitHub Actions предназначены для выполнения произвольного кода и использования общего кластера Kubernetes для рабочих нагрузок может представлять угрозу безопасности.
- Убедитесь, что вы реализовали способ сбора и хранения журналов из контроллера, прослушивателей и временных бегуников.
-
Чтобы настроить масштабируемый набор runner, выполните следующую команду в терминале, используя значения из конфигурации ARC.
При выполнении команды помните следующее.
-
INSTALLATION_NAMEТщательно обновите значение. Имя установки будет использоваться в качестве значенияruns-onв рабочих процессах. -
NAMESPACEОбновите значение до расположения, в которое нужно создать модули pod runner. -
GITHUB_CONFIG_URLЗадайте значение URL-адрес репозитория, организации или предприятия. Это сущность, к которой будут принадлежать средства выполнения. -
В этом примере команда устанавливает последнюю версию диаграммы Helm. Чтобы установить определенную версию, можно передать
--versionаргумент с версией диаграммы, которую вы хотите установить. Список выпусков можно найти в репозиторииactions-runner-controller.Bash INSTALLATION_NAME="arc-runner-set" NAMESPACE="arc-runners" GITHUB_CONFIG_URL="http(s)://<HOSTNAME>/<'enterprises/your_enterprise'/'org'/'org/repo'>" GITHUB_PAT="<PAT>" helm install "${INSTALLATION_NAME}" \ --namespace "${NAMESPACE}" \ --create-namespace \ --set githubConfigUrl="${GITHUB_CONFIG_URL}" \ --set githubConfigSecret.github_token="${GITHUB_PAT}" \ oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-setINSTALLATION_NAME="arc-runner-set" NAMESPACE="arc-runners" GITHUB_CONFIG_URL="http(s)://<HOSTNAME>/<'enterprises/your_enterprise'/'org'/'org/repo'>" GITHUB_PAT="<PAT>" helm install "${INSTALLATION_NAME}" \ --namespace "${NAMESPACE}" \ --create-namespace \ --set githubConfigUrl="${GITHUB_CONFIG_URL}" \ --set githubConfigSecret.github_token="${GITHUB_PAT}" \ oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-setДополнительные параметры конфигурации Helm см
values.yaml. в репозитории ARC.
-
-
Чтобы проверить установку, выполните следующую команду в терминале.
Bash helm list -A
helm list -AДолжен отобразиться похожий результат:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION arc arc-systems 1 2023-04-12 11:45:59.152090536 +0000 UTC deployed gha-runner-scale-set-controller-0.4.0 0.4.0 arc-runner-set arc-systems 1 2023-04-12 11:46:13.451041354 +0000 UTC deployed gha-runner-scale-set-0.4.0 0.4.0 -
Чтобы проверить модуль pod диспетчера, выполните следующую команду в терминале.
Bash kubectl get pods -n arc-systems
kubectl get pods -n arc-systemsЕсли установка выполнена успешно, модули pod будут отображать
Runningсостояние.NAME READY STATUS RESTARTS AGE arc-gha-runner-scale-set-controller-594cdc976f-m7cjs 1/1 Running 0 64s arc-runner-set-754b578d-listener 1/1 Running 0 12s
Если установка не прошла успешно, см. сведения об устранении неполадок в AUTOTITLE .
Использование дополнительных параметров конфигурации
Arc предлагает несколько дополнительных параметров конфигурации.
Настройка имени масштабируемого набора runner
Примечание.
Имена масштабируемых наборов runner уникальны в группе runner, к которой они относятся. Если вы хотите развернуть несколько масштабируемых наборов runner с одинаковым именем, они должны принадлежать разным группам runner.
Чтобы настроить имя масштабируемого набора runner, можно определитьINSTALLATION_NAME или задать значениеrunnerScaleSetName в копииvalues.yaml файла.
## The name of the runner scale set to create, which defaults to the Helm release name
runnerScaleSetName: "my-runners"
Обязательно передайтеvalues.yaml файл в командеhelm install . Дополнительные сведения см. вдокументации по установке Helm.
Выбор назначений runner
Масштабируемые наборы runner можно развертывать на уровне репозитория, организации или предприятия.
Чтобы развернуть масштабируемые наборы runner на определенном уровне, задайте значениеgithubConfigUrl в копииvalues.yaml url-адреса репозитория, организации или предприятия.
В следующем примере показано, как настроить ARC для добавления модулей runner вocto-org/octo-repo.
githubConfigUrl: "http(s)://<HOSTNAME>/<'enterprises/your_enterprise'/'org'/'org/repo'>"
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Использование GitHub App для проверки подлинности
Если вы не используете средства выполнения корпоративного уровня, можно использовать GitHub Apps для проверки подлинности с помощью API GitHub. Дополнительные сведения см. в разделеПроверка подлинности ARC в API GitHub.
Примечание.
Учитывая риск безопасности, связанный с предоставлением закрытого ключа в виде обычного текста в файле на диске, рекомендуется создать секрет Kubernetes и передать ссылку.
Вы можете создать секрет Kubernetes или указать значения вvalues.yaml файле.
Вариант 1. Создание секрета Kubernetes (рекомендуется)
После создания GitHub Appсоздайте секрет Kubernetes и передайте ссылку на этот секрет в копииvalues.yaml файла.
Примечание.
Создайте секрет в том же пространстве имен, где установлена диаграмма gha-runner-scale-set . В этом примере пространство имен соответствует arc-runners документации по краткому руководству. Дополнительные сведения см. в разделе Краткое руководство по контроллеру запуска действий.
kubectl create secret generic pre-defined-secret \
--namespace=arc-runners \
--from-literal=github_app_id=123456 \
--from-literal=github_app_installation_id=654321 \
--from-file=github_app_private_key=private-key.pem
В копии передаваемого имени секретаvalues.yaml в качестве ссылки.
githubConfigSecret: pre-defined-secret
Вариант 2. Указание значений вvalues.yaml файле
Кроме того, можно указать значенияapp_idиinstallation_id``private_key в копииvalues.yaml файла.
## githubConfigSecret is the Kubernetes secret to use when authenticating with GitHub API.
## You can choose to use a GitHub App or a personal access token (classic)
githubConfigSecret:
## GitHub Apps Configuration
## IDs must be strings, use quotes
github_app_id: "123456"
github_app_installation_id: "654321"
github_app_private_key: |
-----BEGIN RSA PRIVATE KEY-----
...
HkVN9...
...
-----END RSA PRIVATE KEY-----
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Управление доступом с помощью групп runner
Группы runner можно использовать для управления доступом организаций или репозиториев к масштабируемым наборам runner. Дополнительные сведения о группах runner см. в разделеУправление доступом к самостоятельно размещенным средствам выполнения с помощью групп.
Чтобы добавить масштабируемый набор runner в группу runner, необходимо создать группу runner. Затем задайтеrunnerGroup свойство в копииvalues.yaml файла. В следующем примере добавляется масштабируемый набор runner в группу runner Octo-Group.
runnerGroup: "Octo-Group"
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Настройка исходящего прокси-сервера
Чтобы принудительно использовать HTTP-трафик для контроллера и runners, чтобы пройти через исходящий прокси-сервер, задайте следующие свойства в диаграмме Helm.
proxy:
http:
url: http://proxy.com:1234
credentialSecretRef: proxy-auth # a Kubernetes secret with `username` and `password` keys
http:
url: http://proxy.com:1234
credentialSecretRef: proxy-auth # a Kubernetes secret with `username` and `password` keys
noProxy:
- example.com
- example.org
ARC поддерживает использование анонимных или прошедших проверку подлинности прокси-серверов. Если вы используете прокси-серверы, прошедшие проверку подлинности, необходимо задатьcredentialSecretRef значение для ссылки на секрет Kubernetes. Вы можете создать секрет с учетными данными прокси-сервера с помощью следующей команды.
Примечание.
Создайте секрет в том же пространстве имен, где установлена диаграмма gha-runner-scale-set . В этом примере пространство имен соответствует arc-runners документации по краткому руководству. Дополнительные сведения см. в разделе Краткое руководство по контроллеру запуска действий.
kubectl create secret generic proxy-auth \
--namespace=arc-runners \
--from-literal=username=proxyUsername \
--from-literal=password=proxyPassword \
kubectl create secret generic proxy-auth \
--namespace=arc-runners \
--from-literal=username=proxyUsername \
--from-literal=password=proxyPassword \
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Установка максимального и минимального количества бегуных средств
maxRunners СвойстваminRunners предоставляют широкий спектр параметров для настройки настройки ARC.
Примечание.
Arc не поддерживает запланированные максимальные и минимальные конфигурации. Вы можете использовать задание cron или любое другое решение планирования для обновления конфигурации по расписанию.
Пример: несвязанное количество бегущего
Если вы закомментируете обаmaxRunners свойства,minRunners ARC будет масштабироваться до количества заданий, назначенных масштабируемому набору runner, и будет масштабироваться до 0, если нет активных заданий.
## maxRunners is the max number of runners the auto scaling runner set will scale up to.
# maxRunners: 0
## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
# minRunners: 0
Пример: минимальное количество бегунух
Свойство можно задатьminRunners для любого числа, и ARC всегда будет указано указанное число активных и доступных для выполнения заданий, назначенных масштабируемому набору runner.
## maxRunners is the max number of runners the auto scaling runner set will scale up to.
# maxRunners: 0
## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 20
Пример. Установка максимального и минимального количества средств выполнения
В этой конфигурации Actions Runner Controller будет масштабироваться до максимального количества30 средств выполнения и будет уменьшаться до20 запуска при завершении заданий.
Примечание.
Значение никогдаminRunners не может превышатьmaxRunnersзначение , еслиmaxRunners только не закомментировано.
## maxRunners is the max number of runners the auto scaling runner set will scale up to.
maxRunners: 30
## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 20
Пример: очистка очередей заданий
В некоторых сценариях может потребоваться очистить очередь заданий, чтобы устранить проблему или выполнить обслуживание в кластере. Если для обоих свойств задано значение0,Actions Runner Controller не создаст новые модули pod runner при наличии и назначении новых заданий.
## maxRunners is the max number of runners the auto scaling runner set will scale up to.
maxRunners: 0
## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 0
Пользовательские сертификаты TLS
Примечание.
Если вы используете пользовательский образ runner, который не основан на дистрибутивеDebian , следующие инструкции не будут работать.
Для некоторых сред требуются сертификаты TLS, подписанные пользовательским центром сертификации (ЦС). Так как пользовательские сертификаты центра сертификации не упаковываются с контейнерами контроллера или runner, их необходимо внедрить в соответствующие хранилища доверия.
githubServerTLS:
certificateFrom:
configMapKeyRef:
name: config-map-name
key: ca.crt
runnerMountPath: /usr/local/share/ca-certificates/
При этом убедитесь, что вы используете формат расширенной почты конфиденциальности (PEM) и расширение сертификата.crt. Все остальное будет игнорироваться.
Контроллер выполняет следующие действия.
- Создает том, содержащий сертификат, указанный
github-server-tls-certвcertificateFrom. - Подключает этот том по пути
runnerMountPath/<certificate name>. NODE_EXTRA_CA_CERTSЗадает переменную среды таким же путем.- Задает для переменной
RUNNER_UPDATE_CA_CERTSсреды значение1(по состоянию на версию2.303.0), что поручает средству выполнения перезагрузить сертификаты на узле.
Arc наблюдает значения, заданные в шаблоне pod runner, и не перезаписывает их.
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Использование частного реестра контейнеров
Предупреждение
Этот параметр настройки Actions Runner Controller может находиться вне области действия, с которым может помочь Служба поддержки GitHub и может привести к непредвиденному поведению при неправильной настройке.
Дополнительные сведения о том, с какими данными variables.contact.github_support %} можно воспользоваться, см. в разделе Поддержка контроллера запуска действий.
Чтобы использовать частный реестр контейнеров, можно скопировать образ контроллера и образ runner в частный реестр контейнеров. Затем настройте ссылки на эти изображения и задайтеimagePullPolicy``imagePullSecrets значения.
Настройка образа контроллера
Вы можете обновить копиюvalues.yaml файла и задатьimage свойства следующим образом.
image:
repository: "custom-registry.io/gha-runner-scale-set-controller"
pullPolicy: IfNotPresent
# Overrides the image tag whose default is the chart appVersion.
tag: "0.4.0"
imagePullSecrets:
- name: <registry-secret-name>
Контейнер прослушивателя наследует определенныйimagePullPolicy для контроллера.
Настройка образа runner
Вы можете обновить копиюvalues.yaml файла и задатьtemplate.spec свойства, чтобы настроить модуль pod runner для конкретного варианта использования.
Примечание.
Контейнер runner должен быть названrunner. В противном случае оно не будет правильно настроено для подключения к GitHub.
Ниже приведен пример конфигурации:
template:
spec:
containers:
- name: runner
image: "custom-registry.io/actions-runner:latest"
imagePullPolicy: Always
command: ["/home/runner/run.sh"]
imagePullSecrets:
- name: <registry-secret-name>
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Обновление спецификации pod для модуля runner
Предупреждение
Этот параметр настройки Actions Runner Controller может находиться вне области действия, с которым может помочь Служба поддержки GitHub и может привести к непредвиденному поведению при неправильной настройке.
Дополнительные сведения о том, с какими данными variables.contact.github_support %} можно воспользоваться, см. в разделе Поддержка контроллера запуска действий.
Вы можете полностью настроить PodSpec модуля pod runner, и контроллер будет применять указанную конфигурацию. Ниже приведен пример спецификации pod.
template:
spec:
containers:
- name: runner
image: ghcr.io/actions/actions-runner:latest
command: ["/home/runner/run.sh"]
resources:
limits:
cpu: 500m
memory: 512Mi
securityContext:
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
capabilities:
add:
- NET_ADMIN
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Обновление спецификации pod для модуля прослушивателя
Предупреждение
Этот параметр настройки Actions Runner Controller может находиться вне области действия, с которым может помочь Служба поддержки GitHub и может привести к непредвиденному поведению при неправильной настройке.
Дополнительные сведения о том, с какими данными variables.contact.github_support %} можно воспользоваться, см. в разделе Поддержка контроллера запуска действий.
Вы можете настроить PodSpec модуля pod прослушивателя, и контроллер будет применять указанную конфигурацию. Ниже приведен пример спецификации pod.
Примечание.
Важно не изменятьlistenerTemplate.spec.containers.name значение контейнера прослушивателя. В противном случае указанная конфигурация будет применена к новому контейнеру боковинка.
listenerTemplate:
spec:
containers:
# If you change the name of the container, the configuration will not be applied to the listener,
# and it will be treated as a sidecar container.
- name: listener
securityContext:
runAsUser: 1000
resources:
limits:
cpu: "1"
memory: 1Gi
requests:
cpu: "1"
memory: 1Gi
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Использование режима Docker in-Docker или Kubernetes для контейнеров
Предупреждение
Этот параметр настройки Actions Runner Controller может находиться вне области действия, с которым может помочь Служба поддержки GitHub и может привести к непредвиденному поведению при неправильной настройке.
Дополнительные сведения о том, с какими данными variables.contact.github_support %} можно воспользоваться, см. в разделе Поддержка контроллера запуска действий.
Если вы используете задания контейнеров и службы или действия контейнера, необходимо задатьcontainerMode значениеdind илиkubernetes. Чтобы использовать настраиваемый режим контейнера, закомментируйте или удалитеcontainerModeи добавьте нужную конфигурацию вtemplate раздел. См. раздел"Настройка режимов контейнера".
- Дополнительные сведения о заданиях и службах контейнеров см. в разделеВыполнение заданий в контейнере.
- Дополнительные сведения о действиях контейнера см. в разделеСоздание действия контейнера Docker.
Использование режима Docker в Docker
Примечание.
Для контейнера Docker в Docker требуется привилегированный режим. Дополнительные сведения см. в разделе"Настройка контекста безопасности" для pod или контейнера в документации Kubernetes.
По умолчаниюdind контейнер используетdocker:dind образ, который запускает управляющую программу Docker в качестве корневого элемента. Этот образdocker:dind-rootless можно заменить на если вы знаетеизвестные ограничения и запустить модули pod в--privileged режиме. Сведения о настройке конфигурации Docker в Docker см. в разделе"Настройка режимов контейнеров".
Режим Docker в Docker — это конфигурация, которая позволяет запускать Docker в контейнере Docker. В этой конфигурации для каждого созданного модуля pod runner ARC создает следующие контейнеры.
- Контейнер
init - Контейнер
runner - Контейнер
dind
Чтобы включить режим Docker в Docker, задайтеcontainerMode.type для этого значениеdind следующим образом.
containerMode:
type: "dind"
Онtemplate.spec будет обновлен до следующей конфигурации по умолчанию.
Для версий Kubernetes>= v1.29контейнер боковика будет использоваться для запуска управляющей программы Docker.
template:
spec:
initContainers:
- name: init-dind-externals
image: ghcr.io/actions/actions-runner:latest
command: ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
volumeMounts:
- name: dind-externals
mountPath: /home/runner/tmpDir
- name: dind
image: docker:dind
args:
- dockerd
- --host=unix:///var/run/docker.sock
- --group=$(DOCKER_GROUP_GID)
env:
- name: DOCKER_GROUP_GID
value: "123"
securityContext:
privileged: true
restartPolicy: Always
startupProbe:
exec:
command:
- docker
- info
initialDelaySeconds: 0
failureThreshold: 24
periodSeconds: 5
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /var/run
- name: dind-externals
mountPath: /home/runner/externals
containers:
- name: runner
image: ghcr.io/actions/actions-runner:latest
command: ["/home/runner/run.sh"]
env:
- name: DOCKER_HOST
value: unix:///var/run/docker.sock
- name: RUNNER_WAIT_FOR_DOCKER_IN_SECONDS
value: "120"
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /var/run
volumes:
- name: work
emptyDir: {}
- name: dind-sock
emptyDir: {}
- name: dind-externals
emptyDir: {}
Для версий Kubernetes< v1.29будет применена следующая конфигурация:
template:
spec:
initContainers:
- name: init-dind-externals
image: ghcr.io/actions/actions-runner:latest
command:
["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
volumeMounts:
- name: dind-externals
mountPath: /home/runner/tmpDir
containers:
- name: runner
image: ghcr.io/actions/actions-runner:latest
command: ["/home/runner/run.sh"]
env:
- name: DOCKER_HOST
value: unix:///var/run/docker.sock
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /var/run
- name: dind
image: docker:dind
args:
- dockerd
- --host=unix:///var/run/docker.sock
- --group=$(DOCKER_GROUP_GID)
env:
- name: DOCKER_GROUP_GID
value: "123"
securityContext:
privileged: true
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /var/run
- name: dind-externals
mountPath: /home/runner/externals
volumes:
- name: work
emptyDir: {}
- name: dind-sock
emptyDir: {}
- name: dind-externals
emptyDir: {}
Значения, введенныеtemplate.spec автоматически, не могут быть переопределены. Если вы хотите настроить эту настройку, необходимо отменить настройкуcontainerMode.type, а затем скопировать эту конфигурацию и применить ее непосредственно в копииvalues.yaml файла.
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Использование режима Kubernetes
В режиме Kubernetes ARC использует перехватчики контейнеров runner для создания модуля pod в том же пространстве имен для запуска службы, задания контейнера или действия.
Необходимые компоненты
Режим Kubernetes поддерживает два подхода к совместному использованию данных задания между модулем pod средства выполнения тестов и модулем pod задания контейнера. Вы можете использовать постоянные тома, которые остаются рекомендуемым вариантом для сценариев, требующих параллельного доступа на запись, или вы можете использовать обработчики жизненного цикла контейнера для восстановления и экспорта файловых систем заданий между модулями pod, не полагаясь на тома RWX. Подход «перехватчика» жизненного цикла повышает переносимость и производительность за счет использования локального хранилища и идеально подходит для кластеров без общего хранилища.
Настройка режима Kubernetes с постоянными томами
Чтобы использовать режим Kubernetes, необходимо создать постоянные тома, которые могут претендовать модули pod средства выполнения, и использовать решение, которое автоматически подготавливает эти тома по запросу. Для тестирования можно использовать такое решение, какOpenEBS.
Чтобы включить режим Kubernetes, задайтеcontainerMode.type значениеkubernetes вvalues.yaml файле.
containerMode:
type: "kubernetes"
kubernetesModeWorkVolumeClaim:
accessModes: ["ReadWriteOnce"]
storageClassName: "dynamic-blob-storage"
resources:
requests:
storage: 1Gi
Дополнительные параметры конфигурации Helm см values.yaml . в репозитории ARC.
Настройка режима Kubernetes с помощью хуков жизненного цикла контейнера
Чтобы включить режим Kubernetes с помощью хуков жизненного цикла контейнера, установите в файлеcontainerMode.type``values.yaml значениеkubernetes-novolume:
containerMode:
type: "kubernetes-novolume"
Примечание.
При использованииkubernetes-novolume mode контейнер должен выполняться как дляroot поддержки операций перехвата жизненного цикла.
Устранение неполадок в режиме Kubernetes
Если режим Kubernetes включен, рабочие процессы, не настроенные с заданием контейнера, завершаются ошибкой, аналогичной следующей:
Jobs without a job container are forbidden on this runner, please add a 'container:' to your job or contact your self-hosted runner administrator.
Чтобы разрешить выполнение заданий без контейнера заданий, установите значениеACTIONS_RUNNER_REQUIRE_JOB_CONTAINER``false в контейнере runner. Это указывает средству выполнения отключить эту проверку.
Предупреждение
Разрешение заданиям выполняться без контейнера в режимеkubernetes илиkubernetes-novolume в режиме может предоставить поду >runner повышенные привилегии с сервером API Kubernetes, включая возможность создания модулей pod и доступа к секретам. Прежде чем изменять это значение по умолчанию, рекомендуется внимательно изучить потенциальные последствия для безопасности.
template:
spec:
containers:
- name: runner
image: ghcr.io/actions/actions-runner:latest
command: ["/home/runner/run.sh"]
env:
- name: ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER
value: "false"
Настройка режимов контейнера
При настройкеcontainerMode``values.yaml файла дляgha-runner-scale-setдиаграммы helm можно использовать одно из следующих значений:
dindилиkubernetes
В зависимости от того, какое значение задано дляcontainerModeдиаграммы helm, конфигурация автоматически будет внедрена вtemplate разделvalues.yaml файлаgha-runner-scale-set .
- См. конфигурацию
dind. - См. конфигурацию
kubernetes.
Чтобы настроить спецификацию, закомментируйте или удалитеcontainerModeее и добавьте нужную конфигурацию вtemplate разделе.
Пример: выполнениеdind-rootless
Перед принятием решения о запускеdind-rootlessубедитесь, что вы знаете известныеограничения.
Для версий Kubernetes>= v1.29контейнер боковика будет использоваться для запуска управляющей программы Docker.
## githubConfigUrl is the GitHub url for where you want to configure runners
## ex: http://<HOSTNAME>/enterprises/my_enterprise or http://<HOSTNAME>/myorg
githubConfigUrl: "http://<HOSTNAME>/actions/actions-runner-controller"
## githubConfigSecret is the k8s secrets to use when auth with GitHub API.
## You can choose to use GitHub App or a PAT token
githubConfigSecret: my-super-safe-secret
## maxRunners is the max number of runners the autoscaling runner set will scale up to.
maxRunners: 5
## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 0
runnerGroup: "my-custom-runner-group"
## name of the runner scale set to create. Defaults to the helm release name
runnerScaleSetName: "my-awesome-scale-set"
## template is the PodSpec for each runner Pod
## For reference: http://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec
template:
spec:
initContainers:
- name: init-dind-externals
image: ghcr.io/actions/actions-runner:latest
command: ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
volumeMounts:
- name: dind-externals
mountPath: /home/runner/tmpDir
- name: init-dind-rootless
image: docker:dind-rootless
command:
- sh
- -c
- |
set -x
cp -a /etc/. /dind-etc/
echo 'runner:x:1001:1001:runner:/home/runner:/bin/ash' >> /dind-etc/passwd
echo 'runner:x:1001:' >> /dind-etc/group
echo 'runner:100000:65536' >> /dind-etc/subgid
echo 'runner:100000:65536' >> /dind-etc/subuid
chmod 755 /dind-etc;
chmod u=rwx,g=rx+s,o=rx /dind-home
chown 1001:1001 /dind-home
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /dind-etc
name: dind-etc
- mountPath: /dind-home
name: dind-home
- name: dind
image: docker:dind-rootless
args:
- dockerd
- --host=unix:///run/user/1001/docker.sock
env:
- name: DOCKER_HOST
value: unix:///run/user/1001/docker.sock
securityContext:
privileged: true
runAsUser: 1001
runAsGroup: 1001
restartPolicy: Always
startupProbe:
exec:
command:
- docker
- info
initialDelaySeconds: 0
failureThreshold: 24
periodSeconds: 5
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /run/user/1001
- name: dind-externals
mountPath: /home/runner/externals
- name: dind-etc
mountPath: /etc
- name: dind-home
mountPath: /home/runner
containers:
- name: runner
image: ghcr.io/actions/actions-runner:latest
command: ["/home/runner/run.sh"]
env:
- name: DOCKER_HOST
value: unix:///run/user/1001/docker.sock
securityContext:
privileged: true
runAsUser: 1001
runAsGroup: 1001
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /run/user/1001
volumes:
- name: work
emptyDir: {}
- name: dind-externals
emptyDir: {}
- name: dind-sock
emptyDir: {}
- name: dind-etc
emptyDir: {}
- name: dind-home
emptyDir: {}
Для версий Kubernetes< v1.29можно применить следующую конфигурацию:
## githubConfigUrl is the GitHub url for where you want to configure runners
## ex: http://<HOSTNAME>/enterprises/my_enterprise or http://<HOSTNAME>/myorg
githubConfigUrl: "http://<HOSTNAME>/actions/actions-runner-controller"
## githubConfigSecret is the k8s secrets to use when auth with GitHub API.
## You can choose to use GitHub App or a PAT token
githubConfigSecret: my-super-safe-secret
## maxRunners is the max number of runners the autoscaling runner set will scale up to.
maxRunners: 5
## minRunners is the min number of idle runners. The target number of runners created will be
## calculated as a sum of minRunners and the number of jobs assigned to the scale set.
minRunners: 0
runnerGroup: "my-custom-runner-group"
## name of the runner scale set to create. Defaults to the helm release name
runnerScaleSetName: "my-awesome-scale-set"
## template is the PodSpec for each runner Pod
## For reference: http://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#PodSpec
template:
spec:
initContainers:
- name: init-dind-externals
image: ghcr.io/actions/actions-runner:latest
command: ["cp", "-r", "/home/runner/externals/.", "/home/runner/tmpDir/"]
volumeMounts:
- name: dind-externals
mountPath: /home/runner/tmpDir
- name: init-dind-rootless
image: docker:dind-rootless
command:
- sh
- -c
- |
set -x
cp -a /etc/. /dind-etc/
echo 'runner:x:1001:1001:runner:/home/runner:/bin/ash' >> /dind-etc/passwd
echo 'runner:x:1001:' >> /dind-etc/group
echo 'runner:100000:65536' >> /dind-etc/subgid
echo 'runner:100000:65536' >> /dind-etc/subuid
chmod 755 /dind-etc;
chmod u=rwx,g=rx+s,o=rx /dind-home
chown 1001:1001 /dind-home
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /dind-etc
name: dind-etc
- mountPath: /dind-home
name: dind-home
containers:
- name: runner
image: ghcr.io/actions/actions-runner:latest
command: ["/home/runner/run.sh"]
env:
- name: DOCKER_HOST
value: unix:///run/user/1001/docker.sock
securityContext:
privileged: true
runAsUser: 1001
runAsGroup: 1001
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /run/user/1001
- name: dind
image: docker:dind-rootless
args:
- dockerd
- --host=unix:///run/user/1001/docker.sock
securityContext:
privileged: true
runAsUser: 1001
runAsGroup: 1001
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /run/user/1001
- name: dind-externals
mountPath: /home/runner/externals
- name: dind-etc
mountPath: /etc
- name: dind-home
mountPath: /home/runner
volumes:
- name: work
emptyDir: {}
- name: dind-externals
emptyDir: {}
- name: dind-sock
emptyDir: {}
- name: dind-etc
emptyDir: {}
- name: dind-home
emptyDir: {}
Общие сведения о runner-container-hooks
Когда средство выполнения обнаруживает выполнение рабочего процесса, использующего задание контейнера, контейнер службы или действие Docker, он вызовет runner-container-hooks для создания нового модуля pod. Средство выполнения использует средство runner-container-hooks для вызова API Kubernetes и создания модуля pod в том же пространстве имен, что и модуль pod runner. Этот созданный модуль pod будет использоваться для запуска задания контейнера, контейнера службы или действия Docker. Дополнительные сведения см. в репозиторииrunner-container-hooks.
Настройка расширений перехватчика
По состоянию на ARC версии 0.4.0 runner-container-hooks поддерживает расширения перехватчиков. Их можно использовать для настройки модуля pod, созданного с помощью runner-container-hooks. Например, можно использовать расширение перехватчика для задания контекста безопасности в модуле pod. Расширения перехватчика позволяют указать YAML-файл, который используется для обновленияPodSpec модуля pod, созданного runner-container-hooks.
Существует два варианта настройки расширений перехватчика.
- Храните впользовательском образе бегуна. Вы можете хранить PodSpec в файле YAML в любом месте пользовательского образа runner. Дополнительные сведения см. в разделеКонтроллер runner действий.
- Храните вConfigMap. Вы можете создать карту конфигурации с помощью PodSpec и подключить эту карту конфигурации в контейнере runner. Дополнительные сведения см. в разделе ConfigMaps в документации по Kubernetes.
Примечание.
При использовании обоих параметров необходимо задатьACTIONS_RUNNER_CONTAINER_HOOK_TEMPLATE переменную среды в спецификации контейнера runner, чтобы указать путь к файлу YAML, подключенному в контейнере runner.
Пример. Использование карты конфигурации для задания securityContext
Создайте карту конфигурации в том же пространстве имен, что и модули pod runner. Например:
apiVersion: v1
kind: ConfigMap
metadata:
name: hook-extension
namespace: arc-runners
data:
content: |
metadata:
annotations:
example: "extension"
spec:
containers:
- name: "$job" # Target the job container
securityContext:
runAsUser: 1000
.metadata.labelsПоляmetadata.annotationsбудут добавлены как есть, если их ключи не зарезервированы. Невозможно переопределить.metadata.nameполя иmetadata.namespaceполя.- Большинство полей PodSpec применяются из указанного шаблона и переопределяют значения, передаваемые из файла диаграммы
values.yamlHelm. - Если указать дополнительные тома, они будут добавлены к томам по умолчанию, указанным в средстве выполнения.
- Они
spec.containersобъединяются на основе имен, назначенных им.- Если имя контейнера :
$jobspec.containers.nameПоляspec.containers.imageигнорируются.spec.containers.envПоляspec.containers.volumeMountsиspec.containers.portsполя добавляются к спецификации контейнера по умолчанию, созданной перехватчиком.- Остальные поля применяются, как указано.
- Если имя контейнера не
$jobзадано, поля будут добавлены в определение pod по мере их использования.
- Если имя контейнера :
Включение метрик
Примечание.
Метрики для ARC доступны в версии gha-runner-scale-set-0.5.0.
Arc может выдавать метрики о бегунах, заданиях и времени, потраченных на выполнение рабочих процессов. Метрики можно использовать для выявления перегрузки, мониторинга работоспособности развертывания ARC, визуализации тенденций использования, оптимизации потребления ресурсов, среди многих других вариантов использования. Метрики создаются диспетчером контроллеров и модулями прослушивателя в формате Prometheus. Дополнительные сведения см. в форматах экспозиций в документации Prometheus.
Чтобы включить метрики для ARC, настройтеmetrics свойство вvalues.yamlфайлеgha-runner-scale-set-controller диаграммы.
Ниже приведен пример конфигурации.
metrics:
controllerManagerAddr: ":8080"
listenerAddr: ":8080"
listenerEndpoint: "/metrics"
Примечание.
metrics: Если объект не указан или закомментирован, к модулям pod controller-manager и прослушивателям будут применены следующие флаги с пустыми значениями:--metrics-addr,--listener-metrics-addr.--listener-metrics-endpoint Это отключает метрики для ARC.
После настройки этих свойств диспетчер контроллера и модули pod прослушивателя выдают метрики через прослушивательEndpoint, привязанные к портам, указанным вvalues.yaml файле. В приведенном выше примере конечная точка находится/metrics и порт:8080. Эту конечную точку можно использовать для очистки метрик из модулей pod диспетчера контроллера и прослушивателя.
Чтобы отключить метрики, обновитеvalues.yamlфайл, удалив или закомментируяmetrics: объект и его свойства.
Доступные метрики для ARC
В следующей таблице показаны метрики, создаваемые модулями pod диспетчера контроллера и прослушивателя.
Примечание.
Метрики, которые диспетчер контроллера выдает, относятся к среде выполнения контроллера и не принадлежат GitHub.
| Ответственный | Метрические ед. | Тип | Описание |
|---|---|---|---|
| контроллер-менеджер | gha_controller_pending_ephemeral_runners | датчик | Число эфемерных запусков в состоянии ожидания |
| контроллер-менеджер | gha_controller_running_ephemeral_runners | датчик | Число эфемерных запусков в состоянии выполнения |
| контроллер-менеджер | gha_controller_failed_ephemeral_runners | датчик | Число эфемерных бегун в состоянии сбоя |
| контроллер-менеджер | gha_controller_running_listeners | датчик | Количество прослушивателей в состоянии выполнения |
| только чтения | gha_assigned_jobs | датчик | Количество заданий, назначенных масштабируемой группе runner |
| только чтения | gha_running_jobs | датчик | Количество выполняемых или очередных заданий для выполнения |
| только чтения | gha_registered_runners | датчик | Число модулей выполнения, зарегистрированных масштабируемым набором runner |
| только чтения | gha_busy_runners | датчик | Число зарегистрированных запусков, выполняющих задание в настоящее время |
| только чтения | gha_min_runners | датчик | Минимальное количество модулей выполнения, настроенных для масштабируемого набора runner |
| только чтения | gha_max_runners | датчик | Максимальное количество модулей выполнения, настроенных для масштабируемого набора runner |
| только чтения | gha_desired_runners | датчик | Число нужных средств выполнения (увеличение или уменьшение целевого объекта) масштабируемым набором runner |
| только чтения | gha_idle_runners | датчик | Число зарегистрированных runners, не выполняющих задание |
| только чтения | gha_started_jobs_total | людей Irisys | Общее количество заданий, запущенных после того, как прослушиватель стал готов[1] |
| только чтения | gha_completed_jobs_total | людей Irisys | Общее количество заданий, завершенных после того, как прослушиватель стал готов[1] |
| только чтения | gha_job_startup_duration_seconds | histogram | Количество секунд, затраченных на запуск задания рабочего процесса, принадлежавшего масштабируемой группе runner |
| только чтения | gha_job_execution_duration_seconds | histogram | Количество секунд, затраченных на выполнение заданий рабочего процесса масштабируемым набором runner |
[1]: Listener metrics that have the counter type are reset when the listener pod restarts.
Использование ARC с Dependabot и code scanning
Вы можете использовать Actions Runner Controller для создания выделенных модулей выполнения для экземпляра GitHub Enterprise Server, который Dependabot может использовать для защиты и поддержания зависимостей, используемых в репозиториях на предприятии. Дополнительные сведения см. в разделеУправление локальными средствами выполнения для обновлений Dependabot в вашем предприятии.
Вы также можете использовать ARC с CodeQL для выявления уязвимостей и ошибок в коде. Дополнительные сведения см. в разделеО проверке кода с помощью CodeQL. Если вы уже используете code scanning и хотите настроить масштабируемый набор runner для использования настройки по умолчанию, задайте.INSTALLATION_NAME=code-scanning Дополнительные сведения о настройке code scanning по умолчанию см. в разделеНастройка настройки по умолчанию для сканирования кода.
Actions Runner Controller не использует несколько меток для маршрутизации заданий в определенные масштабируемые наборы runner. Вместо этого, чтобы назначить масштабируемый набор runner для Dependabot или code scanning с CodeQL, используйте описательное имя установки в диаграмме Helm, напримерdependabot илиcode-scanning. Затем можно задатьruns-on значение в рабочих процессах в качестве одной метки и использовать назначенный масштабируемый набор runner для обновлений Dependabot или заданий code scanning .
Если вы используете настройку по умолчанию для code scanning, анализ будет автоматически искать масштабируемый набор runner с именемcode-scanning установки .
Примечание.
Действие Dependabot используется для запуска обновлений Dependabot с помощью GitHub Actions. Для этого действия требуется Docker в качестве зависимости. По этой причине можно использовать только Actions Runner Controller с Dependabot при включении режима Docker в Docker (DinD). Дополнительные сведения см. в разделе[AUTOTITLE иУправление локальными средствами выполнения для обновлений Dependabot в вашем предприятии](/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/deploying-runner-scale-sets-with-actions-runner-controller#using-docker-in-docker-or-kubernetes-mode-for-containers).
Обновление ARC
Так как нет поддержки обновления или удаления CRD с Helm, невозможно использовать Helm для обновления ARC. Дополнительные сведения см. в разделе "Пользовательские определения ресурсов" в документации Helm. Чтобы обновить ARC до более новой версии, необходимо выполнить следующие действия.
- Удалите все установки
gha-runner-scale-set. - Дождитесь очистки ресурсов.
- Удалите ARC.
- При изменении crDs из установленной версии до обновленной версии удалите все crD, связанные с
actions.github.comгруппой API. - Переустановите ARC еще раз.
Дополнительные сведения см. в разделе"Развертывание масштабируемого набора runner".
Если вы хотите обновить ARC, но обеспокоены временем простоя, вы можете развернуть ARC в конфигурации высокой доступности, чтобы убедиться, что средства выполнения всегда доступны. Дополнительные сведения см. в разделе"Высокий уровень доступности" и "Автоматическая отработка отказа".
Примечание.
Переход отподдерживаемой сообществом версии ARC на поддерживаемую версию GitHub является существенным изменением архитектуры. Поддерживаемая версия GitHub включает в себя перепроектирование многих компонентов ARC. Это не дополнительное обновление программного обеспечения. По этим причинам рекомендуется сначала протестировать новые версии в промежуточной среде, которая соответствует рабочей среде. Это обеспечит стабильность и надежность установки перед развертыванием в рабочей среде.
Развертывание канарского образа
Перед выпуском функций можно протестировать с помощью канарной версии образа контейнера диспетчера контроллера. Канареарные изображения публикуются с форматомcanary-SHORT_SHAтега. Дополнительные сведения смgha-runner-scale-set-controller . в разделе Container registry.
Примечание.
- В локальной файловой системе необходимо использовать диаграммы Helm.
- Вы не можете использовать выпущенные диаграммы Helm.
tagОбновите файл контроллера-контроллераgha-runner-scale-set-controllervalues.yamlследующим образом:canary-SHORT_SHA- Обновите поле
appVersionвChart.yamlфайле следующимgha-runner-scale-setобразом:canary-SHORT_SHA - Повторно установите ARC с помощью обновленной диаграммы Helm и
values.yamlфайлов.
Высокий уровень доступности и автоматическая отработка отказа
Arc можно развернуть в конфигурации высокого уровня доступности (active-active). Если у вас есть два разных кластера Kubernetes, развернутые в отдельных регионах, можно развернуть ARC в обоих кластерах и настроить масштабируемые наборы runner для использования одного и того жеrunnerScaleSetName. Для этого каждый масштабируемый набор runner должен быть назначен отдельной группе runner. Например, можно иметь два масштабируемых набора runner, каждый из которых называетсяarc-runner-set, если один масштабируемый набор runner принадлежитrunner-group-A , а другой масштабируемый набор runner принадлежитrunner-group-B. Сведения о назначении масштабируемых наборов runner группам runner см. в разделеУправление доступом к самостоятельно размещенным средствам выполнения с помощью групп.
Если оба масштабируемых набора runner находятся в сети, задания, назначенные им, будут распределяться произвольно (раса назначения). Невозможно настроить алгоритм назначения заданий. Если один из кластеров выходит из строя, масштабируемый набор runner в другом кластере будет продолжать получать задания обычно без каких-либо изменений в настройке или вмешательства.
Использование ARC в разных организациях
Одна установка Actions Runner Controller позволяет настроить один или несколько масштабируемых наборов runner. Эти масштабируемые наборы запуска можно зарегистрировать в репозитории, организации или организации. Группы runner также можно использовать для управления границами разрешений этих масштабируемых наборов runner.
Рекомендуется создать уникальное пространство имен для каждой организации. Можно также создать пространство имен для каждой группы runner или каждого масштабируемого набора runner. Вы можете установить столько масштабируемых наборов runner, сколько необходимо в каждом пространстве имен. Это обеспечит максимально высокий уровень изоляции и улучшит безопасность. Для проверки подлинности можно использовать GitHub Apps и определять детализированные разрешения для каждого масштабируемого набора runner.
Юридическая информация
Части были адаптированы в соответствии с http://github.com/actions/actions-runner-controller/ лицензией Apache-2.0:
Copyright 2019 Moto Ishizawa
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.