'How to get number of pods (available or terminating) in kubernetes?
I need to find the number of pods currently NOT terminated (can be available, terminating, etc.) in order to prevent deployment from starting if there are still some pods not terminated.
UPDATE: If there are no pods available, I should get "0". Is it possible ?
Solution 1:[1]
You can try:
kubectl get pods --field-selector=status.phase!=Succeeded,status.Phase!=Failed
If you look at the Pod Phases you can see that this covers all possible pods where all containers are terminated (either failed or succeeded)
If you specifically want the count you could use a bit of jq
and use:
kubectl get pods --field-selector=status.phase!=Succeeded,status.Phase!=Failed --output json | jq -j '.items | length'
This returns the # of pods that are not Terminated
.
Solution 2:[2]
If your use case is making sure you only have a single instance/replica of your application running at any given time, maybe it's better to rely on built-in Kubernetes options to handle that.
You can configure your Deployment object using replicas
, maxUnavailable
and maxSurge
to control how many instances are created of your application.
Solution 3:[3]
As an alternative to the jq
answer, here is a wc -l
answer
k3s kubectl get pods --output name | wc -l
This is somewhat more convenient in that jq
may not be always installed.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Noam Manos |
Solution 2 | Jose Armesto |
Solution 3 | user7610 |