Skip to main content

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

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

法的通知

ログの記録

コントローラー、リスナー、ランナーを含む Actions Runner Controller (ARC) リソースは、標準出力 (stdout) にログを書き込みます。 これらのログを収集して格納するためのログ ソリューションを実装することをお勧めします。 ログを利用可能にすると、ユーザーや 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

master ブランチからのグラフの使用

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

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

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

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

自動スケーリング ランナー セットをインストールしたのにリスナー ポッドが作成されていない場合は、指定した githubConfigSecret が正しいことと、指定した githubConfigUrl が正確であることを確認します。 詳細については、「GitHub API に対する認証を行う」と「アクション ランナー コントローラーを使用してランナー スケール セットをデプロイする」を参照してください。

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

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

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

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

エラー: Name must have up to n characters

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

エラー: Access to the path /home/runner/_work/_tool is denied

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

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

  • securityContext.fsGroup をサポートするボリュームの種類を使用します。 hostPath ボリュームではこのプロパティはサポートされませんが、local ボリュームやその他の種類のボリュームではサポートされます。 ランナー ポッドの fsGroup を更新して、ランナーの GID と一致させます。 これを行うには、以下を含むように gha-runner-scale-set Helm チャートの値を更新します。 VERSION は、使用する actions-runner コンテナー イメージのバージョンに置き換えます。

    YAML
    spec:
        securityContext:
            fsGroup: 123
        containers:
        - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]
    
  • ランナー ポッドの securityContext を更新することが実行可能な解決策ではない場合は、initContainers を使用して、次のようにマウントされたボリュームの所有権を変更することで、この問題を回避できます。

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

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.