はじめに
Actions Runner Controller (ARC) は、GitHub Actions のセルフホステッド ランナーを調整およびスケーリングする Kubernetes オペレーターです。 詳細については、Kubernetes ドキュメントの「オペレーター パターン」を参照してください。
ARC を使うと、リポジトリ、組織、またはエンタープライズで実行中のワークフローの数に基づいて自動的にスケーリングされるランナー スケール セットを作成できます。 制御されたランナーは一時的でコンテナーに基づく可能性があるため、新しいランナー インスタンスを迅速かつクリーンにスケールアップまたはスケールダウンすることができます。 自動スケーリングについて詳しくは、「セルフホステッド ランナーによる自動スケーリング」をご覧ください。
Kubernetes で Helm を使用して ARC を設定し、ランナー スケール セットを使用するワークフローを作成して実行できます。 ランナー スケール セットについて詳しくは、「アクション ランナー コントローラーを使用してランナー スケール セットをデプロイする」を参照してください。
前提条件
ARC を使用するには、以下のものがそろっていることを確認してください。
-
Kubernetes クラスター
-
マネージド クラウド環境の場合は、AKS を使用できます。 詳しくは、Azure ドキュメントの「Azure Kubernetes Service」を参照してください。
-
ローカル セットアップの場合は、minikube または kind を使用できます。 詳しくは、minikube ドキュメントの 「minikube start」と kind ドキュメントの「kind」を参照してください。
注: OpenShift クラスターは現在サポートされていません。
-
-
Helm 3
- 詳しくは、Helm ドキュメントの「Helm のインストール」を参照してください。
-
ARC をデプロイする必要はありませんが、実稼働ワークフローに ARC をデプロイする前に、コントローラー、リスナー、一時的ランナーからログを収集して保持する方法を実装することをお勧めします。
アクション ランナー コントローラーのインストール
-
オペレーターとカスタム リソース定義 (CRD) をクラスターにインストールするには、以下のようにします。
- Helm チャートで、
NAMESPACE
の値を、オペレーター ポッドを作成する場所に更新します。 この名前空間では、Kubernetes API サーバーへのアクセスを許可する必要があります。 - Helm チャートをインストールします。
次の例では、チャートの最新バージョンをインストールしています。 特定のバージョンをインストールするには、インストールするチャートのバージョンを指定した
--version
引数を渡します。 GitHub Container Registry にリリースの一覧があります。Bash NAMESPACE="arc-systems" helm install arc \ --namespace "${NAMESPACE}" \ --create-namespace \ oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
NAMESPACE="arc-systems" helm install arc \ --namespace "${NAMESPACE}" \ --create-namespace \ oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller
その他の Helm 構成オプションについては、ARC ドキュメントの
values.yaml
を参照してください。 - Helm チャートで、
-
ARC で GitHub に対して認証できるようにするには、personal access token を生成します。 詳しくは、「GitHub API に対する認証を行う」をご覧ください。
ランナー スケール セットの構成
-
ランナー スケール セットを構成するには、ARC 構成の値を使用して、ターミナルで次のコマンドを実行します。
コマンドを実行するときは、次の点に注意してください。
-
INSTALLATION_NAME
の値は慎重に更新してください。 インストール名は、ワークフローでruns-on
の値として使用することになります。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。 -
NAMESPACE
の値を、ランナー ポッドを作成する場所に更新します。 -
GITHUB_CONFIG_URL
を、リポジトリ、Organization、または Enterprise の URL に設定します。 これはランナーが属するエンティティです。 -
このコマンド例では、最新バージョンの Helm チャートをインストールしています。 特定のバージョンをインストールするには、インストールするチャートのバージョンを指定した
--version
引数を渡します。 GitHub Container Registry にリリースの一覧があります。注:
- セキュリティのベスト プラクティスとして、オペレーター ポッドを含む名前空間とは異なる名前空間にランナー ポッドを作成します。
- セキュリティのベスト プラクティスとして、Kubernetes シークレットを作成し、シークレット参照を渡します。 CLI を介してプレーンテキストでシークレットを渡すと、セキュリティ上のリスクが生じる可能性があります。 詳しくは、「アクション ランナー コントローラーを使用してランナー スケール セットをデプロイする」を参照してください。
Bash INSTALLATION_NAME="arc-runner-set" NAMESPACE="arc-runners" GITHUB_CONFIG_URL="https://github.com/<your_enterprise/org/repo>" GITHUB_PAT="<PAT>" helm install "${INSTALLATION_NAME}" \ --namespace "${NAMESPACE}" \ --create-namespace \ --set githubConfigUrl="${GITHUB_CONFIG_URL}" \ --set githubConfigSecret.github_token="${GITHUB_PAT}" \ oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
INSTALLATION_NAME="arc-runner-set" NAMESPACE="arc-runners" GITHUB_CONFIG_URL="https://github.com/<your_enterprise/org/repo>" GITHUB_PAT="<PAT>" helm install "${INSTALLATION_NAME}" \ --namespace "${NAMESPACE}" \ --create-namespace \ --set githubConfigUrl="${GITHUB_CONFIG_URL}" \ --set githubConfigSecret.github_token="${GITHUB_PAT}" \ oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set
その他の Helm 構成オプションについては、ARC ドキュメントの
values.yaml
を参照してください。
-
-
ターミナルから次のコマンドを実行して、インストールをチェックします。
Bash helm list -A
helm list -A
次のような出力が表示されます。
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION arc arc-systems 1 2023-04-12 11:45:59.152090536 +0000 UTC deployed gha-runner-scale-set-controller-0.4.0 0.4.0 arc-runner-set arc-runners 1 2023-04-12 11:46:13.451041354 +0000 UTC deployed gha-runner-scale-set-0.4.0 0.4.0
-
マネージャー ポッドをチェックするには、ターミナルで次のコマンドを実行します。
Bash kubectl get pods -n arc-systems
kubectl get pods -n arc-systems
すべてが正常にインストールされた場合、ポッドの状態は [実行中] と表示されます。
NAME READY STATUS RESTARTS AGE arc-gha-runner-scale-set-controller-594cdc976f-m7cjs 1/1 Running 0 64s arc-runner-set-754b578d-listener 1/1 Running 0 12s
インストールが成功しなかった場合、トラブルシューティング情報については、「Actions Runner Controller エラーのトラブルシューティング」を参照してください。
ランナー スケール セットの使用
次に、ランナー スケール セット ランナーを使用する簡単なテスト ワークフローを作成して実行しましょう。
-
リポジトリに次の例のようなワークフローを作成します。
runs-on
の値は、自動スケーリング ランナー セットのインストール時に使用した Helm インストール名と一致する必要があります。リポジトリへのワークフローの追加について詳しくは、「GitHub Actions のクイックスタート」を参照してください。
YAML name: Actions Runner Controller Demo on: workflow_dispatch: jobs: Explore-GitHub-Actions: # You need to use the INSTALLATION_NAME from the previous step runs-on: arc-runner-set steps: - run: echo "🎉 This job uses runner scale set runners!"
name: Actions Runner Controller Demo on: workflow_dispatch: jobs: Explore-GitHub-Actions: # You need to use the INSTALLATION_NAME from the previous step runs-on: arc-runner-set steps: - run: echo "🎉 This job uses runner scale set runners!"
-
ワークフローをリポジトリに追加したら、ワークフローを手動でトリガーします。 詳しくは、「ワークフローの手動実行」を参照してください。
-
ワークフローを実行しながら作成中のランナー ポッドを表示するには、ターミナルから次のコマンドを実行します。
Bash kubectl get pods -n arc-runners
kubectl get pods -n arc-runners
成功した場合の出力は次のようになります。
NAMESPACE NAME READY STATUS RESTARTS AGE arc-runners arc-runner-set-rmrgw-runner-p9p5n 1/1 Running 0 21s
次のステップ
Actions Runner Controller は、GitHub Actions ランナーを効率的に管理するのに役立ちます。 使い始める準備はできていますか。 ARC を使う次のステップに進む際は、以下のリソースが役立ちます。
- 認証情報について詳しくは、「GitHub API に対する認証を行う」を参照してください。
- ワークフローで ARC ランナーを使用する方法については、「ワークフローでの Actions Runner Controller の使用」を参照してください。
- デプロイ情報については、「アクション ランナー コントローラーを使用してランナー スケール セットをデプロイする」を参照してください。
法的通知
Apache-2.0 ライセンスのもとで https://github.com/actions/actions-runner-controller/ から一部を引用しています。
Copyright 2019 Moto Ishizawa
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.