Protokollierung
Die ARC-Ressourcen (Actions Runner Controller), zu denen der Controller, der Listener und die Runner gehören, schreiben Protokolle in die Standardausgabe (stdout
). Du solltest eine Protokollierungslösung implementieren, um diese Protokolle zu sammeln und zu speichern. Verfügbare Protokolle können dich oder den GitHub-Support bei der Problembehandlung und beim Debuggen unterstützen. Weitere Informationen findest du in der Kubernetes-Dokumentation unter Protokollierungsarchitektur.
Ressourcenbezeichnungen
Bezeichnungen werden den vom Actions Runner Controller erstellten Ressourcen hinzugefügt, zu denen Controller, Listener und Runner-Pods gehören. Du kannst diese Bezeichnungen verwenden, um Ressourcen zu filtern und dir die Problembehandlung zu erleichtern.
Controllerpod
Die folgenden Bezeichnungen werden auf den Controllerpod angewendet.
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>
Listenerpod
Die folgenden Bezeichnungen werden auf Listenerpods angewendet.
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
Runner-Pod
Die folgenden Bezeichnungen werden auf Runner-Pods angewendet.
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
Überprüfen der Protokolle des Controllers und Runnersatzlisteners
Um die Protokolle des Controllerpods zu überprüfen, kannst du den folgenden Befehl verwenden.
kubectl logs -n <CONTROLLER_NAMESPACE> -l app.kubernetes.io/name=gha-runner-scale-set-controller
kubectl logs -n <CONTROLLER_NAMESPACE> -l app.kubernetes.io/name=gha-runner-scale-set-controller
Um die Protokolle des Runnersatzlisteners zu überprüfen, kannst du den folgenden Befehl verwenden.
kubectl logs -n <CONTROLLER_NAMESPACE> -l auto-scaling-runner-set-namespace=arc-systems -l auto-scaling-runner-set-name=arc-runner-set
kubectl logs -n <CONTROLLER_NAMESPACE> -l auto-scaling-runner-set-namespace=arc-systems -l auto-scaling-runner-set-name=arc-runner-set
Verwenden der Diagramme aus dem master
-Branch
Du solltest die Diagramme aus dem neuesten Release anstatt aus dem master
-Branch verwenden. Der master
-Branch ist sehr instabil, und wir können nicht garantieren, dass die Diagramme im master
-Branch zu einem bestimmten Zeitpunkt funktionieren.
Problembehandlung beim Listenerpod
Wenn der Controllerpod ausgeführt wird, der Listenerpod jedoch nicht, überprüfe zuerst anhand der Protokolle des Controllers, ob Fehler vorliegen. Wenn keine Fehler vorliegen und der Listenerpod des Runnersatzes weiterhin nicht ausgeführt wird, stelle sicher, dass der Controllerpod Zugriff auf den Kubernetes-API-Server in deinem Cluster hat.
Wenn du einen Proxy konfiguriert hast oder einen Sidecar-Proxy wie Istioverwendest, der automatisch eingefügt wird, stelle sicher, dass er so konfiguriert ist, dass Datenverkehr vom Controllercontainer (Manager) an den Kubernetes-API-Server zugelassen wird.
Wenn du den Autoskalierungsrunnersatz installiert hast, der Listenerpod jedoch nicht erstellt wird, überprüfe, ob das von dir bereitgestellte githubConfigSecret
korrekt ist, und die von dir bereitgestellte githubConfigUrl
stimmt. Weitere Informationen findest du unter Authentifizieren bei der GitHub-API und Bereitstellen von Runner-Skalierungsgruppen mit Actions Runner Controller.
Runner-Pods werden nach einer abgebrochenen Workflowausführung neu erstellt.
Sobald eine Workflowausführung abgebrochen wurde, treten die folgenden Ereignisse ein.
- Das Abbruchsignal wird direkt an die Runner gesendet.
- Die Runneranwendung wird beendet, wodurch auch die Runner-Pods beendet werden.
- Bei der nächsten Abfrage wird das Abbruchsignal vom Listener empfangen.
Zwischen dem Empfang des Signals durch die Runner und dem Empfang des Signals durch den Listener kann es zu einer geringfügigen Verzögerung kommen. Wenn Runner-Pods beginnen, herunterzufahren, versucht der Listener, neue Runner zu starten, um über die dem Zustand, in dem er sich befindet, entsprechende gewünschte Anzahl von Runnern zu verfügen. Wenn der Listener jedoch das Abbruchsignal empfängt, wird die Anzahl der Runner reduziert. Schließlich wird der Listener wieder auf die gewünschte Anzahl von Runnern skalieren. In der Zwischenzeit kannst du zusätzliche Runner bemerken.
Fehler: Name must have up to n characters
ARC verwendet die generierten Namen bestimmter Ressourcen als Bezeichnungen für andere Ressourcen. Aufgrund dieser Anforderung beschränkt ARC Ressourcennamen auf 63 Zeichen.
Da ein Teil des Ressourcennamens von dir definiert wird, legt ARC eine Beschränkung für die Anzahl der Zeichen fest, die du für den Installationsnamen und den Namespace verwenden kannst.
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
Fehler: Access to the path /home/runner/_work/_tool is denied
Dieser Fehler wird möglicherweise angezeigt, wenn du den Kubernetes-Modus mit persistenten Volumes verwendest. Dieser Fehler tritt auf, wenn der Runnercontainer mit einem Nicht-Root-Benutzer ausgeführt wird und einen Berechtigungskonflikt mit dem eingebundenen Volume verursacht.
Führe einen der folgenden Schritte aus, um das Problem zu beheben.
-
Verwende einen Volumetyp, der
securityContext.fsGroup
unterstützt.hostPath
-Volumes unterstützen diese Eigenschaft nicht, währendlocal
-Volumes und andere Arten von Volumes sie unterstützen. AktualisierefsGroup
deines Runnerpods der GID des Runners entsprechend. Hierzu kannst du diegha-runner-scale-set
-Helm-Diagrammwerte aktualisieren, um Folgendes einzuschließen. ErsetzeVERSION
durch die Version desactions-runner
-Containerimages, die du verwenden möchtest.YAML spec: securityContext: fsGroup: 123 containers: - name: runner image: ghcr.io/actions/actions-runner:latest command: ["/home/runner/run.sh"]
spec: securityContext: fsGroup: 123 containers: - name: runner image: ghcr.io/actions/actions-runner:latest command: ["/home/runner/run.sh"]
-
Wenn das Aktualisieren des
securityContext
deines Runner-Pods keine praktikable Lösung ist, kannst du das Problem umgehen, indem du mitinitContainers
den Besitz des eingebundenen Volumes wie folgt änderst.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"]
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"]
Rechtliche Hinweise
Teile wurden von https://github.com/actions/actions-runner-controller/ unter der Apache-2.0-Lizenz übernommen:
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.