Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассказано, как создать инфраструктуру, необходимую для развертывания контроллера действий (ARC) в AKS с помощью файлов Azure и Helm.
Перед тем как начать
- Просмотрите обзор развертывания и убедитесь, что выполнены необходимые условия.
- Задайте переменные среды для использования в этом руководстве.
- Установите необходимые расширения.
Настройка переменных среды
Задайте следующие переменные среды для использования в этом руководстве:
export AKS_AND_STORAGE_ACCOUNT_RG="aks-files-actions"
export AKS_CLUSTER_NAME="aks-actions"
export STORAGE_ACCOUNT_NAME=""
export AKS_STORAGE_ACCOUNT_LOCATION="westus3"
export GITHUB_CONFIG_URL="azure-files-samples/Workloads/azurefiles-actions-aks at master · Azure-Samples/azure-files-samples"
# Optional. Changes might require additional changes on ./install/*.yaml files.
export NAMESPACE_ARC_CONTROLLER="arc-systems"
export ARC_CONTROLLER_NAME="arc-controller"
export NAMESPACE_ARC_RUNNERS="arc-runners"
export ARC_RUNNER_SCALESET_NAME="arc-runner-set"
export ARC_RUNNER_GITHUB_SECRET_NAME=""
Обязательно замените значения для следующих обязательных переменных:
-
AKS_AND_STORAGE_ACCOUNT_RGс именем группы ресурсов, используемой учетной записью хранения и кластером AKS. -
AKS_CLUSTER_NAMEс именем кластера AKS. -
STORAGE_ACCOUNT_NAMEс именем учетной записи хранения данных. -
AKS_STORAGE_ACCOUNT_LOCATIONс названием региона, в котором будут создаваться ресурсы. В этом примере мы развертываем их в том же регионе, что и кластер AKS, чтобы упростить управление производительностью и затратами. -
GITHUB_CONFIG_URLс URL-адресом организации или репозитория GitHub.
Если это возможно, сохраните следующие необязательные переменные в качестве значений по умолчанию:
-
NAMESPACE_ARC_CONTROLLER: имя пространства имен Kubernetes для запуска контроллера группы масштабирования ARC runners. -
ARC_CONTROLLER_NAME: имя контроллера масштабируемого набора ARC runners. -
NAMESPACE_ARC_RUNNERS: имя пространства имен Kubernetes для запуска самостоятельно размещенных runnerов ARC. -
ARC_RUNNER_SCALESET_NAME: имя масштабируемого набора runners ARC. -
ARC_RUNNER_GITHUB_SECRET_NAME: имя данного секретного ключа GitHub.
Установка необходимых расширений
Расширения aks-preview, k8s-extension и amg предоставляют больше возможностей для управления кластерами Kubernetes и запросами ресурсов Azure. Установите эти расширения с помощью следующих az extension add команд:
az extension add --upgrade --name aks-preview --yes --allow-preview true
az extension add --upgrade --name k8s-extension --yes --allow-preview false
az extension add --upgrade --name amg --yes --allow-preview false
Создайте группу ресурсов
Создайте группу ресурсов с помощью команды az group create. Эта группа ресурсов будет содержать кластер AKS и учетную запись хранения файлов Azure.
az group create \
--name $AKS_AND_STORAGE_ACCOUNT_RG \
--location $AKS_STORAGE_ACCOUNT_LOCATION
Создание кластера AKS
Создайте кластер AKS с помощью команды az aks create.
az aks create --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" --name "${AKS_CLUSTER_NAME}" \
--os-sku AzureLinux \
--node-count 1 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 3 \
--node-vm-size standard_d4s_v5 \
--max-pods=100 \
--network-plugin azure \
--network-plugin-mode overlay \
--generate-ssh-keys
Подключение к кластеру AKS
Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes. Kubectl уже установлен, если вы используете Azure Cloud Shell. Чтобы установить kubectl локально, используйте az aks install-cli команду.
Настройте kubectl для подключения к кластеру Kubernetes с помощью модуля
az aks get-credentials command. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" --name "${AKS_CLUSTER_NAME}"Проверьте подключение к кластеру
kubectl get nodesс помощью команды. Эта команда возвращает список узлов в кластере AKS.kubectl get nodes
Создание общего файлового хранилища Azure
Прежде чем использовать файловую общую папку Azure Files в качестве тома Kubernetes, необходимо создать учетную запись хранения Azure и файловую общую папку. В этом руководстве мы используем SMB общей папки Azure уровня "Премиум" с поддержкой кэширования метаданных. Минимальное значение составляет 100 ГБ для каждого создаваемого ресурса.
Создайте учетную запись хранения с помощью
az storage account createкоманды. Следующая команда создает учетную запись хранения с помощью номера SKU Premium_LRS.az storage account create --name "${STORAGE_ACCOUNT_NAME}" --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" \ --location "${AKS_STORAGE_ACCOUNT_LOCATION}" \ --sku Premium_LRS \ --kind FileStorageЭкспорт строки подключения в виде переменной среды, которая используется для создания общей папки с помощью
az storage account show-connection-stringкоманды.export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string --name "${STORAGE_ACCOUNT_NAME}" --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" --query connectionString -o tsv)Создайте общую папку premium размером 100 ГБ с помощью
az storage share createкоманды. В этом примере в качестве имени ресурса используется metadatacaching. При изменении этого имени также необходимо изменитьarc-runners-set-pv.yamlфайл, чтобы отразить это изменение.az storage share create --name metadatacaching --quota 100 --connection-string "${AZURE_STORAGE_CONNECTION_STRING}"
Установка контроллера масштабируемого набора runners ARC
Установите контроллер набора масштабирования ARC, используя следующую команду helm install.
helm install "${ARC_CONTROLLER_NAME}" \
--namespace "${NAMESPACE_ARC_CONTROLLER}" \
--create-namespace \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
Создание секретов в Kubernetes
Секрет ключа хранилища общих папок Azure
Для Azure Files необходимо создать секрет в AKS с ключом хранилища, который используется для доступа к файловому ресурсу Azure из pod AKS.
Экспортируйте ключ учетной записи хранения в качестве переменной среды с помощью команды
az storage account keys list.STORAGE_KEY=$(az storage account keys list --resource-group ${AKS_AND_STORAGE_ACCOUNT_RG} --account-name ${STORAGE_ACCOUNT_NAME} --query "[0].value" -o tsv)Создайте пространство имен Kubernetes для запуска локальных runners ARC с помощью
kubectl create namespaceкоманды.kubectl create namespace "${NAMESPACE_ARC_RUNNERS}"Создайте секрет Kubernetes для хранения ключа хранения файлового обмена Azure с помощью команды
kubectl create secret generic.kubectl create secret generic azure-storage-secret \ --namespace "${NAMESPACE_ARC_RUNNERS}" \ --from-literal=azurestorageaccountname=${STORAGE_ACCOUNT_NAME} \ --from-literal=azurestorageaccountkey=${STORAGE_KEY}
Секрет приложения GitHub
Создайте приложение GitHub, чтобы позволить самостоятельно размещенному runner получить доступ к вашей организации или репозиторию GitHub, используя руководство по регистрации приложения GitHub. Процесс создания GitHub предоставляет следующие параметры:
-
GITHUB_APP_ID: идентификатор приложения GitHub. -
GITHUB_APP_INSTALLATION_ID: идентификатор установки приложения GitHub. -
github_app_private_key: закрытый ключ приложения GitHub. Необходимо заменить раздел -----BEGIN RSA PRIVATE KEY----- на закрытый ключ.
-
Создайте секрет Kubernetes для хранения учетных данных приложения GitHub с помощью
kubectl create secret genericкоманды. Замените заполнители фактическими значениями, полученными из процесса создания приложения GitHub.GITHUB_APP_ID="app-id-placeholder" GITHUB_APP_INSTALLATION_ID="installation-id-placeholder" kubectl create secret generic ${ARC_RUNNER_GITHUB_SECRET_NAME} \ --namespace=${NAMESPACE_ARC_RUNNERS} \ --from-literal=github_app_id=${GITHUB_APP_ID} \ --from-literal=github_app_installation_id=${GITHUB_APP_INSTALLATION_ID} \ --from-literal=github_app_private_key=' <Private Key read here>'
Конфигурации файлового хранилища Azure
Вы можете одновременно подключить файловое хранилище Azure Files в нескольких pod, используя AccessMode: ReadWriteMany, чтобы подключить одно и то же файловое хранилище во всех pod, созданных реплицирующим набором ARC Kubernetes.
Мы используем общую папку файлов Azure следующим образом:
В качестве постоянной общей папки SMB для кэширования пакетов NuGet, используемых примером приложения .NET. Файл arc-runners-set-pv-pvc.yaml создает необходимые PV и PVC для подключения файлового ресурса Azure Files в модулях pod масштабируемого набора ARC. Мы рекомендуем Azure File Premium для этого первого варианта. Настройте
volumeAttributesи все параметры пространств имен в манифестах PV и PVC, как показано в следующем примере:volumeAttributes: resourceGroup: metadata-agroves # Optional. Only set this when the storage account isn't in the same resource group as node. shareName: metadatacaching nodeStageSecretRef: name: azure-storage-secret namespace: arc-runnersВ качестве временного тома для рабочей папки runners GitHub. Мы также создадим два класса хранилища: Azure Files Standard (
github-azurefile) и Azure File Premium (github-azurefile-premium). Эти классы позволяют создавать и удалять тома по запросу. При запуске задания GitHub создается новый модуль runner в Kubernetes, а также создается и подключается новая файловая доля Azure. Том живет только во время выполнения задания. Стандартный класс позволяет использовать любой размер тома, а класс Premium позволяет использовать том не менее 100 ГБ. Вы можете выбрать любой класс, который вы предпочитаете. Имейте в виду, что Premium обеспечивает более высокую производительность. Файлarc-runners-storage-class-files.yamlможно настроить, но это не обязательно.
Создайте постоянный том и запрос на постоянный том
Создайте постоянный том и запрос на постоянный том с помощью команды
kubectl apply.kubectl apply -f ./install/arc-runners-set-pv-pvc.yaml --namespace "${NAMESPACE_ARC_RUNNERS}" --waitПримените класс хранилища для файлов Azure с помощью
kubectl applyкоманды.kubectl apply -f ./install/arc-runners-storage-class-files.yaml --wait
Установка масштабируемого набора runners ARC
Следующий фрагмент кода взят из файла arc-runners-set-values.yaml, находящегося в папке установки, который вы можете настроить перед установкой набора диаграмм Helm для runner.
containerMode:
type: "kubernetes" # Type can be set to dind or kubernetes
## The following is required when containerMode.type=kubernetes
kubernetesModeWorkVolumeClaim:
accessModes: ["ReadWriteMany"]
storageClassName: "github-azurefile-premium" # or "github-azurefile" for Standard_LRS
resources:
requests:
storage: 100Gi # 100Gi minimum to premium or any size when using Standard_LRS "github-azurefile" storage class
template:
spec:
securityContext:
fsGroup: 123 # Group used by GitHub default agent image
containers:
- name: runner
image: ghcr.io/actions/actions-runner:latest
command: ["/home/runner/run.sh"]
env:
- name: ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER
value: "false"
- name: ACTIONS_RUNNER_CONTAINER_HOOK_TEMPLATE
value: "/home/runner/container-config/container-podspec.yaml"
volumeMounts:
- name: "container-podspec-volume"
mountPath: "/home/runner/container-config"
- name: azurefile
mountPath: /home/runner/.nuget/
volumes:
- name: "container-podspec-volume"
configMap:
name: hook-extension
- name: azurefile
persistentVolumeClaim:
claimName: azurefile
В этом примере мы используем настраиваемую версию Kubernetes containerMode для включения монтирования тома файлового ресурса Azure File к пакетам NuGet и к эфемерному тому папки _work.
Следующие параметры не являются обязательными для изменения:
-
storageClassName: выберите между "github-azurefile-premium" и "github-azurefile". -
storage: выберите размер хранилища. Минимальное значение 100 ГБ для Premium.
Другие параметры Helm задаются в команде helm install с помощью опции --set.
Для совместимости с функцией контейнера рабочего процесса GitHub, которая позволяет запускать контейнеры внутри конвейера, мы подключаем container-podspec-volume со спецификацией pod для pod рабочего процесса, созданного ARC при запуске рабочих процессов с функцией контейнера. Эта спецификация pod смонтирована из ConfigMap, созданной из файла arc-runners-set-container-pod-spec.yaml в директории установки. Никаких изменений не требуется.
kubectl apply -f ./install/arc-runners-set-container-pod-spec.yaml
Параметры набора масштабируемости в диаграмме Helm для runners ARC
Диаграмма Helm масштабируемого набора раннеров ARC предоставляет несколько параметров. Следующие параметры являются наиболее важными при установке набора масштабирования с подключением ресурса общего диска Azure File в AKS:
-
githubConfigUrl: ваша организация или репозиторий GitHub. -
githubConfigSecret: секрет приложения GitHub для доступа к GitHub из локального runner. -
minRunners: минимальное количество исполнителей в масштабируемом наборе, ожидающих новых заданий из GitHub. -
maxRunners: максимальное количество выполняющихся заданий или ожидание новых заданий из GitHub. -
runnerGroup: группа runner'ов GitHub, используемая набором runner'ов ARC.
Скачайте масштабируемый набор runners ARC Helm.
Установка чарта Helm на AKS
Установите масштабируемый набор runners ARC Helm в AKS с помощью helm install команды.
helm install "${ARC_RUNNER_SCALESET_NAME}" \
--namespace "${NAMESPACE_ARC_RUNNERS}" \
--create-namespace \
--values ./install/arc-runners-set-values.yaml \
--set githubConfigUrl="${GITHUB_CONFIG_URL}" \
--set githubConfigSecret="${ARC_RUNNER_GITHUB_SECRET_NAME}" \
--set minRunners=1 \
--set maxRunners=3 \
--set runnerGroup=default \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
Обновление установки масштабируемого набора runner
Если вы хотите обновить любую конфигурацию в масштабируемом наборе runners ARC, можно использовать helm upgrade --install команду с теми же параметрами, которые использовались для установки масштабируемого набора. Например, если вы хотите изменить minRunners параметр с 1 по 2, можно выполнить следующую команду:
helm upgrade --install "${ARC_RUNNER_SCALESET_NAME}" \
--namespace "${NAMESPACE_ARC_RUNNERS}" \
--create-namespace \
--values ./install/arc-runners-set-values.yaml \
--set githubConfigUrl="${GITHUB_CONFIG_URL}" \
--set githubConfigSecret="${ARC_RUNNER_GITHUB_SECRET_NAME}" \
--set minRunners=2 \
--set maxRunners=3 \
--set runnerGroup=default \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
Следующий шаг
Соавторы
Корпорация Майкрософт поддерживает эту статью. Первоначальная версия была написана следующими участниками:
- Хорхе Артерио | Старший адвокат по облачным технологиям
- Джефф Паттерсон | Главный диспетчер продуктов
- Рена Шах | Старший менеджер по продуктам
- Шехар Сингх Сорот | Product Manager 2
- Эрин Шаффер | Разработчик содержимого 2