Before we get started setting up the environment, we first need to clone this repository locally for access to the required files
$ git clone https://github.com/chaostoolkit/walkthrough.gitThe labs run against a Kubernetes cluster, supported by the kubectl package.
Locally, for instance, you can use:
minikube- Linux/MacOS/Windowsmicrok8s- Linux
Note: microk8s is a native Linux application and therefore all instructions will be accordingly so. In addition to these, you will need Python 3.6 or above on the client side
Minikube can be installed by following the installation steps on the Minikube Start docs. The minikube cluster requires a docker driver to be initiated and hence docker must be installed. You can install docker from the Docker Hub. The cluster can then be initiated and run
$ minikube start --driver docker --kubernetes-version v1.19.1You can install microk8s using:
$ sudo snap install microk8s --classic --channel=1.19Now you have microk8s installed, you can start your cluster using:
$ microk8s startAfter initiating the microk8s cluster, you will need to install a couple of add-ons:
$ microk8s enable dns rbacPlease review the microk8s documentation for further information.
For both minikube and microk8s, kubectl is required. Even if you have kubectl installed, for the purpose of this demonstration, a specific version (v1.19.1) is required so following the installation steps is necessary to replace the current version. You can check the current version, if installed, using:
$ kubectl version --clientYou can install Kubectl v1.19.1 using:
$ curl -LO https://dl.k8s.io/release/v1.19.1/bin/linux/amd64/kubectl$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectlFor further instructions, and for information about downloading the latest kubectl version for Linux after completing the demonstration, consult the Kubernetes Installation Documentation
You can install Kubectl v1.19.1 for Intel macOS using:
$ curl -LO "https://dl.k8s.io/release/v1.19.1/bin/darwin/amd64/kubectl"And for Apple Silicon macOS using:
$ curl -LO "https://dl.k8s.io/release/v1.19.1/bin/darwin/arm64/kubectl"Once installed, the kubectl binary needs to be made executable and its path rooted:
$ chmod +x ./kubectl$ sudo mv ./kubectl /usr/local/bin/kubectl$ sudo chown root: /usr/local/bin/kubectlFor further instructions, and for information about downloading the latest kubectl version for Mac OS after completing the demonstration, consult the Kubernetes Installation Documentation
You can install Kubectl v1.19.1 by running the Command Prompt as Administrator and using:
$ curl -LO https://dl.k8s.io/release/v1.19.1/bin/windows/amd64/kubectl.exe$ move kubectl.exe C:\Windows\System32For further instructions, and for information about downloading the latest kubectl version for Windows after completing the demonstration, consult the Kubernetes Installation Documentation
We use the Prometheus operator which will run in the monitoring namespace by default and expose:
- Prometheus
- Grafana
- Alert Manager
You can install Prometheus in various ways, see below for three of them.
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update
$ helm upgrade --install prometheus prometheus-community/kube-prometheus-stack
$ git clone https://github.com/prometheus-operator/kube-prometheus$ kubectl apply -f kube-prometheus/manifests/setup/$ kubectl apply -f kube-prometheus/manifests/$ microk8s enable prometheusOnce installed, you can view the services running
$ kubectl -n monitoring get allChaos Mesh is a powerful fault injection tool for Kubernetes which can create turbulences on physical and OS resources.
It is used by the Chaos Toolkit in rich Chaos Engineering experiments. To install and run Chaos Mesh, open a new terminal window and run:
$ curl -sSL https://mirrors.chaos-mesh.org/v1.0.2/install.sh | bashSee all its services running:
$ kubectl -n chaos-testing get allYou can setup the dashboard in a new terminal window as follows:
$ kubectl -n chaos-testing port-forward --address 0.0.0.0 service/chaos-dashboard 2333:2333You can then access the dashboard by going to http://localhost:2333/
We use traefik as an ingress provider to service our application.
$ kubectl apply -f walkthrough/manifests/traefik.yamlThe Chaos Toolkit is the Chaos Engineering automation framework from Reliably. It is an open source project written in Python. Assuming you have a proper Python 3.6 available, you should be able to install it as follows:
$ pip install chaostoolkitYou can verify it is now available by running:
$ chaos info coreIn itself, Chaos Toolkit does not have any capabilities to operate systems. You need to installation that target these systems.
$ pip install chaostoolkit-kubernetes chaostoolkit-prometheus chaostoolkit-addons jsonpath2You can verify they are now available by running:
$ chaos info extensionsFinally, we install a plugin to generate reports of experiment runs:
$ pip install chaostoolkit-reportingVegeta is a standalone binary that can induce load onto a web application. We often use it for simple load during an experiment to understand how the traffic is impacted by an experiment.
You will first need to install wget using:
$ apt-get install wgetYou can then install Vegeta v12.8.3 for Linux AMD64 using:
$ wget https://github.com/tsenart/vegeta/releases/download/v12.8.3/vegeta-12.8.3-linux-amd64.tar.gz$ tar -zxf vegeta-12.8.3-linux-amd64.tar.gzOr for Linux ARM64 using:
$ wget https://github.com/tsenart/vegeta/releases/download/v12.8.3/vegeta-12.8.3-linux-arm64.tar.gz$ tar -zxf vegeta-12.8.3-linux-arm64.tar.gzOnce installed, the vegeta binary needs to be moved and rooted
$ sudo mv ./vegeta /usr/local/bin/$ sudo chmod +x /usr/local/bin/vegetaFor macOS, you can install Vegeta via the Homebrew package manager:
$ brew install vegetaYou will first need to install wget by running the Command Prompt as Administrator and using:
$ curl -LO https://eternallybored.org/misc/wget/1.21.1/64.wget.exe$ move wget.exe C:\Windows\System32You will also need to install unzip by running the Command Prompt as Administrator and using:
$ curl -LO www.stahlworks.com/dev/unzip.exe$ move unzip.exe C:\Windows\System32You can then install Vegeta v12.8.3 into a temporary directory by running the Command Prompt as Administrator and using:
$ mkdir vegeta && cd vegeta$ wget https://github.com/tsenart/vegeta/releases/download/v12.8.3/vegeta-12.8.3-windows-amd64.zip$ unzip vegeta-12.8.3-windows-amd64.zip$ move vegeta.exe C:\Windows\System32The temporary directory can then be deleted which will ask for a confirmation:
$ cd .. && rmdir /s vegetaYou can now install the application services:
$ kubectl apply -f walkthrough/manifests/all.yaml