Сведения о масштабируемых наборах runner
Масштабируемые наборы runner — это группа однородных модулей выполнения, которые могут быть назначены заданиями из GitHub Actions. Количество активных средств выполнения, принадлежащих масштабируемой группе runner, можно контролировать с помощью решений автоматического масштабирования runner, таких как Actions Runner Controller (ARC).
Группы runner можно использовать для управления масштабируемыми наборами runner. Аналогично локальным запускам, можно добавить масштабируемые наборы runner в существующие группы runner. Однако масштабируемые наборы runner могут принадлежать только одной группе runner за раз и могут назначать только одну метку. Дополнительные сведения о группах runner см. в разделе Управление доступом к самостоятельно размещенным средствам выполнения с помощью групп.
Чтобы назначить задания масштабируемой группе runner, необходимо настроить рабочий процесс для ссылки на имя масштабируемого набора runner. Дополнительные сведения см. в разделе Использование модулей runner контроллера runner в рабочем процессе.
Развертывание масштабируемого набора runner
Чтобы развернуть масштабируемый набор runner, необходимо иметь ARC и запустить его. Дополнительные сведения см. в разделе Краткое руководство по контроллеру запуска действий.
Масштабируемые наборы runner можно развернуть с диаграммами Helm arc или развернуть необходимые манифесты. Использование диаграмм Helm ARC является предпочтительным методом, особенно если у вас нет предыдущего опыта использования ARC.
Note
- Рекомендуется создать модули 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="https://github.com/<your_enterprise/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
INSTALLATION_NAME="arc-runner-set" NAMESPACE="arc-runners" GITHUB_CONFIG_URL="https://github.com/<your_enterprise/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
Note
Имена масштабируемых наборов 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: "https://github.com/octo-ent/octo-org/octo-repo"
Дополнительные параметры конфигурации Helm см values.yaml
. в репозитории ARC.
Использование GitHub App для проверки подлинности
Если вы не используете средства выполнения корпоративного уровня, можно использовать GitHub Apps для проверки подлинности с помощью API GitHub. Дополнительные сведения см. в разделе Проверка подлинности в API GitHub.
Note
Учитывая риск безопасности, связанный с предоставлением закрытого ключа в виде обычного текста в файле на диске, рекомендуется создать секрет Kubernetes и передать ссылку.
Вы можете создать секрет Kubernetes или указать значения в values.yaml
файле.
Вариант 1. Создание секрета Kubernetes (рекомендуется)
После создания GitHub Appсоздайте секрет Kubernetes и передайте ссылку на этот секрет в копии values.yaml
файла.
Note
Создайте секрет в том же пространстве имен, где установлена диаграмма 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
https:
url: http://proxy.com:1234
credentialSecretRef: proxy-auth # a Kubernetes secret with `username` and `password` keys
noProxy:
- example.com
- example.org
ARC поддерживает использование анонимных или прошедших проверку подлинности прокси-серверов. Если вы используете прокси-серверы, прошедшие проверку подлинности, необходимо задать credentialSecretRef
значение для ссылки на секрет Kubernetes. Вы можете создать секрет с учетными данными прокси-сервера с помощью следующей команды.
Note
Создайте секрет в том же пространстве имен, где установлена диаграмма 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.
Установка максимального и минимального количества бегуных средств
minRunners
Свойства maxRunners
предоставляют широкий спектр параметров для настройки настройки ARC.
Note
Arc не поддерживает запланированные максимальные и минимальные конфигурации. Вы можете использовать cronjob или любое другое решение планирования для обновления конфигурации по расписанию.
Пример: несвязанное количество бегущего
Если вы закомментируете оба 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
запуска при завершении заданий.
Note
Значение никогда 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
Note
Если вы используете пользовательский образ 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.
Использование частного реестра контейнеров
Warning
Этот параметр настройки 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
свойства следующим образом.
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
Warning
Этот параметр настройки 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 для модуля прослушивателя
Warning
Этот параметр настройки Actions Runner Controller может находиться вне области действия, с которым может помочь Служба поддержки GitHub и может привести к непредвиденному поведению при неправильной настройке.
Дополнительные сведения о том, с какими данными variables.contact.github_support %} можно воспользоваться, см. в разделе О поддержке контроллера запуска действий.
Вы можете настроить PodSpec модуля pod прослушивателя, и контроллер будет применять указанную конфигурацию. Ниже приведен пример спецификации pod.
Note
Важно не изменять 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 side-car 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 для контейнеров
Warning
Этот параметр настройки Actions Runner Controller может находиться вне области действия, с которым может помочь Служба поддержки GitHub и может привести к непредвиденному поведению при неправильной настройке.
Дополнительные сведения о том, с какими данными variables.contact.github_support %} можно воспользоваться, см. в разделе О поддержке контроллера запуска действий.
Если вы используете задания контейнеров и службы или действия контейнера, containerMode
то значение должно быть задано dind
или kubernetes
.
- Дополнительные сведения о заданиях и службах контейнеров см. в разделе Выполнение заданий в контейнере.
- Дополнительные сведения о действиях контейнера см. в разделе Создание действия контейнера Docker.
Использование режима Docker в Docker
Note
Для контейнера 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
будет обновлен до следующей конфигурации по умолчанию.
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 использует постоянные тома для совместного использования сведений о задании между модулем runner и модулем задания контейнера. Дополнительные сведения см. в разделе " Постоянные тома" в документации по Kubernetes.
Чтобы использовать режим Kubernetes, выполните указанные ниже действия.
- Создайте постоянные тома, доступные для модулей pod runner для утверждения.
- Используйте решение для автоматической подготовки постоянных томов по запросу.
Для тестирования можно использовать такое решение, как OpenEBS.
Настройка режима Kubernetes
Чтобы включить режим Kubernetes, задайте containerMode.type
значение kubernetes
в values.yaml
файле.
containerMode:
type: "kubernetes"
kubernetesModeWorkVolumeClaim:
accessModes: ["ReadWriteOnce"]
storageClassName: "dynamic-blob-storage"
resources:
requests:
storage: 1Gi
Дополнительные параметры конфигурации Helm см values.yaml
. в репозитории ARC.
Note
Если режим 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. Это указывает средству выполнения отключить эту проверку.
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
убедитесь, что вы знаете известные ограничения.
## githubConfigUrl is the GitHub url for where you want to configure runners
## ex: https://github.com/myorg/myrepo or https://github.com/myorg
githubConfigUrl: "https://github.com/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: https://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:///var/run/docker.sock
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /var/run
- name: dind
image: docker:dind-rootless
args:
- dockerd
- --host=unix:///var/run/docker.sock
securityContext:
privileged: true
runAsUser: 1001
runAsGroup: 1001
volumeMounts:
- name: work
mountPath: /home/runner/_work
- name: dind-sock
mountPath: /var/run
- 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. Дополнительные сведения см. в разделе Сведения о контроллере запуска действий.
- Храните в ConfigMap. Вы можете создать карту конфигурации с помощью PodSpec и подключить эту карту конфигурации в контейнере runner. Дополнительные сведения см . в разделе ConfigMaps в документации по Kubernetes.
Note
При использовании обоих параметров необходимо задать 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.annotations
Поля.metadata.labels
будут добавлены как есть, если их ключи не зарезервированы. Невозможно переопределить.metadata.name
поля иmetadata.namespace
поля.- Большинство полей PodSpec применяются из указанного шаблона и переопределяют значения, передаваемые из файла диаграммы
values.yaml
Helm. - Если указать дополнительные тома, они будут добавлены к томам по умолчанию, указанным в средстве выполнения.
- Они
spec.containers
объединяются на основе имен, назначенных им.- Если имя контейнера :
$job
spec.containers.image
Поляspec.containers.name
игнорируются.spec.containers.volumeMounts
Поляspec.containers.env
иspec.containers.ports
поля добавляются к спецификации контейнера по умолчанию, созданной перехватчиком.- Остальные поля применяются, как указано.
- Если имя контейнера не
$job
задано, поля будут добавлены в определение pod по мере их использования.
- Если имя контейнера :
Включение метрик
Note
Метрики для 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"
Note
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 диспетчера контроллера и прослушивателя.
Note
Метрики, которые диспетчер контроллера выдает, относятся к среде выполнения контроллера и не принадлежат 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
Так как нет поддержки обновления или удаления CRD с Helm, невозможно использовать Helm для обновления ARC. Дополнительные сведения см . в разделе "Пользовательские определения ресурсов" в документации Helm. Чтобы обновить ARC до более новой версии, необходимо выполнить следующие действия.
- Удалите все установки
gha-runner-scale-set
. - Дождитесь очистки ресурсов.
- Удалите ARC.
- При изменении crDs из установленной версии до обновленной версии удалите все crD, связанные с
actions.github.com
группой API. - Переустановите ARC еще раз.
Дополнительные сведения см. в разделе "Развертывание масштабируемого набора runner".
Если вы хотите обновить ARC, но обеспокоены временем простоя, вы можете развернуть ARC в конфигурации высокой доступности, чтобы убедиться, что средства выполнения всегда доступны. Дополнительные сведения см. в разделе "Высокий уровень доступности" и "Автоматическая отработка отказа".
Note
Переход от поддерживаемой сообществом версии ARC на поддерживаемую версию GitHub является существенным изменением архитектуры. Поддерживаемая версия GitHub включает в себя перепроектирование многих компонентов ARC. Это не дополнительное обновление программного обеспечения. По этим причинам рекомендуется сначала протестировать новые версии в промежуточной среде, которая соответствует рабочей среде. Это обеспечит стабильность и надежность установки перед развертыванием в рабочей среде.
Развертывание канарского образа
Перед выпуском функций можно протестировать с помощью канарной версии образа контейнера диспетчера контроллера. Канареарные изображения публикуются с форматом canary-SHORT_SHA
тега. Дополнительные сведения см gha-runner-scale-set-controller
. в разделе Container registry.
Note
- В локальной файловой системе необходимо использовать диаграммы 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.
Юридическая информация
Части были адаптированы в соответствии с https://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.