Skip to main content

Сведения о контроллере запуска действий

Можно размещать собственные средства выполнения и настраивать среду, используемую для выполнения заданий в рабочих процессах GitHub Actions.

Юридическое уведомление

О Actions Runner Controller

Actions Runner Controller (ARC) — это оператор Kubernetes, который управляет и масштабирует локальные средства выполнения для GitHub Actions. Дополнительные сведения см . в разделе "Шаблон оператора" в документации по Kubernetes.

С помощью ARC можно создавать масштабируемые наборы runner, которые автоматически масштабируются на основе количества рабочих процессов, выполняемых в репозитории, организации или организации. Так как управляемые средства выполнения могут быть временными и основаны на контейнерах, новые экземпляры бегунов могут быстро увеличивать или уменьшать масштаб. Дополнительные сведения об автомасштабировании см. в разделе "Автомасштабирование с помощью локальных средств выполнения".

На следующей схеме показана архитектура режима автомасштабирования runner runner с автомасштабированием arc.

Note

Чтобы просмотреть следующую схему в большем размере, см . документацию по режиму автомасштабирования масштабируемых наборов runner в репозитории контроллера runner.

Схема, на которой показан режим автомасштабирования runner ScaleSet arc.

  1. Actions Runner Controller устанавливается с помощью предоставленных диаграмм Helm, а модуль pod диспетчера контроллеров развертывается в указанном пространстве имен. Новый ресурс AutoScalingRunnerSet развертывается с помощью предоставленных диаграмм Helm или настраиваемого файла манифеста. Контроллер AutoScalingRunnerSet вызывает API GitHub для получения идентификатора группы выполнения, к которому будет принадлежать масштабируемый набор runner.
  2. Контроллер AutoScalingRunnerSet вызывает API-интерфейсы еще раз, чтобы получить или создать масштабируемый набор runner в службе GitHub Actions перед созданием ресурса прослушивателя Runner ScaleSet.
  3. Модуль pod прослушивателя Runner ScaleSet развертывается контроллером AutoScalingListener. В этом модуле pod приложение прослушивателя подключается к службе GitHub Actions для проверки подлинности и установления подключения к длинному опросу HTTPS. Прослушиватель остается бездействием, пока он не получит Job Available сообщение от службы GitHub Actions.
  4. При активации запуска рабочего процесса из репозитория GitHub Actions Служба отправляет отдельные задания в модули выполнения или масштабируемые наборы runner, где runs-on ключ соответствует имени масштабируемого набора или меток локального запуска.
  5. Когда прослушиватель ScaleSet Runner получает Job Available сообщение, он проверяет, может ли он масштабироваться до требуемого количества. Если это возможно, прослушиватель ScaleSet Runner признает сообщение.
  6. Прослушиватель Масштабируемого набора runner использует учетную запись службы и роль, привязанную к этой учетной записи, чтобы выполнить вызов HTTPS через API Kubernetes для исправления ресурса Ephemeral RunnerSet с числом требуемых реплик.
  7. Эфемерный runnerSet пытается создать новые средства выполнения, а контроллер ЭфемералRunner запрашивает маркер конфигурации JIT, чтобы зарегистрировать эти средства выполнения. Контроллер пытается создать модули pod runner. Если состояние модуля pod равно failed, контроллер повторяется до 5 раз. Через 24 часа служба GitHub Actions отменяет назначение задания, если пользователь не принимает его.
  8. После создания модуля pod runner приложение runner в модуле pod использует маркер конфигурации JIT для регистрации в службе GitHub Actions. Затем он устанавливает другое длинное подключение опроса HTTPS для получения сведений о задании, которые необходимо выполнить.
  9. Служба GitHub Actions подтверждает регистрацию бегуна и отправляет сведения о выполнении задания.
  10. Во время выполнения задания средство выполнения непрерывно обменивается журналами и состоянием выполнения задания к службе GitHub Actions.
  11. После успешного завершения задания контроллер ЭфемералRunner проверяет с помощью службы GitHub Actions, чтобы узнать, можно ли удалить средство выполнения. Если это возможно, эфемерный runnerSet удаляет бегуна.

Компоненты Actions Runner Controller

ARC состоит из набора ресурсов, некоторые из которых создаются специально для ARC. Развертывание ARC применяет эти ресурсы к кластеру Kubernetes. После применения он создает набор модулей Pod, содержащих контейнеры локальных модулей выполнения. С помощью ARC GitHub может обрабатывать эти контейнеры runner как локальные средства выполнения и выделять задания по мере необходимости.

Каждый ресурс, развернутый arc, имеет имя, состоящее из:

  • имя установки, указывающее при установке диаграммы Helm.
  • суффикс идентификации ресурса, который является строкой, определяющей тип ресурса. Это значение изменить нельзя.

Note

