Kubernetes CLI tool that monitors pods for specified namespace, pod, or status regex filters. Useful when monitoring deployments across multiple namespaces.
When deploying pods in Kubernetes, it can be cumbersome to determine if all pods have entered a successful state or not. Adding the -w
flag to a simple kubectl get po -n "test1"
command only appends any changes to the CLI stdout and doesn't give a clear picture of what pods are in what statuses.
This tool will help visualize those pod statuses and can do so across multiple namespaces, as well as filter by pod name and status. Additionally, any Warning
events that are being reported will display as well, giving an all-in-one stop for K8s information.
Originally written for use with EKS clusters, the tool uses native kubectl
and will work on most K8s clusters.
- Bash compatible terminal
- Kubectl installed and configured to communicate with your EKS cluster
*
- A working K8s cluster (see Creating Demo Cluster and Resources if you need to create one)
* See the resources section for how-to assistance
The below resources pertain to AWS EKS and include instructions for configuring your machine to communicate with EKS, as well as how to create & utilize an EKS cluster.
- Installing & Configuring AWS CLI (create cluster)
- Installing & Configuring Eksctl (create cluster)
- Installing & Configuring Kubectl for EKS (communicate with cluster)
If you are looking for a guide on how to configure kubectl to communicate with a non-EKS server, see K8s documentation:
Script is designed to be ran on local machine via CLI. Simply execute the bash script and provide namespace(s).
To see the script in action, follow the example usage instructions below. If you need to set up a test cluster first, follow the "Creating Demo Cluster & Resources" instructions.
This is optional, but provides a working cluster if you need to test the script. It is broken into two parts. Depending on your needs, follow the corresponding sections.
Creating a demo EKS cluster requires an AWS account and the tooling defined below. The creation of the cluster itself is a single command (manifest included in examples) and will result in kubectl
automatically configured to communicate with your cluster once complete.
See Resources section for assistance with accomplished these.
- IAM permissions to create an EKS cluster
- AWS CLI installed and configured
- Eksctl installed
- Kubectl installed
All commands below should be executed in a Bash compatible terminal from the repository root. You'll also want to update examples/cluster.yaml
if you need to deploy into a region other than us-east-1
. The commands below will either create or delete the cluster (depending on your needs).
- Create:
eksctl create cluster -f examples/cluster.yaml
- Delete:
eksctl delete cluster -f examples/cluster.yaml
(when completed with testing)
Creation can take upwards 15 minutes or more.
This will provision two namespaces with a deployment in each. Each deployment has a pod with a container scaled to 3 instances.
All commands below should be executed in a Bash compatible terminal from the repository root.
- Create two test namespaces, and the corresponding deployment with pods/containers:
kubectl apply -f examples/resources.yaml
- Run the script to see the statuses of pods in each namespace (see Example Script Execution)
You'll want to first make sure the script is executable, otherwise you'll see errors about the file not existing:
chmod +x monitor.sh;
To execute, simply call from command line like you would any Bash script:
./monitor.sh
Namespace, pod, and regex filters allow you to use a wide range of regex syntax. Essentially, if AWK
supports it, it will work. The filtering is hierarchical in the following order:
- namespace (
-n
) - pod (
-p
) - status (
-s
)
For example, if you apply a namespace and pod filter, the namespace filter is applied first, then the pod filter.
./monitor.sh -n "^(test1|test2)$"
./monitor.sh -p "kube-proxy"
./monitor.sh -s "^Pending$"
Parameter | Type | Required? | Purpose |
---|---|---|---|
-n | string | no | Namespace regex to search. Must be a valid regex statement. Example: "test1|test2" |
-p | string | no | Pod regex to search. Must be a valid regex statement. Example: "^test" |
-s | string | no | Status regex to search. Must be a valid regex statement. Example: "Backoff" |
-w | integer | no | Amount of seconds to wait before querying the K8s cluster again. Default is 5. |
-v | switch | no | Optional flag to show verbose warnings from the cluster. |
-h | switch | no | Displays script usage information. |