Pods do Elastic Container Instance (ECI) no estado Pending geram cobranças. Se um pod anormal permanecer em Pending por muito tempo sem o devido tratamento, você poderá incorrer em custos desnecessários. Por padrão, a duração máxima de Pending para uma instância ECI é de 4 horas. Defina uma duração máxima personalizada conforme as necessidades do seu negócio. O sistema encerra automaticamente as instâncias ECI que ultrapassam esse limite e evita gastos indevidos causados por pods com falha.
Visão geral
Cada instância ECI corresponde a um pod. Ao criar um pod ECI, o faturamento começa quando a instância ECI correspondente passa do estado Scheduling para o estado Pending. Durante a fase Pending, problemas como falhas no pull da imagem ou na montagem do volume mantêm a instância ECI nesse estado e geram cobrança contínua. Caso a duração de Pending exceda 4 horas, o sistema encerra automaticamente a instância ECI e interrompe o faturamento. Para requisitos de tempo específicos, personalize a duração máxima de Pending.
Quando uma instância ECI está nos estados Scheduling, Pending ou Restarting, o status do pod correspondente (PodStatus.Phase) é sempre Pending. A duração personalizável de Pending refere-se apenas ao tempo que a instância ECI permanece no estado Pending. Ela não inclui os períodos nos estados Scheduling ou Restarting. Para mais informações, consulte Ciclo de vida do pod ECI.
Configuração
Adicione a anotação k8s.aliyun.com/eci-max-pending-minute aos metadados do pod para personalizar a duração máxima de Pending da instância ECI correspondente.
-
O valor deve ser um número inteiro entre 10 e 1.440 minutos (1 dia).
ImportanteDefina uma duração máxima de Pending adequada às necessidades do seu negócio. Imagens grandes sem cache disponível podem levar bastante tempo para serem baixadas. Se o limite for muito curto, o pod pode ser encerrado antes da conclusão do pull da imagem.
Sem essa anotação, a duração máxima padrão de Pending é de 4 horas.
Essa anotação não se aplica a pods ECI com init containers em execução.
Ao ultrapassar a duração máxima de Pending, o sistema registra um evento correspondente. O status da instância ECI muda para Failed, e o status do pod (PodStatus.Phase) depende da configuração de restartPolicy.
Se
restartPolicyestiver definido comoAlwaysouOnFailure,PodStatus.PhaseseráPending.Se
restartPolicyestiver definido comoNever,PodStatus.PhaseseráFailed.
Exemplo de configuração
-
Crie um pod ECI com uma duração máxima de Pending especificada.
kubectl create -f pending-test.yamlO arquivo de exemplo pending-test.yaml abaixo simula um pod preso no estado Pending devido a uma falha no pull da imagem.
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. -
Verifique o status do pod ECI.
kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'Saída de exemplo:
:~$ 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 -
Aguarde o término da duração máxima de Pending especificada e verifique o status e os eventos do pod ECI.
-
Como
restartPolicyestá definido comoNever, o pod entra no estadoFailedapós o tempo limite.kubectl get pod <pod-name> -o=jsonpath='{.status.phase}'Saída de exemplo:
:~$ 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 os eventos do pod.
kubectl get events --field-selector involvedObject.name=<pod-name>Saída de exemplo:
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.
NotaVocê também pode usar o console do Elastic Container Instance para verificar se a instância ECI está no estado Failed. Na página de detalhes da instância, abra a aba Events para visualizar os eventos.
-