Vytvoření infrastruktury pro nasazení vysoce dostupných GitHub Actions ve službě Azure Kubernetes Service (AKS) pomocí služby Azure Files

V tomto článku vytvoříte infrastrukturu potřebnou k nasazení infrastruktury řadiče ARC (Actions Runner) s vysokou dostupností v AKS pomocí služby Azure Files a Helmu.

Než začnete

Nastavení proměnných prostředí

Nastavte následující proměnné prostředí pro použití v celém tomto průvodci:

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=""

Nezapomeňte nahradit hodnoty následujících požadovaných proměnných:

  • AKS_AND_STORAGE_ACCOUNT_RG s názvem skupiny prostředků, kterou používá účet úložiště a cluster AKS.
  • AKS_CLUSTER_NAME s názvem clusteru AKS.
  • STORAGE_ACCOUNT_NAME s názvem účtu úložiště.
  • AKS_STORAGE_ACCOUNT_LOCATION s názvem oblasti, ve které se mají prostředky vytvořit. V tomto příkladu je nasadíme ve stejné oblasti jako cluster AKS, abychom usnadnili správu výkonu a nákladů.
  • GITHUB_CONFIG_URL s adresou URL pro organizaci nebo úložiště GitHub.

Pokud je to možné, ponechte následující volitelné proměnné jako výchozí hodnoty:

  • NAMESPACE_ARC_CONTROLLER: Název oboru názvů Kubernetes ke spuštění kontroléru škálovací sady ARC Runners.
  • ARC_CONTROLLER_NAME: Název kontroleru škálovací sady ARC Runners.
  • NAMESPACE_ARC_RUNNERS: Název Kubernetes namespace pro spouštění samostatně hostovaných běžců ARC.
  • ARC_RUNNER_SCALESET_NAME: Název škálovací sady běžců ARC.
  • ARC_RUNNER_GITHUB_SECRET_NAME: Název tajného kódu GitHubu.

Instalace požadovaných rozšíření

Rozšíření aks-preview, rozšíření k8s a amg poskytují další funkce pro správu clusterů Kubernetes a dotazování prostředků Azure. Nainstalujte tato rozšíření pomocí následujících az extension add příkazů:

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

Vytvoření skupiny zdrojů

Vytvořte skupinu prostředků pomocí příkazu az group create. Tato skupina prostředků bude obsahovat cluster AKS a účet úložiště Azure Files.

az group create \ 
    --name $AKS_AND_STORAGE_ACCOUNT_RG \ 
    --location $AKS_STORAGE_ACCOUNT_LOCATION

Vytvoření clusteru AKS

Vytvořte cluster AKS pomocí příkazu 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

Připojení ke clusteru AKS

Pro správu Kubernetes clusteru použijte příkazový řádkový klient Kubernetes, kubectl. Kubectl je už nainstalovaný, pokud používáte Azure Cloud Shell. Pokud chcete nainstalovat kubectl místně, použijte az aks install-cli příkaz.

  1. Nakonfigurujte kubectl pro připojení ke clusteru Kubernetes pomocí nástroje az aks get-credentials command. Tento příkaz stahuje přihlašovací údaje a konfiguruje Kubernetes CLI pro jejich použití.

    az aks get-credentials --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" --name "${AKS_CLUSTER_NAME}"
    
  2. Ověřte připojení k vašemu clusteru pomocí příkazu kubectl get nodes. Tento příkaz vrátí seznam uzlů v clusteru AKS.

    kubectl get nodes
    

Vytvořte sdílené úložiště souborů Azure

Než budete moct jako svazek Kubernetes použít sdílenou složku Azure Files, musíte vytvořit účet úložiště Azure a sdílenou složku. V této příručce používáme protokol SMB sdílené složky Azure Premium s podporou ukládání metadat do mezipaměti. Minimální hodnota je 100 Gb pro každou sdílenou složku, kterou vytvoříte.

  1. Vytvořte účet úložiště pomocí příkazu az storage account create. Následující příkaz vytvoří účet úložiště pomocí skladové položky 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
    
  2. Vyexportujte připojovací řetězec jako proměnnou prostředí, kterou použijete k vytvoření sdílené složky pomocí az storage account show-connection-string příkazu.

    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)
    
  3. Pomocí příkazu vytvořte sdílenou složku az storage share create Premium o velikosti 100 Gb. V tomto příkladu používáme jako název sdílení metadatacaching. Pokud tento název změníte, musíte také změnit arc-runners-set-pv.yaml soubor tak, aby odrážel tuto změnu.

    az storage share create --name metadatacaching --quota 100 --connection-string "${AZURE_STORAGE_CONNECTION_STRING}"
    

