Read time: ~

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

ToolWhat it doesFirst neededRequired?
jqFilter and format JSON from kubectl outputIntermediateYes, for those labs
k9sTerminal UI for browsing pods, logs, and eventsBeginnerNo (optional)
nicolaka/netshootNetworking toolbox pod for DNS/connectivity testsIntermediateYes (pulled on demand, no host install)
Eclipse MATDeep heap dump analysis (leak suspects, dominator tree)AdvancedYes, for heap labs
VisualVMLighter JVM/heap browsingAdvancedOptional (MAT is primary)
async-profilerCPU flame graphs from a live JVM in a podAdvancedYes, for profiling lab
istioctlIstio control-plane and sidecar diagnosticsAdvancedYes, for mesh lab hands-on
Cloud CLIsQuery EKS/GKE/AKS logs, IAM, and cluster configExpertOnly if using that cloud
Chaos Mesh / LitmusControlled failure injection in the clusterExpertPick one, if running chaos labs

Table of Contents


jq

  
First needed atIntermediate
First lessonRestart 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.

TopicOfficial docs
jq downloadsjqlang.org/download
jq manualjqlang.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 atBeginner (optional TUI)
First lessonReading 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.

TopicOfficial docs
k9s installationk9scli.io/topics/install
k9s releasesgithub.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 atIntermediate
First lessonDNS & 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.

TopicOfficial docs
netshoot imagegithub.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 atAdvanced
First lessonHeap 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.

TopicOfficial docs
MAT downloadseclipse.org/mat/downloads.php

All platforms

  1. Download the MAT archive for your OS from the link above (standalone RCP package).
  2. Unpack the archive.
  3. Run MemoryAnalyzer (macOS/Linux) or MemoryAnalyzer.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 atAdvanced
First lessonHeap 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.

TopicOfficial docs
VisualVM downloadsvisualvm.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 atAdvanced
First lessonCPU 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.

TopicOfficial docs
async-profiler releasesgithub.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 atAdvanced
First lessonService 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.

TopicOfficial docs
istioctl installistio.io/latest/docs/setup/getting-started
istioctl downloadistio.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 atExpert (only if you use a managed cluster for that module)
First lessonCloud 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)

TopicOfficial docs
AWS CLI installdocs.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)

TopicOfficial docs
gcloud installcloud.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)

TopicOfficial docs
Azure CLI installlearn.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 atExpert
First lessonChaos 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

TopicOfficial docs
Chaos Mesh installchaos-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

TopicOfficial docs
Litmus installdocs.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