SlideShare uma empresa Scribd logo
1 de 13
Boas práticas na
configuração de
jobs no
Kubernetes
Grazi Bonizi | Maio Containers no DevelopersBR
Grazi Bonizi
Consultora DevOps e Microsoft MVP, apóia empresas no seu
processo de transformação digital. Contribui na comunidade
com artigos, podcasts, palestras e vídeos sobre Arquitetura de
Software, DDD, DevOps, Docker e Kubernetes.
• https://twitter.com/grazibonizi
• https://youtube.com/c/GraziBonizi
• https://grazibonizi.me
• https://medium.com/@grazibonizi
• https://www.linkedin.com/in/grazibonizi/
Conteúdo
Agenda
➔ Casos de uso comuns
➔ Kubernetes: Jobs
➔ Kubernetes: CronJobs
➔ Considerações sobre escala
➔ Histórias
➔ Premissas
Casos de uso comuns
• Inicialização de serviços: setup e migração de banco de dados
• Limpeza de dados/arquivos obsoletos: limpeza de imagens docker de build antigas
• Conferência/correção de integridade/consistência de dados: equiparar saldos em bases de
dados distribuídas
• Cura: verificação se determinado recurso está no ar, e caso não esteja, reinicializá-lo/corrigí-lo
• Importação de dados: Importação de dados via arquivo CSV
• Processamento em massa: Workflows de negócios aplicados em uma grande quantidade de
dados
Kubernetes: Jobs
• Um job cria um ou mais Pods e tenta
executá-los até que o número especificado
de jobs termine a execucao com sucesso.
• O tipo de execução pode ser:
• Não paralelo
• Paralelo com uma contagem fixa de execuções
(.spec.completions > 0)
• Paralelo com uma fila de execuções
(.spec.completions não especificado
.spec.parallelism > 0)
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print
bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Kubernetes: CronJobs
• Um CronJob cria jobs agendados.
• A sintaxe do agendamento (Cron, do Unix)
pode ser formatada a partir de ferramentas
como o https://crontab.guru/
• G/A (batch/v1) a partir da versão 1.21 do
Kubernetes. Disponível a partir da 1.18
com o batch/v1beta1
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure
Considerações sobre escala
• Alto processamento demanda escala vertical (CPU, Memória)
• Paralelismo (escala horizontal) permite redução de tempo de execução de uma grande quantidade
de itens
• Padrões de paralelismo:
• Um job para cada item X um único job para todos os itens: para grandes quantidades de itens, a segunda opção é mais
apropriada
• Número de Pods igual ao número de itens X cada Pod processa múltiplos itens: a primeira opção possui um design
simplificado, enquanto asegunda opção é mais apropriada para grandes quantidades de itens
• Múltiplas abordagens combinadas usando uma lista coordenada: pode resultar em complexidade de design e overhead
Histórias...
• “...Cuidado ao fazer o deploy porque determinado job não pode ser executado mais de uma vez”
• “...Para garantir que determinado job agendado só seja executado durante o período noturno ainda
que existam registros a serem processados, configuramos um período limite de execução e os
registros excedentes são processados no dia seguinte”
• “...Se a execução de um job falhar, preciso limpar os registros manualmente antes de executá-lo
novamente”
Premissas
• Os jobs devem ser idempotentes, isto é, devem poder ser executados diversas vezes produzindo o
mesmo resultado
• O Kubernetes não garante que os jobs serão executados na quantidade/frequência prevista
• O design/implementação do job deve considerar opções como
• Unicidade de registros: chave única auto gerada / composição de campos
• Campos auxiliares quando determinado item foi processado (flags/timestamps marcando a finalização da execução)
• Remover itens que já foram processados (conceito de filas)
• Para grandes quantidades de itens, considerar paralelismo em bloco (e suspender a execução dos outros quando fizer
sentido - .spec.suspend)
Demo: preparando o ambiente
az account list
az account set --subscription '[SubscriptionName]'
az group create --name rgDevelopersBRDemo1 --location westus2
az aks create --resource-group rgDevelopersBRDemo1 --name aksDevelopersBRDemo1 --node-count 1 --enable-
addons monitoring --generate-ssh-keys
az aks get-credentials --resource-group rgDevelopersBRDemo1 --name aksDevelopersBRDemo1
kubectl create namespace dev
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
kubectl patch svc "prometheus-grafana" -n dev -p '{"spec": {"type": "LoadBalancer"}}'
Grafana default user/password: admin / prom-operator
Demo: CronJob yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: piprint
namespace: dev
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
generatedBy: piprint
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(5000)"]
restartPolicy: OnFailure
Demo: Comandos adicionais
$pods=$(kubectl get pods -l generatedBy=piprint -o=jsonpath='{.items[*].metadata.name}' -n dev)
kubectl logs $pods -n dev
kubectl delete cronjob piprint -n dev
az group delete --name rgDevelopersBRDemo1 --yes --no-wait
Referências
• https://v1-20.docs.kubernetes.io/docs/concepts/workloads/controllers/job/
• https://v1-20.docs.kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
• https://crontab.guru/
• https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-
stack#configuration
• https://grafana.com/grafana/dashboards/10884
• https://grafana.com/grafana/dashboards/9144

