Zum Hauptinhalt springen
Version: 2.6.7

Chaos Mesh in GitHub Actions integrieren

Inoffizielle Beta-Übersetzung

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:

Integration von chaos-mesh-action in den CI-Workflow
Integration von chaos-mesh-action in den 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:

  1. Zwei Pods im Kubernetes-Cluster erstellen.

  2. Ping-Anfragen von einem Pod an einen anderen senden.

  3. 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:

  1. Navigieren Sie zum GitHub-Repository der zu testenden Software.

  2. Klicken Sie auf Actions und dann auf New workflow, um einen Workflow anzulegen.

Workflow-Erstellung
Workflow-Erstellung

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: all

    Rufen 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.