Kubernetes tem uma maneira análoga de executar processos únicos Empregos e processos periódicos como Jobs Cron.
Começaremos com um exemplo típico de que trabalhos são e demonstraremos um exemplo padrão dos documentos oficiais. A partir deste exemplo, será fácil entender o que isso significa executando um trabalho com sucesso no contexto de Kubernetes.
Para acompanhar, eu recomendaria que você use o Kataconda Playground para Kubernetes, que fornecerá um cluster de Kubernetes fora da caixa, sem que você precise configurar manualmente um ou arriscando um cluster de produção para experimentos.
Os empregos são abstrações de Kubernetes de nível mais alto, semelhantes aos replicates e implantações. Mas, diferentemente dos pods gerenciados por implantações e replicasets, as vagens realizando um trabalho completam seu trabalho e saída.
Quando um número especificado de vagens atinge completo, diz -se que o trabalho foi concluído com êxito. Quais são os critérios que definem um término bem -sucedido de uma vagem é algo que definiremos no arquivo YAML do trabalho. Em seguida, o controlador de emprego garantirá que um certo número de vagens tenha terminado com sucesso e que o trabalho seja concluído.
Vamos criar um trabalho que imprima dígitos de Pi até 2000 lugares em seus toros que examinaremos. Crie um arquivo e ligue meu trabalho.Yaml e salve o seguinte conteúdo nele;
APIVERSION: LOTA/V1
Kind: Jó
Metadados:
Nome: Pi
especificação:
modelo:
especificação:
containers:
- Nome: Pi
Imagem: Perl
Comando: ["perl", "-mbignum = bpi", "-wle", "print bpi (2000)"]
RESTARTPOLICY: Nunca
Backofflimit: 4
Crie o trabalho, usando este arquivo:
$ kubectl Criar -f ./trabalho.YamlVocê notará que o trabalho leva alguns segundos a alguns minutos para ser executado e assim que for feito. Quando você tenta listar todos os pods usando:
$ kubectl Obtenha pods
Nome Pronto Status reinicia a idade
PI-WG6ZP 0/1 Concluído 0 50S
Você verá que o status do pod relacionado ao PI é Concluído não correndo ou terminado.Você também pode copiar o nome do pod para que possamos verificar se o PI foi realmente calculado para 2000 dígitos. O nome específico do pod pode diferir no seu caso.
$ KUBECTL LOGS PI-WG6ZP
Curiosamente, o pod não Terminado ainda é muito ativo, apenas que não há aplicativos em execução dentro dele. Semelhante a apenas ligar o seu computador e não usá -lo. Se o pod fosse encerrado, não teríamos sido capazes de puxar os troncos dele, em primeiro lugar.
Para limpar o trabalho e todas as vagens criadas, execute o comando:
$ kubectl delete -f my -jobs.YamlVocê pode aprender mais sobre as especificações do trabalho e como escrever sua especificação na documentação oficial.
Jobs Cron
Os empregos de Cron são semelhantes à concessionária de Cron no Unix, que corre periodicamente de acordo com uma programação que desejamos. Não é uma coisa superstável em Kubernetes, no momento da redação deste artigo, então você pode querer ter cuidado usando. Para citar os documentos oficiais:
“Um trabalho de Cron cria um objeto de emprego sobre Uma vez por tempo de execução de sua programação. Dizemos "sobre" porque há certas circunstâncias em que dois empregos podem ser criados, ou nenhum trabalho pode ser criado. Tentamos tornar esses raros, mas não os impedem completamente. Portanto, os empregos devem ser idempotent”
O termo idempotente significa que o trabalho do cron é realizado uma ou duas vezes ou qualquer número de tempo teria o mesmo efeito no sistema. Verificando as atualizações, o monitoramento desse tipo de operações pode ser considerado idempotente. Mas modificar dados, ou escrever em um banco de dados não estão entre estes.
Vamos escrever um trabalho de Cron que escreveria um “Olá, mundo!”. Criar arquivo chamado My-Cronjob.Yaml e para escrever o seguinte conteúdo:
APIVERSION: LOTA/V1BETA1A parte do cronograma do trabalho é a mais crucial. Segue -se a Convenção Cron padrão, há uma lista de números separados por espaços. Os cinco números representam,
Usando asterisco (*) para um campo significa qualquer valor disponível desse campo (como um curinga) e a primeira entrada em nossa programação “ */1 * * * * *” indicou que o trabalho deve ser executado a cada minuto, independentemente da hora, dia ou mês de o ano. Usando */5 imprimirá a mensagem a cada 5 minutos.
Você pode aprender mais sobre a especificação Cronjob YAML nos documentos oficiais. Vamos ver todos os pods concorrendo ao trabalho, que chamamos de My-Cronjob.
$ kubectl Obtenha pods
Nome Pronto Status reinicia a idade
My-Cronjob-1534457100-HFHZF 0/1 Concluído 0 2M
My-Cronjob-1534457160-Gk85l 0/1 concluído 0 1M
My-Cronjob-1534457220-BJ22X 0/1 Concluído 0 57s
Cavar nos troncos de cada uma das vagens revelaria uma única mensagem com um registro de data e hora, pois todos foram criados em momentos diferentes, todos terão diferentes registros de data e hora.
$ KUBECTL LOG MY-CRONJOB-1534457100-HFHZF
Para excluir o cronjob, simplesmente execute:
$ KUBECTL DELETE -F MY -CRONJOB.Yaml
Isso também excluirá quaisquer vagens criadas no devido processo.
Referências
Você pode aprender mais sobre trabalhos de Kubernetes aqui e para os trabalhos de Cron, você pode visitar esta seção de sua documentação bem estruturada.