在本文中,您將使用 Azure 檔案儲存體和 Helm 建立所需的基礎結構,以在 AKS 上部署高可用性的 Actions Runner Controller (ARC) 基礎設施。
開始之前
設定環境變數
設定下列環境變數,以在整個指南中使用:
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附上 GitHub 組織或存放庫的 URL。
如果可能,請將下列 選用 變數保留為預設值:
-
NAMESPACE_ARC_CONTROLLER:要執行 ARC 執行器擴展集控制器的 Kubernetes 命名空間名稱。 -
ARC_CONTROLLER_NAME:ARC 執行器擴展集控制器的名稱。 -
NAMESPACE_ARC_RUNNERS:執行 ARC 自我裝載執行器的 Kubernetes 命名空間名稱。 -
ARC_RUNNER_SCALESET_NAME: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 叢集
使用 az aks create 命令建立 AKS 叢集。
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 叢集,請使用 Kubernetes 命令列用戶端 kubectl。 如果您使用 Azure Cloud Shell,則已安裝 kubectl。 若要在本機安裝 kubectl,請使用 az aks install-cli 命令。
設定 kubectl 以使用
az aks get-credentials command來連接到您的 Kubernetes 叢集。 此命令會下載認證,並設定 Kubernetes CLI 來使用這些認證。az aks get-credentials --resource-group "${AKS_AND_STORAGE_ACCOUNT_RG}" --name "${AKS_CLUSTER_NAME}"使用
kubectl get nodes命令確認叢集的連線。 此命令會傳回 AKS 叢集中的節點清單。kubectl get nodes
建立 Azure 檔案共用
在能使用 Azure 檔案儲存體的檔案共用作為 Kubernetes 磁碟區之前,您必須建立 Azure 儲存體帳戶與檔案共用。 在本指南中,我們使用 Azure 檔案共用 Premium SMB,這個服務支援中繼資料快取。 您建立的每個分區的最低容量為 100 Gb。
使用命令
az storage account create建立儲存體帳戶。 下列命令會使用 Premium_LRS SKU 建立儲存體帳戶。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)使用命令
az storage share create建立 100 Gb 進階檔案共用。 在此範例中,我們使用 metadatacaching 作為共用名稱。 如果您變更此名稱,也必須變更arc-runners-set-pv.yaml檔案以反映此變更。az storage share create --name metadatacaching --quota 100 --connection-string "${AZURE_STORAGE_CONNECTION_STRING}"
安裝 ARC 執行器擴展集控制器
使用下列 helm install 命令來安裝 ARC 執行器擴展集控制器。
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 檔案儲存體會要求您使用用於從 AKS Pod 容器連線 Azure 檔案共用的儲存體金鑰在 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 命名空間,以使用命令
kubectl create namespace執行 ARC 自我託管執行器。kubectl create namespace "${NAMESPACE_ARC_RUNNERS}"使用 命令
kubectl create secret generic建立 Kubernetes 秘密,以儲存 Azure 檔案共用儲存體金鑰。kubectl create secret generic azure-storage-secret \ --namespace "${NAMESPACE_ARC_RUNNERS}" \ --from-literal=azurestorageaccountname=${STORAGE_ACCOUNT_NAME} \ --from-literal=azurestorageaccountkey=${STORAGE_KEY}
GitHub 應用程式秘密
建立 GitHub 應用程式,以允許自我裝載執行器使用 註冊 GitHub 應用程式 指南存取您的 GitHub 組織或存放庫。 GitHub 建立程式會提供下列參數:
-
GITHUB_APP_ID:GitHub 應用程式的 ID。 -
GITHUB_APP_INSTALLATION_ID:GitHub 應用程式的安裝 ID。 -
github_app_private_key:GitHub 應用程式的私密金鑰。 您需要將 -----BEGIN RSA PRIVATE KEY----- 區段取代為您的私密金鑰。
-
使用命令
kubectl create secret generic建立 Kubernetes 密碼以儲存 GitHub 應用程式認證。 確保將預留位置取代為您在 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 檔案共用設定
您可以使用 AccessMode: ReadWriteMany 在多個 Pod 中同時掛接 Azure 檔案儲存體的檔案共用,以便在 ARC Kubernetes 複本集建立的所有 Pod 中掛接相同的檔案共用。
我們會以下列方式使用 Azure Files 檔案共用:
作為持續性 SMB 檔案共用,以用於快取 .NET 範例應用程式所使用的 NuGet 套件。 arc-runners-set-pv-pv.yaml 檔案會建立必要的 PV 和 PVC,以在 ARC 執行器擴展集 Pod 中掛接 Azure 檔案儲存體的檔案共用。 我們建議針對第一個選項使用 Azure 檔案進階版。 請自訂
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作為 GitHub 執行器工作資料夾的暫時磁碟區。 我們也會建立兩個儲存體類別:Azure 檔案儲存體標準 (
github-azurefile) 和 Azure 檔案儲存體進階 (github-azurefile-premium)。 這些類別可讓您視需要建立及刪除磁碟區。 當 GitHub 作業執行時,會在 Kubernetes 上建立新的 Runner Pod,並建立並掛接新的 Azure 檔案共用。 該磁碟區僅在作業執行期間有效。 標準類別允許任何磁碟區大小,而進階類別則允許至少 100 Gb 磁碟區。 您可以選擇您喜歡的任何課程。 請記住,高級版為您提供更好的性能。 您可以自訂arc-runners-storage-class-files.yaml檔案,但不是必要條件。
建立永續性磁碟區和永續性磁碟區宣告
使用
kubectl apply指令,建立持久性磁碟區和持久性磁碟區宣告。kubectl apply -f ./install/arc-runners-set-pv-pvc.yaml --namespace "${NAMESPACE_ARC_RUNNERS}" --wait使用
kubectl apply命令來套用 Azure Files 的儲存體類別。kubectl apply -f ./install/arc-runners-storage-class-files.yaml --wait
安裝 ARC 執行器擴展集
以下程式碼片段來自安裝資料夾中的 arc-runners-set-values.yaml 檔案,您可以在安裝執行器集 Helm 圖表之前自訂該檔案。
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 檔案儲存體的檔案共用磁碟區掛接到 NuGet 套件和暫時 _work 資料夾磁碟區中。
下列參數不是必須變更的:
-
storageClassName:在 “github-azurefile-premium” 和 “github-azurefile” 之間進行選擇。 -
storage:選擇儲存空間的大小。 進階版至少 100 Gb。
其他 Helm 參數是透過在helm install命令中使用--set選項來設定的。
為了與允許您在管線內執行容器的 GitHub 工作流程容器功能相容,我們在使用容器功能執行工作流程時,使用 ARC 建立的工作流程 Pod 的 Pod 規格掛接了一個 container-podspec-volume。 此 Pod 規格是從在安裝資料夾中的 arc-runners-set-container-pod-spec.yaml 檔案上建立的組態對應掛接的。 無需更改。
kubectl apply -f ./install/arc-runners-set-container-pod-spec.yaml
ARC 執行器擴展集 Helm 圖表參數
ARC 執行器擴展集 Helm 圖表提供一些參數。 在 AKS 上安裝具有 Azure 檔案儲存體的共用磁碟區掛接的擴展集時,下列參數是最重要的:
-
githubConfigUrl:您的 GitHub 組織或存放庫。 -
githubConfigSecret:用於從自我裝載執行器存取 GitHub 的 GitHub 應用程式秘密。 -
minRunners:在擴展集上等待來自 GitHub 的新作業的執行器的最小數目。 -
maxRunners:正在執行作業或等待來自 GitHub 的新作業的執行器的最大數目。 -
runnerGroup:ARC 執行器集使用的 GitHub 執行器群組。
在 AKS 上安裝 Helm 圖表
使用 helm install 命令在 AKS 上安裝 ARC 執行器擴展集 Helm 圖表。
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
升級執行器擴展集安裝
如果您想要升級 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
後續步驟
貢獻者們
本文由 Microsoft 維護。 原始撰寫此內容的貢獻者如下:
- 豪爾赫·阿特里奧 |資深雲端倡導者
- 傑夫·帕特森 |首席產品經理
- 蕾娜·沙阿 |資深產品經理
- 謝卡爾·辛格·索羅特 |產品經理 2
- Erin Schaffer |內容開發人員 2