Search code examples
kuberneteskubectl

kubectl status.phase=Running return wrong results


When I run:

kubectl get pods --field-selector=status.phase=Running

I see:

NAME          READY   STATUS    RESTARTS   AGE
k8s-fbd7b     2/2     Running   0          5m5s
testm-45gfg   1/2     Error     0          22h

I don't understand why this command gives me pod that are in Error status? According to K8S api, there is no such thing STATUS=Error.

How can I get only the pods that are in this Error status?

When I run:

kubectl get pods --field-selector=status.phase=Failed

It tells me that there are no pods in that status.


Solution

  • You can simply grep the Error pods using the

    kubectl get pods --all-namespces | grep Error
    

    Remove all error pods from the cluster

    kubectl delete pod `kubectl get pods --namespace <yournamespace> | awk '$3 == "Error" {print $1}'` --namespace <yournamespace>
    

    Mostly Pod failures return explicit error states that can be observed in the status field

    Error :

    Your pod is crashed, it was able to schedule on node successfully but crashed after that. To debug it more you can use different methods or commands

    kubectl describe pod <Pod name > -n <Namespace>
    

    https://kubernetes.io/docs/tasks/debug-application-cluster/debug-pod-replication-controller/#my-pod-is-crashing-or-otherwise-unhealthy