Saltar al contenido

¿Por qué no puedo eliminar mis recursos de clúster de Amazon EKS?

9 minutos de lectura
0

No puedo eliminar un recurso de mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Solución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Realiza las siguientes acciones de solución de problemas en función del recurso de Amazon EKS que esté bloqueado en estado de terminación. Los finalizadores alertan a los controladores para que eliminen recursos y eviten la eliminación accidental. Si tu recurso está bloqueado en estado de terminación, debes eliminar los finalizadores del mismo antes de eliminarlo. Para obtener más información sobre los finalizadores, consulta Finalizadores en el sitio web de Kubernetes.

Solución de problemas de eliminación de espacios de nombres

Para comprobar si hay recursos en el espacio de nombres bloqueados en el estado de terminación, ejecuta el siguiente comando:

kubectl get all -n namespace-name | grep Terminating

Nota: Sustituye namespace-name por el espacio de nombres.

Para eliminar manualmente el recurso, ejecuta el siguiente comando:

kubectl delete resource resource-name -n namespace-name

Nota: Sustituye resource por el tipo de recurso, resource-name por el nombre del recurso y namespace-name por el espacio de nombres.

Para comprobar si hay errores en el servicio de API o del finalizador, ejecuta el siguiente comando:

kubectl get ns namespace-name -o json

Nota: Sustituye namespace-name por el espacio de nombres.

Si recibes errores en el resultado del comando, consulta ¿Cómo soluciono los problemas de los espacios de nombres en un estado terminado en mi clúster de Amazon EKS?

Solución de problemas de eliminación de entradas

Elimina los equilibradores de carga o los grupos objetivo que están asociados al recurso de entrada.

Para eliminar los finalizadores de un recurso de entrada, ejecuta el siguiente comando:

kubectl patch ingress ingress-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge

Nota: Sustituye ingress-name por el nombre de entrada y namespace-name por el espacio de nombres.

A continuación, ejecuta el siguiente comando para eliminar el recurso de entrada:

kubectl delete ingress ingress-name -n namespace-name

Nota: Sustituye ingress-name por el nombre de entrada y namespace-name por el espacio de nombres.

Solución de problemas de eliminación de servicios

Para eliminar los finalizadores del recurso de servicio, ejecuta el siguiente comando:

kubectl patch svc service-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge

Nota: Sustituye service-name por el nombre de tu servicio y namespace-name por el espacio de nombres.

Utiliza la consola de Amazon EC2 para desactivar la protección contra eliminaciones en el equilibrador de carga asociado al servicio. O bien, usa la anotación service.beta.kubernetes.io/aws-load-balancer-attributes para desactivar la protección contra eliminaciones. Para obtener más información, consulta Atributos de recursos en el sitio web de Kubernetes.

A continuación, ejecuta el siguiente comando para eliminar el servicio:

kubectl delete svc service-name -n namespace-name

Nota: Sustituye service-name por el nombre de tu servicio y namespace-name por el espacio de nombres.

Solución de problemas de eliminación de PV y PVC

Si no puedes eliminar PersistentVolume (PV) o PersistentVolumeClaim (PVC), comprueba si hay los siguientes problemas:

  • Comprueba si has eliminado el PVC antes de eliminar el PVC vinculado.
  • Comprueba si has eliminado el PVC cuando el pod aún estaba en ejecución y adjunto a él.

Has eliminado el PV

Para solucionar este problema, elimina el PVC vinculado al PV.

Para identificar el PVC asociado al PV bloqueado en el estado de terminación, ejecuta el siguiente comando para describir el PV:

kubectl get pv pv-name

Nota: Sustituye pv-name por el nombre de PV. El comando muestra el nombre y el espacio de nombres del PVC en el formato NAMESPACE/PVC_NAME.

Resultado de ejemplo:

default/ebs-claim

Para eliminar el PVC, ejecuta el siguiente comando:

kubectl delete pvc -n namespace-name pvc-name

Nota: Sustituye namespace-name por el espacio de nombres del PVC y pvc-name por el nombre del PVC.

Si sigues sin poder eliminar el PV, ejecuta el siguiente comando para eliminar sus finalizadores:

kubectl patch pv -p '{"metadata":{"finalizers":null}}' pv-name

Nota: Sustituye pv-name por el nombre de PV.

Has eliminado el PVC

Para resolver este problema, elimina el pod que está adjunto al PVC.

Para identificar los pods que están asociados al PVC, ejecuta el siguiente comando para describir el PVC:

kubectl describe pvc -n namespace-name pvc-name

Nota: Sustituye namespace-name por el espacio de nombres del PVC y pvc-name por el nombre del PVC. En la salida, marca el atributo Used by.

Resultado de ejemplo:

Name:          ebs-claim
Namespace:     default
StorageClass:  ebs-sc
Status:        Bound
Volume:        pvc-3402cc47-c4d7-42c3-8965-f9e1e08f8b95
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
               volume.kubernetes.io/selected-node: ip-192-168-33-43.ec2.internal
               volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      4Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       ebs-app-59c74d8d45-z65kj
Events:        <none>

En el ejemplo anterior, el pod ebs-app-59c74d8d45-z65kj utiliza el PVC.

Para eliminar el pod, ejecuta el siguiente comando:

kubectl delete pod -n namespace-name pod-name

Nota: Sustituye namespace-name por el espacio de nombres del PVC y pod-name por el nombre del pod.

