Azure Dosyalar'ı kullanarak Azure Kubernetes Service'te (AKS) yüksek oranda kullanılabilir GitHub Actions dağıtmak için altyapı oluşturma

Bu makalede, Azure Dosyalar ve Helm kullanarak AKS üzerinde yüksek oranda kullanılabilir bir Actions Runner Controller (ARC) altyapısı dağıtmak için gereken altyapıyı oluşturacaksınız.

Başlamadan önce

Ortam değişkenlerini belirleme

Bu kılavuz boyunca kullanmak üzere aşağıdaki ortam değişkenlerini ayarlayın:

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

Aşağıdaki gerekli değişkenlerin değerlerini değiştirdiğinden emin olun:

  • AKS_AND_STORAGE_ACCOUNT_RG depolama hesabı ve AKS kümesinin kullandığı kaynak grubunun adıyla.
  • AKS_CLUSTER_NAME AKS kümesinin adıyla birlikte.
  • STORAGE_ACCOUNT_NAME depolama hesabının adıyla birlikte.
  • AKS_STORAGE_ACCOUNT_LOCATION kaynak oluşturulacak bölgenin adıyla. Bu örnekte, performans ve maliyet yönetimini kolaylaştırmak için bunları AKS kümesiyle aynı bölgeye dağıtacağız.
  • GITHUB_CONFIG_URL ve GitHub kuruluşunun veya deponun URL'sini seçin.

Mümkünse aşağıdaki isteğe bağlı değişkenleri varsayılan olarak tutun:

  • NAMESPACE_ARC_CONTROLLER: ARC runner'ları ölçek kümesi denetleyicisini çalıştırmak için Kubernetes ad alanının adı.
  • ARC_CONTROLLER_NAME: ARC çalıştırıcı ölçekleme kümesi denetleyicisinin adı.
  • NAMESPACE_ARC_RUNNERS: ARC kendi sunucunuzda barındırılan çalıştırıcıları çalıştırmak için Kubernetes ad alanının adı.
  • ARC_RUNNER_SCALESET_NAME: ARC runners ölçek kümesinin adı.
  • ARC_RUNNER_GITHUB_SECRET_NAME: GitHub gizli anahtarının adı.

Gerekli uzantıları yükleme

aks-preview, k8s-extension ve amg uzantıları Kubernetes kümelerini yönetmek ve Azure kaynaklarını sorgulamak için daha fazla işlevsellik sağlar. Aşağıdaki az extension add komutları kullanarak bu uzantıları yükleyin:

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

Bir kaynak grubu oluşturun

az group create komutunu kullanarak bir kaynak grubu oluşturun. Bu kaynak grubu AKS kümesini ve Azure Dosyalar depolama hesabını barındıracaktır.

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

AKS kümesi oluşturma

az aks create komutunu kullanarak bir AKS kümesi oluşturun.

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 kümesine bağlanma

Bir Kubernetes kümesini yönetmek için, Kubernetes komut satırı istemcisi olan kubectl'i kullanın. Azure Cloud Shell kullanıyorsanız kubectl zaten yüklüdür. Kubectl'yi yerel olarak yüklemek için komutunu kullanın az aks install-cli .

  1. 'kubectl'yi az aks get-credentials command kullanarak Kubernetes kümenize bağlanacak şekilde yapılandırın. Bu komut, kimlik bilgilerini indirir ve Kubernetes CLI'yi bunları kullanacak şekilde yapılandırır.

    az aks get-credentials --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" --name "${AKS_CLUSTER_NAME}"
    
  2. Kümelenize olan bağlantınızı kubectl get nodes komutunu kullanarak doğrulayın. Bu komut AKS kümenizdeki düğümlerin listesini döndürür.

    kubectl get nodes
    

Azure dosya paylaşımı oluşturma

Bir Azure Dosyalar dosya paylaşımını Kubernetes birimi olarak kullanabilmeniz için önce bir Azure depolama hesabı ve dosya paylaşımı oluşturmanız gerekir. Bu kılavuzda, meta verileri önbelleğe alma desteğiyle Azure dosya paylaşımı Premium SMB'sini kullanacağız. Oluşturduğunuz her paylaşım için en az 100 Gb'tır .

  1. komutunu kullanarak az storage account create bir depolama hesabı oluşturun. Aşağıdaki komut, Premium_LRS SKU'yu kullanarak bir depolama hesabı oluşturur.

    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. Bağlantı dizesini, komutunu kullanarak dosya paylaşımını oluşturmak için kullandığınız bir ortam değişkeni olarak dışarı aktarın 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)
    
  3. komutunu kullanarak 100 Gb Premium dosya paylaşımı oluşturun az storage share create . Bu örnekte, paylaşım adı olarak meta veri ayıklamayı kullanırız. Bu adı değiştirirseniz, dosyayı da bu değişikliği yansıtacak şekilde değiştirmeniz arc-runners-set-pv.yaml gerekir.

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

