Tool Installation Guide
Step-by-step setup for jq, k9s, async-profiler, Istio, JVM analysis tools, cloud CLIs, and chaos engineering platforms used in this course.
This page helps you decide what to install, when, and why, without repeating the full cluster setup on Prerequisites. Each tool below is introduced progressively in the course: you do not need any of them on day one.
Scan the summary table for your current level, open only the sections that apply to you, and install when you reach the linked lesson. Skip optional and Expert-only tools if you are reading for concepts only and will not run those labs hands-on. Cluster setup (Docker, kind or minikube, kubectl) stays on the Prerequisites page.
At a glance
| Tool | What it does | First needed | Required? |
|---|---|---|---|
jq | Filter and format JSON from kubectl output | Intermediate | Yes, for those labs |
k9s | Terminal UI for browsing pods, logs, and events | Beginner | No (optional) |
nicolaka/netshoot | Networking toolbox pod for DNS/connectivity tests | Intermediate | Yes (pulled on demand, no host install) |
| Eclipse MAT | Deep heap dump analysis (leak suspects, dominator tree) | Advanced | Yes, for heap labs |
| VisualVM | Lighter JVM/heap browsing | Advanced | Optional (MAT is primary) |
async-profiler | CPU flame graphs from a live JVM in a pod | Advanced | Yes, for profiling lab |
istioctl | Istio control-plane and sidecar diagnostics | Advanced | Yes, for mesh lab hands-on |
| Cloud CLIs | Query EKS/GKE/AKS logs, IAM, and cluster config | Expert | Only if using that cloud |
| Chaos Mesh / Litmus | Controlled failure injection in the cluster | Expert | Pick one, if running chaos labs |
Table of Contents
- At a glance
- jq
- k9s (optional)
- nicolaka/netshoot (container image)
- Eclipse MAT
- VisualVM
- async-profiler
- istioctl
- Cloud CLIs (Expert, optional)
- Chaos Mesh or Litmus (Expert)
jq
| First needed at | Intermediate |
| First lesson | Restart Troubleshooting |
What it does: Parses kubectl ... -o json output so you can filter restart counts, decode secret fields, and inspect pod state without scrolling through raw JSON.
Do you need it? Install before Intermediate. Every restart-troubleshooting example and cheat-sheet jq one-liner assumes it is on your PATH.
| Topic | Official docs |
|---|---|
| jq downloads | jqlang.org/download |
| jq manual | jqlang.org/manual |
macOS
brew install jq
Linux
# Debian / Ubuntu
sudo apt-get update && sudo apt-get install -y jq
# Fedora / RHEL
sudo dnf install -y jq
Windows (PowerShell)
winget install jqlang.jq
# Or: choco install jq
Verify
jq --version
k9s (optional)
| First needed at | Beginner (optional TUI) |
| First lesson | Reading Pod Status & Logs |
What it does: Keyboard-driven cluster browser for pods, logs, describe, and port-forwards in one terminal UI.
Do you need it? Optional from Beginner onward. Skip if you are comfortable with kubectl; every lab in this course works without it.
| Topic | Official docs |
|---|---|
| k9s installation | k9scli.io/topics/install |
| k9s releases | github.com/derailed/k9s/releases |
macOS
brew install derailed/k9s/k9s
Linux
# Binary install (amd64 example; check releases for arm64)
curl -sS https://webinstall.dev/k9s | bash
# Or download from GitHub releases and move to /usr/local/bin/k9s
Windows (PowerShell)
winget install derailed.k9s
# Or: choco install k9s
Verify
k9s version
nicolaka/netshoot (container image)
| First needed at | Intermediate |
| First lesson | DNS & Service Discovery |
What it does: Temporary debug pod with dig, curl, tcpdump, and other networking utilities to test DNS and connectivity from inside the cluster.
Do you need it? Required for Intermediate networking labs. No workstation install: Kubernetes pulls the image when you run it.
| Topic | Official docs |
|---|---|
| netshoot image | github.com/nicolaka/netshoot |
Run a one-off debug shell
kubectl run netshoot --rm -it --image=nicolaka/netshoot -- bash
Run in a namespace (matches course labs)
kubectl run netshoot --rm -it --image=nicolaka/netshoot -n <ns> -- bash
Verify (inside the pod)
curl --version
dig -v
Eclipse MAT
| First needed at | Advanced |
| First lesson | Heap Dumps & Memory Leaks |
What it does: Opens .hprof heap dumps offline. Leak Suspects and the dominator tree pin down which objects are retaining memory and why they were not garbage collected.
Do you need it? Required for Advanced heap-dump labs. Runs on your laptop, not inside the cluster.
| Topic | Official docs |
|---|---|
| MAT downloads | eclipse.org/mat/downloads.php |
All platforms
- Download the MAT archive for your OS from the link above (standalone RCP package).
- Unpack the archive.
- Run
MemoryAnalyzer(macOS/Linux) orMemoryAnalyzer.exe(Windows).
MAT requires a JDK. If the MAT launcher cannot find one, set JAVA_HOME to a JDK 17+ install before starting.
Verify
Open MAT and confirm the splash screen loads. No CLI version check is required.
VisualVM
| First needed at | Advanced |
| First lesson | Heap Dumps & Memory Leaks |
What it does: Quick JVM heap histograms and lighter profiling without MAT’s full Leak Suspects and dominator-tree workflow.
Do you need it? Optional. Install if you want a simpler first look at heap data; MAT covers the capstone analysis path in the course.
| Topic | Official docs |
|---|---|
| VisualVM downloads | visualvm.github.io/download.html |
macOS
brew install --cask visualvm
Linux
Download the .zip from the official site, unpack, and run bin/visualvm.
Windows
Download the .exe installer from the official site and run it.
Verify
Start VisualVM and confirm the main window opens.
async-profiler
| First needed at | Advanced |
| First lesson | CPU Profiling with async-profiler |
What it does: Samples the live JVM and produces CPU flame graphs to find which methods are burning time under load.
Do you need it? Required for the Advanced CPU profiling lesson. Download once on your workstation, then kubectl cp the tarball into the pod.
| Topic | Official docs |
|---|---|
| async-profiler releases | github.com/async-profiler/async-profiler/releases |
macOS / Linux (download on workstation)
# Example: linux x64 (most course lab containers)
curl -sL -o async-profiler.tar.gz \
https://github.com/async-profiler/async-profiler/releases/download/v3.0/async-profiler-3.0-linux-x64.tar.gz
tar xzf async-profiler.tar.gz
ls async-profiler-*/profiler.sh
Match the archive to the JVM’s OS and architecture inside the container. Check before copying:
kubectl exec -it <pod> -n <ns> -- uname -m
Windows (PowerShell)
Download the matching release .zip or .tar.gz from GitHub releases in a browser, then use kubectl cp the same way as on macOS/Linux.
Verify (after copying into a pod)
kubectl exec -it <pod> -n <ns> -- /tmp/async-profiler/profiler.sh --version
istioctl
| First needed at | Advanced |
| First lesson | Service Mesh Troubleshooting (Istio) |
What it does: Inspects Istio sidecar sync state, Envoy listener/route/cluster config, mTLS, and routing when mesh traffic misbehaves.
Do you need it? Required for hands-on service mesh labs. Skip the install if you will read that lesson for command shapes only.
| Topic | Official docs |
|---|---|
| istioctl install | istio.io/latest/docs/setup/getting-started |
| istioctl download | istio.io/latest/docs/ops/diagnostic-tools/istioctl |
The demo profile below works on a local kind or minikube cluster.
macOS
brew install istioctl
istioctl install --set profile=demo -y
Linux
curl -L https://istio.io/downloadIstio | sh -
cd istio-*
export PATH="$PWD/bin:$PATH"
istioctl install --set profile=demo -y
Windows (PowerShell)
# Download from https://github.com/istio/istio/releases, then unpack and add bin to PATH
istioctl install --set profile=demo -y
Verify
istioctl version
kubectl get pods -n istio-system
Cloud CLIs (Expert, optional)
| First needed at | Expert (only if you use a managed cluster for that module) |
| First lesson | Cloud Managed Clusters (EKS/GKE/AKS) |
What it does: Talks to your cloud account to describe clusters, tail control-plane and workload logs, and verify IRSA, Workload Identity, and managed-identity wiring from the shell.
Do you need it? Expert-only. Install only the CLI for the provider you use (aws, gcloud, or az). Skip entirely if you stay on local kind/minikube through Advanced.
AWS CLI (aws)
| Topic | Official docs |
|---|---|
| AWS CLI install | docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html |
macOS
brew install awscli
Linux
curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip
unzip -q awscliv2.zip && sudo ./aws/install
Windows (PowerShell)
winget install Amazon.AWSCLI
Verify
aws --version
aws sts get-caller-identity
Google Cloud CLI (gcloud)
| Topic | Official docs |
|---|---|
| gcloud install | cloud.google.com/sdk/docs/install |
macOS
brew install --cask google-cloud-sdk
Linux
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
tar -xf google-cloud-cli-linux-x86_64.tar.gz
./google-cloud-sdk/install.sh
Windows (PowerShell)
winget install Google.CloudSDK
Verify
gcloud --version
gcloud auth list
Azure CLI (az)
| Topic | Official docs |
|---|---|
| Azure CLI install | learn.microsoft.com/en-us/cli/azure/install-azure-cli |
macOS
brew install azure-cli
Linux
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Windows (PowerShell)
winget install Microsoft.AzureCLI
Verify
az --version
az account show
Chaos Mesh or Litmus (Expert)
| First needed at | Expert |
| First lesson | Chaos Engineering |
What it does: Injects controlled failures (pod kills, network latency, CPU/memory stress) so you can validate probes, alerts, and runbooks before a real outage.
Do you need it? Expert-only. Install one platform if you plan to run chaos labs hands-on. Skip if you will read that lesson for experiment design only.
Option A: Chaos Mesh
| Topic | Official docs |
|---|---|
| Chaos Mesh install | chaos-mesh.org/docs/next/production-installation-using-helm |
macOS / Linux / Windows (with Helm)
helm repo add chaos-mesh https://charts.chaos-mesh.org
helm repo update
kubectl create ns chaos-mesh --dry-run=client -o yaml | kubectl apply -f -
helm install chaos-mesh chaos-mesh/chaos-mesh -n chaos-mesh --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock
On Docker Desktop or some kind setups, you may need docker as the runtime instead of containerd. See the official docs link above for your environment.
Verify
kubectl get pods -n chaos-mesh
Option B: Litmus
| Topic | Official docs |
|---|---|
| Litmus install | docs.litmuschaos.io/docs/getting-started/installation |
macOS / Linux / Windows (with Helm)
kubectl create ns litmus --dry-run=client -o yaml | kubectl apply -f -
helm repo add litmuschaos https://litmuschaos.github.io/litmus-helm/
helm repo update
helm install chaos litmuschaos/litmus -n litmus
Verify
kubectl get pods -n litmus