Si sigues sin poder eliminar el PVC, ejecuta el siguiente comando para eliminar sus finalizadores:

kubectl patch pvc -p '{"metadata":{"finalizers":null}}' -n namespace-name pvc-name

Nota: Sustituye namespace-name por el espacio de nombres del PVC y pvc-name por el nombre del PVC.

Solución de problemas de eliminación de pods

Si no puedes eliminar el pod, comprueba si hay los siguientes problemas:

  • Comprueba si el pod no responde a las señales de terminación.
  • Comprueba si el pod tiene un finalizador asociado que no se ha completado.

El pod no responde a las señales de terminación

Importante: La siguiente resolución elimina inmediatamente el pod sin confirmar que has terminado el pod en ejecución. Asegúrate de que el módulo no esté en ejecución. Si no lo haces, es posible que el pod se ejecute indefinidamente en el clúster.

Por lo general, los pods se eliminan después del periodo de gracia predeterminado de 30 segundos. Si el pod no se elimina después de 30 segundos, ejecuta el siguiente comando para forzar la eliminación del pod:

kubectl delete pod --force --grace-period=0 -n namespace-name pod-name

Nota: Sustituye namespace-name por el espacio de nombres del pod y pod-name por el nombre del pod. Debes establecer el indicador --grace-period en 0 para eliminar inmediatamente el pod.

El pod tiene un finalizador asociado que no se ha completado

Para comprobar si el pod tiene finalizadores, ejecuta el siguiente comando:

kubectl get pod -o yaml -n namespace-name pod-name

Nota: Sustituye namespace-name por el espacio de nombres del pod y pod-name por el nombre del pod. En el resultado, consulta metadata.finalizers para identificar los finalizadores.

Resultado de ejemplo:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2024-09-16T19:32:01Z"
  finalizers:
  - kubernetes
  labels:
    app: nginx
    pod-template-hash: 7c79c4bf97
  namespace: default
spec:
  containers:
  - image: nginx:latest
    imagePullPolicy: Always
    name: nginx
    ports:
    - containerPort: 80
      protocol: TCP

Para eliminar los finalizadores, ejecuta el siguiente comando:

kubectl patch pod -p '{"metadata":{"finalizers":null}}' -n namespace-name pod-name

Nota: Sustituye namespace-name por el espacio de nombres del pod y pod-name por el nombre del pod.

Solución de problemas de eliminación de clústeres

Por lo general, los problemas de eliminación de clústeres se producen porque hay grupos de nodos administrados adjuntos al clúster. Para solucionar este problema, elimina los grupos de nodos administrados. Para obtener más información, consulta ¿Por qué no puedo eliminar mi clúster de Amazon EKS?

Si un clúster tiene un extractor administrado asociado, es posible que también tengas problemas de eliminación. En este escenario, no puedes eliminar la red privada virtual (VPC) ni la interfaz de red elástica que utiliza el extractor.

Para identificar el ID del extractor, ejecuta el siguiente comando list-scrapers de la AWS CLI:

aws amp list-scrapers

A continuación, ejecuta el siguiente comando delete-scraper para eliminar el extractor:

aws amp delete-scraper --scraper-id scraper-example

Nota: Sustituye scraper-example por el ID del extractor.

Solución de problemas de eliminación de grupos de nodos administrados por Amazon EKS

Si no puedes eliminar el grupo de nodos administrados, revisa los siguientes problemas:

  • Comprueba si el recurso tiene un objeto dependiente.
  • Comprueba si el proceso de terminación del grupo de Amazon EC2 Auto Scaling está suspendido.
  • Comprueba si tu grupo de nodos tiene errores de estado.
  • Comprueba si los pods están bloqueados en los nodos.

El recurso tiene un objeto dependiente

El problema de dependencia se produce cuando un recurso creado por el grupo de nodos administrados se asocia a otro recurso de la cuenta de AWS. Normalmente, el recurso es un grupo de seguridad. Para resolver este problema, identifica los objetos asociados al grupo de seguridad. A continuación, desasocia el grupo de seguridad del recurso. Si tienes problemas, consulta ¿Por qué no puedo eliminar un grupo de seguridad adjunto a mi Amazon VPC?

El proceso de terminación del grupo de EC2 Auto Scaling está suspendido

Para solucionar este problema, reinicia el proceso de terminación.

Tu grupo de nodos tiene errores de estado

Para obtener información sobre los tipos de errores de estado que pueden producirse en tu grupo de nodos administrados, consulta Problema.

Para solucionar problemas de estado, consulta ¿Cómo soluciono los errores de grupos de nodos administrados en un clúster de Amazon EKS?

Los pods están bloqueados en los nodos

Al eliminar el grupo de nodos administrados, es posible que recibas el siguiente mensaje de error:

«1 pods are unevictable from node ip-192-168-29-140.ec2.internal»

Este problema puede producirse si un pod del clúster se bloquea en estado de terminación. Para solucionar este problema, consigue que kubectl acceda al clúster y, a continuación, ejecuta el siguiente comando:

kubectl get pod -A

El error pods are unevictable puede deberse a que configuraste mal el PodDisruptionBudget o a que no tienes suficientes interrupciones disponibles para permitir que el pod se expulse. Para solucionar este problema, consulta ¿Cómo puedo solucionar los problemas de actualización de grupos de nodos administrados para Amazon EKS?

OFICIAL DE AWSActualizada hace un año