Chaos Mesh in GitHub Actions integrieren
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Dieses Dokument beschreibt, wie Sie Chaos Mesh mithilfe von chaos-mesh-action in Ihre Continuous Integration (CI) einbinden können. So identifizieren Sie frühzeitig Probleme, die während der Systementwicklung eingeführt wurden, bevor Produktreleases erfolgen.
chaos-mesh-action ist eine GitHub-Action, die auf dem GitHub Marketplace verfügbar ist. Der Quellcode findet sich ebenfalls auf GitHub.
Aufbau von chaos-mesh-action
GitHub Action ist die native Continuous Integration (CI)- und Continuous Deployment (CD)-Funktion von GitHub. Mit GitHub Actions automatisieren und individualisieren Sie Entwicklungs-Workflows direkt in Ihrem Repository.
Durch GitHub Action lässt sich Chaos Mesh nahtlos in Ihre tägliche Entwicklung und Tests integrieren. So stellen Sie sicher, dass sämtlicher auf GitHub eingereichter Code fehlerfrei ist (zumindest Tests besteht), ohne bestehende Logik zu beeinträchtigen. Die folgende Abbildung zeigt chaos-mesh-action in einem CI-Workflow:

chaos-mesh-action in GitHub-Workflow verwenden
chaos-mesh-action arbeitet mit GitHub-Workflows. Ein GitHub-Workflow ist ein konfigurierbarer Automatisierungsprozess. Sie können Workflows in Ihrem Repository einrichten, um GitHub-Projekte zu bauen, testen, verpacken, veröffentlichen oder bereitzustellen. Gehen Sie wie folgt vor, um Chaos Mesh in Ihre CI zu integrieren:
-
Schritt 1: Workflow entwerfen
-
Schritt 2: Workflow erstellen
-
Schritt 3: Workflow ausführen
Schritt 1: Workflow entwerfen
Berücksichtigen Sie vor dem Entwurf folgende Fragen:
-
Welche Funktionalitäten sollen in diesem Workflow getestet werden?
-
Welche Fehlerarten sollen injiziert werden?
-
Wie wird die Systemkorrektheit verifiziert?
Beispielsweise lässt sich ein einfacher Test-Workflow mit diesen Schritten entwerfen:
-
Zwei Pods im Kubernetes-Cluster erstellen.
-
Ping-Anfragen von einem Pod an einen anderen senden.
-
Netzwerklatenzfehler mit Chaos Mesh injizieren, um zu prüfen, ob der Ping-Befehl beeinträchtigt wird.
Schritt 2: Workflow erstellen
Nach dem Workflow-Entwurf führen Sie folgende Schritte zur Erstellung aus:
-
Navigieren Sie zum GitHub-Repository der zu testenden Software.
-
Klicken Sie auf
Actionsund dann aufNew workflow, um einen Workflow anzulegen.