ARC çalıştırıcıları ölçek kümesi denetleyicisini yükleyin

Aşağıdaki helm install komutu kullanarak ARC çalıştırıcıları ölçek kümesi denetleyicisini yükleyin.

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 gizli anahtarlar oluşturma

Azure dosya paylaşımı depolama gizli anahtarı

Azure Dosyalar, AKS pod kapsayıcısından Azure dosya paylaşımını bağlamak için kullanılan depolama anahtarıyla AKS üzerinde bir gizli oluşturmanızı gerektirir.

  1. komutunu kullanarak depolama hesabı anahtarını ortam değişkeni olarak dışarı aktarın 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) 
    
  2. kubectl create namespace komutunu kullanarak ARC'nin kendi kendine barındırılan çalıştırıcılarını çalıştırmak için bir Kubernetes ad alanı oluşturun.

    kubectl create namespace "${NAMESPACE_ARC_RUNNERS}" 
    
  3. kubectl create secret generic komutunu kullanarak Azure dosya paylaşımı depolama anahtarını depolamak için bir Kubernetes sırrı oluşturun.

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

GitHub uygulama gizli anahtarı

  1. GitHub uygulaması kaydetme kılavuzunu kullanarak şirket içinde barındırılan çalıştırıcının GitHub kuruluşunuza veya deponuza erişmesine izin vermek için bir GitHub uygulaması oluşturun. GitHub oluşturma işlemi size aşağıdaki parametreleri sağlar:

    • GITHUB_APP_ID: GitHub uygulamasının kimliği.
    • GITHUB_APP_INSTALLATION_ID: GitHub uygulamasının yükleme kimliği.
    • github_app_private_key: GitHub uygulamasının özel anahtarı. -----BEGIN RSA PRIVATE KEY----- bölümünü özel anahtarınız ile değiştirmeniz gerekir.
  2. GitHub uygulaması kimlik bilgilerini depolamak için kubectl create secret generic komutunu kullanarak bir Kubernetes secret oluşturun. Yer tutucuları GitHub uygulama oluşturma işleminden aldığınız gerçek değerlerle değiştirdiğinizden emin olun.

    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 dosya paylaşımı yapılandırmaları

Arc Kubernetes çoğaltma kümesi tarafından oluşturulan tüm podlarda aynı dosya paylaşımını bağlamak için AccessMode: ReadWriteMany kullanarak Azure Dosyalar dosya paylaşımını aynı anda birden çok poda bağlayabilirsiniz. Azure Dosyalar dosya paylaşımını aşağıdaki yollarla kullanırız:

  • .NET örnek uygulaması tarafından kullanılan NuGet paketlerini önbelleğe almak için kalıcı bir SMB dosya paylaşımı olarak. arc-runners-set-pv-pvc.yaml dosyası, ARC runners scale set podlarına Azure Files dosya paylaşımını bağlamak için gerekli PV ve PVC'yi oluşturur. Bu ilk seçenek için Azure Dosya Ekstra'nın kullanılması önerilir. Aşağıdaki örnekte gösterildiği gibi hem PV hem de PVC bildirimlerinde volumeAttributes öğesini ve herhangi bir ad alanı parametrelerini özelleştirin:

    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
    
  • GitHub yürütücülerinin çalışma klasörü için geçici birim olarak. Ayrıca iki depolama sınıfı da oluşturuyoruz: Azure Dosyalar Standart (github-azurefile) ve Azure Dosya Ekstra (github-azurefile-premium). Bu sınıflar, isteğe bağlı birimler oluşturmanıza ve silmenize olanak sağlar. GitHub işi çalıştırıldığında Kubernetes'te yeni bir runner pod oluşturulur ve yeni bir Azure Dosya dosya paylaşımı oluşturulur ve bağlanır. Hacim yalnızca iş çalışması sırasında bulunur. Standart sınıf herhangi bir birim boyutuna izin verir ve Premium en az 100 Gb birim sağlar. Hangi sınıfı tercih ettiğinizi seçebilirsiniz. Premium'un size daha iyi bir performans sağladığını unutmayın. Dosyayı özelleştirebilirsiniz arc-runners-storage-class-files.yaml , ancak gerekli değildir.