Mais conteúdo relacionado

Mais procurados

Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Ryan Padilha
 
Desenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do códigoDesenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do códigoGuilherme Heynemann Bruzzi
 
Evoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayEvoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayVitor Albuquerque
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018Graziella Bonizi
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)Renato Groff
 
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
TDC2016POA | Trilha .NET -  Trazendo o poder dos containers ao mundo .NETTDC2016POA | Trilha .NET -  Trazendo o poder dos containers ao mundo .NET
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NETtdc-globalcode
 
TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7tdc-globalcode
 
Uaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoUaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoRogerio Fontes
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteRoberto Mello
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Renato Groff
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourcetdc-globalcode
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122Bruno Souza
 

Mais procurados (18)

Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!
 
Desenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do códigoDesenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do código
 
Evoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayEvoluindo bancos de dados com Flyway
Evoluindo bancos de dados com Flyway
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET (Agosto/2015)
 
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
TDC2016POA | Trilha .NET -  Trazendo o poder dos containers ao mundo .NETTDC2016POA | Trilha .NET -  Trazendo o poder dos containers ao mundo .NET
TDC2016POA | Trilha .NET - Trazendo o poder dos containers ao mundo .NET
 
TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7
 
Uaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - IntroduçãoUaijug ADF - spring boot - microservice - Introdução
Uaijug ADF - spring boot - microservice - Introdução
 
Hubot deployments
Hubot deploymentsHubot deployments
Hubot deployments
 
Alm open source
Alm open sourceAlm open source
Alm open source
 
Containers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container SuiteContainers PostgreSQL com a Crunchy Container Suite
Containers PostgreSQL com a Crunchy Container Suite
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
Alagoas Dev Day
Alagoas Dev DayAlagoas Dev Day
Alagoas Dev Day
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 

Semelhante a Boas práticas na configuração de jobs no Kubernetes

Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Renato Groff
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Renato Groff
 
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Renato Groff
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Renato Groff
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Renato Groff
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...Renato Groff
 
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...Renato Groff
 
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...Renato Groff
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Renato Groff
 
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...Renato Groff
 
Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...
Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...
Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...Renato Groff
 
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...Renato Groff
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Ricardo Katz
 
DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...
DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...
DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...Renato Groff
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018Renato Groff
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeStefan Teixeira
 

Semelhante a Boas práticas na configuração de jobs no Kubernetes (20)

Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
 
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
 
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
Docker + Azure: opções disponíveis para uso de Containers na nuvem Microsoft ...
 
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
Azure Kubernetes Service: orquestrando containers e escalando rapidamente apl...
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado | Setembro-2020
 
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
Construindo APIs REST escaláveis na nuvem com Docker e Kubernetes - DEVPIRA F...
 
Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...
Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...
Construindo aplicações escaláveis com ASP.NET Core, Docker e o Microsoft Azur...
 
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
 
Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3Kubernetes no Governo Federal - Kubernetes Meetup #3
Kubernetes no Governo Federal - Kubernetes Meetup #3
 
DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...
DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...
DevOps + Kubernetes: orquestração e deployment automatizado de containers - O...
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
 
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
 

