Zum Hauptinhalt springen

Führen Sie Ihr erstes Chaos-Experiment in 10 Minuten durch

· 7 Minuten Lesezeit
Cwen Yin
Maintainer of Chaos Mesh
Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

Führen Sie Ihr erstes Chaos-Experiment in 10 Minuten durch
Führen Sie Ihr erstes Chaos-Experiment in 10 Minuten durch

Chaos Engineering ist eine Methode, um die Robustheit eines Produktivsystems zu testen, indem ungewöhnliche oder störende Bedingungen simuliert werden. Für viele ist jedoch der Übergang vom Lernen des Chaos Engineerings zur praktischen Anwendung auf den eigenen Systemen entmutigend. Es klingt nach einer dieser großen Ideen, für die man ein voll ausgestattetes Team zur Vorbereitung braucht. Nun, das muss nicht sein. Um mit Chaos-Experimenten zu beginnen, fehlt Ihnen vielleicht nur eine geeignete Plattform.

Chaos Mesh ist eine einfach zu bedienende, quelloffene, cloud-native Chaos-Engineering-Plattform, die Chaos in Kubernetes-Umgebungen orchestriert. Dieses 10-minütige Tutorial hilft Ihnen, schnell mit Chaos Engineering zu beginnen und Ihr erstes Chaos-Experiment mit Chaos Mesh durchzuführen.

Weitere Informationen zu Chaos Mesh finden Sie in unserem vorherigen Artikel oder im chaos-mesh-Projekt auf GitHub.

Eine Vorschau auf unser kleines Experiment

Chaos-Experimente ähneln Experimenten aus dem naturwissenschaftlichen Unterricht. Es ist völlig legitim, turbulente Situationen in kontrollierter Umgebung zu simulieren. In diesem Fall werden wir Netzwerk-Chaos in einer kleinen Webanwendung namens web-show simulieren. Um den Chaos-Effekt sichtbar zu machen, zeichnet web-show alle 10 Sekunden die Latenz von seinem Pod zum kube-controller-Pod (im Namespace kube-system) auf.

Der folgende Clip zeigt den Prozess der Installation von Chaos Mesh, der Bereitstellung von web-show und der Erstellung des Chaos-Experiments mit wenigen Befehlen:

Der gesamte Prozess des Chaos-Experiments
Der gesamte Prozess des Chaos-Experiments

Jetzt sind Sie an der Reihe! Zeit, selbst Hand anzulegen.

Los geht's!

Für unser einfaches Experiment verwenden wir Kubernetes in Docker (Kind) für die Kubernetes-Entwicklung. Sie können gerne Minikube oder einen vorhandenen Kubernetes-Cluster nutzen, um mitzumachen.

Bereiten Sie die Umgebung vor

Stellen Sie sicher, dass Sie Git und Docker auf Ihrem lokalen Rechner installiert haben und Docker läuft, bevor Sie fortfahren. Für macOS wird empfohlen, Docker mindestens 6 CPU-Kerne zuzuweisen. Details finden Sie unter Docker-Konfiguration für Mac.

  1. Holen Sie sich Chaos Mesh:

    git clone https://github.com/chaos-mesh/chaos-mesh.git
    cd chaos-mesh/
  2. Installieren Sie Chaos Mesh mit dem install.sh-Skript:

    ./install.sh --local kind

    install.sh ist ein automatisiertes Shell-Skript, das Ihre Umgebung prüft, Kind installiert, Kubernetes-Cluster lokal startet und Chaos Mesh bereitstellt. Um die detaillierte Beschreibung von install.sh zu sehen, können Sie die Option --help hinzufügen.

    Hinweis:

    Falls Ihr lokaler Rechner keine Images von docker.io oder gcr.io abrufen kann, verwenden Sie den lokalen gcr.io-Mirror und führen Sie ./install.sh --local kind --docker-mirror aus.

  3. Setzen Sie die Systemumgebungsvariable:

    source ~/.bash_profile

Hinweis:

  • Je nach Netzwerk können diese Schritte einige Minuten dauern.

  • Bei einer Fehlermeldung wie dieser:

    ERROR: failed to create cluster: failed to generate kubeadm config content: failed to get kubernetes version from node: failed to get file: command "docker exec --privileged kind-control-plane cat /kind/version" failed with error: exit status 1

    erhöhen Sie die verfügbaren Ressourcen für Docker auf Ihrem Rechner und führen Sie folgenden Befehl aus:

    ./install.sh --local kind --force-local-kube

Nach Abschluss des Vorgangs erscheint eine Meldung, dass Chaos Mesh erfolgreich installiert wurde.

Anwendung bereitstellen

Im nächsten Schritt stellen wir die Testanwendung bereit. Hier verwenden wir web-show, da es die direkte Beobachtung von Netzwerkchaos-Effekten ermöglicht. Sie können auch Ihre eigene Anwendung für Tests bereitstellen.

  1. Stellen Sie web-show mit dem deploy.sh-Skript bereit:

    # Make sure you are in the Chaos Mesh directory
    cd examples/web-show &&
    ./deploy.sh

    Hinweis:

    Falls Ihr Rechner keine Images von docker.io abrufen kann, verwenden Sie den local gcr.io-Mirror und führen Sie ./deploy.sh --docker-mirror aus.

  2. Rufen Sie die Web-Show-Anwendung auf. Geben Sie in Ihrem Webbrowser http://localhost:8081 ein.

Chaos-Experiment erstellen

Jetzt ist alles bereit – Zeit für Ihr erstes Chaos-Experiment!

Chaos Mesh verwendet CustomResourceDefinitions (CRD) zur Definition von Chaos-Experimenten. CRD-Objekte sind je nach Szenario unterschiedlich gestaltet, was die Definition stark vereinfacht. Derzeit unterstützt Chaos Mesh CRD-Objekte wie PodChaos, NetworkChaos, IOChaos, TimeChaos und KernelChaos. Weitere Fehlerinjektionstypen folgen.

In diesem Experiment verwenden wir NetworkChaos für das Chaos-Experiment. Die NetworkChaos-Konfigurationsdatei im YAML-Format sieht wie folgt aus:

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata:
name: network-delay-example
spec:
action: delay
mode: one
selector:
namespaces:
- default
labelSelectors:
"app": "web-show"
delay:
latency: "10ms"
correlation: "100"
jitter: "0ms"
duration: "30s"
scheduler:
cron: "@every 60s"

Detaillierte Beschreibungen der NetworkChaos-Aktionen finden Sie im Chaos Mesh Wiki. Hier fassen wir die Konfiguration zusammen als:

  • Ziel: web-show

  • Aufgabe: alle 60s eine Netzwerkverzögerung von 10ms injizieren

  • Angriffsdauer: jeweils 30s

So starten Sie NetworkChaos:

  1. Führen Sie network-delay.yaml aus:

    # Make sure you are in the chaos-mesh/examples/web-show directory
    kubectl apply -f network-delay.yaml
  2. Greifen Sie auf die web-show-Anwendung zu. Öffnen Sie in Ihrem Webbrowser http://localhost:8081.

    Im Liniendiagramm erkennen Sie alle 60 Sekunden eine Netzwerkverzögerung von 10 ms.

Verwendung von Chaos Mesh zum Einfügen von Verzögerungen in web-show
Verwendung von Chaos Mesh zum Einfügen von Verzögerungen in web-show

Herzlichen Glückwunsch! Sie haben soeben erfolgreich Chaos erzeugt. Falls Sie neugierig geworden sind und weitere Experimente mit Chaos Mesh durchführen möchten, sehen Sie sich examples/web-show an.

Chaos-Experiment beenden

Beenden Sie das Chaos-Experiment nach Abschluss Ihrer Tests.

  1. Löschen Sie network-delay.yaml:

    # Make sure you are in the chaos-mesh/examples/web-show directory
    kubectl delete -f network-delay.yaml
  2. Rufen Sie die Web-Show-Anwendung auf. Geben Sie in Ihrem Webbrowser http://localhost:8081 ein.

Im Liniendiagramm sehen Sie, dass die Netzwerklatenz wieder auf Normalniveau zurückgekehrt ist.

Netzwerklatenz ist wieder normal
Netzwerklatenz ist wieder normal

Kubernetes-Cluster löschen

Nach Abschluss des Chaos-Experiments führen Sie diesen Befehl aus, um die Kubernetes-Cluster zu entfernen:

kind delete cluster --name=kind

Hinweis:

Falls der Fehler kind: command not found auftritt, führen Sie zuerst den Befehl source ~/.bash_profile aus und löschen Sie dann die Kubernetes-Cluster.

Großartig! Wie geht's weiter?

Herzlichen Glückwunsch zu Ihrer ersten erfolgreichen Reise ins Chaos Engineering! Wie fühlt es sich an? Chaos Engineering ist doch gar nicht so schwer, oder? Aber vielleicht ist Chaos Mesh noch nicht perfekt - die Kommandozeile ist umständlich, manuelles YAML-Schreiben ist mühsam und die Ergebnisprüfung könnte eleganter sein? Keine Sorge, das Chaos Dashboard ist bereits in Arbeit! Chaos-Experimente per Webinterface klingen doch vielversprechend! Wenn Sie uns bei der Entwicklung von Cloud-Teststandards helfen oder Chaos Mesh verbessern möchten, freuen wir uns über Ihre Mitarbeit!

Falls Sie einen Fehler entdecken oder Verbesserungsvorschläge haben, können Sie gerne ein Issue erstellen, einen Pull Request (PR) öffnen oder uns im #project-chaos-mesh-Kanal des CNCF Slack Workspace kontaktieren.

GitHub: https://github.com/chaos-mesh/chaos-mesh