Neste novo artigo inicio uma série com diversas dicas e truques envolvendo o uso do Kubernetes como solução para orquestração de containers Docker. Sempre que possível darei andamento a esta iniciativa, com novos conteúdos e orientações úteis a profissionais da área de Desenvolvimento, Infraestrutura e DevOps.
Azure Kubernetes Service (AKS): criando um cluster Kubernetes na nuvem Microsoft
Tendo por objetivo simplificar o gerenciamento e a operação de clusters do Kubernetes, o Azure Kubernetes Service (AKS) é um serviço que integra a plataforma de cloud computing da Microsoft.
Já abordei a criação de ambientes e a implementação de soluções com essa alternativa no seguinte artigo:
Orquestração de containers na Nuvem com o Azure Kubernetes Service (AKS) | Microsoft Tech
E também em um webcast gravado para a Microsoft (juntamente com meu amigo Milton Câmara – Microsoft MVP) e que pode ser assistido gratuitamente através do seguinte link:
Kubernetes: do Pod ao Deployment Automatizado
Na imagem a seguir é possível observar um recurso do AKS com 2 nodes Linux:
A infraestrutura alocada por este recurso pode ser observada na próxima imagem:
Cronjobs: execução pré-agendada de Jobs/rotinas de processamento
Embora o uso do Kubernetes esteja comumente associado ao deployment de soluções Web, temos também a opção de publicar num cluster aplicações que executarão como rotinas de maneira periódica: isto é possível através da criação de jobs automatizados conhecidos como CronJobs.
Nesta seção demonstrarei a publicação de um CronJob em um cluster Kubernetes, fazendo uso para isto da seguinte imagem pública disponibilizada no Docker Hub:
renatogroffe/job-monitor-sites-3-0
O job correspondente a tal imagem foi implementado utilizando .NET Core 3.0, com o código do mesmo já disponibilizado no GitHub:
.NET Core 3.0 + Console Application + Azure Table Storage + Serilog + Docker
O conteúdo do arquivo YAML com as definições para a criação de um CronJob está na listagem a seguir:
- Em kind foi especificado o tipo do objeto (CronJob);
- O nome do job (cronjob-monitor-sites) está indicado na propriedade name de metadata;
- Dentro de spec temos a propriedade schedule, em que uma cron expression será utilizada para determinar a periodicidade com que acontecerá o processamento. Neste exemplo foram definidas execuções a cada 2 minutos;
- Já em container temos especificada a imagem que servirá de base para a geração do CronJob (renatogroffe/job-monitor-sites-3–0). Em env foi configurada a string de conexão (BaseMonitoramento) ao Azure Table Storage, valor este indicado na imagem anterior.
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-monitor-sites
spec:
schedule: "*/2 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: monitor-sites
image: renatogroffe/job-monitor-sites-3-0
env:
- name: BaseMonitoramento
value: STRING_CONEXAO
restartPolicy: OnFailure
Para criar o CronJob baseado neste arquivo YAML executar o seguinte comando (via PowerShell ou Bash):
kubectl create -f .\cronjob-monitoramentosites.yaml
Com o comando:
kubectl get cronjobs
Podemos verificar o status atual do CronJob. No exemplo da próxima imagem é possível notar que o job está suspenso, aguardando uma próxima execução:
Ao consultar a tabela Monitoramento vinculada à conta storagegroff teremos os resultados de execuções do CronJob: