Acabo de ver que algunos de mis pods fueron desalojados por kubernetes. que les pasara a ellos? simplemente merodeando así o tengo que eliminarlos manualmente?
kubernetes
Reachlin
fuente
fuente
Evicted
estado durante 13 días. Parece que las cápsulas desalojadas no se eliminan (o tal vez sea solo un error).DiskPressure
) que se pueden encontrar usandokubectl describe pods my-pod-name --namespace prod
Respuestas:
Una solución rápida que utilizo es eliminar todos los pods desalojados manualmente después de un incidente. Puedes usar este comando:
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c
fuente
-a
argumento no es válido.Para eliminar pods en estado Fallido en el espacio de nombres
default
fuente
status.phase=Evicted
. Me las arreglé para hacer estokubectl -n default delete pods --field-selector=status.phase!=Running
. Pero tenga cuidado, esto eliminaría todokubectl -n default get pods --field-selector=status.phase=Failed
al principio.Evicted
vainas.Los pods desalojados deben eliminarse manualmente. Puede usar el siguiente comando para eliminar todos los pods en
Error
estado.kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
fuente
Dependiendo de si se ha alcanzado un umbral de desalojo suave o estricto , los Contenedores del Pod se cancelarán con o sin período de gracia,
PodPhase
se marcarán comoFailed
y el Pod se eliminará. Si su Aplicación se ejecuta como parte de, por ejemplo, una Implementación, habrá otro Pod creado y programado por Kubernetes, probablemente en otro Nodo que no exceda sus umbrales de desalojo.Tenga en cuenta que el desalojo no necesariamente tiene que ser causado por umbrales, sino que también puede invocarse
kubectl drain
para vaciar un nodo o manualmente a través de la API de Kubernetes .fuente
kubectl get pods -n mynamespace
kubectl describe pod <pod>
dice?kubectl describe
dice "Estado: Razón fallida: Mensaje desalojado: Pod El nodo tenía pocos recursos: [MemoryPressure]".En caso de que tenga pods con un
Completed
estado que desee mantener:kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
fuente
Kube-controller-manager
existe de forma predeterminada con una instalación de K8 en funcionamiento. Parece que el valor predeterminado es un máximo de 12500 pods terminados antes de que GC se active.Directamente de la documentación de K8s: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager
fuente
kubectl edit pod kube-controller-manager-<master_name> -n kube-system
, me da unpod is invalid
error después de guardar el archivo de configuración.En caso de que alguien quiera eliminar automáticamente todos los pods desalojados para todos los espacios de nombres:
Foreach( $x in (kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name)) {kubectl delete po $x --all-namespaces }
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces
fuente
Equivalente de OpenShift del comando de Kalvin para eliminar todos los pods 'Evicted':
eval "$(oc get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Failed" and .status.reason == "Evicted") | "oc delete pod --namespace " + .metadata.namespace + " " + .metadata.name')"
fuente
Un comando bash más para eliminar pods desalojados
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
fuente
Para eliminar todos los
Evicted
pods por la fuerza, puede probar este comando de una línea:$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/e'
Consejos: use el
p
modificador des
comando de ensed
lugar dee
simplemente imprimirá el comando real para hacer el trabajo de eliminación:$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/p'
fuente
Aquí está la guía 'oficial' sobre cómo codificar el umbral (si no desea ver demasiados pods desalojados): kube-controll-manager
Pero un problema conocido es cómo tener instalado kube-controll-manager ...
fuente
Otra forma todavía con
awk
.Para evitar cualquier error humano que pueda volverme loco (eliminar pods deseables), verifico antes el resultado del
get pods
comando:kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed
Si eso se ve bien, aquí vamos:
kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed | \ awk '{system("kubectl -n my-ns delete pods " $1)}'
fuente
El siguiente comando elimina todos los pods fallidos de todos los espacios de nombres
kubectl get pods -A | grep Evicted | awk '{print $2 " -n " $1}' | xargs -n 3 kubectl delete pod
fuente
El siguiente comando obtendrá todos los pods desalojados del espacio de nombres predeterminado y los eliminará
kubectl get pods | grep Evicted | awk '{print$1}' | xargs -I {} kubectl delete pods/{}
fuente