DEV Community

DevOps Start
DevOps Start

Posted on • Originally published at devopsstart.com

Monitor Kubernetes Pods Live with kubectl get --watch

This article was originally published on devopsstart.com. I'm cross-posting it here to share valuable insights with the Dev.to community on monitoring Kubernetes pods.

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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 Pending due to resource constraints, ImagePullBackOff from a bad image, or CrashLoopBackOff from 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 -n or --namespace flag. This narrows the output, making it easier to focus.

    $ kubectl get pods -n my-development-namespace --watch
    

shell

* **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
Enter fullscreen mode Exit fullscreen mode
  • 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.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)