Skip to main content

Actions Runner Controller エラーのトラブルシューティング

Actions Runner Controller エラーのトラブルシューティング方法について説明します。

ログ記録

コントローラー、リスナー、ランナーを含む Actions Runner Controller (ARC) リソースは、標準出力 () にログを書き込みます。 これらのログを収集して格納するためのログ ソリューションを実装することをお勧めします。 ログが利用可能であることは、トラブルシューティングやデバッグの際に、あなたやGitHubサポートに役立ちます。 詳細については、Kubernetes のドキュメントの「Logging Architecture (ロギングのアーキテクチャ)」を参照してください。

リソース ラベル

ラベルは、コントローラー、リスナー、ランナー ポッドを含む Actions Runner Controller によって作成されたリソースに追加されます。 これらのラベルを使用して、リソースをフィルター処理し、トラブルシューティングに役立てることができます。

コントローラー ポッド

コントローラー ポッドには、次のラベルが適用されます。

app.kubernetes.io/component=controller-manager
app.kubernetes.io/instance=<controller installation name>
app.kubernetes.io/name=gha-runner-scale-set-controller
app.kubernetes.io/part-of=gha-runner-scale-set-controller
app.kubernetes.io/version=<chart version>

リスナー ポッド

リスナー ポッドには、次のラベルが適用されます。

actions.github.com/enterprise= # Will be populated if githubConfigUrl is an enterprise URL
actions.github.com/organization= # Will be populated if githubConfigUrl is an organization URL
actions.github.com/repository= # Will be populated if githubConfigUrl is a repository URL
actions.github.com/scale-set-name= # Runners scale set name
actions.github.com/scale-set-namespace= # Runners namespace
app.kubernetes.io/component=runner-scale-set-listener
app.kubernetes.io/part-of=gha-runner-scale-set
app.kubernetes.io/version= # Chart version

ランナー ポッド

ランナー ポッドには、次のラベルが適用されます。

actions-ephemeral-runner= # True | False
actions.github.com/organization= # Will be populated if githubConfigUrl is an organization URL
actions.github.com/scale-set-name= # Runners scale set name
actions.github.com/scale-set-namespace= # Runners namespace
app.kubernetes.io/component=runner
app.kubernetes.io/part-of=gha-runner-scale-set
app.kubernetes.io/version= # Chart version

コントローラーとランナーセットリスナーのログを確認する

コントローラー ポッドのログを確認するには、次のコマンドを使用します。

Bash
kubectl logs -n <CONTROLLER_NAMESPACE> -l app.kubernetes.io/name=gha-runner-scale-set-controller

ランナー セット リスナーのログを確認するには、次のコマンドを使用します。

Bash
kubectl logs -n <CONTROLLER_NAMESPACE> -l auto-scaling-runner-set-namespace=arc-systems -l auto-scaling-runner-set-name=arc-runner-set

ブランチのグラフを使用

ブランチではなく、最新リリースのグラフを使用することをお勧めします。 ブランチはかなり不安定であり、 ブランチ内のグラフが特定の時点で動作することは保証できません。

リスナー ポッドのトラブルシューティング

コントローラー ポッドが実行されているのにリスナー ポッドが実行されない場合は、まずコントローラーのログを調べて、エラーがあるかどうかを確認します。 エラーがないのにランナー セット リスナー ポッドが実行されない場合は、コントローラー ポッドがクラスター内の Kubernetes API サーバーにアクセスできることを確認します。

プロキシが構成されているか、Istio などの自動的に挿入されるサイドカー プロキシを使用している場合は、コントローラー コンテナー (マネージャー) から Kubernetes API サーバーへのトラフィックを許可するように構成されていることを確認します。

自動スケーリングランナーセットをインストールしたのに、リスナーポッドが作成されていない場合は、指定した情報が正しいかどうか、また入力が正確かどうかを確認してください。 詳細については、「AUTOTITLE」と「AUTOTITLE」を参照してください。

取り消されたワークフロー実行後にランナー ポッドが再び作成される

