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

Evictedestado 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 prodRespuestas:
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 -cfuente
-aargumento no es válido.Para eliminar pods en estado Fallido en el espacio de nombres
defaultfuente
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=Failedal principio.Evictedvainas.Los pods desalojados deben eliminarse manualmente. Puede usar el siguiente comando para eliminar todos los pods en
Errorestado.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,
PodPhasese marcarán comoFailedy 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 drainpara vaciar un nodo o manualmente a través de la API de Kubernetes .fuente
kubectl get pods -n mynamespacekubectl describe pod <pod>dice?kubectl describedice "Estado: Razón fallida: Mensaje desalojado: Pod El nodo tenía pocos recursos: [MemoryPressure]".En caso de que tenga pods con un
Completedestado que desee mantener:kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -fuente
Kube-controller-managerexiste 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 invaliderror 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-namespacesfuente
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 podfuente
Para eliminar todos los
Evictedpods 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
pmodificador descomando de ensedlugar deesimplemente 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 podscomando:kubectl -n my-ns get pods --no-headers --field-selector=status.phase=FailedSi 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 podfuente
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