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:
|
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
-
Crie o arquivo de configuração YAML de um job e use-o para criar o recurso.
kubectl apply -f test-sidecar.yamlO 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 -
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
-