Um Job executa tarefas únicas e garante que o número necessário de pods seja concluído com êxito. Este tópico explica o funcionamento dos Jobs e como criar um no ACK pelo console ou kubectl.
Funcionamento dos Jobs
Diferentemente de Deployments, StatefulSets e DaemonSets — que mantêm um número alvo de pods em execução contínua —, um Job rastreia as conclusões bem-sucedidas de pods. Defina spec.completions para estabelecer o número de sucessos necessários e spec.parallelism para limitar a concorrência máxima.
Tipos de execução
Escolha um tipo de execução:
Não paralelo (sequencial)
Executa um pod por vez. O Job é considerado concluído quando o pod termina com êxito.
|
** |
** |
|
1 |
1 |
Ideal para tarefas de inicialização única, como migrações de banco de dados.
Paralelo com contagem fixa de conclusões
Executa vários pods simultaneamente. O Job termina quando spec.completions pods forem concluídos com êxito.
|
** |
** |
|
N |
M (M ≤ N) |
Se M = N: todos os N pods executam em paralelo e devem ter êxito. Recomendado quando há recursos computacionais suficientes.
Se M < N: até M pods executam simultaneamente até que N pods sejam concluídos com êxito. Útil para redundância — por exemplo, tarefas distribuídas em várias zonas nas quais apenas um resultado é necessário.
Paralelo com restrição de recursos
Caso os recursos sejam insuficientes para executar N pods em paralelo, limite a concorrência com spec.parallelism.
|
** |
** |
|
N |
M (M < N) |
M pods executam por vez. À medida que cada pod é concluído com êxito, novos pods iniciam até que N atinjam o sucesso.
Pré-requisitos
Verifique se você tem:
Um cluster ACK com acesso à rede pública (para baixar a imagem de exemplo)
kubectl conectado ao cluster (apenas para o método kubectl)
Para ativar o acesso à rede pública:
(Recomendado) Habilitar o acesso à Internet em um cluster ACK existente — crie um gateway NAT para a VPC. Todos os recursos do cluster obterão acesso público.
Atribuir endereços IP públicos estáticos aos nós — cada nó que executa cargas de trabalho deve ter um IP público.
Criar um Job
Criar um Job usando o console do ACK
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel à esquerda, escolha Workloads > Jobs.
Na página Jobs, clique em Create from Image.
Na etapa Basic Information, configure as definições básicas e clique em Next.
-
Na seção General, insira
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latestno campo Image Name. Na parte Start da seção Lifecycle, insira/bin/shno campo Command e["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"]no campo Parameter. Em seguida, clique em Next.ImportanteBaixar a imagem
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latestrequer acesso à Internet. Se você ativou a opção Configure SNAT for VPC durante a criação do cluster, ele já possui acesso à Internet. Para clusters existentes, habilite o acesso à Internet.
-
Na etapa Advanced, configure as Job Settings. Neste exemplo, defina Completions como 2 e clique em Create.
Parâmetro
Descrição
Completions
Número necessário de conclusões bem-sucedidas de pods. Corresponde a
spec.completions.Parallelism
Quantidade máxima de pods simultâneos. Corresponde a
spec.parallelism.Timeout
Duração máxima do Job em segundos. Corresponde a
spec.activeDeadlineSeconds. Padrão:600. O Job termina quando essa duração é excedida, independentemente de quantos pods tenham sido concluídos com êxito.BackoffLimit
Limite de falhas de pod antes que o Job falhe. Corresponde a
spec.backoffLimit. Padrão:6.Restart
Política de reinicialização de pod. Corresponde a
template.spec.restartPolicy. Opções: Never (reinicia o pod existente; não conta paraspec.backoffLimit) ou On Failure (cria um novo pod para substituir aquele que falhou).Pod Labels
Rótulos do pod. O ACK adiciona
app:<application-name>por padrão.Pod Annotations
Anotações do pod. Alguns recursos do ACK utilizam anotações para configuração.

-
Visualize os logs do Job no console do ACK. Ambos os pods produzem saída idêntica.

Criar um Job usando kubectl
Conecte-se ao cluster com kubectl antes de prosseguir. Consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster.
-
Crie um arquivo
job.yaml:apiVersion: batch/v1 kind: Job metadata: name: example-job spec: completions: 2 # Stop the Job after two pods terminate successfully. parallelism: 1 # Run only one pod at a time. template: spec: containers: - name: counter image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest command: - /bin/sh - -c - | echo "starting..."; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo "${COUNTER}"; done; echo "finished"; exit 0 restartPolicy: Never -
Aplique o manifesto:
kubectl apply -f job.yamlSaída esperada:
job.batch/example-job created -
Após cerca de 15 segundos, verifique o status do Job:
kubectl get job example-jobUm pod foi concluído com êxito; o Job ainda está em execução:
NAME STATUS COMPLETIONS DURATION AGE example-job Running 1/2 16s 16s -
Após aproximadamente 40 segundos, verifique novamente:
kubectl get job example-jobO Job foi concluído:
NAME STATUS COMPLETIONS DURATION AGE example-job Complete 2/2 27s 37s -
Visualize os logs de todos os pods:
kubectl logs -l job-name=example-jobSaída (dois conjuntos idênticos, um por pod):
starting... 1 2 3 4 5 finished starting... 1 2 3 4 5 finished
Próximas etapas
Create a CronJob — agende um Job para execução recorrente.
Perguntas frequentes sobre cargas de trabalho — resolva problemas comuns relacionados a cargas de trabalho.
Solução de problemas de pods — diagnostique e corrija exceções em pods.