Um Job executa tarefas pontuais e garante que o número necessário de pods seja concluído com sucesso. 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 a quantidade 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 paralela (sequencial)
Executa um pod por vez. O Job é considerado concluído quando o pod termina com sucesso.
|
** |
** |
|
1 |
1 |
Ideal para tarefas de inicialização única, como migrações de banco de dados.
Paralela com contagem fixa de conclusões
Executa vários pods simultaneamente. O Job termina quando spec.completions pods obtêm sucesso.
|
** |
** |
|
N |
M (M ≤ N) |
Se M = N: todos os N pods executam em paralelo e devem ter sucesso. Recomendado quando há recursos computacionais suficientes.
Se M < N: até M pods executam simultaneamente até que N pods concluam com sucesso. Útil para redundância — por exemplo, tarefas distribuídas em várias zonas onde apenas um resultado é necessário.
Paralela com restrição de recursos
Caso os recursos sejam insuficientes para executar N pods ao mesmo tempo, limite a concorrência com spec.parallelism.
|
** |
** |
|
N |
M (M < N) |
M pods executam por vez. À medida que cada pod conclui com sucesso, novos pods iniciam até que N atinjam o objetivo.
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 NAT gateway 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 pelo console do ACK
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em 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 encerra quando esse tempo é excedido, independentemente de quantos pods tiveram sucesso.BackoffLimit
Limite de falhas de pods antes que o Job falhe. Corresponde a
spec.backoffLimit. Padrão:6.Restart
Política de reinicialização de pods. 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 dos pods. O ACK adiciona
app:<application-name>por padrão.Pod Annotations
Anotações dos pods. 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 teve sucesso; 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
Criar um CronJob — agende um Job para execução recorrente.
Perguntas frequentes sobre cargas de trabalho — resolva problemas comuns relacionados a workloads.
Solução de problemas de pods — diagnostique e corrija exceções em pods.