Instalace kontroleru škálovací sady ARC Runners

Pomocí následujícího helm install příkazu nainstalujte kontroler škálovací sady ARC Runners.

helm install "${ARC_CONTROLLER_NAME}" \ 
    --namespace "${NAMESPACE_ARC_CONTROLLER}" \ 
    --create-namespace \
    oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller

Vytvoření tajných kódů Kubernetes

Tajný klíč úložiště sdíleného úložiště souborů Azure

Služba Azure Files vyžaduje, abyste v AKS vytvořili tajný kód s klíčem úložiště, který se používá k připojení sdílené složky Azure z kontejneru podů AKS.

  1. Pomocí příkazu exportujte klíč účtu úložiště jako proměnnou az storage account keys list prostředí.

    STORAGE_KEY=$(az storage account keys list --resource-group ${AKS_AND_STORAGE_ACCOUNT_RG} --account-name ${STORAGE_ACCOUNT_NAME} --query "[0].value" -o tsv) 
    
  2. Pomocí příkazu vytvořte obor názvů Kubernetes, který bude spouštět spouštěče kubectl create namespace v místním prostředí ARC.

    kubectl create namespace "${NAMESPACE_ARC_RUNNERS}" 
    
  3. Vytvořte tajný klíč Kubernetes pro uložení klíče úložiště sdílené složky Azure pomocí kubectl create secret generic příkazu.

    kubectl create secret generic azure-storage-secret \ 
       --namespace "${NAMESPACE_ARC_RUNNERS}" \ 
       --from-literal=azurestorageaccountname=${STORAGE_ACCOUNT_NAME} \ 
       --from-literal=azurestorageaccountkey=${STORAGE_KEY}
    

Tajný kód aplikace GitHubu

  1. Vytvořte aplikaci GitHub, která umožňuje místnímu spouštěči přístup k vaší organizaci nebo úložišti GitHubu pomocí průvodce registrací aplikace GitHub . Proces vytváření GitHubu poskytuje následující parametry:

    • GITHUB_APP_ID: ID aplikace GitHub.
    • GITHUB_APP_INSTALLATION_ID: ID instalace aplikace GitHub.
    • github_app_private_key: Privátní klíč aplikace GitHub. Potřebujete nahradit -----BEGIN RSA PRIVATE KEY----- oddíl privátním klíčem.
  2. Vytvořte tajný kód Kubernetes pro uložení přihlašovacích údajů aplikace GitHub pomocí kubectl create secret generic příkazu. Nezapomeňte zástupné symboly nahradit skutečnými hodnotami, které jste získali z procesu vytváření aplikace 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>'
    

Konfigurace sdílených složek Azure

Sdílenou složku Azure Files můžete připojit ve více podech zároveň pomocí AccessMode: ReadWriteMany k připojení stejné sdílené složky ve všech podech vytvořených replikovanou sadou ARC Kubernetes. Sdílenou složku Azure Files používáme následujícími způsoby:

  • Jako trvalá sdílená složka SMB pro ukládání balíčků NuGet používaných ukázkovou aplikací .NET do mezipaměti. Soubor arc-runners-set-pv-pvc.yaml vytvoří požadované PV a PVC pro připojení sdíleného úložiště Azure Files do podů škálovací sady ARC Runners. Pro tuto první možnost doporučujeme Azure File Premium. Přizpůsobte volumeAttributes a parametry jakéhokoli oboru názvů na obou manifestech PV a PVC, jak je znázorněno v následujícím příkladu:

    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
    
  • Dočasný svazek pro pracovní složku běžců GitHubu Vytvoříme také dvě třídy úložiště: Azure Files Standard (github-azurefile) a Azure File Premium (github-azurefile-premium). Tyto třídy umožňují vytvářet a odstraňovat svazky na vyžádání. Když se spustí úloha v GitHubu, vytvoří se v Kubernetes nový pod spouštěče. Současně se vytvoří a připojí nová sdílená složka úložiště Azure File. Objem existuje pouze během běhu úlohy. Třída Standard umožňuje libovolnou velikost svazku a Premium umožňuje minimálně 100 Gb svazku. Podle toho, kterou třídu dáváte přednost, můžete vybrat. Mějte na paměti, že Premium poskytuje lepší výkon. Soubor arc-runners-storage-class-files.yaml můžete přizpůsobit, ale není to nutné.