ワークフローの実行が取り消されると、次のイベントが発生します。

  • 取り消しシグナルがランナーに直接送信されます。
  • ランナー アプリケーションが終了し、ランナー ポッドも終了します。
  • 次のポーリング時に、取り消しシグナルがリスナーによって受信されます。

ランナーがシグナルを受信してからリスナーがシグナルを受信するまでに若干の遅延が発生する可能性があります。 ランナー ポッドの終了が開始されると、リスナーは、その状態に応じて、必要なランナー数と一致するように新しいランナーの起動を試みます。 ただしリスナーは、取り消しシグナルを受信すると、ランナーの数を減らすように動作します。 最終的に、リスナーは目的のランナー数までスケール ダウンします。 それまでの間は、余分なランナーが表示される可能性があります。

エラー:

ARC は、特定のリソースに対して生成された名前を他のリソースのラベルとして使用します。 この要件により、ARC ではリソース名が 63 文字に制限されます。

リソース名の一部はユーザーによって定義されているため、ARC はインストール名と名前空間に使用できる文字数に制限を設けています。

Error: INSTALLATION FAILED: execution error at (gha-runner-scale-set/templates/autoscalingrunnerset.yaml:5:5): Name must have up to 45 characters

Error: INSTALLATION FAILED: execution error at (gha-runner-scale-set/templates/autoscalingrunnerset.yaml:8:5): Namespace must have up to 63 characters

エラー:

永続ボリュームで Kubernetes モードを使用している場合に、このエラーが表示されることがあります。 このエラーは、ランナー コンテナーが非ルート ユーザーで実行されていて、アクセス許可がマウントされたボリュームと一致しない場合に発生します。

これを解決するには、次のいずれかを行います。

  • サポートしているボリュームタイプを使用します。 ボリュームではこのプロパティはサポートされませんが、 ボリュームやその他の種類のボリュームではサポートされます。 ランナーポッドの設定を更新して、ランナーのGIDと一致させます。 これを行うには、以下を含むように Helm チャートの値を更新します。 使用するコンテナー イメージのバージョンで置換します。

    YAML
    template:
      spec:
        securityContext:
          fsGroup: 123
        containers:
          - name: runner
            image: ghcr.io/actions/actions-runner:latest
            command: ["/home/runner/run.sh"]
    
  • ランナーポッドの設定を更新することが現実的な解決策でない場合、以下の方法でマウントされたボリュームの所有権を変更することで問題を回避できます。

    YAML
    template:
      spec:
        initContainers:
          - name: kube-init
            image: ghcr.io/actions/actions-runner:latest
            command: ["sudo", "chown", "-R", "1001:123", "/home/runner/_work"]
        volumeMounts:
          - name: work
            mountPath: /home/runner/_work
        containers:
          - name: runner
            image: ghcr.io/actions/actions-runner:latest
            command: ["/home/runner/run.sh"]
    

エラー:

GitHub App のアクセス トークンを取得しようとしたときの エラーは、ネットワーク タイム プロトコル (NTP) の誤差が発生したことが原因の可能性があります。 Kubernetes システムが NTP サーバーと正確に同期していること、大幅な時間のずれがないことを確認してください。 システム時刻が GitHub 時刻より遅れている場合は、まだ余裕がありますが、環境が数秒以上進んでいる場合は、GitHub App を使うと 401 エラーが発生します。

ランナー グループの制限

1 つのランナー グループで最大 10,000 個のセルフホステッド ランナーを使用できます。 この制限に達すると、新しいランナーを追加できなくなります。

ランナーの更新

警告

メジャー リリース、マイナー リリース、パッチ リリースなど、ソフトウェア用にリリースされた更新プログラムは、利用可能な更新プログラムと見なされます。 30 日以内にソフトウェアを更新しないと、GitHub Actions サービスはランナーへのジョブをキューに入れなくなります。 さらに、重要なセキュリティ更新プログラムが必要な場合、GitHub Actions サービスは、更新されるまで、ランナーへのジョブをキューに入れません。

使用しているランナー ソフトウェアのバージョンやカスタム ランナー イメージが最新バージョンを実行していることを確認します。

詳しくは、「AUTOTITLE」をご覧ください。

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.