Boas práticas na configuração de jobs no Kubernetes

  • 1. Boas práticas na configuração de jobs no Kubernetes Grazi Bonizi | Maio Containers no DevelopersBR
  • 2. Grazi Bonizi Consultora DevOps e Microsoft MVP, apóia empresas no seu processo de transformação digital. Contribui na comunidade com artigos, podcasts, palestras e vídeos sobre Arquitetura de Software, DDD, DevOps, Docker e Kubernetes. • https://twitter.com/grazibonizi • https://youtube.com/c/GraziBonizi • https://grazibonizi.me • https://medium.com/@grazibonizi • https://www.linkedin.com/in/grazibonizi/
  • 3. Conteúdo Agenda ➔ Casos de uso comuns ➔ Kubernetes: Jobs ➔ Kubernetes: CronJobs ➔ Considerações sobre escala ➔ Histórias ➔ Premissas
  • 4. Casos de uso comuns • Inicialização de serviços: setup e migração de banco de dados • Limpeza de dados/arquivos obsoletos: limpeza de imagens docker de build antigas • Conferência/correção de integridade/consistência de dados: equiparar saldos em bases de dados distribuídas • Cura: verificação se determinado recurso está no ar, e caso não esteja, reinicializá-lo/corrigí-lo • Importação de dados: Importação de dados via arquivo CSV • Processamento em massa: Workflows de negócios aplicados em uma grande quantidade de dados
  • 5. Kubernetes: Jobs • Um job cria um ou mais Pods e tenta executá-los até que o número especificado de jobs termine a execucao com sucesso. • O tipo de execução pode ser: • Não paralelo • Paralelo com uma contagem fixa de execuções (.spec.completions > 0) • Paralelo com uma fila de execuções (.spec.completions não especificado .spec.parallelism > 0) apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never backoffLimit: 4
  • 6. Kubernetes: CronJobs • Um CronJob cria jobs agendados. • A sintaxe do agendamento (Cron, do Unix) pode ser formatada a partir de ferramentas como o https://crontab.guru/ • G/A (batch/v1) a partir da versão 1.21 do Kubernetes. Disponível a partir da 1.18 com o batch/v1beta1 apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox imagePullPolicy: IfNotPresent command: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure
  • 7. Considerações sobre escala • Alto processamento demanda escala vertical (CPU, Memória) • Paralelismo (escala horizontal) permite redução de tempo de execução de uma grande quantidade de itens • Padrões de paralelismo: • Um job para cada item X um único job para todos os itens: para grandes quantidades de itens, a segunda opção é mais apropriada • Número de Pods igual ao número de itens X cada Pod processa múltiplos itens: a primeira opção possui um design simplificado, enquanto asegunda opção é mais apropriada para grandes quantidades de itens • Múltiplas abordagens combinadas usando uma lista coordenada: pode resultar em complexidade de design e overhead
  • 8. Histórias... • “...Cuidado ao fazer o deploy porque determinado job não pode ser executado mais de uma vez” • “...Para garantir que determinado job agendado só seja executado durante o período noturno ainda que existam registros a serem processados, configuramos um período limite de execução e os registros excedentes são processados no dia seguinte” • “...Se a execução de um job falhar, preciso limpar os registros manualmente antes de executá-lo novamente”
  • 9. Premissas • Os jobs devem ser idempotentes, isto é, devem poder ser executados diversas vezes produzindo o mesmo resultado • O Kubernetes não garante que os jobs serão executados na quantidade/frequência prevista • O design/implementação do job deve considerar opções como • Unicidade de registros: chave única auto gerada / composição de campos • Campos auxiliares quando determinado item foi processado (flags/timestamps marcando a finalização da execução) • Remover itens que já foram processados (conceito de filas) • Para grandes quantidades de itens, considerar paralelismo em bloco (e suspender a execução dos outros quando fizer sentido - .spec.suspend)
  • 10. Demo: preparando o ambiente az account list az account set --subscription '[SubscriptionName]' az group create --name rgDevelopersBRDemo1 --location westus2 az aks create --resource-group rgDevelopersBRDemo1 --name aksDevelopersBRDemo1 --node-count 1 --enable- addons monitoring --generate-ssh-keys az aks get-credentials --resource-group rgDevelopersBRDemo1 --name aksDevelopersBRDemo1 kubectl create namespace dev helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack kubectl patch svc "prometheus-grafana" -n dev -p '{"spec": {"type": "LoadBalancer"}}' Grafana default user/password: admin / prom-operator
  • 11. Demo: CronJob yaml apiVersion: batch/v1beta1 kind: CronJob metadata: name: piprint namespace: dev spec: schedule: "*/1 * * * *" jobTemplate: spec: template: metadata: labels: generatedBy: piprint spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(5000)"] restartPolicy: OnFailure
  • 12. Demo: Comandos adicionais $pods=$(kubectl get pods -l generatedBy=piprint -o=jsonpath='{.items[*].metadata.name}' -n dev) kubectl logs $pods -n dev kubectl delete cronjob piprint -n dev az group delete --name rgDevelopersBRDemo1 --yes --no-wait
  • 13. Referências • https://v1-20.docs.kubernetes.io/docs/concepts/workloads/controllers/job/ • https://v1-20.docs.kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/ • https://crontab.guru/ • https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus- stack#configuration • https://grafana.com/grafana/dashboards/10884 • https://grafana.com/grafana/dashboards/9144