Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous allez créer l’infrastructure nécessaire pour déployer une infrastructure Arc (Actions Runner Controller) hautement disponible sur AKS à l’aide d’Azure Files et Helm.
Avant de commencer
- Passez en revue la vue d’ensemble du déploiement et vérifiez que vous remplissez les conditions préalables.
- Définissez des variables d’environnement à utiliser dans ce guide.
- Installez les extensions requises.
Définir des variables d’environnement
Définissez les variables d’environnement suivantes à utiliser dans ce guide :
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=""
Veillez à remplacer les valeurs des variables requises suivantes :
-
AKS_AND_STORAGE_ACCOUNT_RGavec le nom du groupe de ressources utilisé par le compte de stockage et le cluster AKS. -
AKS_CLUSTER_NAMEavec le nom du cluster AKS. -
STORAGE_ACCOUNT_NAMEavec le nom du compte de stockage. -
AKS_STORAGE_ACCOUNT_LOCATIONavec le nom de la région dans laquelle créer les ressources. Dans cet exemple, nous les déployons dans la même région que le cluster AKS pour faciliter la gestion des performances et des coûts. -
GITHUB_CONFIG_URLavec l’URL de l’organisation ou du dépôt GitHub.
Conservez les variables facultatives suivantes comme valeurs par défaut si possible :
-
NAMESPACE_ARC_CONTROLLER: nom de l’espace de noms Kubernetes pour exécuter le contrôleur de groupe identique des exécuteurs ARC. -
ARC_CONTROLLER_NAME: nom du contrôleur de groupe identique des exécuteurs ARC. -
NAMESPACE_ARC_RUNNERS: nom de l’espace de noms Kubernetes pour faire fonctionner des exécuteurs auto-hébergés ARC. -
ARC_RUNNER_SCALESET_NAME: nom du groupe identique des exécuteurs ARC. -
ARC_RUNNER_GITHUB_SECRET_NAME: nom du secret GitHub.
Installer les extensions requises
Les extensions aks-preview, k8s-extension et amg fournissent plus de fonctionnalités pour la gestion des clusters Kubernetes et l’interrogation des ressources Azure. Installez ces extensions en utilisant les commandes az extension add suivantes :
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
Créer un groupe de ressources
Créez un groupe de ressources à l’aide de la commande az group create. Ce groupe de ressources contiendra le cluster AKS et le compte de stockage Azure Files.
az group create \
--name $AKS_AND_STORAGE_ACCOUNT_RG \
--location $AKS_STORAGE_ACCOUNT_LOCATION
Créer un cluster AKS
Créez un cluster AKS avec la commande 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
Se connecter au cluster AKS
Pour gérer un cluster Kubernetes, utilisez kubectl, le client de ligne de commande Kubernetes. Kubectl est déjà installé si vous utilisez Azure Cloud Shell. Pour installer kubectl localement, utilisez la commande az aks install-cli.
Configurez kubectl pour vous connecter au cluster Kubernetes en utilisant le
az aks get-credentials command. Cette commande télécharge les informations d’identification et configure l’interface CLI Kubernetes pour les utiliser.az aks get-credentials --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" --name "${AKS_CLUSTER_NAME}"Pour vérifier la connexion à votre cluster, exécutez la commande
kubectl get nodes. Cette commande retourne une liste de nœuds dans votre cluster AKS.kubectl get nodes
Crée un partage de fichiers Azure
Avant de pouvoir utiliser un partage de fichiers Azure Files en tant que volume Kubernetes, vous devez créer un compte de stockage Azure et un partage de fichiers. Dans ce guide, nous utilisons le partage de fichiers Azure Premium SMB avec prise en charge de la mise en cache des métadonnées. Le minimum est de 100 Go pour chaque partage que vous créez.
Créer un compte de stockage à l’aide de la commande
az storage account create. La commande suivante crée un compte de stockage à l’aide de la référence 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 FileStorageExportez la chaîne de connexion en tant que variable d’environnement, que vous utilisez pour créer le partage de fichiers, à l’aide de la
az storage account show-connection-stringcommande.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)Créez le partage de fichiers Premium de 100 Go à l’aide de la
az storage share createcommande. Dans cet exemple, nous utilisons metadatacaching comme nom de partage. Si vous modifiez ce nom, vous devez également modifier learc-runners-set-pv.yamlfichier pour refléter cette modification.az storage share create --name metadatacaching --quota 100 --connection-string "${AZURE_STORAGE_CONNECTION_STRING}"
Installer le contrôleur de groupe identique des exécuteurs ARC
Installez le contrôleur de groupe identique des exécuteurs ARC en utilisant la commande helm install suivante.
helm install "${ARC_CONTROLLER_NAME}" \
--namespace "${NAMESPACE_ARC_CONTROLLER}" \
--create-namespace \
oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
Créer des secrets Kubernetes
Secret de clé de stockage du partage de fichiers Azure
Azure Files nécessite de créer un secret sur AKS avec la clé de stockage utilisée pour connecter le partage de fichiers Azure à partir du conteneur de pod AKS.
Exportez la clé du compte de stockage en tant que variable d’environnement à l’aide de la
az storage account keys listcommande.STORAGE_KEY=$(az storage account keys list --resource-group ${AKS_AND_STORAGE_ACCOUNT_RG} --account-name ${STORAGE_ACCOUNT_NAME} --query "[0].value" -o tsv)Créez un espace de noms Kubernetes pour exécuter des exécuteurs auto-hébergés ARC à l’aide de la
kubectl create namespacecommande.kubectl create namespace "${NAMESPACE_ARC_RUNNERS}"Créez un secret Kubernetes pour stocker la clé de stockage de partage de fichiers Azure à l’aide de la
kubectl create secret genericcommande.kubectl create secret generic azure-storage-secret \ --namespace "${NAMESPACE_ARC_RUNNERS}" \ --from-literal=azurestorageaccountname=${STORAGE_ACCOUNT_NAME} \ --from-literal=azurestorageaccountkey=${STORAGE_KEY}
Secret de l’application GitHub
Créez une application GitHub pour permettre à l’exécuteur auto-hébergé d’accéder à votre organisation ou référentiel GitHub à l’aide du guide d’inscription d’une application GitHub . Le processus de création GitHub vous fournit les paramètres suivants :
-
GITHUB_APP_ID: ID de l’application GitHub. -
GITHUB_APP_INSTALLATION_ID: ID d’installation de l’application GitHub. -
github_app_private_key: clé privée de l’application GitHub. Vous devez remplacer la section -----BEGIN RSA PRIVATE KEY----- par votre clé privée.
-
Créez un secret Kubernetes pour stocker les informations d’identification de l’application GitHub à l’aide de la
kubectl create secret genericcommande. Veillez à remplacer les variables par les valeurs obtenues lors de la création de l’application 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>'
Configurations de partage de fichiers Azure
Vous pouvez monter un partage de fichiers Azure Files dans plusieurs pods en même temps à l'aide de AccessMode: ReadWriteMany pour monter le même partage de fichiers dans tous les pods créés par l'ensemble de réplicas ARC Kubernetes.
Nous utilisons le partage de fichiers Azure Files de la manière suivante :
En tant que partage de fichiers SMB persistant pour mettre en cache les packages NuGet utilisés par l’exemple d’application .NET. Le fichier arc-runners-set-pv-pvc.yaml crée le PV et le PVC requis pour monter le partage de fichiers Azure Files dans les pods de groupe identique des exécuteurs ARC. Nous vous recommandons Azure File Premium pour cette première option. Personnalisez
volumeAttributeset les paramètres des espaces de noms sur les manifestes PV et PVC, comme indiqué dans l'exemple suivant :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-runnersEn tant que volume éphémère pour le dossier de travail des exécuteurs GitHub. Nous créons également deux classes de stockage : Azure Files Standard (
github-azurefile) et Azure File Premium (github-azurefile-premium). Ces classes vous permettent de créer et de supprimer des volumes à la demande. Lorsqu’un travail GitHub s’exécute, un nouveau pod d’exécuteur est créé sur Kubernetes et un nouveau partage de fichiers Azure File est créé et monté. Le volume ne vit que pendant l’exécution du travail. La classe Standard autorise n’importe quelle taille de volume et Premium autorise un minimum de 100 Go de volume. Vous pouvez sélectionner la classe que vous préférez. Gardez à l’esprit que Premium vous offre une meilleure performance. Vous pouvez personnaliser learc-runners-storage-class-files.yamlfichier, mais il n’est pas obligatoire.
Créer le volume persistant et la revendication de volume persistant
Créez le volume persistant et la revendication de volume persistant en tirant parti de la commande
kubectl apply.kubectl apply -f ./install/arc-runners-set-pv-pvc.yaml --namespace "${NAMESPACE_ARC_RUNNERS}" --waitAppliquez la classe de stockage pour Azure Files à l’aide de la
kubectl applycommande.kubectl apply -f ./install/arc-runners-storage-class-files.yaml --wait
Installer le groupe identique des exécuteurs ARC
L’extrait de code suivant provient du arc-runners-set-values.yaml fichier du dossier d’installation que vous pouvez personnaliser avant d’installer le graphique Helm du groupe d’exécuteurs.
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
Dans cet exemple, nous utilisons une version personnalisée de Kubernetes containerMode pour inclure des montages de volume de partage de fichiers Azure sur des packages NuGet et dans le volume de dossier éphémère _work.
Les paramètres suivants ne sont pas obligatoires pour changer :
-
storageClassName: Choisissez entre « github-azurefile-premium » et « github-azurefile ». -
storage: choisissez la taille du stockage. 100 Go minimum pour Premium.
Les autres paramètres Helm sont définis sur la commande helm install à l'aide de l'option --set.
Pour la compatibilité avec la fonctionnalité de conteneur de workflow GitHub qui vous permet d’exécuter des conteneurs à l’intérieur de votre pipeline, nous montons un container-podspec-volume avec la spécification de pod pour le pod de workflow créé par ARC lors de l’exécution des workflows avec la fonctionnalité de conteneur. Cette spécification de pod est montée à partir d’un mappage de configuration créé sur un fichier arc-runners-set-container-pod-spec.yaml dans le dossier d’installation. Aucune modification n’est requise.
kubectl apply -f ./install/arc-runners-set-container-pod-spec.yaml
Paramètres du graphique Helm du groupe identique des exécuteurs ARC
Le graphique Helm du groupe identique des exécuteurs ARC fournit quelques paramètres. Les paramètres suivants sont les plus importants lors de l’installation d’un groupe identique avec le montage de volume de partage de fichiers Azure sur AKS :
-
githubConfigUrl: votre organisation ou référentiel GitHub. -
githubConfigSecret: secret de l’application GitHub pour accéder à GitHub à partir de l’exécuteur auto-hébergé. -
minRunners: nombre minimal d’exécuteurs sur le groupe identique en attente de nouveaux travaux à partir de GitHub. -
maxRunners: nombre maximal d’exécuteurs exécutant des travaux ou en attente de nouveaux travaux à partir de GitHub. -
runnerGroup: groupe d’exécuteurs GitHub utilisé par les exécuteurs ARC définis.
Téléchargez le graphique Helm du groupe identique des exécuteurs ARC.
Installer le graphique Helm sur AKS
Installez le graphique Helm du groupe identique des exécuteurs ARC sur AKS en utilisant la commande 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
Mettre à niveau une installation de groupe identique d’exécuteur
Si vous souhaitez mettre à niveau une configuration sur le groupe identique d’exécuteurs ARC, vous pouvez utiliser la commande helm upgrade --install avec les mêmes paramètres que ceux que vous avez utilisés pour installer le groupe identique. Par exemple, si vous souhaitez modifier le minRunners paramètre de 1 à 2, vous pouvez exécuter la commande suivante :
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
Étape suivante
Contributeurs
Microsoft gère cet article. Il a été écrit initialement par les contributeurs suivants.
- Jorge Arterio | Avocat principal du cloud
- Jeff Patterson | Chef de produit principal
- Rena Shah | Chef de produit senior
- Shekar Singh Sorot | Product Manager 2
- Erin Schaffer | Développeuse de contenu 2