この記事では、Azure Files と 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_NAMEAKS クラスターの名前を指定します。 -
STORAGE_ACCOUNT_NAMEストレージ アカウントの名前を指定します。 -
AKS_STORAGE_ACCOUNT_LOCATIONリソースを作成するリージョンの名前を指定します。 この例では、パフォーマンスとコスト管理を容易にするために、それらを AKS クラスターと同じリージョンにデプロイします。 -
GITHUB_CONFIG_URLGitHub 組織またはリポジトリへの 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 Files ストレージ アカウントが保持されます。
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 コマンドを使用します。
az aks get-credentials commandを使用して Kubernetes クラスターに接続するように kubectl を構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように 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 Files ファイル共有を 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 FileStorageaz 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 Premium ファイル共有を作成します。 この例では、共有名として 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 Files では、AKS ポッド コンテナーから 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)kubectl create namespaceコマンドを使用して ARC セルフホステッド ランナーを実行する Kubernetes 名前空間を作成します。kubectl create namespace "${NAMESPACE_ARC_RUNNERS}"kubectl create secret genericコマンドを使用して、Azure ファイル共有ストレージ キーを格納する Kubernetes シークレットを作成します。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 秘密キー-----セクションを秘密キーに置き換える必要があります。
-
kubectl create secret genericコマンドを使用して、GitHub アプリの資格情報を格納する Kubernetes シークレットを作成します。 プレースホルダーは、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を使用して複数のポッドに Azure Files ファイル共有を同時にマウントし、ARC Kubernetes レプリカ セットによって作成されたすべてのポッドに同じファイル共有をマウントできます。
Azure Files ファイル共有は、次の方法で使用します。
.NET サンプル アプリケーションで使用される NuGet パッケージをキャッシュする 永続的な SMB ファイル共有 として。 arc-runners-set-pv-pvc.yaml ファイルは、ARC ランナー スケール セット ポッドに Azure Files ファイル共有をマウントするために必要な PV と PVC を作成します。 この最初のオプションには Azure File Premium をお勧めします。 次の例に示すように、PV マニフェストと PVC マニフェストの両方で、
volumeAttributesと名前空間のパラメーターをカスタマイズしてください。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-runnersGitHub runners 作業フォルダーの エフェメラル ボリューム として。 また、Azure Files Standard (
github-azurefile) と Azure File Premium (github-azurefile-premium) の 2 つのストレージ クラスも作成します。 これらのクラスを使用すると、必要に応じてボリュームを作成および削除できます。 GitHub ジョブが実行されると、Kubernetes に新しいランナー ポッドが作成され、新しい Azure ファイルファイル共有が作成されてマウントされます。 ボリュームはジョブの実行中だけ存在します。 Standard クラスでは任意のボリューム サイズが許可され、Premium では 100 Gb 以上 のボリュームが許可されます。 任意のクラスを選択できます。 Premium ではパフォーマンスが向上します。arc-runners-storage-class-files.yamlファイルはカスタマイズできますが、必須ではありません。
永続ボリュームと永続ボリューム要求を作成する
kubectl applyコマンドを使用して、永続ボリュームと永続ボリュームの要求を作成します。kubectl apply -f ./install/arc-runners-set-pv-pvc.yaml --namespace "${NAMESPACE_ARC_RUNNERS}" --waitkubectl applyコマンドを使用して、Azure Files のストレージ クラスを適用します。kubectl apply -f ./install/arc-runners-storage-class-files.yaml --wait
ARC ランナー スケール セットをインストールする
次のコード スニペットは、ランナー セット Helm チャートをインストールする前にカスタマイズできる、インストール フォルダー内の arc-runners-set-values.yaml ファイルのコード スニペットです。
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: ストレージのサイズを選択します。 Premium の場合は 100 Gb 以上。
その他の Helm パラメーターは、helm install オプションを使用して --set コマンドで設定されます。
パイプライン内でコンテナーを実行できる GitHub ワークフロー コンテナー機能との互換性を確保するため、コンテナー機能を使用してワークフローを実行するときに ARC によって作成されたワークフロー ポッドのポッド 仕様で container-podspec-volume をマウントします。 このポッド スペックは、インストール フォルダー内のファイル 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 ランナー グループ。
ARC ランナー スケール セットの Helm チャートをダウンロードする。
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