Kalıcı volume ve persistent volume talebi oluşturma

  1. kubectl apply komutunu kullanarak kalıcı birim ve kalıcı birim talebi oluşturun.

    kubectl apply -f ./install/arc-runners-set-pv-pvc.yaml --namespace "${NAMESPACE_ARC_RUNNERS}" --wait 
    
  2. komutunu kullanarak Azure Dosyalar için depolama sınıfını kubectl apply uygulayın.

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

ARC çalıştırıcıları ölçek kümesini yükleme

Aşağıdaki kod parçacığı, runner kümesini kurmadan önce özelleştirebileceğiniz kurulum klasöründeki arc-runners-set-values.yaml dosyasındandır.

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 

Bu örnekte, NuGet paketlerine ve kısa ömürlü _work klasör birimine Azure Dosya paylaşımı birim bağlamalarını eklemek için Kubernetes'in containerMode özelleştirilmiş bir sürümünü kullanıyoruz.

Aşağıdaki parametrelerin değiştirilmesi zorunlu değildir:

  • storageClassName: "github-azurefile-premium" ile "github-azurefile" arasında seçim yapın.
  • storage: Depolamanın boyutunu seçin. Premium için en az 100 Gb.

Helm'in diğer parametreleri, helm install seçeneği kullanılarak --set komutunda ayarlanır.

İşlem hattınızda kapsayıcı çalıştırmanıza olanak tanıyan GitHub İş Akışı kapsayıcısı özelliğiyle uyumluluk için, kapsayıcı özelliğiyle iş akışlarını çalıştırırken ARC tarafından oluşturulan iş akışı podunun pod belirtimini içeren bir container-podspec-volume ekleriz. Bu pod tanımı, yükleme klasöründeki arc-runners-set-container-pod-spec.yaml dosyasında oluşturulan bir yapılandırma haritasından monte edilir. Değişiklik gerekmez.

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

ARC koşucuları ölçek kümesi Helm grafiği parametreleri

ARC runners ölçek kümesi Helm grafiği birkaç parametre sağlar. AKS'ye Azure Dosya paylaşımı birimi bağlama ile bir ölçek kümesi yüklerken en önemli parametreler şunlardır:

  • githubConfigUrl: GitHub kuruluşunuz veya deponuz.
  • githubConfigSecret: GitHub'a kendi kendine barındırılan çalıştırıcıdan erişmek için GitHub uygulama gizli anahtarı.
  • minRunners: Ölçek kümesindeki GitHub'dan yeni iş bekleyen en az koşucu sayısı.
  • maxRunners: GitHub'dan iş çalıştıran veya yeni iş bekleyen çalışan sayısı üst sınırı.
  • runnerGroup: ARC çalıştırıcıları kümesi tarafından kullanılan GitHub çalıştırıcı grubu.

ARC runners ölçek kümesi Helm grafiğini indirin.

HELM grafiğini AKS'ye yükleme

ARC çalıştırıcılar ölçek kümesi Helm grafiğini, helm install komutunu kullanarak AKS'ye yükleyin.

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

Çalıştırıcı ölçek seti kurulumunu yükseltme

ARC çalıştırıcıları ölçek kümesindeki herhangi bir yapılandırmayı yükseltmek istiyorsanız, ölçek kümesini yüklemek için kullandığınız parametrelerle birlikte helm upgrade --install komutunu kullanabilirsiniz. Örneğin, parametresini minRunners1'den2'ye değiştirmek istiyorsanız aşağıdaki komutu çalıştırabilirsiniz:

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

Sonraki adım

Katkıda Bulunanlar

Microsoft bu makaleyi korur. Başlangıçta aşağıdaki katkıda bulunanlar yazdı:

  • Jorge Arterio | Üst Düzey Bulut Danışmanı
  • Jeff Patterson | Ana Ürün Yöneticisi
  • Rena Shah | Kıdemli Ürün Yöneticisi
  • Shekhar Singh Sorot | Product Manager 2
  • Erin Schaffer | İçerik Geliştirici 2