Vytvoření trvalého svazku a požadavku na trvalý svazek

  1. Pomocí příkazu kubectl apply vytvořte trvalý svazek a trvalý požadavek na svazek.

    kubectl apply -f ./install/arc-runners-set-pv-pvc.yaml --namespace "${NAMESPACE_ARC_RUNNERS}" --wait 
    
  2. Použijte třídu úložiště pro Azure Files pomocí kubectl apply příkazu.

    kubectl apply -f ./install/arc-runners-storage-class-files.yaml --wait 
    

Nainstalujte škálovací sadu ARC runners

Ukázka kódu, která je ze souboru arc-runners-set-values.yaml v instalační složce, může být upravena před instalací Helm chart sady spouštěčů.

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 

V tomto příkladu používáme přizpůsobenou verzi Kubernetes containerMode pro zahrnutí připojení svazků sdílených složek Azure File k balíčkům NuGet a efemérnímu svazku složky _work.

Následující parametry nejsou povinné ke změně:

  • storageClassName: Zvolte mezi github-azurefile-premium a github-azurefile.
  • storage: Zvolte velikost úložiště. Minimálně 100 Gb pro Premium.

Ostatní parametry Helmu se nastaví na příkazu helm install pomocí možnosti --set.

Kvůli kompatibilitě s funkcí kontejneru pracovního postupu GitHubu, která umožňuje spouštět kontejnery ve vaší pipelině, připojíme container-podspec-volume se specifikací podu pro pod pracovního postupu vytvořený službou ARC při spouštění pracovních postupů s funkcí kontejneru. Tato specifikace podu je připojena z mapy konfigurace vytvořené v arc-runners-set-container-pod-spec.yaml souboru v instalační složce. Nejsou vyžadovány žádné změny.

kubectl apply -f ./install/arc-runners-set-container-pod-spec.yaml 

Parametry grafu Helmu škálovací sady arc runnerů

Graf Helm škálovací sady arc runnerů poskytuje několik parametrů. Při instalaci škálovací sady s Azure File share volume mount na AKS jsou nejdůležitější následující parametry:

  • githubConfigUrl: Vaše organizace nebo úložiště GitHubu.
  • githubConfigSecret: Tajný kód aplikace GitHub pro přístup k GitHubu z místního spouštěče.
  • minRunners: Minimální počet spouštěčů ve škálovací sadě čekajících na nové úlohy z GitHubu.
  • maxRunners: Maximální počet spouštěčů, které spouštějí úlohy nebo čekají na nové úlohy z GitHubu.
  • runnerGroup: Skupina spouštěčů GitHubu používaná sadou ARC runnerů.

Stáhněte si Helm chart pro škálovací sady ARC Runnerů.

Nainstalujte chart Helm na AKS

Nainstalujte chart Helm škálovací sady ARC runnerů na AKS pomocí příkazu 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

Upgradujte instalaci škálovací sady běžců

Pokud chcete upgradovat jakoukoli konfiguraci ve škálovací sadě arc runners, můžete použít helm upgrade --install příkaz se stejnými parametry, které jste použili k instalaci škálovací sady. Pokud například chcete změnit minRunners parametr z 1 na 2, můžete spustit následující příkaz:

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

Další krok

Přispěvatelé

Microsoft udržuje tento článek. Následující přispěvatelé ho původně napsali:

  • Jorge Arterio | Vedoucí poradce pro cloud
  • Jeff Patterson | Hlavní produktový manažer
  • Rena Shah | Vedoucí produktový manažer
  • Shekhar Singh Sorot | Produktový manažer 2
  • Erin Schaffer | Content Developer 2