Разные версии Kubernetes имеют разные ограничения длины для имен ресурсов. Ограничение длины для имени ресурса вычисляется путем добавления длины имени установки и длины суффикса идентификации ресурса. Если имя ресурса больше зарезервированной длины, появится сообщение об ошибке.

Ресурсы, развернутые по gha-runner-scale-set-controller

TemplateТип ресурсаИмя.Зарезервированная длинаОписаниеОснование
deployment.yamlРазвертываниеINSTALLATION_NAME-gha-rs-controller18Ресурс, работающий контроллер-диспетчерМодули pod, созданные этим ресурсом, имеют суффикс реплики и суффикс Pod.
serviceaccount.yamlServiceAccountINSTALLATION_NAME-gha-rs-controller18Это создается, если serviceAccount.create задано values.yaml значение true.Имя можно настроить в values.yaml
manager_cluster_role.yamlClusterRoleINSTALLATION_NAME-gha-rs-controller18ClusterRole для диспетчера контроллеровЭто создается, если значение flags.watchSingleNamespace пусто.
manager_cluster_role_binding.yamlClusterRoleBindingINSTALLATION_NAME-gha-rs-controller18ClusterRoleBinding для диспетчера контроллеровЭто создается, если значение flags.watchSingleNamespace пусто.
manager_single_namespace_controller_role.yamlРольINSTALLATION_NAME-gha-rs-controller-single-namespace35Роль диспетчера контроллеровЭто создается, если задано значение flags.watchSingleNamespace .
manager_single_namespace_controller_role_binding.yamlRoleBindingINSTALLATION_NAME-gha-rs-controller-single-namespace35RoleBinding для диспетчера контроллеровЭто создается, если задано значение flags.watchSingleNamespace .
manager_single_namespace_watch_role.yamlРольINSTALLATION_NAME-gha-rs-controller-single-namespace-watch41Роль диспетчера контроллеров для настроенного пространства именЭто создается, если задано значение flags.watchSingleNamespace .
manager_single_namespace_watch_role_binding.yamlRoleBindingINSTALLATION_NAME-gha-rs-controller-single-namespace-watch41RoleBinding для диспетчера контроллеров для настроенного пространства именЭто создается, если задано значение flags.watchSingleNamespace .
manager_listener_role.yamlРольINSTALLATION_NAME-gha-rs-controller-listener26Роль прослушивателяЭто всегда создается.
manager_listener_role_binding.yaml RoleBindingINSTALLATION_NAME-gha-rs-controller-listener26RoleBinding для прослушивателяЭто всегда создается и привязывает роль прослушивателя с учетной записью службы, созданной serviceaccount.yaml или настроенной.values.yaml

Ресурсы, развернутые по gha-runner-scale-set

TemplateТип ресурсаИмя.Зарезервированная длинаОписаниеОснование
autoscalingrunnerset.yamlAutoscalingRunnerSetINSTALLATION_NAME0Ресурс верхнего уровня, работающий с масштабируемыми наборамиИмя ограничено 45 символами в длину.
no_permission_service_account.yamlServiceAccountINSTALLATION_NAME-gha-rs-no-permission21Учетная запись службы, подключенная к контейнеру runnerЭто создается, если режим контейнера не является kubernetes и template.spec.serviceAccountName не указан.
githubsecret.yamlСекретныйINSTALLATION_NAME-gha-rs-github-secret20Секрет, содержащий значения, необходимые для проверки подлинности в API GitHubЭто создается, если githubConfigSecret это объект. Если указана строка, этот секрет не будет создан.
manager_role.yamlРольINSTALLATION_NAME-gha-rs-manager15Роль, предоставленная руководителю, чтобы иметь возможность примирить ресурсы в пространстве имен запуска автомасштабирования набора именЭто всегда создается.
manager_role_binding.yamlRoleBindingINSTALLATION_NAME-gha-rs-manager15Привязка manager_role к учетной записи службы диспетчера.Это всегда создается.
kube_mode_role.yamlРольINSTALLATION_NAME-gha-rs-kube-mode17Роль, предоставляющая необходимые разрешения для перехватчикаЭто создается, когда для режима контейнера задано значение Kubernetes и template.spec.serviceAccount не предоставляется.
kube_mode_serviceaccount.yamlServiceAccountINSTALLATION_NAME-gha-rs-kube-mode17Учетная запись службы, привязанная к модулем pod runner.Это создается, когда для режима контейнера задано значение Kubernetes и template.spec.serviceAccount не предоставляется.

Сведения о пользовательских ресурсах

ARC состоит из нескольких настраиваемых определений ресурсов (CRD). Дополнительные сведения о пользовательских ресурсах см. в документации по Kubernetes. Список настраиваемых определений ресурсов, используемых для ARC, можно найти в следующих определениях схемы API.

