Los pods de Elastic Container Instance (ECI) en estado Pending generan cargos. Si un pod con errores permanece en este estado durante un periodo prolongado y no se atiende a tiempo, podrían generarse costos innecesarios. De forma predeterminada, la duración máxima de Pending para una instancia ECI es de 4 horas. Puede establecer una duración máxima personalizada de Pending según los requisitos de su negocio. El sistema finaliza automáticamente las instancias ECI que superan esta duración, lo cual evita costos innecesarios provocados por pods con errores.
Descripción general
Cada instancia ECI corresponde a un pod. Al crear un pod ECI, la facturación comienza cuando la instancia correspondiente pasa del estado Scheduling al estado Pending. Durante la fase Pending, si ocurren problemas como fallos al extraer la imagen o al montar el volumen, la instancia ECI permanece en estado Pending y continúa generando cargos. De forma predeterminada, el sistema finaliza automáticamente una instancia ECI y detiene la facturación si su duración en Pending supera las 4 horas. Si tiene requisitos de tiempo específicos, puede personalizar la duración máxima de Pending.
Cuando una instancia ECI se encuentra en estado Scheduling, Pending o Restarting, el estado del pod correspondiente (PodStatus.Phase) siempre es Pending. La duración de Pending que se puede personalizar se refiere únicamente al tiempo que una instancia ECI pasa en estado Pending. No incluye el tiempo transcurrido en los estados Scheduling o Restarting. Para obtener más información, consulte ECI pod lifecycle.
Configuración
Agregue la anotación k8s.aliyun.com/eci-max-pending-minute a los metadatos del pod para personalizar la duración máxima de Pending de la instancia ECI correspondiente.
-
El valor debe ser un número entero entre 10 y 1,440 minutos (1 día).
ImportanteEstablezca una duración máxima de Pending adecuada según los requisitos de su negocio. Si una imagen es grande y no hay caché de imágenes disponible, la extracción de la imagen puede tardar bastante tiempo. Si la duración máxima de Pending es demasiado corta, el pod podría finalizar antes de que se complete la extracción de la imagen.
Si no se agrega esta anotación, la duración máxima predeterminada de Pending es de 4 horas.
Esta anotación no aplica a un pod ECI que tenga un contenedor init en ejecución.
Una vez superada la duración máxima de Pending, el sistema genera un evento correspondiente. El estado de la instancia ECI cambia a Failed y el estado del pod (PodStatus.Phase) se determina mediante restartPolicy.
Si
restartPolicyestá configurado comoAlwaysoOnFailure,PodStatus.PhaseesPending.Si
restartPolicyestá configurado comoNever,PodStatus.PhaseesFailed.
Ejemplo de configuración
-
Cree un pod ECI con una duración máxima de Pending especificada.
kubectl create -f pending-test.yamlEl siguiente archivo de ejemplo pending-test.yaml simula un pod atascado en estado Pending debido a un fallo en la extracción de la imagen.
apiVersion: v1 kind: Pod metadata: name: pending-test labels: alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-max-pending-minute: "10" # Set the maximum Pending duration to 10 minutes. spec: containers: - image: test****-registry.example.com/eci_test/nginx:1.0 # Use a private image to simulate an image pull failure. Replace the image with your actual image. name: test-container restartPolicy: Never # Set the restart policy to Never. -
Consulte el estado del pod ECI.
kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'Salida de ejemplo:
:~$ kubectl get pod NAME READY STATUS RESTARTS AGE pending-test 0/1 ImagePullBackOff 0 25s :~$ kubectl get pod pending-test -o=jsonpath='{.status.phase}' Pending -
Espere a que transcurra la duración máxima de Pending especificada y luego consulte el estado y los eventos del pod ECI.
-
Dado que
restartPolicyestá configurado comoNever, el pod entra en estadoFaileddespués de que se agota el tiempo de espera.kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'Salida de ejemplo:
:~$ kubectl get pod NAME READY STATUS RESTARTS AGE pending-test 0/1 ContainerInstanceStartingFailed 0 15m :~$ kubectl get pod pending-test -o=jsonpath='{.status.phase}' Failed -
Consulte los eventos del pod.
kubectl get events --field-selector involvedObject.name=<pod-name>Salida de ejemplo:
Warning Failed pod/pending-test Error: ErrImagePull Normal BackOff pod/pending-test Back-off pulling image "test xxx om/eci_test/nginx:1.0" Warning Failed pod/pending-test Error: ImagePullBackOff Warning StartingFailed pod/pending-test [eci.containergroup]eci starting failed: The Eci pod stuck in Pending exceed eci-max-pending-minute 10, will be released.
NotaTambién puede usar la consola de Elastic Container Instance para comprobar si la instancia ECI se encuentra en estado Failed. En la página de detalles de la instancia, abra la pestaña Events para consultar los eventos.
-