Todos os produtos
Search
Central de documentação

Elastic Container Instance:Configurar a ordem de inicialização e saída de contêineres

Última atualização: Jun 28, 2026

Este tópico descreve como usar variáveis de ambiente para definir prioridades de inicialização e saída dos contêineres em um pod ECI. Isso garante que eles iniciem e encerrem na ordem especificada.

Funcionamento

Por padrão, os contêineres em um pod ECI iniciam e encerram em paralelo, sem ordem específica. Alguns cenários envolvem dependências entre contêineres e exigem que um inicie somente após outro estar em execução ou encerre apenas depois da parada de outro. Por exemplo:

  • Em cenários de governança de serviços Istio, o contêiner istio-proxy deve estar Ready antes que o contêiner da aplicação gere tráfego. Além disso, ele deve encerrar somente após o encerramento do contêiner da aplicação.

  • Na coleta de logs, o contêiner do agente de log deve estar Ready antes que o contêiner da aplicação produza logs. Ele também deve encerrar somente após o encerramento do contêiner da aplicação.

Para atender a esses cenários, o ECI permite definir prioridades de inicialização e saída para os contêineres por meio de variáveis de ambiente. Assim, eles iniciam e encerram na ordem especificada.

Configuração

As variáveis de ambiente a seguir controlam a ordem de inicialização e saída dos contêineres:

Parâmetro

Variável de ambiente

Descrição

Prioridade de inicialização do contêiner

ECI_CONTAINER_LAUNCH_PRIORITY

  • Valores válidos: -1000 a 1000. Padrão: 0. Valores maiores indicam maior prioridade de inicialização.

  • Contêineres com prioridade mais alta sempre iniciam antes daqueles com prioridade mais baixa. Contêineres com a mesma prioridade iniciam em paralelo, sem garantia de ordem.

  • Se um contêiner (por exemplo, B) depender de um serviço de outro contêiner (A), defina uma prioridade de inicialização mais alta para o contêiner A e configure uma sonda de prontidão (readiness probe). Essa sonda garante que o contêiner B inicie somente após o contêiner A estar pronto.

Prioridade de saída do contêiner

ECI_CONTAINER_EXIT_PRIORITY

  • Valores válidos: -1000 a 1000. Padrão: 0. Valores maiores indicam maior prioridade de saída.

  • Contêineres com prioridade mais alta sempre encerram antes daqueles com prioridade mais baixa. Contêineres com a mesma prioridade encerram em paralelo, sem garantia de ordem.

Importante

Configure a ordem de saída dos contêineres pode fazer com que o tempo total de encerramento do pod exceda o valor TerminationGracePeriodSeconds definido em sua especificação.

Exemplos

Configure a ordem de inicialização dos contêineres

  1. Execute o comando a seguir para crie um Deployment a partir de um arquivo de configuração YAML.

    kubectl apply -f test-launch.yaml

    O conteúdo do arquivo test-launch.yaml abaixo defina um Deployment com uma réplica. O pod contém dois contêineres, c1 e c2, em que c1 tem prioridade de inicialização maior que c2. Há uma sonda de prontidão configurada para c1, o que garante que c2 inicie somente após c1 estar pronto.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-launch
      labels:
        app: test
    spec:
      replicas: 1 
      selector:
        matchLabels:
          app: test
      template:
        metadata:
          labels:
            app: test
        spec:
          containers:
          - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine
            name: c1
            env:
            - name: ECI_CONTAINER_LAUNCH_PRIORITY
              value: "1000"
            readinessProbe:                  
              httpGet:
                path: /
                port: 80
              initialDelaySeconds: 30     
              periodSeconds: 3
          - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine
            name: c2
            env:
            - name: ECI_CONTAINER_LAUNCH_PRIORITY
              value: "0"
            args:
            - /bin/sh
            - -c
            - sleep 3600s
  2. Verifique os horários de inicialização dos contêineres no status do pod.

    kubectl describe pod <pod name>

    A seção Containers da saída mostra que o contêiner c2 iniciou após o contêiner c1. Veja um exemplo:

    Containers:
    c1:
        Container ID:   containerd://779ec5b6d9ad1164c929ab0b8bbc4a3a3b24fe1f9654867e842f2dcfe7b24beb
        Image:          registry.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine
        Image ID:       registry.cn-shanghai.aliyuncs.com/eci_open/nginx@sha256:2ec3c026183996087f26c6b3
        Port:           <none>
        Host Port:      <none>
        State:          Running
          Started:      Wed, 16 Aug 2023 07:11:48 +0000
        Ready:          True
        Restart Count:  0
        Readiness:      http-get http://:80/ delay=30s timeout=1s period=3s #success=1 #failure=3
        Environment:
          ECI_CONTAINER_LAUNCH_PRIORITY:  1000
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-2qkqp (ro)
    c2:
        Container ID:   containerd://fe6261cc2e659ee9afb07c2efd516250aeb854544504d66ac011b557e94a0cb6
        Image:          registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine
        Image ID:       registry.cn-shanghai.aliyuncs.com/eci_open/nginx@sha256:2ec3c026183996087f26c6b38
        Port:           <none>
        Host Port:      <none>
        Args:
          /bin/sh
          -c
          sleep 3600s
        State:          Running
          Started:      Wed, 16 Aug 2023 07:12:20 +0000
        Ready:          True
        Restart Count:  0
        Environment:
          ECI_CONTAINER_LAUNCH_PRIORITY:  0