Так как пользовательские ресурсы являются расширениями API Kubernetes, они не будут доступны в установке Kubernetes по умолчанию. Эти пользовательские ресурсы необходимо установить для использования ARC. Дополнительные сведения об установке пользовательских ресурсов см. в разделе "Краткое руководство по контроллеру запуска действий".

После установки пользовательских ресурсов можно развернуть ARC в кластере Kubernetes. Сведения о развертывании ARC см. в разделе "Развертывание масштабируемых наборов runner с помощью контроллера runner Actions".

Сведения об образе контейнера runner

GitHub поддерживает минимальный образ контейнера runner. Новый образ будет опубликован с каждым выпуском двоичных файлов runner. Последний образ будет иметь версию двоичных файлов runner и latest в виде тегов.

Этот образ содержит наименьший объем пакетов, необходимых для среды выполнения контейнера и двоичных файлов runner. Чтобы установить дополнительное программное обеспечение, можно создать собственный образ runner. Вы можете использовать образ runner ARC в качестве основы или использовать соответствующие действия установки. Например, actions/setup-java для Java или actions/setup-node для Node.

Определение образа runner ARC можно найти в этом файле Dockerfile и определение базового образа в этом Dockerfile.

Создание собственного образа runner

Вы можете создать собственный образ runner, соответствующий вашим требованиям. Образ runner должен соответствовать следующим условиям.

В следующем примере Dockerfile можно приступить к созданию собственного образа runner.

Dockerfile
FROM mcr.microsoft.com/dotnet/runtime-deps:6.0 as build

# Replace value with the latest runner release version
# source: https://github.com/actions/runner/releases
# ex: 2.303.0
ARG RUNNER_VERSION=""
ARG RUNNER_ARCH="x64"
# Replace value with the latest runner-container-hooks release version
# source: https://github.com/actions/runner-container-hooks/releases
# ex: 0.3.1
ARG RUNNER_CONTAINER_HOOKS_VERSION=""

ENV DEBIAN_FRONTEND=noninteractive
ENV RUNNER_MANUALLY_TRAP_SIG=1
ENV ACTIONS_RUNNER_PRINT_LOG_TO_STDOUT=1

RUN apt update -y && apt install curl unzip -y

RUN adduser --disabled-password --gecos "" --uid 1001 runner \
    && groupadd docker --gid 123 \
    && usermod -aG sudo runner \
    && usermod -aG docker runner \
    && echo "%sudo   ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers \
    && echo "Defaults env_keep += \"DEBIAN_FRONTEND\"" >> /etc/sudoers

WORKDIR /home/runner

RUN curl -f -L -o runner.tar.gz https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${RUNNER_ARCH}-${RUNNER_VERSION}.tar.gz \
    && tar xzf ./runner.tar.gz \
    && rm runner.tar.gz

RUN curl -f -L -o runner-container-hooks.zip https://github.com/actions/runner-container-hooks/releases/download/v${RUNNER_CONTAINER_HOOKS_VERSION}/actions-runner-hooks-k8s-${RUNNER_CONTAINER_HOOKS_VERSION}.zip \
    && unzip ./runner-container-hooks.zip -d ./k8s \
    && rm runner-container-hooks.zip

USER runner

Выполнение рабочих процессов

После завершения установки и настройки можно использовать ARC для выполнения выполнения рабочих процессов. Рабочий процесс можно создать в том же репозитории, который может нацелиться на локальное средство выполнения, созданное arc. Дополнительные сведения о целевых рабочих процессах для запуска на локальных запусках см. в разделе "Использование локальных средств выполнения в рабочем процессе".

Использование средств выполнения ARC в рабочем процессе

Дополнительные метки нельзя использовать для целевых средств выполнения, созданных arc. Можно использовать только имя установки масштабируемого набора runner, указанного во время установки или определив значение runnerScaleSetName поля в values.yaml файле. Они используются в качестве одной метки для использования в качестве целевого runs-on объекта. Дополнительные сведения см. в разделе "Использование модулей runner контроллера runner в рабочем процессе".

Масштабирование модулей runner

Вы можете масштабировать бегуны статически или динамически в зависимости от ваших потребностей. Дополнительные сведения см. в разделе Развертывание масштабируемых наборов runner с помощью контроллера runner Actions.

Программное обеспечение, установленное в образе runner ARC

Образ runner ARC упаковается со следующим программным обеспечением:

Дополнительные сведения см . в файле Dockerfile образа runner ARC в репозитории Actions.

Ресурсы и выпуски

ARC выпускается как две диаграммы Helm и один образ контейнера. Диаграммы Helm публикуются только в виде пакетов Open Container Initiative (OCI). Arc не предоставляет тарболы или репозитории Helm через GitHub Pages.

Последние выпуски диаграмм Helm arc и образа контейнера можно найти на GitHub Packages:

Поддерживаемый образ runner выпускается как отдельный образ контейнера, который можно найти на actions-runner GitHub Packages.

Части были адаптированы в соответствии с 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.