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 |
|
|
Prioridade de saída do contêiner |
ECI_CONTAINER_EXIT_PRIORITY |
|
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
-
Execute o comando a seguir para crie um Deployment a partir de um arquivo de configuração YAML.
kubectl apply -f test-launch.yamlO conteúdo do arquivo
test-launch.yamlabaixo 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 -
Verifique os horários de inicialização dos contêineres no status do pod.
kubectl describe pod <pod name>A seção
Containersda 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
-
Execute o comando a seguir para crie um Deployment a partir de um arquivo de configuração YAML.
kubectl apply -f test-exit.yamlO conteúdo do arquivo
test-exit.yamlabaixo 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 -
Exclua o pod e observe a ordem dos eventos
Killingdos contêineres.NotaEsses 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
Eventsda 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