Containerising Chaos Toolkit¶
You may find yourself in a situation that requires you to run your Chaos Toolkit Experiments from within a container. This may be to encapsulate the dependencies required or to run CTK in a different environment, for whichever reason you have, containerising CTK is straightforward.
Chaos Toolkit provides three images you can use as bases for your own needs:
chaostoolkit/chaostoolkitwhich is taggedlatestand per new releases version. It’s based on Python 3.11 Alpine base image. So it’s not suitable for every configuration when you need specific software in your imagechaostoolkit/chaostoolkit:basicis based on Python 3.11 Debian Bullseye base image. It only contains Chaos Toolkit as per the previous image but is based on Debian with a more recent Python versionchaostoolkit/chaostoolkit:fullis based on Python 3.11 Debian Bullseye base image. It contains Chaos Toolkit and a list of extensions and is based on Debian with a more recent Python version
Using the vanilla chaostoolkit image¶
Chaos Toolkit builds and pushes a Docker Image upon every release of a new version of the chaostoolkit package. This can then be used out of the box by referring to it locally on the command line with:
docker run chaostoolkit/chaostoolkit:latest info core
Unable to find image 'chaostoolkit/chaostoolkit:latest' locally
latest: Pulling from chaostoolkit/chaostoolkit
Digest: sha256:3801eda37de7e8f00fb556220fff7935fea45d248881f4253cd9c29b4d3023f3
Status: Downloaded newer image for chaostoolkit/chaostoolkit:latest
NAME VERSION
CLI 1.9.2
Core library 1.19.0
It should be noted that this only contains vanilla chaostoolkit.
You could then mount a directory containing your experiments (if they are only using vanilla chaostoolkit) and run them:
docker run \
-v $PWD/experiments:/experiments \
chaostoolkit/chaostoolkit:latest \
--log-file /experiments/chaostoolkit.log \
run /experiments/experiment.json \
--journal-path /experiments/journal.json
You’d then find in $PWD/experiments:
ls $PWD/experiments
chaostoolkit.log experiment.json journal.json
Containerising with extensions¶
You can obviously use the chaostoolkit/chaostoolkit:full image which contains the most commonly used extensions. But you can also tailor to your need as follows. We will be using the chaostoolkit/chaostoolkit:basic image as base so we build using a Debian image.
chaostoolkit-aws example¶
If for example, you needed certain AWS activities for your chaos experiments, you could create a Dockerfile like so:
FROM chaostoolkit/chaostoolkit:basic
RUN pip install chaostoolkit-aws
To then use this, you’d first build the image:
docker build -t ctk-aws .
[+] Building 2.1s (6/6) FINISHED
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 114B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/chaostoolkit/chaostoolkit:latest 2.0s
=> [1/2] FROM docker.io/chaostoolkit/chaostoolkit:latest@sha256:3801eda37de7e8f00fb556220fff7935fea45d248881f4253cd9c29b4d3023f3 0.0s
=> => resolve docker.io/chaostoolkit/chaostoolkit:latest@sha256:3801eda37de7e8f00fb556220fff7935fea45d248881f4253cd9c29b4d3023f3 0.0s
=> CACHED [2/2] RUN pip install chaostoolkit-aws 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:84f4579bee5ff42881a226643dbe37c8bc1e0ecb60e153c46395f9dc62a8f256 0.0s
=> => naming to docker.io/library/ctk-aws 0.0s
Then you’d confirm chaostoolkit-aws is available with:
docker run ctk-aws info extensions
NAME VERSION LICENSE DESCRIPTION
chaostoolkit-aws 0.16.0 Apache License Version 2.0 AWS