Monitor Kubernetes Pods Live with kubectl get --watch
Stream Kubernetes pod status updates in real-time with `kubectl get pods --watch` for immediate debugging and observability. Learn practical use cases and filteri...
Introduction
When you are working with Kubernetes, you often need to see what is happening to your pods in real time. For instance, you might have just applied a new deployment or are debugging a flaky application. Manually running kubectl get pods every few seconds is inefficient. This is where the --watch flag with kubectl get pods becomes useful. It allows you to continuously stream updates for pod status changes directly to your terminal. This tip shows how to use this command for quick, live observability.
What kubectl get pods --watch Does
The kubectl get pods --watch command tells Kubernetes to keep an open connection to the API server. It pushes status updates for matching pods as they happen. Instead of providing a static snapshot, this command gives a dynamic view. It shows pods as they change through states like Pending, ContainerCreating, Running, CrashLoopBackOff, and Terminating. This is very helpful for understanding your workloads’ lifecycle without repeatedly running commands. You can find more details on using kubectl in the official Kubernetes documentation.
Basic Usage
To watch all pods in the current namespace, add --watch to your kubectl get pods command:
$ kubectl get pods --watch
Consider this example output. If you run this command and then deploy a new NGINX application:
$ kubectl get pods --watch
NAME READY STATUS RESTARTS AGE
my-app-7b8c9d4b5-abcde 1/1 Running 0 12d
another-service-xfwg2 1/1 Running 0 5d
nginx-deployment-8586c8bff-hpgb6 0/1 Pending 0 0s
nginx-deployment-8586c8bff-hpgb6 0/1 ContainerCreating 0 0s
nginx-deployment-8586c8bff-hpgb6 0/1 Running 0 2s
The new pod, nginx-deployment-8586c8bff-hpgb6, appears. Its status updates from Pending to ContainerCreating and then Running without you needing to rerun the command. This continuous feedback loop is crucial for rapid debugging and verification.
Practical Use Cases
The --watch flag is useful in several situations:
- Debugging New Deployments: Instantly see if new pods are stuck in
Pendingdue to resource constraints,ImagePullBackOfffrom a bad image, orCrashLoopBackOfffrom an application error. - Monitoring Rolling Updates: Observe individual pods as they are terminated and replaced during a deployment rollout. This is particularly useful when verifying zero-downtime deployments. If you manage deployments, knowing how to trigger a redeployment is important. Review Kubectl Rollout Restart: Redeploying Pods Without Downtime for more information.
- Observing Pod Lifecycles: When performing node maintenance or cluster upgrades, watch pods reschedule and come back online on different nodes.
- Cluster Issues: Quickly identify if pods are failing to schedule or frequently restarting across the cluster during periods of instability.
Combining with Filters
You do not always want to watch all pods. You can combine --watch with other kubectl get filtering choices:
-
Specific Namespace: Monitor pods in a particular namespace using the
-nor--namespaceflag. This narrows the output, making it easier to focus.$ kubectl get pods -n my-development-namespace --watch
* **Label Selectors**: Target pods with specific labels using `-l` or `--selector`. This is effective for isolating pods belonging to a particular application or component. For example, if you just updated a `frontend` service:
```bash
$ kubectl get pods -l app=frontend --watch
-
Specific Pod Name: While less common with
--watch, since you are typically looking for changes to multiple pods, you can watch a single pod by name. However, it will only show its status changes until it terminates.$ kubectl get pods my-app-7b8c9d4b5-abcde --watch
## Stopping the Watch
To stop the watching process, press `Ctrl+C`. The connection to the API server will close, and your terminal will return to the command prompt.
## `--watch` Limitations
While very helpful, `kubectl get pods --watch` is for debugging and quick observability. It is not a complete monitoring solution. It provides real-time status updates in your terminal but does not store historical data, provide alerting, or offer advanced visualization. For comprehensive monitoring, you would typically use tools like Prometheus and Grafana. It is most effective for immediate, interactive investigation.
For broader observability, consider implementing robust DevOps testing strategies. These should include continuous monitoring and automated checks to keep your applications healthy. Stay up to date
Get DevOps tips, tutorials, and guides delivered to your inbox.