Configure a ordem de saída dos contêineres

  1. Execute o comando a seguir para crie um Deployment a partir de um arquivo de configuração YAML.

    kubectl apply -f test-exit.yaml

    O conteúdo do arquivo test-exit.yaml abaixo defina um Deployment com uma réplica. O pod contém três contêineres com prioridades de saída definidas em ordem decrescente: c1, c2 e c3.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-exit
      labels:
        app: test
    spec:
      replicas: 1 
      selector:
        matchLabels:
          app: test
      template:
        metadata:
          labels:
            app: test
        spec:
          containers:
          - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine
            name: c1
            env:
            - name: ECI_CONTAINER_EXIT_PRIORITY
              value: "1000"
          - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine
            name: c2
            env:
            - name: ECI_CONTAINER_EXIT_PRIORITY
              value: "0"
            args:
            - /bin/sh
            - -c
            - sleep 3600s
          - image: registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:alpine
            name: c3
            env:
            - name: ECI_CONTAINER_EXIT_PRIORITY
              value: "-1000"
            args:
            - /bin/sh
            - -c
            - sleep 3600s
  2. Exclua o pod e observe a ordem dos eventos Killing dos contêineres.

    Nota

    Esses eventos são transitórios e podem ficar indisponíveis após a exclusão do pod.

    kubectl describe pod <pod name>

    A seção Events da saída mostra os contêineres parando conforme sua prioridade de saída: c1, c2 e, por fim, c3. Veja um exemplo:

    Events:
      Type     Reason                  Age    From               Message
      ----     ------                  ----   ----               -------
      Warning  MissingClusterDNS       2m10s  virtual-kubelet    pod: default/test-exit-pr
    and cannot create Pod using "ClusterFirst" policy. Falling back to "Default" policy.
      Normal   DefaultInstanceTypeMatch  2m10s  EciService       [eci.containergroup]The de
      Warning  ImageCacheMissed        2m9s   EciService         [eci.imagecache]Missed ima
      Normal   ImageCacheAutoCreated   2m9s   EciService         [eci.imagecache]Image cach
      Normal   Pulling                 115s   kubelet            Pulling image "registry.cn
      Normal   Pulled                  113s   kubelet            Successfully pulled image
    ing)
      Normal   Created                 113s   kubelet            Created container c1
      Normal   Started                 113s   kubelet            Started container c1
      Normal   Pulled                  113s   kubelet            Container image "registry.
      Normal   Created                 113s   kubelet            Created container c2
      Normal   Started                 113s   kubelet            Started container c2
      Normal   Pulled                  113s   kubelet            Container image "registry.
      Normal   Created                 112s   kubelet            Created container c3
      Normal   Started                 112s   kubelet            Started container c3
      Normal   Killing                 37s    kubelet            Stopping container c1
      Normal   Killing                 37s    kubelet            Stopping container c2
      Normal   Killing                 7s     kubelet            Stopping container c3