Kubernetes

Jobs do Kubernetes e jobs do Cron

Jobs do Kubernetes e jobs do Cron
A maioria dos aplicativos executados em um sistema distribuído como o Kubernetes está sempre ativa como servidores da web ou bancos de dados ou servidores de API. Mas há uma classe separada de objetos que devem ser executados uma vez ou apenas acordar de vez em quando e seguir seu curso. Trabalhos periódicos como renovações de certificados TLS com agentes como Certbot são exemplos clássicos de tais trabalhos executados em servidores tradicionais. Isso é feito usando o utilitário Cron em sistemas Unix.

O Kubernetes tem uma maneira análoga de executar processos únicos Empregos e processos periódicos como trabalhos cron.

Começaremos com um exemplo típico do que são trabalhos e demonstraremos um exemplo padrão dos documentos oficiais. A partir deste exemplo, será fácil entender o que significa executar um trabalho com sucesso no contexto do Kubernetes.

Para acompanhar, eu recomendo que você use o Kataconda Playground para Kubernetes, que fornecerá um cluster Kubernetes pronto para uso, sem a necessidade de configurar manualmente um ou arriscar um cluster de produção para experimentos.

Trabalhos do Kubernetes

Os trabalhos são abstrações Kubernetes de nível superior, semelhantes a ReplicaSets e Deployments. Mas, ao contrário dos pods gerenciados por implantações e ReplicaSets, os pods que realizam um trabalho concluem seu trabalho e saem.

Quando um número especificado de pods chega à conclusão, o trabalho é considerado concluído com sucesso. Quais são os critérios que definem o encerramento bem-sucedido de um pod é algo que definiremos no arquivo YAML do trabalho. Em seguida, o controlador de trabalho garantirá que um determinado número de pods foi encerrado com sucesso e o trabalho é considerado concluído.

Vamos criar um trabalho que imprima dígitos de pi em até 2.000 lugares em seus registros que examinaremos. Crie um arquivo e chame-o meu trabalho.yaml e salve o seguinte conteúdo nele;

apiVersion: batch / v1
tipo: trabalho
metadados:
nome: pi
especificação:
modelo:
especificação:
recipientes:
- nome: pi
imagem: perl
comando: ["perl", "-Mbignum = bpi", "-wle", "print bpi (2000)"]
restartPolicy: Nunca
backoffLimit: 4

Crie o trabalho, usando este arquivo:

$ kubectl create -f ./trabalho.yaml

Você notará que o trabalho leva alguns segundos a alguns minutos para ser executado e, uma vez que estiver concluído. Ao tentar listar todos os pods usando:

$ kubectl get pods
NOME PRONTO STATUS REINICIA IDADE
pi-wg6zp 0/1 concluído 0 50 s

Você verá que o status do pod relacionado ao pi é Concluído não executando ou encerrado.Você também pode copiar o nome do pod para que possamos verificar se o pi foi realmente calculado para 2.000 dígitos. O nome específico do pod pode ser diferente no seu caso.

$ kubectl logs pi-wg6zp

Curiosamente, o pod não Rescindido ainda está muito ativo, só que não há aplicativos em execução dentro dele. Semelhante a apenas ligar o computador e não usá-lo. Se o pod fosse encerrado, não teríamos sido capazes de extrair os logs dele, em primeiro lugar.

Para limpar o trabalho e todos os pods que foram criados, execute o comando:

$ kubectl delete -f my-jobs.yaml

Você pode aprender mais sobre as especificações do trabalho e como escrever suas especificações na documentação oficial.

Cron Jobs

Os trabalhos Cron são semelhantes ao utilitário Cron no Unix que é executado periodicamente de acordo com uma programação que desejamos. Não é uma coisa superestável no Kubernetes, no momento em que este livro foi escrito, então você pode querer ter cuidado ao usar. Para citar os documentos oficiais:

“Um cron job cria um objeto de trabalho cerca de 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 emprego pode ser criado. Tentamos torná-los raros, mas não os evitamos completamente. Portanto, os empregos devem ser idempotente

O termo idempotente significa que o Cron Job realizado uma ou duas vezes ou qualquer número de vezes teria o mesmo efeito no sistema. Verificar se há atualizações e monitorar esse tipo de operação pode ser considerado idempotente. Mas modificar dados ou gravar em um banco de dados não estão entre esses.

Vamos escrever um cron job que escreveria um “Olá, mundo!”Mensagem em seus registros, juntamente com um carimbo de data / hora de quando a mensagem foi escrita. Crie um arquivo chamado my-cronjob.yaml e nele escrever o seguinte conteúdo:

apiVersion: batch / v1beta1
tipo: CronJob
metadados:
nome: meu-cronjob
especificação:
cronograma: "* / 1 * * * *"
jobTemplate:
especificação:
modelo:
especificação:
recipientes:
- nome: olá
imagem: busybox
args:
- / bin / sh
- -c
- data; echo Hello do cluster Kubernetes
restartPolicy: OnFailure

A parte do cronograma do trabalho é a mais crucial. Segue a convenção padrão do Cron, há uma lista de números separados por espaços. Os cinco números representam,

  1. Minuto (0-59)
  2. Hora (0-23)
  3. Dia do mês (1-31)
  4. Mês (1-12)
  5. Dia da semana (0-6) começando no domingo

Usando asterisco (*) para um campo significa qualquer valor disponível desse campo (como um caractere 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. Usar * / 5 imprimirá a mensagem a cada 5 minutos.

Você pode aprender mais sobre a especificação do yaml do cronjob nos documentos oficiais. Vamos ver todos os pods em execução para o trabalho, que chamamos de my-cronjob.

$ kubectl get pods
NOME PRONTO STATUS REINICIA 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

Explorar os registros de cada um dos pods revelaria uma única mensagem com um carimbo de data / hora, pois todos foram criados em momentos diferentes, todos terão carimbos de data / hora diferentes.

$ kubectl log my-cronjob-1534457100-hfhzf

Para excluir o cronjob, basta executar:

$ kubectl delete -f my-cronjob.yaml

Isso também excluirá todos os pods que foram criados no devido processo.

Referências

Você pode aprender mais sobre os jobs do Kubernetes aqui e, para os jobs do Cron, pode visitar esta seção de sua documentação bem estruturada.

Instale o emulador Dolphin mais recente para Gamecube e Wii no Linux
O Dolphin Emulator permite que você jogue seus jogos de Gamecube e Wii escolhidos em computadores pessoais Linux (PC). Sendo um emulador de jogo disp...
Como usar o GameConqueror Cheat Engine no Linux
O artigo cobre um guia sobre como usar o mecanismo de cheat GameConqueror no Linux. Muitos usuários que jogam no Windows costumam usar o aplicativo “C...
Melhores emuladores de console de jogo para Linux
Este artigo irá listar software de emulação de console de jogo popular disponível para Linux. A emulação é uma camada de compatibilidade de software q...