Todos os produtos
Search
Central de documentação

Elastic Container Instance:Forçar o encerramento do contêiner sidecar e ignorar o código de saída

Última atualização: Jun 27, 2026

Ao usar um contêiner sidecar para simular o comportamento de um DaemonSet, pods do tipo job podem não concluir a execução. Nesse caso, configure variáveis de ambiente para especificar o tipo do contêiner sidecar e ignorar seu código de saída. Essa configuração garante que o job seja concluído conforme o esperado.

Descrição do recurso

Em clusters Serverless do Container Service for Kubernetes (ACK), o Elastic Container Instance não oferece suporte ao recurso DaemonSet do Kubernetes devido às limitações dos nós virtuais. Para cenários que exigem funcionalidades similares às do DaemonSet, adicione contêineres sidecar aos pods baseados em Elastic Container Instance. No entanto, se o parâmetro RestartPolicy estiver definido como OnFailure ou Never, o ciclo de vida dos pods será afetado. Por exemplo, ao adicionar um contêiner sidecar do filebeat a um job, esse sidecar continua em execução mesmo após o encerramento dos contêineres da aplicação. Consequentemente, o job não atinge o estado desejado e falha na conclusão.

Para lidar com essas situações, o Elastic Container Instance oferece os seguintes recursos:

  • Especificar o tipo dos contêineres

    Use variáveis de ambiente para aplicar um rótulo de tipo a um contêiner sidecar. Assim, quando os contêineres da aplicação forem encerrados sem reinicialização, o Elastic Container Instance encerra forçadamente a execução do sidecar e assegura a conclusão do job.

  • Ignorar os códigos de saída dos contêineres

    Quando o Elastic Container Instance encerra forçadamente um sidecar, o código de saída resultante é diferente de zero, indicando falha no encerramento. Isso faria com que o estado final do job fosse marcado como Failed. Para resolver essa questão, use variáveis de ambiente para ignorar o código de saída do sidecar e definir forçadamente seu estado como Succeeded. Dessa forma, o estado final do job também será Succeeded.

Descrição das configurações

Item de configuração

Nome da variável de ambiente

Descrição

Especificar o tipo dos contêineres

ECI_CONTAINER_TYPE

Valores válidos:

  • normal: indica que o contêiner é do tipo normal. Se esta variável de ambiente estiver vazia, o valor normal será usado por padrão.

  • sidecar: defina o contêiner como um sidecar.

Ignorar os códigos de saída dos contêineres

ECI_CONTAINER_IGNORE_EXIT_CODE

Define se os códigos de saída dos contêineres devem ser ignorados. Caso um contêiner com essa variável configurada seja encerrado com um código de saída diferente de zero, o Elastic Container Instance altera forçadamente o estado do contêiner para Succeeded. Além disso, o sistema anexa o código de saída real, a causa da falha e as informações do erro ao campo Message em formato de texto.

Exemplo de configuração

  1. Crie o arquivo de configuração YAML de um job e use-o para criar o recurso.

    kubectl apply -f test-sidecar.yaml

    O exemplo a seguir apresenta um arquivo YAML chamado test-sidecar.yaml. Este arquivo cria um job composto por dois contêineres: c1 atua como contêiner da aplicação, enquanto c2 funciona como sidecar. Variáveis de ambiente foram incluídas para especificar os tipos de contêiner e ignorar seus códigos de saída.

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: test
    spec:
      template:
        metadata:
          labels:
            app: test
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - name: c1
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["perl","-Mbignum=bpi","-wle","print bpi(2000)"]
          - name: c2
            image: registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
            command: ["/bin/sh","-c","sleep 999"] 
            env:
            - name: ECI_CONTAINER_TYPE
              value: "sidecar"
            - name: ECI_CONTAINER_IGNORE_EXIT_CODE
              value: "true"
          restartPolicy: Never
          backoffLimit: 2
  2. Visualize os detalhes do job e do pod para validar o comportamento das variáveis de ambiente.

    • Execute o comando a seguir para confirmar se o estado final do job é Succeeded.

      kubectl describe job <job-name>

      Resposta de exemplo:

      :~$ kubectl describe job test
      Name:           test
      Namespace:      default
      Selector:       batch.kubernetes.io/controller-uid=c8a69ddd-34db-4716-
      Labels:         alibabacloud.com/eci=true
                      app=test
                      batch.kubernetes.io/controller-uid=c8a69ddd-34db-4716-
                      batch.kubernetes.io/job-name=test
                      controller-uid=c8a69ddd-34db-4716-8be4-528e556a8533
                      job-name=test
      Annotations:    <none>
      Parallelism:    1
      Completions:    1
      Completion Mode:    NonIndexed
      Start Time:     Wed, 29 Nov 2023 08:58:40 +0000
      Completed At:   Wed, 29 Nov 2023 08:59:37 +0000
      Duration:       57s
      Pods Statuses:  0 Active (0 Ready) / 1 Succeeded / 0 Failed
    • Consulte os detalhes do contêiner sidecar para inspecionar o código de saída real e outras informações relevantes.

      kubectl describe pod <pod-name>

      Resposta de exemplo:

      c2:
          Container ID:   containerd://970f2424854aa19796e7883026435de2dae4ecf
          Image:          registry.cn-shanghai.aliyuncs.com/eci_open/perl:5
          Image ID:       registry.cn-shanghai.aliyuncs.com/eci_open/perl@sha2
          Port:           <none>
          Host Port:      <none>
          Command:
            /bin/sh
            -c
            sleep 999
          State:          Terminated
            Reason:       Completed
            Message:      Force this container to be success(137, Error, )
            Exit Code:    0