Ein Workflow ist im Kern eine sequenzielle Automatisierungskonfiguration für Jobs. Hinweis: Der folgende Job ist in einer einzelnen Datei konfiguriert. Zur besseren Veranschaulichung wird das Skript in Arbeitsgruppen unterteilt, wie unten dargestellt:
-
Workflow-Namen und Triggerregeln festlegen.
Benennen Sie den Workflow als "Chaos". Beim Committen von Code oder Erstellen eines Pull Requests in den Master-Branch wird dieser Workflow ausgelöst.
name: Chaos
on:
push:
branches:
- master
pull_request:
branches:
- master -
Installieren der CI-Umgebung.
Diese Konfiguration legt das Betriebssystem (Ubuntu) fest und erstellt einen Kind-Cluster mit helm/kind-action. Anschließend werden die Cluster-Informationen ausgegeben. Abschließend wird das GitHub-Repository, auf das der Workflow zugreifen soll, ausgecheckt.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Creating kind cluster
uses: helm/kind-action@v1.0.0-rc.1
- name: Print cluster information
run: |
kubectl config view
kubectl cluster-info
kubectl get nodes
kubectl get pods -n kube-system
helm version
kubectl version
- uses: actions/checkout@v2 -
Bereitstellen einer Anwendung.
Im folgenden Beispiel stellt dieser Job eine Anwendung bereit, die zwei Kubernetes-Pods erstellt.
- name: Deploy an application
run: |
kubectl apply -f https://raw.githubusercontent.com/chaos-mesh/apps/master/ping/busybox-statefulset.yaml -
Fehler mit Chaos Mesh injizieren.
- name: Run chaos mesh action
uses: chaos-mesh/chaos-mesh-action@v0.5
env:
CHAOS_MESH_VERSION: v1.0.0
CFG_BASE64: YXBpVmVyc2lvbjogY2hhb3MtbWVzaC5vcmcvdjFhbHBoYTEKa2luZDogTmV0d29ya0NoYW9zCm1ldGFkYXRhOgogIG5hbWU6IG5ldHdvcmstZGVsYXkKICBuYW1lc3BhY2U6IGJ1c3lib3gKc3BlYzoKICBhY3Rpb246IGRlbGF5ICMgdGhlIHNwZWNpZmljIGNoYW9zIGFjdGlvbiB0byBpbmplY3QKICBtb2RlOiBhbGwKICBzZWxlY3RvcjoKICAgIHBvZHM6CiAgICAgIGJ1c3lib3g6CiAgICAgICAgLSBidXN5Ym94LTAKICBkZWxheToKICAgIGxhdGVuY3k6ICIxMG1zIgogIGR1cmF0aW9uOiAiNXMiCiAgc2NoZWR1bGVyOgogICAgY3JvbjogIkBldmVyeSAxMHMiCiAgZGlyZWN0aW9uOiB0bwogIHRhcmdldDoKICAgIHNlbGVjdG9yOgogICAgICBwb2RzOgogICAgICAgIGJ1c3lib3g6CiAgICAgICAgICAtIGJ1c3lib3gtMQogICAgbW9kZTogYWxsCg==Mit chaos-mesh-action wird Chaos Mesh automatisch installiert und injiziert Fehler. Sie müssen lediglich die Konfiguration des Chaos-Experiments vorbereiten und den Base64-kodierten Wert daraus abrufen. Um Netzwerklatenz in einen Pod zu injizieren, können Sie folgende Beispielkonfiguration verwenden:
apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-delay
namespace: busybox
spec:
action: delay # the specific chaos action to inject
mode: all
selector:
pods:
busybox:
- busybox-0
delay:
latency: '10ms'
duration: '5s'
scheduler:
cron: '@every 10s'
direction: to
target:
selector:
pods:
busybox:
- busybox-1
mode: allRufen Sie den Base64-kodierten Wert der Chaos-Experiment-Konfigurationsdatei mit diesem Befehl ab:
base64 chaos.yaml -
Überprüfen der Systemkorrektheit.
In diesem Job sendet der Workflow Ping-Anfragen von einem Pod zu einem anderen und beobachtet die Netzwerklatenz.
- name: Verify
run: |
echo "do some verification"
kubectl exec busybox-0 -it -n busybox -- ping -c 30 busybox-1.busybox.busybox.svc
Schritt 3: Workflow ausführen
Nachdem ein Workflow erstellt wurde, können Sie ihn durch Erstellen eines Pull Requests in den Master-Branch auslösen. Nach Abschluss des Workflows ähnelt die Ausgabe der Job-Überprüfung folgendem Beispiel:
do some verification
Unable to use a TTY - input is not a terminal or the right kind of file
PING busybox-1.busybox.busybox.svc (10.244.0.6): 56 data bytes
64 bytes from 10.244.0.6: seq=0 ttl=63 time=0.069 ms
64 bytes from 10.244.0.6: seq=1 ttl=63 time=10.136 ms
64 bytes from 10.244.0.6: seq=2 ttl=63 time=10.192 ms
64 bytes from 10.244.0.6: seq=3 ttl=63 time=10.129 ms
64 bytes from 10.244.0.6: seq=4 ttl=63 time=10.120 ms
64 bytes from 10.244.0.6: seq=5 ttl=63 time=0.070 ms
64 bytes from 10.244.0.6: seq=6 ttl=63 time=0.073 ms
64 bytes from 10.244.0.6: seq=7 ttl=63 time=0.111 ms
64 bytes from 10.244.0.6: seq=8 ttl=63 time=0.070 ms
64 bytes from 10.244.0.6: seq=9 ttl=63 time=0.077 ms
……
Die Ausgabe zeigt eine Reihe von 10-Millisekunden-Verzögerungen, wobei jede Verzögerung 5 Sekunden (also 5 Mal) anhält. Dies entspricht der Konfiguration der Chaos-Experimente, die mit chaos-mesh-action injiziert werden.
Was kommt als Nächstes?
Derzeit wird chaos-mesh-action bereits in TiDB Operator eingesetzt. Durch das Injizieren von Pod-Fehlern in den Workflow können Sie den Neustart von Operator-Instanzen überprüfen. Dadurch wird sichergestellt, dass TiDB Operator ordnungsgemäß funktioniert, wenn ein Pod durch einen injizierten Fehler zufällig gelöscht wird. Details finden Sie auf der TiDB Operator Workflow-Seite.
Zukünftig wird chaos-mesh-action in weiteren TiDB-Tests eingesetzt, um die Stabilität von TiDB und seinen Komponenten zu gewährleisten. Sie sind herzlich eingeladen, chaos-mesh-action für eigene Workflows zu nutzen.
Falls Sie Probleme mit chaos-mesh-action feststellen oder Informationen fehlen, können Sie gerne ein GitHub-Issue erstellen oder einen Pull Request (PR) im Chaos Mesh-Repository einreichen. Alternativ können Sie unserem Slack-Kanal #project-chaos-mesh im CNCF-Workspace beitreten.