<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kauê Matos</title>
    <description>The latest articles on DEV Community by Kauê Matos (@ikauedev).</description>
    <link>https://dev.to/ikauedev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1062408%2F843972aa-ce36-4413-b3e0-c21c6a5ba925.png</url>
      <title>DEV Community: Kauê Matos</title>
      <link>https://dev.to/ikauedev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ikauedev"/>
    <language>en</language>
    <item>
      <title>Instâncias AWS Graviton Instâncias AWS Graviton Arquitetura ARM na Nuvem</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Sun, 13 Sep 2026 17:04:17 +0000</pubDate>
      <link>https://dev.to/ikauedev/instancias-aws-graviton-instancias-aws-graviton-arquitetura-arm-na-nuvem-16d</link>
      <guid>https://dev.to/ikauedev/instancias-aws-graviton-instancias-aws-graviton-arquitetura-arm-na-nuvem-16d</guid>
      <description>&lt;p&gt;O &lt;strong&gt;AWS Graviton&lt;/strong&gt; é uma família de processadores desenvolvidos pela própria AWS, baseados em arquitetura &lt;strong&gt;ARM (64-bit, Arm Neoverse)&lt;/strong&gt;, em vez da arquitetura x86 tradicional (Intel/AMD). Lançado inicialmente em 2018, o Graviton se tornou uma das principais estratégias da AWS para oferecer melhor custo-benefício e eficiência energética em instâncias EC2.&lt;/p&gt;

&lt;p&gt;Hoje, praticamente todas as famílias de instância "de uso geral" da AWS (M, C, R, T e derivadas) possuem uma variante Graviton, identificada pelo sufixo &lt;strong&gt;g&lt;/strong&gt; no nome (ex.: &lt;code&gt;m7g&lt;/code&gt;, &lt;code&gt;c7g&lt;/code&gt;, &lt;code&gt;r7g&lt;/code&gt;, &lt;code&gt;t4g&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Este artigo explica o que é o Graviton, como evoluiu ao longo das gerações, quando vale a pena adotar e quais são os principais cuidados de migração.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o Graviton
&lt;/h2&gt;

&lt;p&gt;Graviton é um &lt;strong&gt;System on Chip (SoC)&lt;/strong&gt; projetado pela AWS Annapurna Labs (empresa israelense adquirida pela AWS em 2015), otimizado especificamente para rodar dentro da infraestrutura da própria AWS. Diferente de depender de fornecedores externos (Intel, AMD), a AWS controla o design do chip ponta a ponta — o que permite ajustar a arquitetura ao perfil real de uso dos seus data centers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principais vantagens declaradas pela AWS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Melhor custo-benefício&lt;/strong&gt; — em geral, 20% a 40% mais barato que instâncias x86 equivalentes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Melhor performance por watt&lt;/strong&gt; — até ~60% mais eficiente energeticamente, o que também contribui para metas de sustentabilidade (ESG) das empresas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance competitiva ou superior&lt;/strong&gt; em cargas de trabalho compatíveis, especialmente as que escalam horizontalmente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Evolução das gerações
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Graviton1 (2018)
&lt;/h3&gt;

&lt;p&gt;Primeira geração, lançada com as instâncias &lt;code&gt;a1&lt;/code&gt;. Voltada principalmente para cargas escaláveis horizontalmente e workloads que não exigiam alta performance de CPU por núcleo. Adoção limitada, mas serviu como prova de conceito.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graviton2 (2019/2020)
&lt;/h3&gt;

&lt;p&gt;Salto significativo de performance — baseado em núcleos Arm Neoverse N1. Introduziu as variantes &lt;code&gt;g&lt;/code&gt; em famílias já conhecidas: &lt;code&gt;m6g&lt;/code&gt;, &lt;code&gt;c6g&lt;/code&gt;, &lt;code&gt;r6g&lt;/code&gt;, &lt;code&gt;t4g&lt;/code&gt;. Trouxe suporte a mais casos de uso de produção, com performance comparável a instâncias x86 de geração equivalente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graviton3 (2021/2022)
&lt;/h3&gt;

&lt;p&gt;Presente em &lt;code&gt;m7g&lt;/code&gt;, &lt;code&gt;c7g&lt;/code&gt;, &lt;code&gt;r7g&lt;/code&gt;, além de instâncias especializadas como &lt;code&gt;c7gn&lt;/code&gt; (rede otimizada) e &lt;code&gt;hpc7g&lt;/code&gt; (HPC). Trouxe ganhos relevantes em:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance de ponto flutuante (importante para HPC e ML)&lt;/li&gt;
&lt;li&gt;Criptografia acelerada por hardware&lt;/li&gt;
&lt;li&gt;Maior largura de banda de memória (DDR5)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Graviton4 (2023/2024)
&lt;/h3&gt;

&lt;p&gt;Geração mais recente, presente em instâncias como &lt;code&gt;r8g&lt;/code&gt; e &lt;code&gt;m8g&lt;/code&gt;. Foco em maior número de núcleos, maior largura de banda de memória e melhorias de segurança, mantendo compatibilidade com o ecossistema ARM já validado nas gerações anteriores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Famílias disponíveis com Graviton
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Família x86 equivalente&lt;/th&gt;
&lt;th&gt;Variante Graviton&lt;/th&gt;
&lt;th&gt;Foco&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;M (uso geral)&lt;/td&gt;
&lt;td&gt;m6g, m7g, m8g&lt;/td&gt;
&lt;td&gt;Aplicações web, microsserviços&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C (compute optimized)&lt;/td&gt;
&lt;td&gt;c6g, c7g, c7gn&lt;/td&gt;
&lt;td&gt;CPU intensiva, rede otimizada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R (memory optimized)&lt;/td&gt;
&lt;td&gt;r6g, r7g, r8g&lt;/td&gt;
&lt;td&gt;Bancos de dados, cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;T (burstable)&lt;/td&gt;
&lt;td&gt;t4g&lt;/td&gt;
&lt;td&gt;Cargas variáveis, dev/test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;X (memória alta)&lt;/td&gt;
&lt;td&gt;x2gd&lt;/td&gt;
&lt;td&gt;In-memory databases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I (storage optimized)&lt;/td&gt;
&lt;td&gt;i4g&lt;/td&gt;
&lt;td&gt;NoSQL, alta taxa de I/O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hpc&lt;/td&gt;
&lt;td&gt;hpc7g&lt;/td&gt;
&lt;td&gt;HPC fortemente acoplado&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Quando vale a pena migrar para Graviton
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bons candidatos:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aplicações &lt;strong&gt;stateless&lt;/strong&gt; rodando em containers (Docker/Kubernetes) com imagens multi-arquitetura.&lt;/li&gt;
&lt;li&gt;Linguagens/runtimes com suporte nativo e maduro a ARM: Java (JVM), Go, Python, Node.js, .NET.&lt;/li&gt;
&lt;li&gt;Cargas de trabalho gerenciadas pela própria AWS que já oferecem variante Graviton nativamente: Amazon RDS, ElastiCache, OpenSearch, EMR.&lt;/li&gt;
&lt;li&gt;Workloads horizontalmente escaláveis, onde trocar a arquitetura de um conjunto de instâncias idênticas é simples de validar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pontos de atenção antes de migrar:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dependências binárias nativas&lt;/strong&gt; (bibliotecas compiladas, extensões C/C++) precisam ter build para ARM64 disponível.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Imagens de container&lt;/strong&gt; precisam ser multi-arquitetura (&lt;code&gt;docker buildx&lt;/code&gt; com suporte a &lt;code&gt;linux/arm64&lt;/code&gt;) ou reconstruídas especificamente para ARM.&lt;/li&gt;
&lt;li&gt;Softwares proprietários de terceiros (agentes de monitoramento, APM, drivers específicos) precisam ter suporte oficial a ARM confirmado pelo fornecedor.&lt;/li&gt;
&lt;li&gt;Testes de performance e carga são recomendados antes de migrar workloads críticas de produção, mesmo com boa compatibilidade declarada.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Estratégia de migração recomendada
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventariar&lt;/strong&gt; as aplicações e suas dependências, verificando compatibilidade com ARM64 (bibliotecas, imagens base de container, agentes de terceiros).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Começar pelo menos crítico&lt;/strong&gt; — ambientes de desenvolvimento/homologação ou workloads stateless de baixo risco.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rodar testes de carga comparativos&lt;/strong&gt; entre a instância x86 atual e a equivalente Graviton, validando performance e custo real.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migrar gradualmente&lt;/strong&gt; ambientes de produção, aproveitando Auto Scaling Groups com múltiplos tipos de instância (mixed instance policy) durante a transição.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consolidar o ganho de custo&lt;/strong&gt; validado nas etapas anteriores em Savings Plans ou Reserved Instances específicas para a família Graviton escolhida.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O Graviton deixou de ser uma opção experimental e se tornou, hoje, a recomendação padrão da AWS para novas cargas de trabalho — quando a stack permite. A combinação de menor custo, menor consumo energético e performance competitiva faz da migração para ARM uma das otimizações de maior impacto disponíveis em uma conta AWS, especialmente quando combinada com outras estratégias de FinOps como Savings Plans e Spot Instances.&lt;/p&gt;

&lt;p&gt;Antes de migrar qualquer workload crítica, o caminho mais seguro é sempre: validar compatibilidade, testar performance real e migrar de forma incremental — começando pelos ambientes de menor risco.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>The Twelve-Factor App: o guia que todo sistema deveria seguir (mas poucos seguem)</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Sat, 12 Sep 2026 22:29:40 +0000</pubDate>
      <link>https://dev.to/ikauedev/the-twelve-factor-app-o-guia-que-todo-sistema-deveria-seguir-mas-poucos-seguem-5g5a</link>
      <guid>https://dev.to/ikauedev/the-twelve-factor-app-o-guia-que-todo-sistema-deveria-seguir-mas-poucos-seguem-5g5a</guid>
      <description>&lt;p&gt;Se você já trabalhou num sistema que funcionava perfeitamente no seu computador mas quebrava assim que ia pra produção, ou já se irritou com uma atualização que exigiu reconstruir tudo só porque mudou a senha do banco de dados, você já sentiu na pele o problema que o Twelve-Factor App tenta resolver.&lt;/p&gt;

&lt;p&gt;Essa ideia surgiu por volta de 2010, dentro da empresa Heroku, com Adam Wiggins à frente. Na época, a empresa já hospedava centenas de milhares de sistemas de clientes diferentes na mesma plataforma, o que deu a eles uma visão privilegiada de tudo que costuma dar errado quando um time constrói software sem pensar em portabilidade, crescimento e manutenção. O resultado foi uma lista de doze práticas — nenhuma delas revolucionária sozinha, mas que juntas formam uma base sólida pra qualquer sistema que roda como serviço na internet.&lt;/p&gt;

&lt;p&gt;O interessante é que, mesmo com toda a evolução das ferramentas desde então, essas doze práticas continuam extremamente válidas. Vamos passar por cada uma.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Um único código-fonte, várias versões em uso
&lt;/h2&gt;

&lt;p&gt;Cada sistema deve viver em um único repositório de código com histórico de versões (como o Git), e a partir dele você gera quantas cópias precisar: uma pra testes, outra pra homologação, outra pra produção. Se você tem vários repositórios diferentes pra uma coisa que deveria ser "um sistema só", provavelmente não é mais um sistema — é vários sistemas conectados, e cada um deveria seguir essa regra separadamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Deixe claro do que o sistema depende
&lt;/h2&gt;

&lt;p&gt;Nada de assumir que uma determinada ferramenta ou biblioteca já está instalada no computador ou servidor só porque "sempre esteve". Liste tudo isso de forma explícita, em um arquivo próprio do projeto, e mantenha isso separado do que já vem instalado no sistema operacional. É isso que garante que o sistema funcione do mesmo jeito em qualquer máquina, seja no notebook de quem está desenvolvendo, seja no servidor de produção.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Mantenha as configurações fora do código
&lt;/h2&gt;

&lt;p&gt;Senhas de banco de dados, chaves de acesso a serviços externos, endereços de outros sistemas — nada disso deveria estar escrito dentro do código-fonte. Isso deve ficar guardado separadamente, em variáveis de ambiente do próprio servidor. Além de ser mais seguro (menos risco de vazar uma senha sem querer), isso permite trocar de ambiente sem precisar reconstruir o sistema do zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Trate serviços externos como peças substituíveis
&lt;/h2&gt;

&lt;p&gt;Banco de dados, fila de mensagens, sistema de cache, serviço de envio de e-mail — tudo isso deveria ser tratado como uma peça que se conecta por meio de um endereço e uma credencial, sem diferença entre se está rodando no próprio computador ou em outro lugar. Trocar um banco de dados local por um banco hospedado por um provedor de nuvem não deveria exigir mudar uma linha do código, só a configuração.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Separe bem as etapas de construir, preparar e executar
&lt;/h2&gt;

&lt;p&gt;Essas três etapas precisam ser bem distintas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;construir&lt;/strong&gt;: transforma o código escrito em algo pronto pra rodar;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;preparar&lt;/strong&gt;: junta esse resultado com a configuração daquele ambiente específico;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;executar&lt;/strong&gt;: efetivamente coloca isso em funcionamento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada versão preparada deveria ter uma identificação única, pra que, se algo der errado, seja possível voltar rapidamente pra versão anterior.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Não guarde informação importante dentro do próprio sistema em execução
&lt;/h2&gt;

&lt;p&gt;O sistema deveria funcionar sem depender de guardar informações importantes na própria memória entre um pedido e outro. Qualquer coisa que precise ser lembrada deve ficar armazenada em um lugar próprio pra isso, como um banco de dados. Isso parece óbvio, mas é justamente o que permite aumentar a capacidade do sistema adicionando mais cópias dele rodando ao mesmo tempo, sem risco de perder informação ou gerar comportamento estranho.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. O sistema deve se apresentar sozinho, sem depender de outro programa
&lt;/h2&gt;

&lt;p&gt;O sistema deveria ser completo por si só e ficar disponível através de uma porta de comunicação própria, sem precisar que outro programa seja instalado por fora pra fazer essa ponte. A maioria das ferramentas modernas de desenvolvimento já vem com isso embutido — é só configurar em qual porta o sistema vai atender.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Aumente a capacidade dividindo o trabalho em partes
&lt;/h2&gt;

&lt;p&gt;Divida o sistema em partes diferentes conforme o tipo de tarefa — uma parte pra atender pedidos que chegam pela internet, outra pra processar tarefas em segundo plano, outra pra rodar tarefas programadas — e aumente cada parte de forma independente conforme a necessidade. Assim, se o gargalo está no processamento em segundo plano, você aumenta só aquela parte, sem precisar mexer no resto.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Deixe o sistema pronto pra ligar e desligar rápido
&lt;/h2&gt;

&lt;p&gt;Um sistema bem construído é aquele que consegue começar a funcionar rapidamente e também parar de forma organizada, terminando o que estava fazendo antes de desligar de vez. Isso é fundamental pra atualizações ágeis, pra aumentar ou diminuir a capacidade automaticamente conforme a demanda, e pra se recuperar rápido quando algo dá errado.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Mantenha o ambiente de testes parecido com o de produção
&lt;/h2&gt;

&lt;p&gt;Esse é um dos pontos mais esquecidos na prática. A ideia é diminuir ao máximo a diferença entre o ambiente onde o sistema é desenvolvido e testado e aquele onde ele realmente atende os usuários — usar a mesma versão de banco de dados, atualizar com frequência, e ter as mesmas pessoas cuidando das duas pontas. É basicamente a receita pra nunca mais ouvir a frase "mas funcionava aqui". Ferramentas que automatizam a criação de ambientes ajudam bastante a diminuir essa distância.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Registros de atividade não devem ser um arquivo pra gerenciar
&lt;/h2&gt;

&lt;p&gt;O sistema não deveria se preocupar em decidir onde guardar seus próprios registros de atividade (o famoso "log"). Ele apenas deveria escrevê-los de forma simples, e outra ferramenta, especializada nisso, deveria cuidar de coletar, organizar e guardar essas informações. Isso simplifica bastante o trabalho de quem constrói o sistema.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Tarefas administrativas rodam do mesmo jeito que o resto
&lt;/h2&gt;

&lt;p&gt;Corrigir dados no banco, rodar um ajuste pontual, abrir uma sessão pra investigar um problema em produção — tudo isso deveria ser feito usando o mesmo ambiente, o mesmo código e a mesma configuração do sistema normal. Nada de manter um script separado, guardado em outro lugar, que só uma pessoa lembra de atualizar de vez em quando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usar contêineres não resolve isso sozinho
&lt;/h2&gt;

&lt;p&gt;Vale desfazer um mal-entendido comum: muita gente pensa que, ao usar ferramentas modernas de empacotamento e orquestração de sistemas, essas doze práticas "vêm de graça" junto com elas. Não vêm. Essas ferramentas ajudam bastante em algumas partes — como isolar dependências e permitir que o sistema ligue e desligue rápido —, mas manter a configuração separada do código, evitar guardar informação importante dentro do sistema em execução e organizar bem as versões continua sendo trabalho de quem projeta o sistema, não da ferramenta.&lt;/p&gt;

&lt;h2&gt;
  
  
  No fim das contas
&lt;/h2&gt;

&lt;p&gt;Essas doze práticas não são regras burocráticas de manual. São o tipo de coisa que a maioria das pessoas aprende depois de passar por um problema chato em produção, e que, depois de adotada, ninguém mais quer abrir mão. Seguir esses princípios é o que diferencia um sistema fácil de manter e fazer crescer de um que só continua funcionando porque alguém está sempre correndo atrás de apagar incêndio.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Baseado em &lt;a href="https://12factor.net" rel="noopener noreferrer"&gt;12factor.net&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>cloud</category>
    </item>
    <item>
      <title>AWS Well-Architected Framework</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Sat, 05 Sep 2026 18:12:41 +0000</pubDate>
      <link>https://dev.to/ikauedev/aws-well-architected-framework-47f1</link>
      <guid>https://dev.to/ikauedev/aws-well-architected-framework-47f1</guid>
      <description>&lt;p&gt;Construir na nuvem é fácil. Construir &lt;strong&gt;bem&lt;/strong&gt; na nuvem é outra história. É justamente para preencher essa lacuna que a AWS criou o &lt;strong&gt;Well-Architected Framework (WAF)&lt;/strong&gt;: um conjunto estruturado de princípios de design, boas práticas e perguntas orientadoras que ajudam arquitetos e engenheiros a avaliar workloads sob a ótica de seis pilares — Excelência Operacional, Segurança, Confiabilidade, Eficiência de Performance, Otimização de Custos e Sustentabilidade.&lt;/p&gt;

&lt;p&gt;O framework não é uma checklist genérica de "boas práticas de nuvem". Ele é, na prática, uma metodologia de &lt;strong&gt;trade-offs conscientes&lt;/strong&gt;: toda decisão arquitetural — usar um banco relacional ou NoSQL, multi-AZ ou multi-região, autoscaling agressivo ou conservador — implica abrir mão de algo em troca de outra coisa. O WAF força você a nomear esses trade-offs em vez de descobri-los tarde demais, em produção, sob incidente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Um pouco de história
&lt;/h2&gt;

&lt;p&gt;O framework nasceu em 2012 como um documento interno de arquitetos de soluções da AWS e virou whitepaper público em 2015. Em 2016 ganhou o pilar de Excelência Operacional; em 2017 chegaram os &lt;em&gt;Lenses&lt;/em&gt; (recortes especializados por domínio) e, em 2018, a ferramenta gratuita &lt;strong&gt;AWS Well-Architected Tool&lt;/strong&gt;, disponível direto no Console. O sexto pilar, Sustentabilidade, foi incorporado no fim de 2021, refletindo a pressão crescente por eficiência energética e redução de pegada de carbono em cargas de trabalho de nuvem.&lt;/p&gt;

&lt;p&gt;De lá para cá, a AWS vem tornando o conteúdo cada vez mais &lt;strong&gt;prescritivo&lt;/strong&gt;: cada boas práticas hoje tem página dedicada, com antipadrões comuns, nível de risco, passos de implementação e recursos relacionados — uma resposta direta ao feedback de que o framework antigo dizia "o que" fazer, mas pouco sobre "como".&lt;/p&gt;

&lt;h2&gt;
  
  
  Os princípios gerais de design
&lt;/h2&gt;

&lt;p&gt;Antes de entrar pilar por pilar, vale destacar os princípios transversais que sustentam o framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pare de adivinhar sua capacidade&lt;/strong&gt; — use autoscaling e elasticidade em vez de dimensionar para o pico teórico.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teste sistemas em produção (com segurança)&lt;/strong&gt; — ambientes controlados de teste em escala real, não só em staging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatize experimentações arquiteturais&lt;/strong&gt; — infraestrutura como código torna barato testar variações de arquitetura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permita evolução arquitetural&lt;/strong&gt; — desenhe para mudar, não para ser definitivo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direcione arquiteturas com dados&lt;/strong&gt; — decisões baseadas em métricas reais de uso, não em intuição.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Melhore através de "game days"&lt;/strong&gt; — simule falhas e eventos reais para validar respostas antes que aconteçam de verdade.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Os seis pilares
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Excelência Operacional
&lt;/h3&gt;

&lt;p&gt;Trata da capacidade de operar e monitorar sistemas para entregar valor de negócio, e de melhorar processos e procedimentos continuamente. Na prática, envolve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infraestrutura como código (Terraform, CloudFormation, CDK) para operações reproduzíveis e auditáveis.&lt;/li&gt;
&lt;li&gt;Observabilidade real: métricas, logs e traces centralizados (CloudWatch, X-Ray) com alarmes acionáveis, não apenas dashboards bonitos.&lt;/li&gt;
&lt;li&gt;Runbooks e playbooks versionados para resposta a incidentes.&lt;/li&gt;
&lt;li&gt;Deploys pequenos, frequentes e reversíveis (blue/green, canary), reduzindo o "blast radius" de cada mudança.&lt;/li&gt;
&lt;li&gt;Retrospectivas pós-incidente sem culpabilização, com ações de melhoria rastreadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Segurança
&lt;/h3&gt;

&lt;p&gt;O pilar de Segurança foca em proteger informação, sistemas e ativos, mantendo o valor do negócio através de avaliação de risco e estratégias de mitigação. Pontos centrais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identidade forte como novo perímetro&lt;/strong&gt;: IAM com privilégio mínimo, roles em vez de credenciais estáticas, MFA obrigatório para operações sensíveis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defesa em profundidade&lt;/strong&gt;: VPCs segmentadas, security groups e NACLs, WAF e Shield contra ataques na borda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Criptografia em repouso e em trânsito&lt;/strong&gt; por padrão, com KMS gerenciando chaves e rotação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visibilidade contínua&lt;/strong&gt;: GuardDuty para detecção de ameaças, Security Hub para consolidar postura de segurança, Config para compliance contínuo de configuração.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automação de resposta a incidentes&lt;/strong&gt;, para reduzir o tempo entre detecção e contenção.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A atualização mais recente do framework incorporou também uma área dedicada de &lt;strong&gt;AppSec&lt;/strong&gt; (segurança de aplicação), reforçando que testes de segurança devem fazer parte do ciclo de desenvolvimento — SAST, DAST e dependency scanning como etapas normais de CI/CD, não como auditoria pontual.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Confiabilidade
&lt;/h3&gt;

&lt;p&gt;Aqui o foco é a capacidade de um workload realizar sua função corretamente e de forma consistente, incluindo a habilidade de operar e testar o sistema durante todo o seu ciclo de vida. Boas práticas típicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arquiteturas multi-AZ como padrão mínimo; multi-região para workloads críticos.&lt;/li&gt;
&lt;li&gt;Recuperação automática de falhas (self-healing) via health checks e auto-replacement de instâncias.&lt;/li&gt;
&lt;li&gt;Gestão de capacidade com margem de segurança e testes de carga regulares.&lt;/li&gt;
&lt;li&gt;Estratégias de disaster recovery bem definidas (backup and restore, pilot light, warm standby, multi-site ativo-ativo), apoiadas por serviços como Elastic Disaster Recovery e Resilience Hub para medir e validar objetivos de RTO/RPO.&lt;/li&gt;
&lt;li&gt;Circuit breakers e retries com backoff exponencial para conter falhas em cascata entre serviços distribuídos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Eficiência de Performance
&lt;/h3&gt;

&lt;p&gt;Trata do uso eficiente de recursos computacionais para atender requisitos e manter essa eficiência conforme a demanda muda e as tecnologias evoluem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Escolha deliberada de tipo de computação (EC2, containers em ECS/EKS, serverless com Lambda) conforme o padrão de carga do workload.&lt;/li&gt;
&lt;li&gt;Uso de cache em múltiplas camadas (CloudFront, ElastiCache) para reduzir latência e carga em backends.&lt;/li&gt;
&lt;li&gt;Bancos de dados adequados ao padrão de acesso — relacional para transações complexas, NoSQL para escala horizontal e baixa latência, data warehouse para analytics.&lt;/li&gt;
&lt;li&gt;Revisão periódica de novas famílias de instância e serviços gerenciados, já que "o melhor recurso hoje pode não ser o melhor em seis meses".&lt;/li&gt;
&lt;li&gt;Testes de carga e benchmarking como parte do pipeline, não como evento isolado antes de um lançamento.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Otimização de Custos
&lt;/h3&gt;

&lt;p&gt;Foca em evitar gastos desnecessários e obter o melhor retorno pelo dinheiro investido em nuvem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modelos de compra corretos: On-Demand para picos imprevisíveis, Savings Plans/Reserved Instances para baseline previsível, Spot para workloads tolerantes a interrupção.&lt;/li&gt;
&lt;li&gt;Rightsizing constante com apoio do Compute Optimizer e Trusted Advisor, eliminando recursos superdimensionados ou ociosos.&lt;/li&gt;
&lt;li&gt;Tagging consistente de recursos para permitir &lt;em&gt;chargeback&lt;/em&gt;/&lt;em&gt;showback&lt;/em&gt; real por time, produto ou ambiente.&lt;/li&gt;
&lt;li&gt;Orçamentos e alertas proativos via AWS Budgets, evitando surpresas na fatura.&lt;/li&gt;
&lt;li&gt;Cultura de FinOps: custo como métrica de engenharia, revisada com a mesma seriedade que performance e disponibilidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Sustentabilidade
&lt;/h3&gt;

&lt;p&gt;O pilar mais recente do framework, focado em minimizar o impacto ambiental de workloads em nuvem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Priorizar regiões com matriz energética mais limpa quando a latência permitir.&lt;/li&gt;
&lt;li&gt;Maximizar utilização de recursos provisionados, evitando superprovisionamento "por segurança".&lt;/li&gt;
&lt;li&gt;Preferir serviços gerenciados e serverless, que se beneficiam de ganhos de eficiência agregados da AWS em escala.&lt;/li&gt;
&lt;li&gt;Adotar políticas de ciclo de vida de dados (arquivamento e exclusão automática) para reduzir armazenamento desnecessário.&lt;/li&gt;
&lt;li&gt;Escolher arquiteturas e algoritmos eficientes, já que menos processamento também significa menos consumo energético.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A ferramenta e o processo de revisão
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;AWS Well-Architected Tool&lt;/strong&gt;, gratuito no Console, permite conduzir uma revisão estruturada de um workload: você responde a um conjunto de perguntas por pilar, e a ferramenta identifica riscos (baixo, médio ou alto) e sugere ações de remediação com base nas boas práticas atualizadas.&lt;/p&gt;

&lt;p&gt;Na prática, uma revisão Well-Architected segue um fluxo simples:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Definir o workload&lt;/strong&gt; e seu contexto de negócio (criticidade, SLAs, requisitos regulatórios).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responder às perguntas de cada pilar&lt;/strong&gt; com a equipe técnica responsável, documentando decisões e justificativas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identificar riscos altos (HRIs)&lt;/strong&gt; — os itens que mais ameaçam o sucesso do workload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Priorizar e planejar remediação&lt;/strong&gt;, tratando os HRIs como itens de backlog com dono e prazo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repetir periodicamente&lt;/strong&gt;, já que arquiteturas e boas práticas evoluem — uma revisão não é um evento único, é um hábito.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Lenses: recortes especializados
&lt;/h2&gt;

&lt;p&gt;Além do framework geral, a AWS mantém &lt;em&gt;Lenses&lt;/em&gt; — extensões que aplicam os seis pilares a domínios específicos. Existem lenses para arquiteturas serverless, machine learning, SaaS, IoT, containers, entre outros. A adição mais notável recentemente foi o &lt;strong&gt;Generative AI Lens&lt;/strong&gt;, lançado em 2025, que aplica os seis pilares ao ciclo de vida completo de workloads de IA generativa — do escopo de impacto e seleção de modelo até customização, integração, deployment e iteração contínua, com atenção especial a temas como veracidade, explicabilidade e uso responsável de LLMs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como aplicar isso na prática, sem virar teatro corporativo
&lt;/h2&gt;

&lt;p&gt;O maior risco de qualquer framework é ele virar um exercício de preenchimento de formulário. Algumas recomendações práticas para evitar isso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comece pequeno: revise um workload real e crítico antes de tentar aplicar o framework em toda a organização de uma vez.&lt;/li&gt;
&lt;li&gt;Trate os pilares como lentes de discussão, não como categorias isoladas — a maioria das decisões arquiteturais toca vários pilares ao mesmo tempo.&lt;/li&gt;
&lt;li&gt;Automatize o que for possível (Config Rules, Security Hub, Trusted Advisor) para que parte da revisão aconteça continuamente, não só numa reunião trimestral.&lt;/li&gt;
&lt;li&gt;Conecte os riscos identificados a itens reais de backlog, com dono e prazo — um relatório de revisão que não vira ação é apenas um documento a mais.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O AWS Well-Architected Framework não é sobre seguir regras cegamente, é sobre tornar explícitos os trade-offs que toda arquitetura de nuvem já carrega implicitamente. Usado com disciplina — revisões periódicas, HRIs viram backlog, métricas acompanhadas ao longo do tempo — ele funciona como um mecanismo de melhoria contínua genuíno. Usado como checklist de auditoria pontual, vira só mais um documento arquivado. A diferença entre as duas coisas não está no framework, está no processo que você constrói ao redor dele.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>aws</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Por que a Prime Video trocou microsserviços serverless por um monólito</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Sat, 05 Sep 2026 17:48:34 +0000</pubDate>
      <link>https://dev.to/ikauedev/por-que-a-prime-video-trocou-microsservicos-serverless-por-um-monolito-3n08</link>
      <guid>https://dev.to/ikauedev/por-que-a-prime-video-trocou-microsservicos-serverless-por-um-monolito-3n08</guid>
      <description>&lt;p&gt;Em março de 2023, a equipe de engenharia da Amazon Prime Video publicou um post técnico que causou bastante repercussão na comunidade de cloud: eles haviam redesenhado um de seus serviços internos, saindo de uma arquitetura distribuída baseada em serverless para uma aplicação monolítica rodando em containers — e reduziram o custo operacional em 90%.&lt;/p&gt;

&lt;p&gt;O caso ficou conhecido de forma simplificada como "Prime Video abandona microsserviços", mas essa leitura esconde um detalhe importante: o problema não estava no conceito de microsserviços em si, e sim em como serverless (Step Functions e Lambda) havia sido usado para orquestrar um fluxo de altíssima frequência de eventos. Vale entender o caso com mais profundidade, porque as lições dele valem para qualquer arquiteto de cloud que precisa decidir entre desacoplar componentes ou simplificar a orquestração.&lt;/p&gt;

&lt;h2&gt;
  
  
  O serviço em questão: monitoramento de qualidade de áudio/vídeo
&lt;/h2&gt;

&lt;p&gt;O time responsável era o de &lt;strong&gt;Video Quality Analysis (VQA)&lt;/strong&gt;, que mantém uma ferramenta capaz de detectar problemas de qualidade em streams de vídeo em tempo real — coisas como corrupção de blocos de imagem, congelamento de vídeo e dessincronização entre áudio e vídeo. Essa ferramenta já existia, mas não havia sido projetada para operar na escala de milhares de streams simultâneos, que é o volume real de tráfego da Prime Video.&lt;/p&gt;

&lt;h2&gt;
  
  
  A arquitetura original
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft24kplwmtxf3pewpah1d.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft24kplwmtxf3pewpah1d.jpg" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A primeira versão do serviço foi construída como um sistema distribuído usando componentes serverless, o que fazia todo sentido do ponto de vista de velocidade de entrega. Em linhas gerais, o desenho contava com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Media Converter&lt;/strong&gt;: um componente responsável por quebrar os streams de áudio/vídeo em frames de imagem e buffers de áudio decodificados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defect Detectors&lt;/strong&gt;: microsserviços que analisavam esses frames e buffers usando algoritmos de machine learning para identificar defeitos, executados via AWS Lambda.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orquestração via AWS Step Functions&lt;/strong&gt;: controlando as transições de estado entre as etapas do pipeline de análise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon S3&lt;/strong&gt;: usado como armazenamento intermediário, guardando os frames de imagem entre uma etapa e outra do pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon SNS&lt;/strong&gt;: usado para notificar os resultados da análise.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse desenho tinha uma vantagem clara: escalabilidade horizontal teórica, já que cada componente poderia escalar de forma independente, e uma implementação rápida, aproveitando serviços gerenciados da AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Onde a conta não fechou
&lt;/h2&gt;

&lt;p&gt;O problema apareceu quando o serviço começou a operar em escala real. Dois gargalos concentraram praticamente todo o impacto negativo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Step Functions como orquestrador de alta frequência.&lt;/strong&gt; O fluxo realizava múltiplas transições de estado a cada segundo de stream analisado. Como o Step Functions cobra por transição de estado, e como existem limites de conta para volume de transições, o serviço atingiu limites de escala em torno de apenas 5% da carga esperada — bem abaixo do necessário para operar com todos os streams da plataforma.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Custo de chamadas de camada 1 ao S3.&lt;/strong&gt; Passar frames de vídeo entre componentes usando S3 como intermediário gerava um volume enorme de chamadas de escrita e leitura (chamadas "tier-1", que são as mais caras no modelo de precificação do S3), o que tornava o custo de operação proibitivo em escala.&lt;/p&gt;

&lt;p&gt;Em resumo: o desenho não estava "errado" em teoria, mas o padrão de uso — altíssima frequência de eventos pequenos, orquestrados por um serviço que cobra por evento, trocando dados por um armazenamento intermediário que cobra por chamada — é exatamente o cenário em que orquestração serverless tende a sair cara.&lt;/p&gt;

&lt;h2&gt;
  
  
  A nova arquitetura
&lt;/h2&gt;

&lt;p&gt;A solução da equipe foi consolidar as etapas do pipeline (conversão de mídia e detecção de defeitos) em um único processo, eliminando a orquestração via Step Functions e a troca de dados via S3. Os frames passaram a ser transferidos em memória, dentro do mesmo processo, e não mais por chamadas de rede a um serviço de armazenamento.&lt;/p&gt;

&lt;p&gt;Essa aplicação consolidada passou a rodar sobre &lt;strong&gt;EC2 e ECS&lt;/strong&gt;, com uma camada leve de orquestração para distribuir as requisições dos clientes entre instâncias. Para lidar com o problema de escala vertical de um único processo, a equipe replicou o serviço em múltiplas tarefas ECS, cada uma com um subconjunto de detectores — ou seja, ainda existe distribuição de carga, só que em um nível de granularidade bem mais grosso do que antes.&lt;/p&gt;

&lt;h2&gt;
  
  
  O resultado
&lt;/h2&gt;

&lt;p&gt;A mudança de arquitetura reduziu o custo operacional do serviço em 90% e resolveu o gargalo de escala, permitindo cobrir a totalidade dos streams monitorados. A lógica de negócio (os algoritmos de detecção de defeitos) permaneceu praticamente a mesma — o que mudou foi a camada de orquestração e transporte de dados entre etapas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uma ressalva importante: monólito ou só "menos serverless"?
&lt;/h2&gt;

&lt;p&gt;O post original gerou um debate acalorado na comunidade técnica, incluindo críticas de arquitetos conhecidos do setor. O ponto central da discussão é que, tecnicamente, o novo desenho não é um monólito no sentido tradicional do termo: a Prime Video como um todo continua operando como um conjunto de serviços independentes (cobrança, catálogo, streaming, etc.), e mesmo o novo serviço de VQA ainda é replicado em múltiplas instâncias ECS.&lt;/p&gt;

&lt;p&gt;O que de fato mudou foi a granularidade da orquestração: em vez de fragmentar cada etapa do processamento em funções Lambda separadas e coordená-las por um serviço de estado que cobra por transição, a equipe passou a executar todas as etapas de um mesmo stream dentro de um único processo. É mais preciso descrever isso como uma migração de &lt;strong&gt;serverless orientado a eventos&lt;/strong&gt; para &lt;strong&gt;compute tradicional em containers&lt;/strong&gt;, do que como "microsserviços versus monólito" — ainda que essa segunda formulação tenha sido a usada no post original e seja a que pegou popularmente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lições para quem projeta arquiteturas em cloud
&lt;/h2&gt;

&lt;p&gt;Alguns pontos ficam claros ao analisar o caso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;O modelo de cobrança do serviço gerenciado importa tanto quanto sua elasticidade.&lt;/strong&gt; Step Functions e Lambda são excelentes para orquestrar fluxos de baixa a média frequência ou eventos assíncronos, mas cobrar por transição de estado ou por invocação se torna um problema quando a frequência de eventos é da ordem de múltiplas vezes por segundo, por stream, multiplicado por milhares de streams simultâneos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Armazenamento intermediário tem custo de chamada, não só de armazenamento.&lt;/strong&gt; Usar S3 como "fila" ou buffer entre etapas de um pipeline parece simples, mas o custo por operação pode superar rapidamente o custo do armazenamento em si, especialmente em payloads pequenos e frequentes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desacoplamento tem um custo de rede e serialização que nem sempre se paga.&lt;/strong&gt; Quando as etapas de um pipeline sempre são executadas juntas, para o mesmo item de trabalho, colocá-las no mesmo processo elimina overhead de rede sem necessariamente sacrificar a capacidade de escalar — desde que a unidade de escala (nesse caso, a instância ECS) seja bem dimensionada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A escolha de arquitetura depende do padrão de acesso, não de uma regra geral.&lt;/strong&gt; O próprio caso não é uma prova de que "monólitos são melhores que microsserviços" — é uma prova de que a granularidade da orquestração precisa ser compatível com a frequência e o volume dos eventos que ela processa.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O caso da Prime Video se tornou um símbolo do debate entre microsserviços e monólitos, mas seu valor real está em outro lugar: ele mostra como escolhas de orquestração e transporte de dados, tomadas cedo no design de um sistema, podem determinar se uma arquitetura escala de forma sustentável ou colide com limites de conta e custos inesperados assim que sai do piloto para a produção em escala real. Antes de escolher entre serverless, containers ou uma combinação dos dois, vale simular o padrão real de tráfego esperado e o modelo de cobrança de cada serviço envolvido — não só a elegância teórica do desenho distribuído.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fontes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prime Video Tech Blog — &lt;em&gt;Scaling up the Prime Video audio/video monitoring service and reducing costs by 90%&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;InfoQ — &lt;em&gt;Prime Video Switched from Serverless to EC2 and ECS to Save Costs&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The New Stack — &lt;em&gt;Amazon Prime Video's Microservices Move Doesn't Lead to a Monolith after All&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>primevideo</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Kiro: a IDE agêntica da AWS — o que é, como funciona e vale a pena usar?</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Wed, 02 Sep 2026 15:41:07 +0000</pubDate>
      <link>https://dev.to/ikauedev/kiro-a-ide-agentica-da-aws-o-que-e-como-funciona-e-vale-a-pena-usar-29ag</link>
      <guid>https://dev.to/ikauedev/kiro-a-ide-agentica-da-aws-o-que-e-como-funciona-e-vale-a-pena-usar-29ag</guid>
      <description>&lt;p&gt;Em julho de 2025, a AWS lançou o &lt;strong&gt;Kiro&lt;/strong&gt;, uma IDE agêntica construída sobre a base open-source do VS Code (Code OSS), entrando em um mercado já disputado por ferramentas como Cursor, Windsurf, GitHub Copilot e Claude Code. O produto saiu do modo preview e alcançou disponibilidade geral no fim de 2025/início de 2026, e desde então vem se consolidando como a aposta oficial da AWS para desenvolvimento assistido por IA — a ponto de a própria empresa ter anunciado, em janeiro de 2026, o fim de novos cadastros no Amazon Q Developer (efetivo a partir de 15 de maio de 2026), direcionando explicitamente os usuários ao Kiro.&lt;/p&gt;

&lt;p&gt;O que diferencia o Kiro do restante da concorrência não é o modelo de IA por trás dele (ele roda sobre modelos Claude via Amazon Bedrock, com roteamento também para a Amazon Nova), mas sim sua filosofia de trabalho: em vez de "chat primeiro, código depois", o Kiro é &lt;strong&gt;spec-first&lt;/strong&gt; — a unidade de trabalho não é um prompt solto, e sim uma especificação estruturada que o agente usa para planejar, implementar, verificar e documentar uma funcionalidade de ponta a ponta.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o Kiro, na prática
&lt;/h2&gt;

&lt;p&gt;O Kiro está disponível em quatro superfícies que compartilham o mesmo agente e o mesmo histórico de créditos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IDE desktop&lt;/strong&gt; (macOS, Windows e Linux), com a interface familiar de quem já usa VS Code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI&lt;/strong&gt; para quem prefere trabalhar via terminal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface web&lt;/strong&gt;, incluída em todos os planos pagos, que ganhou suporte a GitLab e specs completos em meados de 2026&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App mobile&lt;/strong&gt;, para acompanhar e disparar tarefas em trânsito&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não é necessário ter conta AWS para começar: dá para entrar com GitHub ou Google, o que reduz a barreira de adoção — embora todo o poder de integração nativa com ambientes AWS só apareça para quem já usa a nuvem da Amazon.&lt;/p&gt;

&lt;h2&gt;
  
  
  O conceito central: desenvolvimento orientado por especificação (spec-driven)
&lt;/h2&gt;

&lt;p&gt;Quando você inicia uma nova funcionalidade no Kiro, a ferramenta não parte direto para o código. Primeiro, ela gera três artefatos estruturados:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;requirements.md&lt;/strong&gt; — histórias de usuário e critérios de aceitação&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;design.md&lt;/strong&gt; — desenho do sistema, decomposição de componentes e fluxo de dados&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tasks.md&lt;/strong&gt; — lista de tarefas sequenciadas e executáveis&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Só depois que essas especificações são revisadas (e aprovadas) pelo desenvolvedor é que os agentes começam a implementar, rodando comandos e testes ao longo do caminho — inclusive em paralelo, quando o plano permite. Uma atualização de maio de 2026 reforçou esse fluxo em torno de TDD: o agente escreve primeiro os testes que devem falhar a partir da especificação, depois a implementação, e por fim roda a suíte de testes — uma forma de manter um agente autônomo "honesto" em mudanças que tocam vários arquivos.&lt;/p&gt;

&lt;p&gt;Diferente de especificações tradicionais em cascata, que são escritas uma vez e esquecidas, as specs do Kiro evoluem junto com o código e continuam servindo de referência para onboarding, refatoração e novas funcionalidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principais recursos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specs&lt;/strong&gt;: como descrito acima, o núcleo do produto&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks (ganchos de agente)&lt;/strong&gt;: automações que disparam em eventos do repositório — salvar um arquivo, criar um componente — para atualizar testes, documentação ou rodar varreduras de segurança automaticamente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steering&lt;/strong&gt;: arquivos markdown que guiam o comportamento do Kiro com regras e contexto específicos do projeto&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic Chat&lt;/strong&gt;: conversa em linguagem natural que entende o contexto do projeto inteiro&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;: conexão com ferramentas e fontes de dados externas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kiro Autonomous Agent&lt;/strong&gt;: agente em segundo plano que pega tarefas, implementa e abre pull requests sem que o desenvolvedor precise acompanhar em tempo real&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memória persistente entre sessões&lt;/strong&gt; e &lt;strong&gt;agentes que aprendem&lt;/strong&gt; com cada interação&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verificação determinística&lt;/strong&gt;, como testes baseados em propriedades, para checar se o código gerado realmente corresponde à especificação&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pontos positivos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rastreabilidade e disciplina&lt;/strong&gt;: quebrar o trabalho em specs e tarefas revisáveis torna o desenvolvimento assistido por IA mais previsível — você não está apostando que um "despejo" gigante de código vai funcionar de primeira.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bom para produção, não só prototipagem&lt;/strong&gt;: enquanto ferramentas como Cursor otimizam velocidade de iteração, o Kiro otimiza para projetos maiors, em equipe, onde documentação e trilha de decisões importam.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integração nativa com AWS&lt;/strong&gt;: para quem já é cliente AWS, o Kiro capta contexto do ambiente de nuvem sem configuração extra, o que economiza um trabalho real de "engenharia de contexto".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suporte a GovCloud&lt;/strong&gt;: coloca o Kiro na lista de opções viáveis para setores regulados, onde a maioria dos concorrentes de IA não pode operar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Múltiplas superfícies com o mesmo agente&lt;/strong&gt;: IDE, CLI, web e mobile compartilham a mesma lógica e o mesmo pool de créditos, sem métricas separadas para gerenciar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks como colaborador constante&lt;/strong&gt;: automatizam tarefas repetitivas e viram, na prática, um "parceiro" que trabalha em segundo plano.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails de segurança reforçados&lt;/strong&gt; após um incidente de destaque (ver seção de controvérsias abaixo), o que tornou o produto mais maduro para uso em ambientes de produção.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pontos negativos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Modelo de preços por créditos é agressivo e difícil de prever&lt;/strong&gt;: os planos vão de um tier gratuito (50 créditos/mês) a um Power de US$ 200/mês (cerca de 20.000 créditos), passando por Pro (US$ 20), Pro+ (US$ 40) e Pro Max (US$ 100). Uma construção completa de feature via spec custa, em média, de 15 a 25 créditos — ou seja, o tier gratuito só permite 2 ou 3 features completas por mês.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overhead para tarefas simples&lt;/strong&gt;: se o seu dia a dia é fazer pequenas edições pontuais em um único arquivo, a estrutura de specs adiciona etapas e reduz a sensação de velocidade — o Kiro "compensa" mais em features grandes e multi-etapas do que em ajustes rápidos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custo de add-ons&lt;/strong&gt;: créditos extras saem a US$ 0,04 cada, e o consumo varia conforme o modelo escolhido (usar Claude Sonnet diretamente, por exemplo, consome cerca de 30% mais créditos do que o modo Auto de roteamento).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GovCloud custa ~20% a mais&lt;/strong&gt; e não tem tier gratuito.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Produto ainda "jovem"&lt;/strong&gt;: alcançou disponibilidade geral só no fim de 2025/início de 2026, e usuários relatam lentidão e arestas na interface em threads de comunidades como o r/kiroIDE — problemas típicos de uma ferramenta recente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incidente de reputação em fevereiro de 2026&lt;/strong&gt;: código gerado por um usuário do Kiro foi apontado, num primeiro momento, como possível causa de uma interrupção de serviço na AWS. A narrativa "o Kiro vibrou demais e derrubou a AWS" viralizou; a AWS negou oficialmente que o Kiro tivesse causado o problema, mas o episódio expôs um risco real: código gerado por IA que interage com infraestrutura de produção precisa de barreiras de segurança bem definidas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependência de um ecossistema (Bedrock/Claude)&lt;/strong&gt;: por rodar sobre modelos de terceiros via Bedrock, o Kiro fica sujeito a mudanças de disponibilidade e custo desses modelos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Preços (panorama de 2026)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plano&lt;/th&gt;
&lt;th&gt;Preço/mês&lt;/th&gt;
&lt;th&gt;Créditos aproximados&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;US$ 0&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;US$ 20&lt;/td&gt;
&lt;td&gt;1.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro+&lt;/td&gt;
&lt;td&gt;US$ 40&lt;/td&gt;
&lt;td&gt;~2.500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro Max&lt;/td&gt;
&lt;td&gt;US$ 100&lt;/td&gt;
&lt;td&gt;~7.000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power&lt;/td&gt;
&lt;td&gt;US$ 200&lt;/td&gt;
&lt;td&gt;~20.000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Além disso, novos usuários costumam receber créditos-bônus por tempo limitado, e startups elegíveis (até Series B) podem se candidatar a até um ano do plano Pro+ gratuito. Times contam com planos equivalentes, faturamento consolidado, analytics de uso e SSO via AWS IAM Identity Center.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiro vs. concorrentes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cursor / Windsurf&lt;/strong&gt;: mais rápidos para começar e mais "leves" para quem trabalha sozinho e quer iteração ágil; o Kiro compensa quando o time precisa de planejamento repetível e rastreabilidade de implementação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt;: também terminal-first e forte em tarefas de codificação profundas, mas sem o andaime formal de specs (requirements/design/tasks) que o Kiro impõe por padrão.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot&lt;/strong&gt;: mais focado em autocomplete e sugestões inline do que em orquestrar uma feature inteira a partir de uma especificação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Q Developer&lt;/strong&gt;: era o assistente da AWS mais atrelado ao console e à infraestrutura AWS; a própria AWS está descontinuando novos cadastros nele, direcionando os usuários para o Kiro como sucessor para assistência de IA em IDE.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Para quem o Kiro faz sentido
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Times que precisam que o código gerado por IA seja revisável, documentado e auditável — não apenas rápido.&lt;/li&gt;
&lt;li&gt;Organizações que já compram serviços via AWS e querem aproveitar a relação de billing existente.&lt;/li&gt;
&lt;li&gt;Equipes em setores regulados que dependem de GovCloud.&lt;/li&gt;
&lt;li&gt;Desenvolvedores avaliando Cursor ou Windsurf, mas que querem uma alternativa com etapa de planejamento explícita e maior flexibilidade de modelos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Já para prototipagem rápida, ajustes pontuais em um único arquivo ou projetos pessoais pequenos, o overhead do fluxo de specs pode não compensar — nesses casos, ferramentas mais leves e "chat-first" tendem a parecer mais ágeis no dia a dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O Kiro representa uma aposta filosófica clara da AWS: em vez de tratar a IA como um autocomplete mais rápido, ele tenta resolver o problema de raiz do "vibe coding" — a falta de planejamento antes da implementação. Isso o torna, para muitos, uma das opções mais sólidas para desenvolvimento de produção com IA em 2026, especialmente em times e em ambientes AWS. Por outro lado, o modelo de créditos exige atenção ao orçamento, a estrutura de specs pode ser overkill para tarefas simples, e o produto ainda carrega as arestas normais de uma ferramenta que amadureceu rápido demais para o holofote que recebeu — inclusive um episódio de reputação que, apesar de desmentido pela AWS, deixou claro o quanto guardrails de segurança são essenciais quando agentes de IA tocam infraestrutura real.&lt;/p&gt;

&lt;p&gt;Na prática, a recomendação mais comum entre quem testou a ferramenta a fundo é: rodar o Kiro em paralelo com a ferramenta que você já usa, reservando-o para features maiores e mais estruturadas, e usar algo mais leve para o trabalho do dia a dia.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kiro</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>AWS Shared Responsibility Model Quem Cuida do Quê na Nuvem</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Tue, 25 Aug 2026 01:52:01 +0000</pubDate>
      <link>https://dev.to/ikauedev/aws-shared-responsibility-model-quem-cuida-do-que-na-nuvem-5bnn</link>
      <guid>https://dev.to/ikauedev/aws-shared-responsibility-model-quem-cuida-do-que-na-nuvem-5bnn</guid>
      <description>&lt;p&gt;Boa parte dos incidentes de segurança na nuvem não acontece porque a AWS falhou — acontece porque alguém assumiu, incorretamente, que a AWS cuidaria de algo que na verdade era responsabilidade do cliente. O &lt;strong&gt;Shared Responsibility Model (Modelo de Responsabilidade Compartilhada)&lt;/strong&gt; é o framework que a AWS usa para deixar essa linha explícita, e é provavelmente o conceito de segurança mais citado — e mais mal compreendido — entre quem opera workloads na nuvem.&lt;/p&gt;

&lt;p&gt;Este artigo detalha o modelo, como a linha de responsabilidade se desloca conforme o tipo de serviço usado, e onde estão os erros mais comuns na prática.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. A frase que resume tudo
&lt;/h2&gt;

&lt;p&gt;A AWS resume o modelo inteiro em uma única distinção:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AWS é responsável pela segurança DA nuvem (security of the cloud). O cliente é responsável pela segurança NA nuvem (security in the cloud).&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa frase parece simples, mas o detalhe importante é que &lt;strong&gt;ela muda de posição dependendo de qual serviço você está usando&lt;/strong&gt;. Não existe uma linha fixa e universal — existe uma linha que se desloca conforme o modelo de serviço (IaaS, PaaS, SaaS) e quanto da pilha técnica a AWS gerencia por baixo dele.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Segurança DA nuvem (responsabilidade da AWS)
&lt;/h2&gt;

&lt;p&gt;Isso cobre a infraestrutura física e a camada de plataforma que sustenta todos os serviços AWS, independentemente do que o cliente escolhe rodar em cima dela:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data centers físicos:&lt;/strong&gt; segurança de acesso físico, vigilância, controles ambientais (energia, refrigeração).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware:&lt;/strong&gt; ciclo de vida de servidores, discos, equipamentos de rede — aquisição, manutenção e descarte seguro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtualização:&lt;/strong&gt; segurança do hypervisor que isola as cargas de trabalho de diferentes clientes rodando na mesma infraestrutura física subjacente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rede global:&lt;/strong&gt; o backbone de fibra que conecta regiões, Availability Zones e edge locations, incluindo a isolação de tráfego entre regiões.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patching da infraestrutura de serviços gerenciados:&lt;/strong&gt; para serviços como RDS, DynamoDB ou S3, a AWS também cuida do patching do sistema operacional e do software subjacente da plataforma — não apenas do hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance da infraestrutura:&lt;/strong&gt; auditorias regulares de terceiros (SOC 1/2/3, ISO 27001, PCI-DSS, entre outros) que certificam que a infraestrutura da AWS atende a padrões de segurança reconhecidos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O cliente &lt;strong&gt;não tem acesso e não pode alterar&lt;/strong&gt; nada dessa camada — e também não precisa se preocupar com ela: é inteiramente coberta pela AWS, com evidência de auditoria disponível via AWS Artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Segurança NA nuvem (responsabilidade do cliente)
&lt;/h2&gt;

&lt;p&gt;Isso cobre tudo que o cliente configura, insere ou constrói em cima da infraestrutura da AWS — e é onde a esmagadora maioria dos incidentes reais de segurança na nuvem acontece:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dados:&lt;/strong&gt; classificação, criptografia (em repouso e em trânsito), e decisão de quem pode acessá-los.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identidade e acesso (IAM):&lt;/strong&gt; usuários, roles, políticas de permissão, MFA — garantir que apenas identidades autorizadas acessem recursos, com o mínimo privilégio necessário.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuração de aplicação e sistema operacional:&lt;/strong&gt; em serviços IaaS, isso inclui aplicar patches de SO, configurar firewall a nível de instância (security groups, NACLs) e proteger o código da aplicação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuração de rede:&lt;/strong&gt; VPCs, sub-redes, tabelas de rota, security groups — desenhar a segmentação de rede corretamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gestão de credenciais:&lt;/strong&gt; chaves de API, segredos de aplicação, rotação de credenciais.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance da aplicação:&lt;/strong&gt; garantir que a forma como os dados são tratados dentro da aplicação atende às regulações aplicáveis ao negócio (LGPD, HIPAA, PCI-DSS, conforme o caso).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A AWS fornece as ferramentas (IAM, KMS, Security Groups, GuardDuty, Config, entre outras) — mas &lt;strong&gt;usar essas ferramentas corretamente é responsabilidade do cliente&lt;/strong&gt;. A AWS não pode, por exemplo, impedir que alguém configure um bucket S3 como público por engano — só pode fornecer os mecanismos (como o S3 Block Public Access, que passou a vir habilitado por padrão em buckets novos) para tornar esse erro menos provável.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Como a linha se desloca conforme o tipo de serviço
&lt;/h2&gt;

&lt;p&gt;Esse é o ponto mais importante e mais frequentemente mal entendido do modelo: &lt;strong&gt;a divisão de responsabilidade não é a mesma para todo serviço da AWS.&lt;/strong&gt; Ela varia de acordo com quanto da pilha técnica é gerenciado pela AWS por trás daquele serviço específico — na prática, o mesmo raciocínio de IaaS/PaaS/SaaS aplicado à segurança.&lt;/p&gt;

&lt;h3&gt;
  
  
  Infraestrutura (ex.: Amazon EC2)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;Responsável&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data centers, hardware, virtualização, rede global&lt;/td&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sistema operacional convidado (patches, configuração)&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firewall a nível de instância (Security Groups)&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software instalado, configuração da aplicação&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dados armazenados, criptografia de dados&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gestão de identidade e acesso à instância&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rodar uma instância EC2 é o cenário onde o cliente assume a maior fatia de responsabilidade — equivalente a um modelo IaaS: a AWS garante o hardware e o hypervisor, tudo a partir do SO para cima é por conta do cliente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Containers gerenciados (ex.: Amazon ECS/EKS com Fargate)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;Responsável&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Infraestrutura, orquestração dos nós, patching do SO do nó&lt;/td&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Imagem de container, dependências da aplicação&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuração de rede do cluster/task&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM roles atribuídas a tasks/pods&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dados da aplicação&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A responsabilidade sobre o sistema operacional subjacente se desloca para a AWS quando se usa Fargate — o cliente continua responsável pelo que roda dentro do container.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serviços gerenciados/PaaS (ex.: Amazon RDS)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;Responsável&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Infraestrutura, hypervisor, SO do banco, patching do motor do banco&lt;/td&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuração de acesso ao banco (security groups, parâmetros)&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gestão de usuários e permissões dentro do banco&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backup (a AWS automatiza, mas a política de retenção é configurada pelo cliente)&lt;/td&gt;
&lt;td&gt;Compartilhado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dados armazenados no banco, criptografia&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Aqui a AWS assume o patching do sistema operacional e do motor do banco — algo que, no EC2, seria integralmente do cliente. Ainda assim, a configuração de acesso e os dados continuam sendo do cliente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serverless/orientado a evento (ex.: AWS Lambda, Amazon S3)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;Responsável&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Infraestrutura, runtime, escalonamento, patching completo da plataforma&lt;/td&gt;
&lt;td&gt;AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Código da função / política de bucket&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM role/policy anexada à função ou ao bucket&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dados armazenados ou processados&lt;/td&gt;
&lt;td&gt;Cliente&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Esse é o extremo oposto do EC2: a AWS absorve praticamente toda a pilha técnica. Mesmo assim, o cliente continua totalmente responsável pela &lt;strong&gt;configuração de acesso&lt;/strong&gt; — e é exatamente aqui que estão os incidentes mais comuns e mais citados de segurança na nuvem: buckets S3 configurados como públicos por engano, ou funções Lambda com permissões IAM excessivamente amplas. A infraestrutura estar 100% protegida pela AWS não impede um vazamento de dados causado por uma política de acesso mal configurada pelo cliente.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. O padrão que se repete: infraestrutura protegida não é dado protegido
&lt;/h2&gt;

&lt;p&gt;O ponto central do modelo, resumido de forma direta: &lt;strong&gt;quanto mais gerenciado o serviço, menor a fatia de responsabilidade técnica do cliente — mas a responsabilidade sobre dados, identidade e configuração de acesso nunca desaparece, em nenhum modelo de serviço.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;É por isso que a maioria dos incidentes de segurança envolvendo AWS (buckets S3 públicos expostos, credenciais vazadas em repositórios de código, políticas IAM excessivamente permissivas) não são falhas da AWS — são falhas do lado do cliente na fração de responsabilidade que sempre lhe pertence, independentemente de quão gerenciado seja o serviço escolhido.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Ferramentas da AWS que ajudam o cliente a cumprir sua parte
&lt;/h2&gt;

&lt;p&gt;A AWS não pode atravessar a linha de responsabilidade — mas oferece serviços especificamente desenhados para reduzir a chance de erro do lado do cliente:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ferramenta&lt;/th&gt;
&lt;th&gt;Ajuda a cobrir&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IAM + IAM Access Analyzer&lt;/td&gt;
&lt;td&gt;Identidade e acesso — identifica permissões não utilizadas ou excessivamente amplas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS KMS&lt;/td&gt;
&lt;td&gt;Criptografia de dados em repouso, gestão de chaves&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security Groups / NACLs&lt;/td&gt;
&lt;td&gt;Segmentação e controle de tráfego de rede&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S3 Block Public Access&lt;/td&gt;
&lt;td&gt;Reduz o risco de exposição acidental de buckets (habilitado por padrão desde 2023)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon GuardDuty&lt;/td&gt;
&lt;td&gt;Detecção de ameaças e comportamento anômalo na conta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Config&lt;/td&gt;
&lt;td&gt;Auditoria contínua de configuração de recursos contra regras definidas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Artifact&lt;/td&gt;
&lt;td&gt;Acesso a relatórios de compliance e certificações da infraestrutura AWS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Nenhuma dessas ferramentas "terceiriza" a responsabilidade de volta para a AWS — elas apenas tornam mais fácil para o cliente cumprir a parte que já é dele.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Erros comuns de interpretação do modelo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"A AWS é responsável pela segurança, então meus dados estão seguros por padrão."&lt;/strong&gt; Incorreto — a AWS protege a infraestrutura; a configuração de acesso aos dados é sempre do cliente, em qualquer serviço.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Como uso um serviço gerenciado (RDS, Lambda, S3), não preciso pensar em segurança."&lt;/strong&gt; Incorreto — a fatia de responsabilidade técnica diminui, mas identidade, dados e configuração de acesso continuam sendo do cliente mesmo no serviço mais gerenciado que existe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"O modelo é o mesmo para todo serviço da AWS."&lt;/strong&gt; Incorreto — a linha se desloca conforme o serviço (EC2 vs. Fargate vs. RDS vs. Lambda), e entender onde ela está para cada serviço específico usado é parte do trabalho de arquitetura.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Backup automático da AWS significa que meus dados estão protegidos contra qualquer perda."&lt;/strong&gt; Parcialmente incorreto — a AWS automatiza o mecanismo de backup em muitos serviços gerenciados, mas a política de retenção, os testes de restore e a estratégia de disaster recovery continuam sendo decisões e responsabilidades do cliente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O Shared Responsibility Model não é uma cláusula de contrato para ler uma vez e esquecer — é um mapa que precisa ser consultado para cada serviço específico que entra na arquitetura, porque a fronteira entre "isso é problema da AWS" e "isso é problema meu" muda de lugar a cada camada de abstração que se sobe. Entender exatamente onde essa linha está para o EC2, para o RDS, para o Lambda e para o S3 — em vez de tratar "a AWS cuida da segurança" como uma frase genérica — é o que separa uma arquitetura de nuvem bem protegida de uma que só parece estar.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Estratégias de Deploy no Kubernetes: Rolling Update, Canary Deployment e Blue-Green</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Thu, 20 Aug 2026 11:22:17 +0000</pubDate>
      <link>https://dev.to/ikauedev/estrategias-de-deploy-no-kubernetes-rolling-update-canary-deployment-e-blue-green-2h46</link>
      <guid>https://dev.to/ikauedev/estrategias-de-deploy-no-kubernetes-rolling-update-canary-deployment-e-blue-green-2h46</guid>
      <description>&lt;p&gt;Realizar o deploy de uma nova versão de uma aplicação em produção é uma das etapas mais críticas de um processo de entrega de software. Mesmo quando uma aplicação possui testes automatizados, pipelines de CI/CD, ambientes de homologação e validações de qualidade, ainda existe um risco associado à execução da nova versão em produção.&lt;/p&gt;

&lt;p&gt;Problemas de performance, incompatibilidades com serviços externos, falhas de integração, consumo excessivo de memória, aumento de latência e erros não previstos podem aparecer apenas quando a aplicação está submetida ao tráfego real.&lt;/p&gt;

&lt;p&gt;Nesse contexto, estratégias de deployment são utilizadas para reduzir o risco de uma nova versão. Em vez de simplesmente desligar a aplicação antiga e iniciar a nova, podemos controlar como a nova versão será introduzida no ambiente produtivo.&lt;/p&gt;

&lt;p&gt;No Kubernetes, existem estratégias nativas, principalmente o &lt;strong&gt;Rolling Update&lt;/strong&gt;, e estratégias mais avançadas de &lt;strong&gt;Progressive Delivery&lt;/strong&gt;, como &lt;strong&gt;Canary Deployment&lt;/strong&gt; e &lt;strong&gt;Blue-Green Deployment&lt;/strong&gt;, normalmente implementadas com ferramentas como o &lt;a href="https://argoproj.github.io/rollouts/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Argo Rollouts&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As três abordagens possuem objetivos semelhantes: disponibilizar novas versões de forma segura. Entretanto, cada uma controla de maneira diferente aspectos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quantidade de usuários expostos à nova versão;&lt;/li&gt;
&lt;li&gt;Velocidade do deployment;&lt;/li&gt;
&lt;li&gt;Capacidade de rollback;&lt;/li&gt;
&lt;li&gt;Consumo de infraestrutura;&lt;/li&gt;
&lt;li&gt;Controle do tráfego;&lt;/li&gt;
&lt;li&gt;Validação por métricas;&lt;/li&gt;
&lt;li&gt;Impacto de uma falha em produção.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  1. O que é uma estratégia de deployment?
&lt;/h1&gt;

&lt;p&gt;Uma estratégia de deployment define &lt;strong&gt;como uma versão nova substitui a versão atualmente executada&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine uma aplicação em produção na versão:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Aplicação v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma nova versão é desenvolvida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Aplicação v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A principal questão passa a ser:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como migrar os usuários da versão v1 para a versão v2 com o menor risco possível?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Existem diferentes respostas para esse problema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rolling Update
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v1 → v1 + v2 → v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os Pods antigos são substituídos gradualmente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Blue-Green
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Blue (v1) → validação da Green (v2) → troca de tráfego → Green (v2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As duas versões coexistem, mas normalmente apenas uma recebe o tráfego produtivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Canary
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;90% v1 + 10% v2
        ↓
70% v1 + 30% v2
        ↓
50% v1 + 50% v2
        ↓
0% v1 + 100% v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A nova versão recebe uma pequena parcela do tráfego e sua exposição aumenta progressivamente após validação.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Rolling Update: a estratégia nativa do Kubernetes
&lt;/h1&gt;

&lt;p&gt;O &lt;strong&gt;Rolling Update&lt;/strong&gt; é a estratégia mais comum e padrão para objetos &lt;code&gt;Deployment&lt;/code&gt; no Kubernetes.&lt;/p&gt;

&lt;p&gt;O Kubernetes substitui gradualmente os Pods pertencentes à versão antiga pelos Pods da nova versão. Durante o processo, ambas as versões podem coexistir temporariamente. A estratégia &lt;code&gt;RollingUpdate&lt;/code&gt; é o padrão do &lt;code&gt;Deployment&lt;/code&gt;, enquanto a alternativa nativa é &lt;code&gt;Recreate&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Imagine uma aplicação com cinco réplicas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Versão atual:

Pod 1 - v1
Pod 2 - v1
Pod 3 - v1
Pod 4 - v1
Pod 5 - v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após iniciar o deployment da versão v2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pod 1 - v2
Pod 2 - v1
Pod 3 - v1
Pod 4 - v1
Pod 5 - v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pod 1 - v2
Pod 2 - v2
Pod 3 - v1
Pod 4 - v1
Pod 5 - v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O processo continua até:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pod 1 - v2
Pod 2 - v2
Pod 3 - v2
Pod 4 - v2
Pod 5 - v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A velocidade e o comportamento dessa substituição são controlados principalmente por:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;maxSurge&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxUnavailable&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2.1 maxSurge
&lt;/h2&gt;

&lt;p&gt;O parâmetro &lt;code&gt;maxSurge&lt;/code&gt; define quantos Pods adicionais podem ser criados temporariamente durante o deployment.&lt;/p&gt;

&lt;p&gt;Considere:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;maxSurge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Kubernetes pode executar temporariamente até:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10 Pods desejados + 2 Pods extras = 12 Pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso permite criar novos Pods antes de remover todos os Pods antigos.&lt;/p&gt;

&lt;p&gt;Também é possível utilizar porcentagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;maxSurge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;25%&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A documentação do Kubernetes permite valores absolutos ou percentuais; percentuais para &lt;code&gt;maxSurge&lt;/code&gt; são arredondados para cima. O padrão é &lt;code&gt;25%&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2.2 maxUnavailable
&lt;/h2&gt;

&lt;p&gt;O parâmetro &lt;code&gt;maxUnavailable&lt;/code&gt; define quantos Pods podem ficar indisponíveis durante a atualização.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;maxUnavailable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Durante o processo, o Kubernetes tentará garantir que no mínimo nove Pods permaneçam disponíveis.&lt;/p&gt;

&lt;p&gt;Também é possível utilizar porcentagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;maxUnavailable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;20%&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse caso, até 20% das réplicas desejadas podem estar indisponíveis durante a atualização. Para porcentagens, o Kubernetes arredonda &lt;code&gt;maxUnavailable&lt;/code&gt; para baixo; o padrão também é &lt;code&gt;25%&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2.3 Exemplo de Rolling Update
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

  &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RollingUpdate&lt;/span&gt;
    &lt;span class="na"&gt;rollingUpdate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;maxSurge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
      &lt;span class="na"&gt;maxUnavailable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;

  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-application:2.0.0&lt;/span&gt;
          &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;

          &lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/health&lt;/span&gt;
              &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com essa configuração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Replicas desejadas: 5
maxSurge: 1
maxUnavailable: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Kubernetes pode criar um Pod adicional temporariamente, chegando a seis Pods, enquanto busca manter os cinco Pods disponíveis.&lt;/p&gt;

&lt;p&gt;Um fluxo simplificado seria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ v1 ][ v1 ][ v1 ][ v1 ][ v1 ]

        ↓

[ v1 ][ v1 ][ v1 ][ v1 ][ v1 ][ v2 ]

        ↓

[ v1 ][ v1 ][ v1 ][ v1 ][ v2 ]

        ↓

[ v1 ][ v1 ][ v1 ][ v2 ][ v2 ]

        ↓

[ v1 ][ v1 ][ v2 ][ v2 ][ v2 ]

        ↓

[ v1 ][ v2 ][ v2 ][ v2 ][ v2 ]

        ↓

[ v2 ][ v2 ][ v2 ][ v2 ][ v2 ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2.4 Vantagens do Rolling Update
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Simplicidade
&lt;/h3&gt;

&lt;p&gt;Não exige necessariamente ferramentas adicionais.&lt;/p&gt;

&lt;p&gt;O próprio Kubernetes gerencia o processo através do recurso &lt;code&gt;Deployment&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Menor consumo de infraestrutura
&lt;/h3&gt;

&lt;p&gt;Normalmente não é necessário manter duas versões completas da aplicação durante todo o deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ausência de downtime em configurações adequadas
&lt;/h3&gt;

&lt;p&gt;Com probes, réplicas suficientes e valores corretos de &lt;code&gt;maxSurge&lt;/code&gt; e &lt;code&gt;maxUnavailable&lt;/code&gt;, é possível atualizar a aplicação gradualmente sem interromper o serviço.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integração nativa
&lt;/h3&gt;

&lt;p&gt;Funciona diretamente com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deployment
ReplicaSet
Service
Readiness Probe
Liveness Probe
HPA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2.5 Limitações do Rolling Update
&lt;/h2&gt;

&lt;p&gt;O maior problema é que o Rolling Update &lt;strong&gt;não fornece controle preciso sobre qual percentual dos usuários recebe cada versão&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por exemplo, se existem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10 Pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e durante o deployment temos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;9 Pods v1
1 Pod v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;isso não significa necessariamente que exatamente 10% dos usuários receberão a nova versão.&lt;/p&gt;

&lt;p&gt;O tráfego dependerá de fatores como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Balanceamento do Service;&lt;/li&gt;
&lt;li&gt;Conexões persistentes;&lt;/li&gt;
&lt;li&gt;Distribuição de requisições;&lt;/li&gt;
&lt;li&gt;Número de réplicas;&lt;/li&gt;
&lt;li&gt;Comportamento do cliente;&lt;/li&gt;
&lt;li&gt;Ingress;&lt;/li&gt;
&lt;li&gt;Service Mesh.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além disso, o Kubernetes &lt;code&gt;Deployment&lt;/code&gt; não realiza, por conta própria, análise de métricas de negócio para decidir se uma versão deve continuar ou sofrer rollback. Ferramentas de progressive delivery adicionam esse tipo de capacidade.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Canary Deployment
&lt;/h1&gt;

&lt;p&gt;O &lt;strong&gt;Canary Deployment&lt;/strong&gt; é uma estratégia na qual uma pequena parcela dos usuários recebe inicialmente a nova versão da aplicação.&lt;/p&gt;

&lt;p&gt;O objetivo é limitar o chamado &lt;strong&gt;blast radius&lt;/strong&gt;, ou seja, limitar o número de usuários potencialmente impactados caso exista um problema.&lt;/p&gt;

&lt;p&gt;O conceito vem da ideia de validar uma mudança em pequena escala antes de expô-la completamente.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Versão estável: v1
Nova versão: v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em vez de migrar todos os usuários:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100% → v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;podemos fazer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;95% → v1
5%  → v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após análise:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;90% → v1
10% → v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;75% → v1
25% → v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim sucessivamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;50% → v1
50% → v2

↓

25% → v1
75% → v2

↓

0% → v1
100% → v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Argo Rollouts define Canary como uma estratégia em que a nova versão é liberada para uma pequena porcentagem do tráfego de produção e permite configurar etapas específicas para controlar essa progressão.&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Canary Deployment com Argo Rollouts
&lt;/h1&gt;

&lt;p&gt;O Kubernetes padrão não possui um objeto &lt;code&gt;Deployment&lt;/code&gt; com Canary completo baseado em porcentagem de tráfego e análise progressiva de métricas.&lt;/p&gt;

&lt;p&gt;Para esse cenário, uma solução comum é utilizar o &lt;a href="https://argoproj.github.io/rollouts/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Argo Rollouts&lt;/a&gt;, que adiciona um controlador e CRDs para estratégias como Canary e Blue-Green. Ele também pode integrar o rollout com Ingress Controllers, Service Meshes e provedores de métricas.&lt;/p&gt;

&lt;p&gt;Em vez de:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;podemos utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Rollout&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;argoproj.io/v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Rollout&lt;/span&gt;

&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;

  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-application:2.0.0&lt;/span&gt;
          &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;

  &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;canary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;setWeight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pause&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5m&lt;/span&gt;

        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;setWeight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pause&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10m&lt;/span&gt;

        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;setWeight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;pause&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;15m&lt;/span&gt;

        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;setWeight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse cenário, a estratégia é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Etapa 1
10% do tráfego → nova versão

        ↓

Aguardar 5 minutos

        ↓

Etapa 2
25% do tráfego → nova versão

        ↓

Aguardar 10 minutos

        ↓

Etapa 3
50% do tráfego → nova versão

        ↓

Aguardar 15 minutos

        ↓

Etapa final
100% → nova versão
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Argo Rollouts permite etapas como &lt;code&gt;setWeight&lt;/code&gt; e &lt;code&gt;pause&lt;/code&gt;, inclusive pausas manuais ou com duração configurada.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. O papel do Traffic Routing no Canary
&lt;/h1&gt;

&lt;p&gt;Existe uma diferença importante entre:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Quantidade de Pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Quantidade de tráfego
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suponha que existam:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;9 Pods v1
1 Pod v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos pensar inicialmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 Pod de 10 = 10% do tráfego
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém, isso é apenas uma aproximação.&lt;/p&gt;

&lt;p&gt;Sem um mecanismo avançado de roteamento, a distribuição pode ser aproximada pela proporção de Pods. A própria documentação do Argo Rollouts destaca essa limitação e explica que, para um controle mais fino de pesos, é necessário utilizar um Ingress Controller ou Service Mesh com capacidade de traffic shaping.&lt;/p&gt;

&lt;p&gt;Com um sistema de traffic routing, é possível definir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;95% → Stable
5%  → Canary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;mesmo que a quantidade de Pods não represente exatamente essa mesma proporção.&lt;/p&gt;

&lt;p&gt;Exemplo conceitual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   ┌──────────────────┐
Usuários ────────► │ Ingress / Gateway│
                   └────────┬─────────┘
                            │
                  ┌─────────┴─────────┐
                  │                   │
                90%                 10%
                  │                   │
                  ▼                   ▼
          ┌─────────────┐     ┌─────────────┐
          │ Stable v1   │     │ Canary v2   │
          └─────────────┘     └─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dependendo da arquitetura, o roteamento pode ser integrado com tecnologias como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NGINX;&lt;/li&gt;
&lt;li&gt;Istio;&lt;/li&gt;
&lt;li&gt;Linkerd;&lt;/li&gt;
&lt;li&gt;AWS ALB;&lt;/li&gt;
&lt;li&gt;App Mesh;&lt;/li&gt;
&lt;li&gt;SMI e outros provedores suportados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O Argo Rollouts possui integrações específicas para diferentes mecanismos de traffic routing.&lt;/p&gt;

&lt;h1&gt;
  
  
  6. Canary baseado em métricas
&lt;/h1&gt;

&lt;p&gt;Um dos maiores benefícios do Canary é a possibilidade de tomar decisões baseadas em dados reais.&lt;/p&gt;

&lt;p&gt;Durante uma etapa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;90% Stable
10% Canary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;podemos monitorar indicadores como:&lt;/p&gt;

&lt;h3&gt;
  
  
  Taxa de erro
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP 5xx
Exceptions
Falhas de API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Latência
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p95
p99
Tempo médio de resposta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Consumo de recursos
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU
Memória
Network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Métricas de negócio
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pedidos concluídos
Logins realizados
Pagamentos aprovados
Taxa de conversão
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suponha que a nova versão apresente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v1
Error Rate: 0.2%
p95: 150ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E o Canary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v2
Error Rate: 4.8%
p95: 1200ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O rollout pode ser interrompido antes que a nova versão seja entregue para toda a base de usuários.&lt;/p&gt;

&lt;p&gt;O Argo Rollouts oferece integração com provedores de métricas e análise para apoiar promoções ou rollbacks automatizados.&lt;/p&gt;

&lt;h1&gt;
  
  
  7. Fluxo completo de um Canary Deployment
&lt;/h1&gt;

&lt;p&gt;Um fluxo de produção pode funcionar assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    CI/CD Pipeline
                          │
                          ▼
                    Build da imagem
                          │
                          ▼
                  Testes automatizados
                          │
                          ▼
                 Publicação no Registry
                          │
                          ▼
                   Atualização do Rollout
                          │
                          ▼
                Nova versão é criada
                          │
                          ▼
                   5% do tráfego
                          │
                          ▼
                  Análise de métricas
                     │            │
                  Sucesso       Falha
                     │            │
                     ▼            ▼
                10% tráfego    Rollback
                     │
                     ▼
                  25% tráfego
                     │
                     ▼
                  50% tráfego
                     │
                     ▼
                 100% tráfego
                     │
                     ▼
                 Deploy concluído
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  8. Blue-Green Deployment
&lt;/h1&gt;

&lt;p&gt;O &lt;strong&gt;Blue-Green Deployment&lt;/strong&gt; trabalha com dois ambientes ou duas versões da aplicação.&lt;/p&gt;

&lt;p&gt;Tradicionalmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Blue  = versão atual
Green = nova versão
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BLUE
my-application:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GREEN
my-application:2.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inicialmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Usuários
    │
    ▼
BLUE - v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A nova versão é criada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 ┌──────────────┐
                 │ BLUE - v1    │
Usuários ───────►│ Produção     │
                 └──────────────┘

                 ┌──────────────┐
                 │ GREEN - v2   │
                 │ Preview/Test │
                 └──────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A versão Green pode ser validada antes de receber o tráfego principal.&lt;/p&gt;

&lt;p&gt;Após a aprovação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Antes:

Usuários → BLUE v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Usuários → GREEN v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A troca pode ser muito rápida porque, em vez de substituir Pods progressivamente, o roteamento de produção passa a apontar para a nova versão.&lt;/p&gt;

&lt;p&gt;A documentação do Argo Rollouts descreve Blue-Green como uma estratégia na qual a versão antiga e a nova podem coexistir, enquanto a nova é validada antes da troca do tráfego de produção.&lt;/p&gt;

&lt;h1&gt;
  
  
  9. Blue-Green no Kubernetes com Argo Rollouts
&lt;/h1&gt;

&lt;p&gt;O Argo Rollouts pode utilizar dois Services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Active Service
Preview Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A arquitetura pode ser representada assim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         ┌──────────────────────┐
                         │      Usuários        │
                         └──────────┬───────────┘
                                    │
                                    ▼
                         ┌──────────────────────┐
                         │   Active Service     │
                         └──────────┬───────────┘
                                    │
                                    ▼
                         ┌──────────────────────┐
                         │      BLUE v1         │
                         │     Produção         │
                         └──────────────────────┘


                         ┌──────────────────────┐
                         │   Preview Service    │
                         └──────────┬───────────┘
                                    │
                                    ▼
                         ┌──────────────────────┐
                         │      GREEN v2        │
                         │      Preview         │
                         └──────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;argoproj.io/v1alpha1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Rollout&lt;/span&gt;

&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;

    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-application:2.0.0&lt;/span&gt;

  &lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;blueGreen&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;activeService&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application-active&lt;/span&gt;
      &lt;span class="na"&gt;previewService&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application-preview&lt;/span&gt;

      &lt;span class="na"&gt;autoPromotionEnabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

      &lt;span class="na"&gt;scaleDownDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse modelo, o &lt;code&gt;activeService&lt;/code&gt; continua direcionando o tráfego normal para a versão atual, enquanto o &lt;code&gt;previewService&lt;/code&gt; pode direcionar tráfego de validação para a nova versão. O Argo Rollouts permite pausar antes da promoção usando &lt;code&gt;autoPromotionEnabled: false&lt;/code&gt; e possui configurações adicionais para análise antes ou depois da promoção.&lt;/p&gt;

&lt;h1&gt;
  
  
  10. Fluxo do Blue-Green Deployment
&lt;/h1&gt;

&lt;p&gt;Podemos dividir o processo em etapas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Etapa 1 — Produção
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Active Service
       │
       ▼
BLUE - v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A versão atual atende os usuários.&lt;/p&gt;




&lt;h2&gt;
  
  
  Etapa 2 — Criação da nova versão
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Active Service                Preview Service
       │                             │
       ▼                             ▼
BLUE - v1                      GREEN - v2
Produção                       Nova versão
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A nova versão é iniciada.&lt;/p&gt;




&lt;h2&gt;
  
  
  Etapa 3 — Validação
&lt;/h2&gt;

&lt;p&gt;A equipe pode testar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GREEN - v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por meio de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smoke tests;&lt;/li&gt;
&lt;li&gt;Testes automatizados;&lt;/li&gt;
&lt;li&gt;Testes de integração;&lt;/li&gt;
&lt;li&gt;Testes manuais;&lt;/li&gt;
&lt;li&gt;Testes de performance;&lt;/li&gt;
&lt;li&gt;Análise de métricas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Etapa 4 — Promoção
&lt;/h2&gt;

&lt;p&gt;Após a aprovação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Antes:

Active Service → BLUE v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A promoção altera o direcionamento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Depois:

Active Service → GREEN v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O tráfego produtivo é transferido para a nova versão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Etapa 5 — Período de segurança
&lt;/h2&gt;

&lt;p&gt;A versão anterior pode continuar disponível temporariamente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GREEN - v2 → Produção

BLUE - v1 → Mantida temporariamente
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso facilita uma reversão rápida caso um problema seja identificado.&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Rollback no Blue-Green
&lt;/h1&gt;

&lt;p&gt;O Blue-Green possui uma característica muito importante: a versão anterior pode continuar pronta para uso.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BLUE = v1
GREEN = v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a promoção:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Usuários → GREEN v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se for identificado um problema crítico:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Usuários → BLUE v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O rollback pode ser baseado na reversão do roteamento, desde que a versão anterior ainda esteja disponível e compatível com o estado do sistema.&lt;/p&gt;

&lt;p&gt;Porém, existe um ponto fundamental: &lt;strong&gt;rollback de aplicação não significa automaticamente rollback de banco de dados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine que a versão v2 execute uma migration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE users ADD COLUMN new_field;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso pode ser compatível com a versão antiga.&lt;/p&gt;

&lt;p&gt;Mas imagine uma migration destrutiva:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER TABLE users DROP COLUMN old_field;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso a versão v1 dependa dessa coluna:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rollback da aplicação → v1
Banco de dados → incompatível
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Portanto, estratégias de deployment devem ser combinadas com estratégias seguras de evolução de banco de dados.&lt;/p&gt;

&lt;p&gt;Uma abordagem muito utilizada é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expand
   ↓
Deploy
   ↓
Migrate
   ↓
Contract
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;h3&gt;
  
  
  Expand
&lt;/h3&gt;

&lt;p&gt;Adicionar a nova estrutura sem remover a antiga.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Banco v1 + novas estruturas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deploy
&lt;/h3&gt;

&lt;p&gt;Publicar a aplicação nova.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Aplicação v1 + Aplicação v2 compatíveis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Migrate
&lt;/h3&gt;

&lt;p&gt;Migrar gradualmente dados ou comportamento.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contract
&lt;/h3&gt;

&lt;p&gt;Somente após a estabilização remover estruturas antigas.&lt;/p&gt;

&lt;h1&gt;
  
  
  12. Comparação entre Rolling Update, Canary e Blue-Green
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;Rolling Update&lt;/th&gt;
&lt;th&gt;Canary&lt;/th&gt;
&lt;th&gt;Blue-Green&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Estratégia nativa no Kubernetes&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;td&gt;Não de forma completa&lt;/td&gt;
&lt;td&gt;Não de forma completa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ferramenta adicional&lt;/td&gt;
&lt;td&gt;Não necessariamente&lt;/td&gt;
&lt;td&gt;Geralmente sim&lt;/td&gt;
&lt;td&gt;Geralmente sim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duas versões simultâneas&lt;/td&gt;
&lt;td&gt;Temporariamente&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Controle percentual de tráfego&lt;/td&gt;
&lt;td&gt;Limitado&lt;/td&gt;
&lt;td&gt;Excelente com traffic routing&lt;/td&gt;
&lt;td&gt;Geralmente troca de ambiente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validação gradual&lt;/td&gt;
&lt;td&gt;Limitada&lt;/td&gt;
&lt;td&gt;Excelente&lt;/td&gt;
&lt;td&gt;Pré/pós-promoção&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rollback&lt;/td&gt;
&lt;td&gt;Possível&lt;/td&gt;
&lt;td&gt;Excelente&lt;/td&gt;
&lt;td&gt;Muito rápido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consumo de infraestrutura&lt;/td&gt;
&lt;td&gt;Baixo/Médio&lt;/td&gt;
&lt;td&gt;Médio&lt;/td&gt;
&lt;td&gt;Alto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complexidade&lt;/td&gt;
&lt;td&gt;Baixa&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;td&gt;Média&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ideal para&lt;/td&gt;
&lt;td&gt;Aplicações comuns&lt;/td&gt;
&lt;td&gt;Sistemas críticos e alto tráfego&lt;/td&gt;
&lt;td&gt;Sistemas que exigem troca controlada&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  13. Comparação visual
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Rolling Update
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v1 v1 v1 v1 v1

↓ Deploy

v2 v1 v1 v1 v1

↓

v2 v2 v1 v1 v1

↓

v2 v2 v2 v1 v1

↓

v2 v2 v2 v2 v1

↓

v2 v2 v2 v2 v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Canary
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Produção

95% → v1
5%  → v2

↓

90% → v1
10% → v2

↓

75% → v1
25% → v2

↓

50% → v1
50% → v2

↓

0% → v1
100% → v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Blue-Green
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fase inicial

100% → BLUE v1
0%   → GREEN v2


Validação

100% → BLUE v1
GREEN v2 → Preview/Test


Promoção

0%   → BLUE v1
100% → GREEN v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  14. Quando utilizar Rolling Update?
&lt;/h1&gt;

&lt;p&gt;O Rolling Update é uma excelente escolha quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A aplicação possui múltiplas réplicas;&lt;/li&gt;
&lt;li&gt;Existe uma boa estratégia de readiness probes;&lt;/li&gt;
&lt;li&gt;As versões podem coexistir;&lt;/li&gt;
&lt;li&gt;Não existe necessidade de controle preciso do tráfego;&lt;/li&gt;
&lt;li&gt;O sistema possui risco moderado;&lt;/li&gt;
&lt;li&gt;A equipe deseja simplicidade operacional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API interna
5 réplicas
Baixo risco
Boa cobertura de testes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma configuração como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;RollingUpdate&lt;/span&gt;
  &lt;span class="na"&gt;rollingUpdate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;maxSurge&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
    &lt;span class="na"&gt;maxUnavailable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;pode ser suficiente.&lt;/p&gt;

&lt;p&gt;O Kubernetes também permite acompanhar o andamento do rollout e detectar falta de progresso através de &lt;code&gt;progressDeadlineSeconds&lt;/code&gt;; a documentação indica que o padrão é 600 segundos.&lt;/p&gt;

&lt;h1&gt;
  
  
  15. Quando utilizar Canary Deployment?
&lt;/h1&gt;

&lt;p&gt;O Canary é recomendado quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A aplicação possui grande volume de usuários;&lt;/li&gt;
&lt;li&gt;Uma falha pode causar grande impacto;&lt;/li&gt;
&lt;li&gt;Existem métricas confiáveis;&lt;/li&gt;
&lt;li&gt;A equipe possui observabilidade madura;&lt;/li&gt;
&lt;li&gt;Existe necessidade de limitar o impacto de uma nova versão;&lt;/li&gt;
&lt;li&gt;O sistema permite múltiplas versões executando simultaneamente.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API de pagamentos
Milhões de requisições
SLA crítico
Prometheus + Grafana + Alerting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma estratégia possível:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1%
↓
5%
↓
10%
↓
25%
↓
50%
↓
100%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entre cada etapa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Analisar:
- Error rate
- p95
- p99
- CPU
- Memory
- Métricas de negócio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se algo falhar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Abortar
↓
Retornar tráfego para Stable
↓
Investigar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  16. Quando utilizar Blue-Green?
&lt;/h1&gt;

&lt;p&gt;O Blue-Green é recomendado quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;É necessário validar a aplicação inteira antes da promoção;&lt;/li&gt;
&lt;li&gt;A troca precisa ser rápida;&lt;/li&gt;
&lt;li&gt;O rollback precisa ser simples;&lt;/li&gt;
&lt;li&gt;A infraestrutura suporta temporariamente duas versões;&lt;/li&gt;
&lt;li&gt;Não é necessário fazer uma liberação progressiva por percentual.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sistema corporativo crítico
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fluxo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Produção → BLUE v1

Nova versão → GREEN v2

Testes → GREEN v2

Aprovação → troca Active Service

Produção → GREEN v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso ocorra uma falha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GREEN v2 → problema

↓

Retornar tráfego

↓

BLUE v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  17. O que é Progressive Delivery?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Progressive Delivery&lt;/strong&gt; é um conceito que evolui a ideia de Continuous Delivery.&lt;/p&gt;

&lt;p&gt;Em um pipeline tradicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Code
 ↓
Build
 ↓
Test
 ↓
Deploy
 ↓
Produção
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Progressive Delivery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Code
 ↓
Build
 ↓
Test
 ↓
Deploy
 ↓
Pequena exposição
 ↓
Análise de métricas
 ↓
Aumentar exposição
 ↓
Nova análise
 ↓
Produção completa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A diferença fundamental é que &lt;strong&gt;o deployment deixa de ser apenas uma ação técnica e passa a ser um processo controlado por feedback real do ambiente de produção&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O Argo Rollouts descreve Progressive Delivery justamente como uma liberação controlada e gradual, com exposição limitada da nova versão, observação contínua e promoção ou rollback com base na validação.&lt;/p&gt;

&lt;h1&gt;
  
  
  18. A importância da observabilidade
&lt;/h1&gt;

&lt;p&gt;Canary e Blue-Green ficam muito mais eficientes quando combinados com observabilidade.&lt;/p&gt;

&lt;p&gt;Uma arquitetura pode ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌───────────────┐
                    │   Kubernetes  │
                    └───────┬───────┘
                            │
                 ┌──────────┴──────────┐
                 │                     │
                 ▼                     ▼
           Stable v1              Canary v2
                 │                     │
                 └──────────┬──────────┘
                            │
                            ▼
                      Prometheus
                            │
                            ▼
                       Grafana
                            │
                            ▼
                    Argo Rollouts
                            │
                  ┌─────────┴─────────┐
                  │                   │
                Sucesso             Falha
                  │                   │
                  ▼                   ▼
              Promover             Rollback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Métricas importantes incluem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP 5xx
Latency p95
Latency p99
CPU
Memory
Restarts
OOMKilled
Saturation
Request rate
Business KPIs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A pergunta não deve ser apenas:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Os Pods estão rodando?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mas também:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A nova versão está funcionando melhor ou pelo menos dentro dos limites aceitáveis?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Um Pod pode estar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e ainda assim a aplicação pode estar apresentando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Latência alta
Erros de negócio
Falhas de integração
Timeouts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por isso, readiness probes são importantes, mas não substituem análise mais profunda de métricas. Essa é uma das diferenças importantes entre o Rolling Update tradicional e soluções de progressive delivery.&lt;/p&gt;

&lt;h1&gt;
  
  
  19. Readiness Probe e estratégias de deploy
&lt;/h1&gt;

&lt;p&gt;Independentemente da estratégia escolhida, a aplicação deve informar corretamente quando está pronta para receber tráfego.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;readinessProbe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;httpGet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/actuator/health/readiness&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;

  &lt;span class="na"&gt;initialDelaySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
  &lt;span class="na"&gt;periodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enquanto o Pod não estiver pronto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pod criado
   ↓
Aplicação iniciando
   ↓
Readiness = false
   ↓
Não recebe tráfego
   ↓
Aplicação pronta
   ↓
Readiness = true
   ↓
Pode receber tráfego
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é fundamental especialmente em Rolling Updates.&lt;/p&gt;

&lt;p&gt;Uma estratégia segura não depende apenas do controller de deployment. Ela depende também da qualidade da configuração da aplicação.&lt;/p&gt;

&lt;h1&gt;
  
  
  20. Exemplo de estratégia para diferentes níveis de criticidade
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Aplicação de baixo risco
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rolling Update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configuração:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;maxSurge: 1
maxUnavailable: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Aplicação de médio risco
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rolling Update
+
Readiness Probe
+
Liveness Probe
+
Observabilidade
+
Rollback automático ou manual via pipeline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Aplicação de alto risco
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Canary
+
Traffic Routing
+
Prometheus
+
Grafana
+
Alerting
+
Análise automática
+
Rollback automático
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Aplicação crítica com necessidade de reversão rápida
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Blue-Green
+
Preview Environment
+
Smoke Tests
+
Pre-Promotion Analysis
+
Post-Promotion Monitoring
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  21. Arquitetura recomendada para Progressive Delivery
&lt;/h1&gt;

&lt;p&gt;Uma arquitetura moderna pode utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
    │
    ▼
Git Repository
    │
    ▼
CI Pipeline
    │
    ├── Testes
    ├── Lint
    ├── Security Scan
    └── Build Docker Image
    │
    ▼
Container Registry
    │
    ▼
GitOps Repository
    │
    ▼
Argo CD
    │
    ▼
Kubernetes
    │
    ▼
Argo Rollouts
    │
    ├── Canary
    │       │
    │       ▼
    │   Traffic Routing
    │       │
    │       ▼
    │   Métricas
    │       │
    │       ▼
    │   Promote/Rollback
    │
    └── Blue-Green
            │
            ▼
      Preview + Active
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse modelo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CI&lt;/strong&gt; constrói e valida o software;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container Registry&lt;/strong&gt; armazena a imagem;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitOps&lt;/strong&gt; controla o estado desejado;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Argo CD&lt;/strong&gt; sincroniza o cluster;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Argo Rollouts&lt;/strong&gt; controla a estratégia de entrega;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus/Grafana&lt;/strong&gt; fornecem observabilidade.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  22. Conclusão
&lt;/h1&gt;

&lt;p&gt;Não existe uma única estratégia de deployment ideal para todas as aplicações.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Rolling Update&lt;/strong&gt; é simples, eficiente e faz parte do Kubernetes. É uma ótima escolha para aplicações que podem coexistir entre versões e não precisam de um controle detalhado sobre a distribuição do tráfego.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Blue-Green Deployment&lt;/strong&gt; é especialmente útil quando é necessário preparar e validar completamente uma nova versão antes de realizar uma troca rápida do tráfego. Sua principal vantagem é a simplicidade de promoção e a possibilidade de reversão rápida, embora normalmente exija mais recursos de infraestrutura.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Canary Deployment&lt;/strong&gt; oferece o maior nível de controle sobre a exposição da nova versão. Ele permite liberar a aplicação progressivamente para uma parcela dos usuários, analisar métricas reais e interromper o rollout antes que uma falha atinja toda a base de usuários.&lt;/p&gt;

&lt;p&gt;Podemos resumir as estratégias da seguinte maneira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Rolling Update
→ Simplicidade e eficiência
→ Atualização gradual de Pods
→ Estratégia nativa do Kubernetes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Blue-Green
→ Validação completa antes da promoção
→ Troca rápida entre versões
→ Excelente para rollback rápido
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Canary
→ Exposição gradual ao tráfego
→ Redução do blast radius
→ Métricas e análise progressiva
→ Ideal para ambientes críticos
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para ambientes modernos de produção, especialmente aplicações de alto impacto, a evolução natural é sair de um modelo baseado apenas em:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deploy → Torcer para funcionar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para um modelo de &lt;strong&gt;Progressive Delivery&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Deploy
   ↓
Expor parcialmente
   ↓
Medir
   ↓
Validar
   ↓
Promover
ou
Rollback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dessa forma, o Kubernetes deixa de ser apenas uma plataforma para executar containers e passa a fazer parte de uma estratégia completa de entrega segura, automatizada, observável e resiliente.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Karpenter Redefinindo o Autoscaling de Clusters Kubernetes com Provisionamento Just-in-Time</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Sat, 25 Apr 2026 18:51:37 +0000</pubDate>
      <link>https://dev.to/ikauedev/karpenter-redefinindo-o-autoscaling-de-clusters-kubernetes-com-provisionamento-just-in-time-744</link>
      <guid>https://dev.to/ikauedev/karpenter-redefinindo-o-autoscaling-de-clusters-kubernetes-com-provisionamento-just-in-time-744</guid>
      <description>&lt;p&gt;A escalabilidade de clusters Kubernetes evoluiu de modelos baseados em grupos estáticos para arquiteturas dinâmicas e orientadas a eventos. O Karpenter, um orquestrador de infraestrutura de código aberto desenvolvido pela AWS, lidera essa transformação ao eliminar a necessidade de gerenciar grupos de auto-escalonamento (ASGs) e focar diretamente nos requisitos de recursos de cada Pod pendente. Este artigo analisa a arquitetura técnica do Karpenter, sua comparação com o Cluster Autoscaler tradicional e as melhores práticas para operação em ambientes de produção.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Arquitetura e o Paradigma Just-in-Time&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Diferente do Cluster Autoscaler (CA), que atua ajustando o tamanho de grupos de nós pré-definidos, o Karpenter interage diretamente com as APIs de nuvem (como o Amazon EC2 Fleet) para lançar a instância exata necessária para um Pod.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Comparativo: Karpenter vs. Cluster Autoscaler&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;Cluster Autoscaler (CA)&lt;/th&gt;
&lt;th&gt;Karpenter&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mecanismo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ajusta capacidade de ASGs existentes.&lt;/td&gt;
&lt;td&gt;Provisiona nós individuais via API direta.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Loop de Decisão&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Baseado em varredura periódica (~10s).&lt;/td&gt;
&lt;td&gt;Baseado em eventos (reação imediata).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Latência&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Minutos (espera o ASG e o SO).&lt;/td&gt;
&lt;td&gt;Segundos (45-60s para entrar online).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexibilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limitada por tipos de instâncias fixas.&lt;/td&gt;
&lt;td&gt;Heterogênea (qualquer tipo EC2 compatível).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Enquanto o CA depende de simulações de agendamento para grupos idênticos, o Karpenter utiliza algoritmos de &lt;strong&gt;bin-packing&lt;/strong&gt; para consolidar múltiplos Pods em menos instâncias, ou em instâncias mais baratas, reduzindo a fragmentação de recursos no cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. A Evolução para v1: NodePools e EC2NodeClasses&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Com o lançamento da versão 1.0, o Karpenter consolidou suas APIs de "beta" para "estável", simplificando o modelo de configuração em torno do conceito de nós. As APIs antigas foram substituídas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provisioner&lt;/strong&gt; tornou-se &lt;strong&gt;NodePool&lt;/strong&gt;: Define a lógica de agendamento, como tipos de instâncias permitidos (x86 vs ARM), zonas de disponibilidade e políticas de interrupção.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWSNodeTemplate&lt;/strong&gt; tornou-se &lt;strong&gt;EC2NodeClass&lt;/strong&gt;: Foca em configurações específicas da AWS, como Subnets, Security Groups, AMIs e configurações de disco.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma mudança crítica na v1 foi a promoção do mecanismo de &lt;strong&gt;Drift&lt;/strong&gt; para estável. O Drift detecta automaticamente quando o estado real de um nó diverge da definição no NodePool ou EC2NodeClass (por exemplo, após uma atualização de AMI), disparando a substituição segura do nó.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Estratégias de Disrupção e Eficiência Operacional&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O Karpenter utiliza o "Disruption Controller" para manter o cluster saudável e financeiramente eficiente por meio de três métodos principais:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Consolidação:&lt;/strong&gt; O Karpenter busca continuamente caminhos para reduzir custos, identificando nós vazios ou subutilizados. Ele pode remover um nó totalmente vazio ou substituir um nó caro por uma variante mais barata se os Pods puderem ser reacomodados.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drift:&lt;/strong&gt; Garante que os nós sigam a especificação mais recente do código de infraestrutura, facilitando upgrades de sistema operacional e patches de segurança sem intervenção manual.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interrupção:&lt;/strong&gt; Monitora sinais de saúde e notificações de instâncias Spot (2 minutos de aviso), provisionando proativamente a capacidade de substituição antes que o nó seja removido.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. Otimização Econômica: O Poder das Instâncias Spot e Graviton&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A maior vantagem financeira do Karpenter reside na sua capacidade de gerenciar frotas mistas de instâncias de forma inteligente. Ele prioriza as compras de computação seguindo uma hierarquia de ROI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Capacity Reservations:&lt;/strong&gt; Utiliza capacidade já paga e reservada.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spot Instances:&lt;/strong&gt; Oferece economias de até 90% em comparação ao preço sob demanda.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-Demand:&lt;/strong&gt; Utilizada como fallback quando a capacidade Spot é escassa.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Exemplo de Impacto em Custos&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Considerando um cluster com 5 nós do tipo m5.large em operação contínua (30 dias):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cluster Autoscaler (On-Demand):&lt;/strong&gt; Aproximadamente $417,60/mês.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Karpenter (Spot Otimizado):&lt;/strong&gt; Aproximadamente $210,30/mês.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Economia Direta:&lt;/strong&gt; (Redução de ~50%).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Melhores Práticas para Produção&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para uma implementação de sucesso, a AWS recomenda as seguintes diretrizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Diversificação de Instâncias:&lt;/strong&gt; Use seletores amplos no NodePool para permitir que o Karpenter escolha entre diversas famílias de instâncias, aumentando a resiliência à falta de capacidade Spot em zonas específicas.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pod Disruption Budgets (PDBs):&lt;/strong&gt; Sempre configure PDBs para suas aplicações. O Karpenter respeita rigorosamente essas regras, garantindo que a disponibilidade do serviço não seja comprometida durante as ações de consolidação.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Node Groups:&lt;/strong&gt; Mantenha um pequeno grupo de nós gerenciados (Managed Node Groups) para cargas de trabalho críticas do sistema (como o próprio controlador do Karpenter e o CoreDNS), permitindo que o Karpenter gerencie o restante dos workloads de aplicação.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ajuste de Recursos (VPA):&lt;/strong&gt; O Karpenter é tão eficiente quanto os dados que recebe. Se os Pods superestimarem o uso de CPU/Memória, o Karpenter irá provisionar nós maiores que o necessário.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusão&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O Karpenter representa o estado da arte para o autoscaling em Kubernetes, transformando a infraestrutura de uma barreira estática em um recurso dinâmico e reativo. Ao adotar a versão 1.0 e seus novos conceitos de NodePools e Disruption Budgets, as organizações não apenas reduzem drasticamente sua latência de escalonamento, mas também alcançam um nível de eficiência financeira e operacional que os métodos tradicionais de Provisionamento de Grupos não conseguem igualar.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>containers</category>
      <category>karpenter</category>
      <category>cluster</category>
    </item>
    <item>
      <title>kubectl: o guia completo de comandos utilitários do Kubernetes</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Mon, 20 Apr 2026 00:51:16 +0000</pubDate>
      <link>https://dev.to/ikauedev/kubectl-o-guia-completo-de-comandos-utilitarios-do-kubernetes-12g6</link>
      <guid>https://dev.to/ikauedev/kubectl-o-guia-completo-de-comandos-utilitarios-do-kubernetes-12g6</guid>
      <description>&lt;h1&gt;
  
  
  kubectl: o guia completo de comandos utilitários do Kubernetes
&lt;/h1&gt;

&lt;p&gt;O &lt;code&gt;kubectl&lt;/code&gt; é a CLI oficial do Kubernetes — é através dele que você interage com qualquer cluster, seja local (kind, minikube) ou em produção (EKS, GKE, AKS). Dominar seus comandos é a diferença entre um operador que abre o dashboard e um que resolve problemas em segundos no terminal.&lt;/p&gt;

&lt;p&gt;Veja o mapa mental das principais categorias de comandos antes de mergulhar em cada uma:---&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Inspeção — entendendo o que está rodando
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl get&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;O comando mais usado do dia a dia. Lista recursos do cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Listar pods no namespace atual&lt;/span&gt;
kubectl get pods

&lt;span class="c"&gt;# Listar pods de todos os namespaces&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-A&lt;/span&gt;

&lt;span class="c"&gt;# Listar pods com mais detalhes (IP, nó, tempo)&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; wide

&lt;span class="c"&gt;# Listar em formato YAML (útil para exportar configurações)&lt;/span&gt;
kubectl get deployment minha-app &lt;span class="nt"&gt;-o&lt;/span&gt; yaml

&lt;span class="c"&gt;# Listar em formato JSON e filtrar com jq&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; json | jq &lt;span class="s1"&gt;'.items[].metadata.name'&lt;/span&gt;

&lt;span class="c"&gt;# Assistir mudanças em tempo real&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-w&lt;/span&gt;

&lt;span class="c"&gt;# Listar múltiplos recursos de uma vez&lt;/span&gt;
kubectl get pods,services,deployments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recursos comuns que você vai usar com &lt;code&gt;get&lt;/code&gt;: &lt;code&gt;pods&lt;/code&gt;, &lt;code&gt;services&lt;/code&gt; (ou &lt;code&gt;svc&lt;/code&gt;), &lt;code&gt;deployments&lt;/code&gt; (ou &lt;code&gt;deploy&lt;/code&gt;), &lt;code&gt;nodes&lt;/code&gt;, &lt;code&gt;namespaces&lt;/code&gt; (ou &lt;code&gt;ns&lt;/code&gt;), &lt;code&gt;configmaps&lt;/code&gt; (ou &lt;code&gt;cm&lt;/code&gt;), &lt;code&gt;secrets&lt;/code&gt;, &lt;code&gt;ingresses&lt;/code&gt;, &lt;code&gt;persistentvolumeclaims&lt;/code&gt; (ou &lt;code&gt;pvc&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl describe&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Mostra os detalhes completos de um recurso, incluindo eventos — essencial para diagnosticar problemas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Descrever um pod específico&lt;/span&gt;
kubectl describe pod meu-pod-abc123

&lt;span class="c"&gt;# Descrever todos os pods de um deployment&lt;/span&gt;
kubectl describe pods &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;minha-app

&lt;span class="c"&gt;# Descrever um nó&lt;/span&gt;
kubectl describe node worker-1

&lt;span class="c"&gt;# Descrever um service&lt;/span&gt;
kubectl describe svc meu-service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A seção &lt;code&gt;Events&lt;/code&gt; no final do &lt;code&gt;describe&lt;/code&gt; é onde ficam as mensagens de erro mais úteis — sempre role até lá quando um pod não sobe.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl logs&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ver logs de um pod&lt;/span&gt;
kubectl logs meu-pod

&lt;span class="c"&gt;# Seguir logs em tempo real (equivalente ao -f do tail)&lt;/span&gt;
kubectl logs &lt;span class="nt"&gt;-f&lt;/span&gt; meu-pod

&lt;span class="c"&gt;# Ver os últimos 100 logs&lt;/span&gt;
kubectl logs &lt;span class="nt"&gt;--tail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100 meu-pod

&lt;span class="c"&gt;# Logs de um container específico (pods multi-container)&lt;/span&gt;
kubectl logs meu-pod &lt;span class="nt"&gt;-c&lt;/span&gt; meu-container

&lt;span class="c"&gt;# Logs de um pod que já morreu (crashou)&lt;/span&gt;
kubectl logs meu-pod &lt;span class="nt"&gt;--previous&lt;/span&gt;

&lt;span class="c"&gt;# Logs dos últimos 30 minutos&lt;/span&gt;
kubectl logs meu-pod &lt;span class="nt"&gt;--since&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;30m

&lt;span class="c"&gt;# Logs de todos os pods de um deployment via label&lt;/span&gt;
kubectl logs &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;minha-app &lt;span class="nt"&gt;--all-containers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl top&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Mostra consumo de CPU e memória em tempo real. Requer o Metrics Server instalado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Consumo dos nós&lt;/span&gt;
kubectl top nodes

&lt;span class="c"&gt;# Consumo dos pods&lt;/span&gt;
kubectl top pods

&lt;span class="c"&gt;# Consumo dos pods de um namespace específico&lt;/span&gt;
kubectl top pods &lt;span class="nt"&gt;-n&lt;/span&gt; producao

&lt;span class="c"&gt;# Ordenar por consumo de CPU&lt;/span&gt;
kubectl top pods &lt;span class="nt"&gt;--sort-by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cpu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Criação e gerenciamento de recursos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl apply&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;A forma declarativa de criar ou atualizar recursos. É o comando que você deve usar em produção.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Aplicar um arquivo&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml

&lt;span class="c"&gt;# Aplicar todos os YAMLs de um diretório&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; ./k8s/

&lt;span class="c"&gt;# Aplicar de uma URL remota&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/.../manifest.yaml

&lt;span class="c"&gt;# Ver o que seria aplicado sem aplicar (dry-run)&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml &lt;span class="nt"&gt;--dry-run&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;client

&lt;span class="c"&gt;# Ver diff entre o que está no cluster e o que será aplicado&lt;/span&gt;
kubectl diff &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl create&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Forma imperativa, útil para criações rápidas e one-shot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Criar um namespace&lt;/span&gt;
kubectl create namespace staging

&lt;span class="c"&gt;# Criar um deployment rapidamente&lt;/span&gt;
kubectl create deployment nginx &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx:1.25

&lt;span class="c"&gt;# Criar um secret a partir de variáveis literais&lt;/span&gt;
kubectl create secret generic db-creds &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;s3cr3t

&lt;span class="c"&gt;# Criar secret a partir de arquivo .env&lt;/span&gt;
kubectl create secret generic app-env &lt;span class="nt"&gt;--from-env-file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;.env

&lt;span class="c"&gt;# Criar configmap a partir de arquivo&lt;/span&gt;
kubectl create configmap app-config &lt;span class="nt"&gt;--from-file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;config.yaml

&lt;span class="c"&gt;# Expor um deployment como service&lt;/span&gt;
kubectl expose deployment minha-app &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80 &lt;span class="nt"&gt;--target-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8080 &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ClusterIP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl delete&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Deletar por arquivo&lt;/span&gt;
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml

&lt;span class="c"&gt;# Deletar por tipo e nome&lt;/span&gt;
kubectl delete pod meu-pod

&lt;span class="c"&gt;# Deletar todos os pods de um namespace&lt;/span&gt;
kubectl delete pods &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; staging

&lt;span class="c"&gt;# Deletar por label&lt;/span&gt;
kubectl delete pods &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;minha-app

&lt;span class="c"&gt;# Forçar deleção imediata (cuidado em produção)&lt;/span&gt;
kubectl delete pod meu-pod &lt;span class="nt"&gt;--grace-period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nt"&gt;--force&lt;/span&gt;

&lt;span class="c"&gt;# Deletar namespace inteiro (e tudo dentro)&lt;/span&gt;
kubectl delete namespace staging
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl edit&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Abre o recurso no editor padrão (&lt;code&gt;$EDITOR&lt;/code&gt;) diretamente para edição ao vivo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl edit deployment minha-app
kubectl edit configmap app-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Útil para ajustes rápidos, mas evite em produção — prefira &lt;code&gt;apply&lt;/code&gt; com arquivos versionados no Git.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Execução e acesso a containers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl exec&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Executa comandos dentro de um container em execução.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Abrir shell interativo em um pod&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; meu-pod &lt;span class="nt"&gt;--&lt;/span&gt; /bin/bash

&lt;span class="c"&gt;# Abrir shell em um container específico (pod multi-container)&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; meu-pod &lt;span class="nt"&gt;-c&lt;/span&gt; sidecar &lt;span class="nt"&gt;--&lt;/span&gt; /bin/sh

&lt;span class="c"&gt;# Executar um comando sem shell interativo&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;meu-pod &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;env&lt;/span&gt;

&lt;span class="c"&gt;# Checar conectividade de dentro do pod&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; meu-pod &lt;span class="nt"&gt;--&lt;/span&gt; curl http://outro-service:8080/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl port-forward&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Redireciona uma porta local para uma porta dentro do cluster. Indispensável em desenvolvimento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Forward da porta local 8080 para a porta 80 do pod&lt;/span&gt;
kubectl port-forward pod/meu-pod 8080:80

&lt;span class="c"&gt;# Forward para um service&lt;/span&gt;
kubectl port-forward svc/meu-service 8080:80

&lt;span class="c"&gt;# Forward para um deployment (escolhe um pod automaticamente)&lt;/span&gt;
kubectl port-forward deployment/minha-app 8080:8080

&lt;span class="c"&gt;# Escutar em todos os endereços (não só localhost)&lt;/span&gt;
kubectl port-forward svc/meu-service 8080:80 &lt;span class="nt"&gt;--address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl run&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Cria um pod temporário — excelente para testes e diagnósticos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pod temporário interativo com curl disponível&lt;/span&gt;
kubectl run debug &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;curlimages/curl &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; sh

&lt;span class="c"&gt;# Pod temporário com busybox para troubleshooting de rede&lt;/span&gt;
kubectl run nettest &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; sh

&lt;span class="c"&gt;# Testar DNS de dentro do cluster&lt;/span&gt;
kubectl run dns-test &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; nslookup meu-service

&lt;span class="c"&gt;# Pod temporário que morre sozinho após o comando&lt;/span&gt;
kubectl run teste &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;alpine &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Never &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"funciona"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O flag &lt;code&gt;--rm&lt;/code&gt; garante que o pod seja deletado automaticamente ao terminar.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl cp&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Copia arquivos entre o host e um container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Copiar arquivo do pod para o host&lt;/span&gt;
kubectl &lt;span class="nb"&gt;cp &lt;/span&gt;meu-pod:/app/logs/app.log ./app.log

&lt;span class="c"&gt;# Copiar arquivo do host para o pod&lt;/span&gt;
kubectl &lt;span class="nb"&gt;cp&lt;/span&gt; ./config.yaml meu-pod:/app/config.yaml

&lt;span class="c"&gt;# Copiar de um container específico&lt;/span&gt;
kubectl &lt;span class="nb"&gt;cp &lt;/span&gt;meu-pod:/dados ./dados &lt;span class="nt"&gt;-c&lt;/span&gt; meu-container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Escalonamento e rollouts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl scale&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Escalar um deployment para 5 réplicas&lt;/span&gt;
kubectl scale deployment minha-app &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5

&lt;span class="c"&gt;# Escalar para zero (suspende a aplicação)&lt;/span&gt;
kubectl scale deployment minha-app &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0

&lt;span class="c"&gt;# Escalar múltiplos deployments de uma vez&lt;/span&gt;
kubectl scale deployment app-a app-b &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl rollout&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Gerencia o ciclo de vida de deployments — um dos comandos mais importantes para operação.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ver status de um rollout em andamento&lt;/span&gt;
kubectl rollout status deployment/minha-app

&lt;span class="c"&gt;# Ver histórico de versões&lt;/span&gt;
kubectl rollout &lt;span class="nb"&gt;history &lt;/span&gt;deployment/minha-app

&lt;span class="c"&gt;# Ver detalhes de uma revisão específica&lt;/span&gt;
kubectl rollout &lt;span class="nb"&gt;history &lt;/span&gt;deployment/minha-app &lt;span class="nt"&gt;--revision&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3

&lt;span class="c"&gt;# Fazer rollback para a versão anterior&lt;/span&gt;
kubectl rollout undo deployment/minha-app

&lt;span class="c"&gt;# Fazer rollback para uma revisão específica&lt;/span&gt;
kubectl rollout undo deployment/minha-app &lt;span class="nt"&gt;--to-revision&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2

&lt;span class="c"&gt;# Pausar um rollout em andamento&lt;/span&gt;
kubectl rollout pause deployment/minha-app

&lt;span class="c"&gt;# Retomar um rollout pausado&lt;/span&gt;
kubectl rollout resume deployment/minha-app

&lt;span class="c"&gt;# Forçar um novo rollout sem mudar nada (útil para reiniciar pods)&lt;/span&gt;
kubectl rollout restart deployment/minha-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;kubectl rollout restart&lt;/code&gt; é especialmente útil para forçar os pods a recarregarem ConfigMaps ou Secrets que foram atualizados.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl autoscale&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Cria um HorizontalPodAutoscaler (HPA) de forma imperativa.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Escalar entre 2 e 10 réplicas baseado em CPU&lt;/span&gt;
kubectl autoscale deployment minha-app &lt;span class="nt"&gt;--min&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nt"&gt;--max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10 &lt;span class="nt"&gt;--cpu-percent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;70
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Debug e diagnóstico avançado
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;kubectl debug&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Introduzido no Kubernetes 1.18, permite criar containers de debug efêmeros.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Adicionar container de debug a um pod em execução&lt;/span&gt;
kubectl debug &lt;span class="nt"&gt;-it&lt;/span&gt; meu-pod &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox &lt;span class="nt"&gt;--target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;meu-container

&lt;span class="c"&gt;# Criar cópia do pod com shell para debug&lt;/span&gt;
kubectl debug meu-pod &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--copy-to&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;meu-pod-debug &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ubuntu

&lt;span class="c"&gt;# Debug de um nó diretamente&lt;/span&gt;
kubectl debug node/worker-1 &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl events&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Lista eventos do cluster — muito mais rápido que &lt;code&gt;describe&lt;/code&gt; quando você quer ver tudo de uma vez.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ver todos os eventos do namespace atual&lt;/span&gt;
kubectl events

&lt;span class="c"&gt;# Ver eventos de um namespace específico&lt;/span&gt;
kubectl events &lt;span class="nt"&gt;-n&lt;/span&gt; producao

&lt;span class="c"&gt;# Ver eventos em ordem cronológica&lt;/span&gt;
kubectl events &lt;span class="nt"&gt;--sort-by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;lastTimestamp

&lt;span class="c"&gt;# Ver eventos de um recurso específico&lt;/span&gt;
kubectl events &lt;span class="nt"&gt;--for&lt;/span&gt; pod/meu-pod

&lt;span class="c"&gt;# Ver apenas eventos de Warning&lt;/span&gt;
kubectl events &lt;span class="nt"&gt;--types&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Warning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl diff&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Mostra exatamente o que mudaria antes de aplicar um manifest — fundamental em pipelines de CD.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl diff &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Contextos e namespaces
&lt;/h2&gt;

&lt;p&gt;Em ambientes reais você lida com múltiplos clusters e namespaces. Estes comandos evitam confusão e erros graves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gerenciando contextos
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ver o contexto atual&lt;/span&gt;
kubectl config current-context

&lt;span class="c"&gt;# Listar todos os contextos disponíveis&lt;/span&gt;
kubectl config get-contexts

&lt;span class="c"&gt;# Trocar de contexto (mudar de cluster)&lt;/span&gt;
kubectl config use-context producao

&lt;span class="c"&gt;# Renomear um contexto&lt;/span&gt;
kubectl config rename-context velho-nome novo-nome

&lt;span class="c"&gt;# Deletar um contexto&lt;/span&gt;
kubectl config delete-context contexto-antigo

&lt;span class="c"&gt;# Ver o kubeconfig completo&lt;/span&gt;
kubectl config view
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Trabalhando com namespaces
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Listar todos os namespaces&lt;/span&gt;
kubectl get namespaces

&lt;span class="c"&gt;# Executar comando em um namespace específico&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system

&lt;span class="c"&gt;# Mudar o namespace padrão do contexto atual&lt;/span&gt;
kubectl config set-context &lt;span class="nt"&gt;--current&lt;/span&gt; &lt;span class="nt"&gt;--namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;staging

&lt;span class="c"&gt;# Listar recursos em todos os namespaces&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;--all-namespaces&lt;/span&gt;
&lt;span class="c"&gt;# ou o shorthand:&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma dica de ouro: use a ferramenta &lt;code&gt;kubens&lt;/code&gt; (do pacote &lt;code&gt;kubectx&lt;/code&gt;) para trocar de namespace com um simples &lt;code&gt;kubens staging&lt;/code&gt;. Da mesma forma, &lt;code&gt;kubectx producao&lt;/code&gt; troca de cluster. São as duas ferramentas de produtividade mais recomendadas para quem usa kubectl no dia a dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Comandos de produtividade
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Labels e seletores
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Adicionar label a um pod&lt;/span&gt;
kubectl label pod meu-pod &lt;span class="nv"&gt;ambiente&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;producao

&lt;span class="c"&gt;# Remover label&lt;/span&gt;
kubectl label pod meu-pod ambiente-

&lt;span class="c"&gt;# Filtrar por label&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;minha-app,ambiente&lt;span class="o"&gt;=&lt;/span&gt;producao

&lt;span class="c"&gt;# Filtrar com operadores de conjunto&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="s1"&gt;'ambiente in (staging, dev)'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Anotações
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Adicionar anotação&lt;/span&gt;
kubectl annotate deployment minha-app &lt;span class="se"&gt;\&lt;/span&gt;
  kubernetes.io/change-cause&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Atualiza para v2.1.0"&lt;/span&gt;

&lt;span class="c"&gt;# Anotações ficam no histórico do rollout&lt;/span&gt;
kubectl rollout &lt;span class="nb"&gt;history &lt;/span&gt;deployment/minha-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;kubectl patch&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Atualiza um campo específico sem precisar editar o arquivo inteiro.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Atualizar a imagem de um container via patch JSON&lt;/span&gt;
kubectl patch deployment minha-app &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;'{"spec":{"template":{"spec":{"containers":[{"name":"app","image":"minha-app:v2"}]}}}}'&lt;/span&gt;

&lt;span class="c"&gt;# Patch com merge estratégico&lt;/span&gt;
kubectl patch deployment minha-app &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;merge &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;'{"spec":{"replicas":3}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output e formatação
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Colunas customizadas com jsonpath&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.items[*].metadata.name}'&lt;/span&gt;

&lt;span class="c"&gt;# Formato de tabela customizado&lt;/span&gt;
kubectl get pods &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-o&lt;/span&gt; custom-columns&lt;span class="o"&gt;=&lt;/span&gt;NOME:.metadata.name,STATUS:.status.phase,IP:.status.podIP

&lt;span class="c"&gt;# Exportar todos os deployments do namespace em YAML&lt;/span&gt;
kubectl get deployments &lt;span class="nt"&gt;-o&lt;/span&gt; yaml &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; backup-deployments.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Aliases úteis para o &lt;code&gt;.bashrc&lt;/code&gt; / &lt;code&gt;.zshrc&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl get'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl describe'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl logs'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl exec -it'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl config set-context --current --namespace'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kctx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl config use-context'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com &lt;code&gt;alias k='kubectl'&lt;/code&gt;, você pode usar simplesmente &lt;code&gt;k get pods&lt;/code&gt;, &lt;code&gt;k apply -f .&lt;/code&gt;, &lt;code&gt;k logs -f meu-pod&lt;/code&gt; e ganhar muito tempo no dia a dia.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Referência rápida dos recursos e seus atalhos
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recurso completo&lt;/th&gt;
&lt;th&gt;Abreviação&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pods&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;po&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;services&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;svc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deployments&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deploy&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;replicasets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;statefulsets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;daemonsets&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ds&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;configmaps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;namespaces&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ns&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nodes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;no&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;persistentvolumes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pv&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;persistentvolumeclaims&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pvc&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;horizontalpodautoscalers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hpa&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ingresses&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ing&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;serviceaccounts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sa&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Você pode ver todos os recursos disponíveis (incluindo CRDs instalados) com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl api-resources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. O comando que todo mundo esquece: &lt;code&gt;kubectl explain&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Documentação inline, sem precisar abrir o browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Explicar um recurso&lt;/span&gt;
kubectl explain pod

&lt;span class="c"&gt;# Explicar um campo específico&lt;/span&gt;
kubectl explain pod.spec.containers

&lt;span class="c"&gt;# Explicar de forma recursiva (mostra todos os campos)&lt;/span&gt;
kubectl explain pod.spec &lt;span class="nt"&gt;--recursive&lt;/span&gt;

&lt;span class="c"&gt;# Explicar para uma versão específica da API&lt;/span&gt;
kubectl explain deployment.spec.strategy &lt;span class="nt"&gt;--api-version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;apps/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>kubernetes</category>
      <category>containers</category>
      <category>rancher</category>
      <category>programming</category>
    </item>
    <item>
      <title>kind: o jeito mais rápido de ter um cluster Kubernetes sem gastar um centavo de cloud</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Mon, 20 Apr 2026 00:14:22 +0000</pubDate>
      <link>https://dev.to/ikauedev/kind-o-jeito-mais-rapido-de-ter-um-cluster-kubernetes-sem-gastar-um-centavo-de-cloud-2ffk</link>
      <guid>https://dev.to/ikauedev/kind-o-jeito-mais-rapido-de-ter-um-cluster-kubernetes-sem-gastar-um-centavo-de-cloud-2ffk</guid>
      <description>&lt;h2&gt;
  
  
  O que é o kind?
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;kind&lt;/strong&gt; (Kubernetes IN Docker) é uma ferramenta que permite executar clusters Kubernetes locais usando contêineres Docker como "nós" (nodes). Criado originalmente para testar o próprio Kubernetes, hoje é amplamente usado por desenvolvedores para desenvolvimento local, CI/CD e aprendizado.&lt;/p&gt;

&lt;p&gt;Antes de mergulhar nos detalhes, veja como a arquitetura funciona:---&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que usar o kind?
&lt;/h2&gt;

&lt;p&gt;Antes do kind existia o Minikube, que usa máquinas virtuais para simular um cluster. O kind trocou VMs por contêineres Docker, o que trouxe vantagens concretas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Velocidade&lt;/strong&gt;: um cluster sobe em cerca de 60 segundos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leveza&lt;/strong&gt;: sem overhead de VM, consome muito menos RAM e CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-nó&lt;/strong&gt;: é possível criar clusters com vários nodes no mesmo laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CI/CD nativo&lt;/strong&gt;: por rodar em Docker, funciona perfeitamente em pipelines como GitHub Actions, GitLab CI, Jenkins etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versão exata do Kubernetes&lt;/strong&gt;: você escolhe exatamente qual versão do K8s usar via image tag.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instalação
&lt;/h2&gt;

&lt;p&gt;O kind é um binário único, sem dependências além do Docker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;macOS (Homebrew)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;kind
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linux (binário direto)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-Lo&lt;/span&gt; ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x ./kind
&lt;span class="nb"&gt;sudo mv&lt;/span&gt; ./kind /usr/local/bin/kind
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows (Chocolatey)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;kind
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Go install&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;sigs.k8s.io/kind@v0.23.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você também precisará do &lt;code&gt;kubectl&lt;/code&gt; instalado separadamente para interagir com o cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uso básico
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Criar um cluster
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Cluster simples com nome padrão ("kind")&lt;/span&gt;
kind create cluster

&lt;span class="c"&gt;# Cluster com nome personalizado&lt;/span&gt;
kind create cluster &lt;span class="nt"&gt;--name&lt;/span&gt; meu-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando acima cria um cluster de nó único (control plane + worker no mesmo contêiner) e configura automaticamente o &lt;code&gt;~/.kube/config&lt;/code&gt; para que o &lt;code&gt;kubectl&lt;/code&gt; aponte para ele.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verificar o cluster
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl cluster-info &lt;span class="nt"&gt;--context&lt;/span&gt; kind-meu-cluster
kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Listar e deletar clusters
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kind get clusters
kind delete cluster &lt;span class="nt"&gt;--name&lt;/span&gt; meu-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configuração avançada com arquivo YAML
&lt;/h2&gt;

&lt;p&gt;O kind aceita um arquivo de configuração para personalizar o cluster. É aqui que a ferramenta fica realmente poderosa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cluster multi-nó
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# kind-config.yaml&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cluster&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind.x-k8s.io/v1alpha4&lt;/span&gt;
&lt;span class="na"&gt;nodes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kind create cluster &lt;span class="nt"&gt;--config&lt;/span&gt; kind-config.yaml &lt;span class="nt"&gt;--name&lt;/span&gt; meu-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso cria um control plane e três workers, cada um em seu próprio contêiner Docker.&lt;/p&gt;

&lt;h3&gt;
  
  
  Múltiplos control planes (alta disponibilidade)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cluster&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind.x-k8s.io/v1alpha4&lt;/span&gt;
&lt;span class="na"&gt;nodes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesta configuração, o kind provisiona automaticamente um load balancer HAProxy para distribuir o tráfego entre os control planes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escolhendo a versão do Kubernetes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cluster&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind.x-k8s.io/v1alpha4&lt;/span&gt;
&lt;span class="na"&gt;nodes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kindest/node:v1.29.2@sha256:...&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;worker&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kindest/node:v1.29.2@sha256:...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada versão do Kubernetes tem uma image tag correspondente em &lt;code&gt;kindest/node&lt;/code&gt;. Você encontra todas as versões disponíveis no repositório oficial do kind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Port mapping e acesso a serviços
&lt;/h2&gt;

&lt;p&gt;Um ponto frequente de confusão é como acessar aplicações rodando dentro do cluster. Como os nós são contêineres Docker, você precisa fazer port mapping explícito.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cluster&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind.x-k8s.io/v1alpha4&lt;/span&gt;
&lt;span class="na"&gt;nodes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
    &lt;span class="na"&gt;extraPortMappings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30080&lt;/span&gt;
        &lt;span class="na"&gt;hostPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
        &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30443&lt;/span&gt;
        &lt;span class="na"&gt;hostPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8443&lt;/span&gt;
        &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso, um Service do tipo &lt;code&gt;NodePort&lt;/code&gt; usando a porta 30080 ficará acessível em &lt;code&gt;localhost:8080&lt;/code&gt; na sua máquina.&lt;/p&gt;

&lt;h2&gt;
  
  
  Montagem de volumes locais
&lt;/h2&gt;

&lt;p&gt;Para montar diretórios do host dentro dos nós do kind:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cluster&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind.x-k8s.io/v1alpha4&lt;/span&gt;
&lt;span class="na"&gt;nodes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;control-plane&lt;/span&gt;
    &lt;span class="na"&gt;extraMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hostPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/home/user/dados&lt;/span&gt;
        &lt;span class="na"&gt;containerPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/mnt/dados&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso é útil para persistência de dados durante desenvolvimento, especialmente com PersistentVolumes baseados em &lt;code&gt;hostPath&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Carregando imagens Docker locais
&lt;/h2&gt;

&lt;p&gt;Esta é uma das funcionalidades mais úteis do kind. Em vez de publicar uma imagem em um registry, você a carrega diretamente no cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Buildar a imagem normalmente&lt;/span&gt;
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; minha-app:dev &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Carregar no cluster kind&lt;/span&gt;
kind load docker-image minha-app:dev &lt;span class="nt"&gt;--name&lt;/span&gt; meu-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois disso, nos seus manifests Kubernetes, defina &lt;code&gt;imagePullPolicy: Never&lt;/code&gt; ou &lt;code&gt;IfNotPresent&lt;/code&gt; para garantir que o Kubernetes use a imagem local e não tente fazer pull de um registry.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;minha-app&lt;/span&gt;
      &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;minha-app:dev&lt;/span&gt;
      &lt;span class="na"&gt;imagePullPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Never&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurações de rede
&lt;/h2&gt;

&lt;p&gt;O kind usa o CNI kindnet por padrão, mas você pode desabilitá-lo para instalar outro, como Calico ou Cilium:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Cluster&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind.x-k8s.io/v1alpha4&lt;/span&gt;
&lt;span class="na"&gt;networking&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;disableDefaultCNI&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;       &lt;span class="c1"&gt;# Desabilita o kindnet&lt;/span&gt;
  &lt;span class="na"&gt;podSubnet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.0.0/16"&lt;/span&gt;  &lt;span class="c1"&gt;# Subnet para os pods&lt;/span&gt;
  &lt;span class="na"&gt;serviceSubnet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10.96.0.0/12"&lt;/span&gt;
  &lt;span class="na"&gt;apiServerAddress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1"&lt;/span&gt;
  &lt;span class="na"&gt;apiServerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6443&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de criar o cluster sem CNI, você instala o de sua escolha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Exemplo com Calico&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://docs.projectcalico.org/manifests/calico.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Uso em pipelines de CI/CD
&lt;/h2&gt;

&lt;p&gt;O kind é especialmente popular em pipelines de CI porque o ambiente já tem Docker disponível. Exemplo para GitHub Actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/test.yml&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Testes de integração&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Instalar kind e kubectl&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64&lt;/span&gt;
          &lt;span class="s"&gt;chmod +x ./kind &amp;amp;&amp;amp; sudo mv ./kind /usr/local/bin/kind&lt;/span&gt;
          &lt;span class="s"&gt;curl -LO "https://dl.k8s.io/release/$(curl -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"&lt;/span&gt;
          &lt;span class="s"&gt;chmod +x kubectl &amp;amp;&amp;amp; sudo mv kubectl /usr/local/bin/&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Criar cluster&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind create cluster --name ci-cluster&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build e load da imagem&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker build -t minha-app:${{ github.sha }} .&lt;/span&gt;
          &lt;span class="s"&gt;kind load docker-image minha-app:${{ github.sha }} --name ci-cluster&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy e testes&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;kubectl apply -f k8s/&lt;/span&gt;
          &lt;span class="s"&gt;kubectl wait --for=condition=ready pod -l app=minha-app --timeout=120s&lt;/span&gt;
          &lt;span class="s"&gt;# Rodar testes de integração aqui&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deletar cluster&lt;/span&gt;
        &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always()&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;kind delete cluster --name ci-cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  kind vs outras soluções locais
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;kind&lt;/th&gt;
&lt;th&gt;Minikube&lt;/th&gt;
&lt;th&gt;k3d&lt;/th&gt;
&lt;th&gt;Docker Desktop K8s&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;td&gt;VM / Docker&lt;/td&gt;
&lt;td&gt;Docker (k3s)&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-nó&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;td&gt;Limitado&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;td&gt;Não&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Velocidade de criação&lt;/td&gt;
&lt;td&gt;~60s&lt;/td&gt;
&lt;td&gt;~2-5min&lt;/td&gt;
&lt;td&gt;~30s&lt;/td&gt;
&lt;td&gt;~1min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consumo de recursos&lt;/td&gt;
&lt;td&gt;Baixo&lt;/td&gt;
&lt;td&gt;Alto (VM)&lt;/td&gt;
&lt;td&gt;Muito baixo&lt;/td&gt;
&lt;td&gt;Médio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes upstream&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;td&gt;Não (k3s)&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ideal para CI/CD&lt;/td&gt;
&lt;td&gt;Excelente&lt;/td&gt;
&lt;td&gt;Ruim&lt;/td&gt;
&lt;td&gt;Muito bom&lt;/td&gt;
&lt;td&gt;Não recomendado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HA (multi-control-plane)&lt;/td&gt;
&lt;td&gt;Sim&lt;/td&gt;
&lt;td&gt;Não&lt;/td&gt;
&lt;td&gt;Não&lt;/td&gt;
&lt;td&gt;Não&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O &lt;strong&gt;k3d&lt;/strong&gt; é ligeiramente mais rápido por usar o k3s (Kubernetes simplificado), mas o kind usa Kubernetes puro (upstream), o que o torna mais fiel ao ambiente de produção — decisivo para testes confiáveis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comandos úteis de diagnóstico
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Ver logs de um nó específico&lt;/span&gt;
kind &lt;span class="nb"&gt;export &lt;/span&gt;logs &lt;span class="nt"&gt;--name&lt;/span&gt; meu-cluster /tmp/kind-logs

&lt;span class="c"&gt;# Entrar dentro de um nó (contêiner Docker)&lt;/span&gt;
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; meu-cluster-control-plane bash

&lt;span class="c"&gt;# Ver os contêineres Docker do cluster&lt;/span&gt;
docker ps &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="s2"&gt;"label=io.x-k8s.kind.cluster=meu-cluster"&lt;/span&gt;

&lt;span class="c"&gt;# Exportar o kubeconfig manualmente&lt;/span&gt;
kind get kubeconfig &lt;span class="nt"&gt;--name&lt;/span&gt; meu-cluster &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.kube/kind-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Limitações do kind
&lt;/h2&gt;

&lt;p&gt;O kind não substitui um cluster de produção e tem restrições importantes a considerar:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LoadBalancer não funciona nativamente.&lt;/strong&gt; Services do tipo &lt;code&gt;LoadBalancer&lt;/code&gt; ficam em estado &lt;code&gt;&amp;lt;pending&amp;gt;&lt;/code&gt; porque não há cloud provider. A solução é usar o &lt;strong&gt;MetalLB&lt;/strong&gt; ou o &lt;strong&gt;cloud-provider-kind&lt;/strong&gt; (projeto experimental da SIG Cloud Provider), ou simplesmente usar &lt;code&gt;NodePort&lt;/code&gt; com port mapping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistent Volumes têm limitações.&lt;/strong&gt; O armazenamento é baseado em &lt;code&gt;hostPath&lt;/code&gt; dentro do contêiner Docker, portanto os dados somem ao deletar o cluster. Para persistência real em dev, use &lt;code&gt;extraMounts&lt;/code&gt; ou um CSI driver compatível.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Não roda no Windows sem WSL2.&lt;/strong&gt; No Windows, o kind exige WSL2 com Docker rodando dentro do subsistema Linux. Docker Desktop resolve isso automaticamente, mas é bom estar ciente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance de I/O.&lt;/strong&gt; Por ser aninhado (contêiner dentro de Docker), operações de disco intensivas são mais lentas do que em um cluster real.&lt;/p&gt;

&lt;h2&gt;
  
  
  Casos de uso ideais
&lt;/h2&gt;

&lt;p&gt;O kind brilha em cenários bem definidos. É a escolha certa quando você precisa testar manifestos Kubernetes, Helm charts ou operators sem subir infraestrutura real. Em pipelines de CI, é imbatível pela velocidade e pelo isolamento — cada job cria seu próprio cluster do zero e o destrói ao final. Para aprender Kubernetes, o kind oferece clusters reais com todos os componentes upstream funcionando, sem o custo de cloud.&lt;/p&gt;

&lt;p&gt;O que ele não é: um substituto para staging ou produção, nem uma ferramenta de desenvolvimento de aplicações simples onde Docker Compose seria suficiente. Se a sua aplicação não precisa de funcionalidades específicas do Kubernetes, o kind é overhead desnecessário.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recursos oficiais
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Documentação: &lt;a href="https://kind.sigs.k8s.io" rel="noopener noreferrer"&gt;kind.sigs.k8s.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Repositório: &lt;a href="https://github.com/kubernetes-sigs/kind" rel="noopener noreferrer"&gt;github.com/kubernetes-sigs/kind&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Imagens disponíveis: &lt;a href="https://hub.docker.com/r/kindest/node/tags" rel="noopener noreferrer"&gt;hub.docker.com/r/kindest/node/tags&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>webdev</category>
      <category>programming</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Escalabilidade vertical X Escalabilidade horizontal</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Fri, 03 Apr 2026 21:50:35 +0000</pubDate>
      <link>https://dev.to/ikauedev/escalabilidade-vertical-x-escalabilidade-horizontal-42o6</link>
      <guid>https://dev.to/ikauedev/escalabilidade-vertical-x-escalabilidade-horizontal-42o6</guid>
      <description>&lt;p&gt;A escalabilidade em sistemas de computação moderna não é meramente uma métrica de desempenho, mas o alicerce sobre o qual a resiliência e a viabilidade comercial de qualquer plataforma digital são construídas. Em um ecossistema global onde o tráfego de usuários pode flutuar de centenas para milhões em intervalos de tempo imprevisíveis, a capacidade de uma infraestrutura de tecnologia da informação para expandir ou contrair seus recursos de forma eficiente define o sucesso ou o fracasso de uma operação. Tradicionalmente, o desafio da escalabilidade era resolvido através de ciclos de planejamento de hardware de longo prazo, muitas vezes resultando em superprovisionamento dispendioso ou subprovisionamento catastrófico. Com a maturidade da computação em nuvem e a introdução de paradigmas como microsserviços e arquiteturas sem estado (stateless), o debate entre escalonamento vertical e horizontal evoluiu de uma escolha binária para uma disciplina complexa de engenharia que exige uma compreensão profunda de latência, consistência de dados e economia de infraestrutura.&lt;/p&gt;

&lt;p&gt;A escalabilidade é a capacidade intrínseca de um sistema para gerenciar uma quantidade crescente de trabalho de forma fluida, adicionando recursos conforme a demanda. Este conceito manifesta-se em todos os níveis da pilha tecnológica, desde a potência de processamento bruto e alocação de memória até a capacidade de entrada e saída de bancos de dados e a largura de banda de rede. Quando um sistema é verdadeiramente escalável, ele mantém o desempenho e a experiência do usuário estáveis, independentemente da pressão de carga, evitando gargalos que poderiam levar à instabilidade ou interrupções totais do serviço.&lt;/p&gt;

&lt;h2&gt;
  
  
  O Paradigma do Escalonamento Vertical: Potencializando o Nó Individual
&lt;/h2&gt;

&lt;p&gt;O escalonamento vertical, tecnicamente referido como &lt;em&gt;scaling up&lt;/em&gt;, fundamenta-se na premissa de aumentar a capacidade de computação de um único servidor ou recurso de TI existente. Este processo envolve a atualização de componentes de hardware fundamentais, como a substituição de uma Unidade Central de Processamento (CPU) por uma versão com maior contagem de núcleos e frequência de clock, a expansão da Memória de Acesso Aleatório (RAM) ou a melhoria da velocidade das interfaces de rede e dispositivos de armazenamento, como a transição de unidades de disco rígido tradicionais para SSDs NVMe de alta performance.&lt;/p&gt;

&lt;p&gt;Em ambientes virtuais e de nuvem, o escalonamento vertical é frequentemente abstraído como a alteração do tipo de instância ou máquina virtual (VM). Por exemplo, a migração de uma instância t3.medium da Amazon Web Services (AWS) para uma t3.xlarge representa uma operação clássica de escalonamento vertical. A principal vantagem desta abordagem reside na sua simplicidade arquitetural. Como a aplicação continua a residir em um único sistema operacional ou contêiner, não há necessidade de reengenharia complexa para lidar com processamento distribuído ou protocolos de sincronização de rede. Isso torna o escalonamento vertical a escolha preferencial para aplicações legadas, monólitos e sistemas que dependem fortemente de estado local ou sessões mantidas em memória, onde a latência de comunicação entre servidores seria proibitiva.&lt;/p&gt;

&lt;p&gt;Entretanto, o escalonamento vertical enfrenta limitações físicas e operacionais significativas. Cada servidor possui um "teto de hardware" — um limite máximo definido pela placa-mãe e pelo chipset quanto à quantidade de RAM e ao número de soquetes de CPU que podem ser instalados. Uma vez atingido este limite, a única forma de continuar escalando verticalmente é através de uma migração completa da carga de trabalho para um novo sistema de camada superior, o que inevitavelmente introduz questões sobre o destino do equipamento antigo e a complexidade da migração de dados. Além disso, o escalonamento vertical cria um ponto único de falha (Single Point of Failure - SPOF). Se o hardware do servidor falhar, todo o sistema fica indisponível. O processo de atualização física ou redimensionamento de instâncias virtuais também requer frequentemente a reinicialização do sistema, resultando em períodos de inatividade que podem não ser toleráveis em ambientes que exigem disponibilidade de 24 horas por dia, 7 dias por semana.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Característica&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Detalhamento Técnico do Escalonamento Vertical&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Definição Principal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adição de recursos (CPU, RAM, Armazenamento) a um único nó.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complexidade de Implementação&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Baixa; exige pouca ou nenhuma alteração no código da aplicação.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risco de Disponibilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alto; representa um ponto único de falha.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Limitações Físicas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Restrito pela capacidade máxima de hardware do servidor.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tempo de Inatividade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Geralmente necessário para atualizações de hardware ou reinicialização de VM.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custo Inicial&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Frequentemente mais baixo para pequenos incrementos de performance.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  O Paradigma do Escalonamento Horizontal: A Força da Distribuição
&lt;/h2&gt;

&lt;p&gt;O escalonamento horizontal, ou &lt;em&gt;scaling out&lt;/em&gt;, opera sob uma filosofia radicalmente diferente: em vez de tornar um único servidor mais potente, adicionam-se mais servidores (nós) ao pool de recursos, distribuindo a carga de trabalho de forma lateral. Esta abordagem é o alicerce fundamental para sistemas modernos de hiperescala, como os utilizados por gigantes de tecnologia para gerenciar bilhões de requisições diárias. O escalonamento horizontal remove efetivamente o teto de crescimento da infraestrutura, permitindo uma expansão teoricamente ilimitada em ambientes de nuvem elástica.&lt;/p&gt;

&lt;p&gt;A resiliência é um dos maiores trunfos do escalonamento horizontal. Em um cluster de dez servidores, a falha de um nó individual reduz a capacidade total do sistema em apenas 10%, enquanto os nove nós restantes continuam a processar o tráfego sem interrupção para o usuário final. Esta redundância inerente permite atualizações em estilo "rolling update", onde cada servidor é atualizado sequencialmente sem nunca comprometer a disponibilidade global do serviço. Do ponto de vista econômico, o escalonamento horizontal permite o uso de hardware comum de baixo custo (&lt;em&gt;commodity hardware&lt;/em&gt;), que pode ser mais rentável do que investir em servidores de ponta extremamente caros, cujos custos de aquisição tendem a crescer exponencialmente em relação aos ganhos de performance.&lt;/p&gt;

&lt;p&gt;Contudo, a transição para uma arquitetura escalável horizontalmente exige uma maturidade de design significativa. A aplicação deve ser capaz de operar em um ambiente distribuído, o que significa que o estado da aplicação e as sessões de usuário não podem residir localmente em um único servidor. O gerenciamento de estado deve ser externalizado para sistemas de cache distribuídos, como Redis ou Memcached, ou bancos de dados replicados. Além disso, o escalonamento horizontal introduz complexidade na comunicação entre processos e na consistência de dados. Garantir que todos os nós vejam a mesma versão da verdade em tempo real exige protocolos de consenso e redes de alta velocidade, além de uma infraestrutura robusta de balanceamento de carga para orquestrar o fluxo de tráfego.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Aspecto&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Implicações do Escalonamento Horizontal&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Metodologia&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Adição de novos nós para distribuir a carga de trabalho.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Escalabilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Quase ilimitada; permite expansão contínua em nuvem.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resiliência&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alta; falhas de nós individuais não causam queda total do sistema.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exigência de Código&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alta; requer aplicações sem estado (stateless) e design distribuído.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complexidade Operacional&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alta; exige balanceadores de carga e orquestradores como Kubernetes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Eficiência de Custo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alta a longo prazo; permite "pagar conforme o uso" e redução em horários ociosos.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Componentes Críticos da Infraestrutura Escalável
&lt;/h2&gt;

&lt;p&gt;Para viabilizar o escalonamento horizontal, a infraestrutura deve incorporar componentes que abstraiam a complexidade da rede e garantam a distribuição equitativa de recursos. O mais fundamental desses componentes é o balanceador de carga (&lt;em&gt;load balancer&lt;/em&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  O Papel dos Balanceadores de Carga
&lt;/h3&gt;

&lt;p&gt;O balanceador de carga atua como um gatekeeper inteligente, recebendo todo o tráfego de entrada e roteando-o para o servidor mais adequado dentro do cluster. Sua função vai além do simples redirecionamento; ele monitora continuamente a "saúde" de cada servidor através de verificações (health checks). Se um servidor deixar de responder ou apresentar erros acima de um limite definido, o balanceador de carga o remove automaticamente do pool de tráfego ativo até que ele seja reparado ou substituído.&lt;/p&gt;

&lt;p&gt;Os balanceadores de carga modernos operam principalmente em duas camadas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Camada 4 (Transporte):&lt;/strong&gt; Baseia-se em informações de protocolo de baixo nível, como endereços IP e portas TCP/UDP. É extremamente eficiente e de baixa latência, pois não precisa descriptografar ou inspecionar o conteúdo da mensagem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Camada 7 (Aplicação):&lt;/strong&gt; Opera no nível do protocolo HTTP/HTTPS, permitindo decisões de roteamento baseadas em cookies, headers, URLs ou caminhos específicos (por exemplo, enviar requisições de &lt;code&gt;/api&lt;/code&gt; para um cluster de servidores de alto desempenho e &lt;code&gt;/static&lt;/code&gt; para um armazenamento de baixo custo).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Além do roteamento, o balanceador de carga desempenha papéis cruciais como a terminação SSL, retirando o fardo pesado de criptografia e descriptografia dos servidores de aplicação, e a persistência de sessão (sticky sessions), garantindo que um usuário permaneça conectado ao mesmo servidor durante sua jornada, se a aplicação assim exigir.&lt;/p&gt;

&lt;h3&gt;
  
  
  Algoritmos de Distribuição de Tráfego
&lt;/h3&gt;

&lt;p&gt;A escolha do algoritmo de balanceamento impacta diretamente a eficiência do escalonamento horizontal. Algoritmos como o &lt;em&gt;Round Robin&lt;/em&gt; distribuem as requisições de forma sequencial, o que é eficaz para servidores de capacidade idêntica. O algoritmo &lt;em&gt;Least Connections&lt;/em&gt; é mais dinâmico, enviando o tráfego para o servidor com o menor número de conexões ativas, sendo ideal para aplicações onde o tempo de processamento de cada requisição varia significativamente. Em cenários onde os servidores possuem potências diferentes, o &lt;em&gt;Weighted Round Robin&lt;/em&gt; permite atribuir pesos para que máquinas mais potentes recebam uma fatia proporcionalmente maior do tráfego.&lt;/p&gt;

&lt;p&gt;A capacidade teórica de um cluster horizontalmente escalado com $n$ nós operando sob um balanceador de carga pode ser aproximada pela fórmula de rendimento total $T$:&lt;/p&gt;

&lt;p&gt;$$T = \sum_{i=1}^{n} (C_i \times \eta_i)$$&lt;/p&gt;

&lt;p&gt;Onde $C_i$ representa a capacidade bruta do nó $i$ e $\eta_i$ representa a eficiência de utilização, que pode ser afetada pela sobrecarga de coordenação do balanceador e latência de rede. Em arquiteturas otimizadas, $\eta$ tende a 1, permitindo um crescimento linear de performance com a adição de novos nós.&lt;/p&gt;

&lt;h2&gt;
  
  
  Escalabilidade em Camadas de Persistência: O Desafio dos Dados
&lt;/h2&gt;

&lt;p&gt;Enquanto os servidores de aplicação podem ser facilmente escalados horizontalmente por serem frequentemente sem estado, os bancos de dados representam o desafio mais complexo devido à necessidade de manter a integridade, consistência e persistência dos dados.&lt;/p&gt;

&lt;h3&gt;
  
  
  Escalabilidade Vertical de Bancos de Dados
&lt;/h3&gt;

&lt;p&gt;O método mais direto para escalar um sistema de gerenciamento de banco de dados (SGBD) é o escalonamento vertical. Aumentar a RAM permite que o banco de dados mantenha uma porção maior do conjunto de dados em cache, reduzindo drasticamente a necessidade de operações lentas de leitura em disco. Processadores mais rápidos aceleram a execução de consultas complexas e junções (joins). No entanto, bancos de dados monolíticos atingem rapidamente o limite de custo-benefício, onde o custo para dobrar a potência do servidor pode ser proibitivo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estratégias de Escalonamento Horizontal: Sharding e Replicação
&lt;/h3&gt;

&lt;p&gt;Para superar as limitações de um único nó, as arquiteturas de dados utilizam duas técnicas principais:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Replicação de Leitura (Read Replicas):&lt;/strong&gt; Envolve a criação de uma cópia mestre do banco de dados para todas as operações de escrita (INSERT, UPDATE, DELETE) e múltiplas cópias secundárias sincronizadas para operações de leitura (SELECT). Esta estratégia é altamente eficaz para aplicações "read-heavy", como redes sociais ou sites de notícias, mas não resolve o gargalo de escrita nem aumenta a capacidade total de armazenamento único, já que cada replica deve conter o conjunto completo de dados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fragmentação (Sharding):&lt;/strong&gt; É o processo de dividir um grande banco de dados em pedaços menores e independentes chamados shards, que são distribuídos por vários servidores. Ao contrário da replicação, o sharding permite distribuir tanto as leituras quanto as escritas e o armazenamento total. A eficácia do sharding depende da escolha da &lt;em&gt;shard key&lt;/em&gt; (chave de fragmentação). Uma chave baseada em intervalos (por exemplo, IDs de usuário de 1 a 1.000.000 no Nó A e de 1.000.001 a 2.000.000 no Nó B) é simples, mas pode criar "hotspots" se um intervalo for muito mais ativo que os outros. Já o sharding baseado em hash aplica uma função matemática à chave para distribuir os dados de forma uniforme e pseudo-aleatória, equilibrando a carga, mas dificultando consultas de intervalo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Técnica de Dados&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Objetivo Principal&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Limitação Técnica&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vertical Scaling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Aumentar performance bruta de queries individuais.&lt;/td&gt;
&lt;td&gt;Limite físico de hardware e custo exponencial.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replicação&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Escalar volume de leitura e alta disponibilidade.&lt;/td&gt;
&lt;td&gt;Não escala volume de escrita nem tamanho do dataset.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sharding&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Escalar volume de escrita e capacidade de armazenamento.&lt;/td&gt;
&lt;td&gt;Complexidade na gestão de consistência e roteamento.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  O Caminho do Meio: Escalonamento Diagonal e Híbrido
&lt;/h2&gt;

&lt;p&gt;O escalonamento diagonal representa uma abordagem pragmática e sofisticada que combina as vantagens do escalonamento vertical e horizontal. Em vez de escolher uma única filosofia, o sistema começa escalando verticalmente um servidor existente até que ele atinja um ponto ideal de eficiência ou um limite de custo predefinido. Quando este patamar é alcançado, a infraestrutura inicia o escalonamento horizontal, adicionando novos nós que também podem ser configurados com alta potência.&lt;/p&gt;

&lt;p&gt;Esta estratégia híbrida é particularmente valiosa para empresas em crescimento acelerado. Ela permite adiar a complexidade do gerenciamento de centenas de instâncias pequenas (que podem sofrer com latência de rede entre nós) ao utilizar máquinas robustas que são replicadas apenas quando necessário. A escala diagonal também aborda workloads heterogêneos: uma aplicação pode ter instâncias de aplicação menores e mais numerosas (escala horizontal) enquanto mantém um banco de dados central poderoso e atualizado (escala vertical).&lt;/p&gt;

&lt;p&gt;A agilidade da escala diagonal em ambientes modernos de nuvem é potencializada por tecnologias de contêineres e orquestração. O Kubernetes, por exemplo, pode gerenciar o redimensionamento de pods individuais (VPA - Vertical Pod Autoscaler) e o aumento do número de réplicas (HPA - Horizontal Pod Autoscaler) de forma simultânea e coordenada, garantindo que os recursos computacionais sejam otimizados tanto em "altura" quanto em "largura".&lt;/p&gt;

&lt;h2&gt;
  
  
  Paisagem Tecnológica de 2026: Provedores e Tendências
&lt;/h2&gt;

&lt;p&gt;Em 2026, a distinção entre escalonamento vertical e horizontal tornou-se cada vez mais fluida devido às ofertas de serviços gerenciados e serverless dos grandes provedores de nuvem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Inovações em AWS, Azure e Google Cloud
&lt;/h3&gt;

&lt;p&gt;Na &lt;strong&gt;Amazon Web Services&lt;/strong&gt;, o foco está na maturidade e na largura do catálogo. O serviço &lt;em&gt;Amazon EC2 Auto Scaling&lt;/em&gt; agora suporta políticas de escalonamento preditivo que utilizam aprendizado de máquina para analisar padrões históricos de tráfego e provisionar capacidade antes mesmo que a demanda ocorra. Para bancos de dados, o &lt;em&gt;Amazon Aurora Serverless&lt;/em&gt; abstrai completamente a decisão de escala, ajustando a capacidade de computação em tempo real (em unidades de capacidade Aurora - ACUs) sem interrupção das conexões.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Microsoft Azure&lt;/strong&gt; consolidou sua liderança em integração corporativa e sistemas SQL inteligentes. O &lt;em&gt;Azure SQL Database Serverless&lt;/em&gt; é um marco de eficiência, oferecendo um recurso de "auto-pausa" que suspende o banco de dados durante períodos de inatividade, cobrando apenas pelo armazenamento e retomando automaticamente em milissegundos quando uma nova conexão chega. Esta funcionalidade pode reduzir custos em até 70% para ambientes de desenvolvimento ou cargas de trabalho intermitentes.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;Google Cloud Platform (GCP)&lt;/strong&gt; diferencia-se pela qualidade de sua rede global e inovações em inteligência artificial. O &lt;em&gt;GCP Managed Instance Groups (MIGs)&lt;/em&gt; oferece o escalonamento preditivo mais avançado do mercado, integrado nativamente ao Vertex AI, permitindo que a infraestrutura se adapte a picos de tráfego baseados em eventos globais detectados por sinais de Big Data do próprio ecossistema Google. Além disso, o GCP oferece "Custom Machine Types", permitindo um escalonamento vertical granular onde o engenheiro pode especificar a contagem exata de vCPUs e memória, evitando o desperdício comum nos tamanhos "pré-definidos" de outros provedores.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Provedor&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Diferencial Competitivo em Escala (2026)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Recurso Chave&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Maior catálogo de serviços e maturidade de ecossistema.&lt;/td&gt;
&lt;td&gt;Amazon EC2 Auto Scaling Groups.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Melhor integração para licenciamento Microsoft e SQL serverless.&lt;/td&gt;
&lt;td&gt;Azure SQL Database Serverless.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Excelência em rede, Kubernetes (GKE) e IA preditiva.&lt;/td&gt;
&lt;td&gt;Managed Instance Groups com ML.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FinOps e a Economia da Escalabilidade
&lt;/h2&gt;

&lt;p&gt;A escalabilidade não é apenas um desafio de engenharia, mas uma disciplina financeira fundamental sob o conceito de &lt;strong&gt;FinOps&lt;/strong&gt;. A capacidade de escalar horizontalmente permite que as empresas transformem despesas de capital fixas (CapEx) em despesas operacionais variáveis (OpEx), pagando apenas pelo que consomem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Análise de Custo-Benefício: Vertical vs. Horizontal
&lt;/h3&gt;

&lt;p&gt;O escalonamento vertical tem um custo inicial menor e uma complexidade operacional reduzida para pequenos incrementos. No entanto, à medida que a carga aumenta, o custo de instâncias de alto desempenho na nuvem cresce de forma não linear. Por outro lado, o escalonamento horizontal, embora exija um investimento inicial maior em arquitetura e automação, oferece uma eficiência de custos superior em larga escala através do uso de "Spot Instances" (capacidade ociosa da nuvem com descontos de até 90%) e da capacidade de desligar recursos em horários de baixa demanda.&lt;/p&gt;

&lt;p&gt;A métrica de Custo por Unidade de Transação ($C_u$) pode ser calculada como:&lt;/p&gt;

&lt;p&gt;$$C_u = \frac{C_{fixo} + (C_{variável} \times t)}{T}$$&lt;/p&gt;

&lt;p&gt;Onde $T$ é o número total de transações processadas. Em sistemas verticalmente escalados, o $C_{fixo}$ do servidor potente é alto, tornando o $C_u$ elevado para volumes baixos. Em sistemas horizontais elásticos, o $C_{variável}$ se ajusta à carga, tendendo a otimizar o $C_u$ tanto em picos quanto em vales de demanda.&lt;/p&gt;

&lt;h2&gt;
  
  
  Melhores Práticas para Implementação de Infraestruturas Escaláveis
&lt;/h2&gt;

&lt;p&gt;Para que qualquer estratégia de escalonamento seja bem-sucedida, a arquitetura deve seguir princípios rigorosos que garantam a fluidez do tráfego e a integridade do estado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Arquitetura Sem Estado (Statelessness)
&lt;/h3&gt;

&lt;p&gt;A regra de ouro para o escalonamento horizontal é que os servidores de aplicação devem ser &lt;em&gt;stateless&lt;/em&gt;. Isso significa que nenhuma informação do usuário (como dados de login, carrinho de compras ou estado de workflow) deve ser armazenada localmente no disco ou na memória RAM de um servidor específico. Ao externalizar o estado para um banco de dados de alta velocidade ou cache distribuído, qualquer servidor no cluster pode processar qualquer requisição de qualquer usuário a qualquer momento, facilitando a adição ou remoção de nós sem afetar a experiência do usuário.&lt;/p&gt;

&lt;h3&gt;
  
  
  Idempotência e Resiliência
&lt;/h3&gt;

&lt;p&gt;Em sistemas distribuídos, falhas de rede são inevitáveis. Portanto, as operações devem ser projetadas para serem idempotentes — ou seja, realizar a mesma ação múltiplas vezes deve produzir o mesmo resultado que realizá-la uma única vez. Isso é crucial quando um balanceador de carga ou um cliente tenta reenviar uma requisição após um timeout. Além disso, o uso de filas de mensagens e padrões de "backpressure" garante que, se o sistema estiver operando próximo à sua capacidade máxima, as novas requisições sejam enfileiradas ou rejeitadas educadamente, em vez de causar um colapso em cascata em toda a infraestrutura.&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoramento e Observabilidade
&lt;/h3&gt;

&lt;p&gt;A escalabilidade automatizada depende de sinais precisos. A infraestrutura deve implementar monitoramento de "saúde" profundo, indo além da simples verificação de CPU e RAM para incluir métricas de latência de aplicação, taxas de erro e profundidade de filas. A observabilidade moderna em 2026 exige o uso de pipelines de telemetria inteligente que utilizam IA para distinguir entre ruídos temporários e picos de demanda reais, evitando o fenômeno de "flapping" — onde o sistema escala e desescala recursos freneticamente devido a limites de gatilho mal configurados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão: A Evolução da Escalabilidade como Vantagem Competitiva
&lt;/h2&gt;

&lt;p&gt;O debate entre escalonamento vertical e horizontal não é mais sobre qual técnica é superior, mas sobre como orquestrar ambas de forma estratégica para atingir os objetivos de negócio. O escalonamento vertical oferece a simplicidade necessária para validação rápida e sistemas legados, enquanto o escalonamento horizontal fornece a resiliência e a expansão ilimitada exigidas pelo mercado global. A emergência do escalonamento diagonal e das tecnologias serverless e preditivas representa a maturidade final da infraestrutura de TI, onde a capacidade de computação torna-se um recurso fluido, invisível e perfeitamente alinhado à demanda em tempo real.&lt;/p&gt;

&lt;p&gt;Para arquitetos e gestores de TI em 2026, o sucesso reside na construção de sistemas que assumam a falha como uma constante e a mudança como a única certeza. Ao projetar aplicações sem estado, implementar governança de custos através de FinOps e alavancar a inteligência preditiva dos provedores de nuvem, as organizações podem garantir que suas plataformas não apenas sobrevivam ao sucesso, mas prosperem nele, transformando a infraestrutura de um centro de custo em um motor dinâmico de inovação e crescimento.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>aws</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Devin AI O Primeiro Engenheiro de Software com IA</title>
      <dc:creator>Kauê Matos</dc:creator>
      <pubDate>Fri, 13 Mar 2026 00:25:00 +0000</pubDate>
      <link>https://dev.to/ikauedev/devin-ai-o-primeiro-engenheiro-de-software-com-ia-5335</link>
      <guid>https://dev.to/ikauedev/devin-ai-o-primeiro-engenheiro-de-software-com-ia-5335</guid>
      <description>&lt;h2&gt;
  
  
  O que é
&lt;/h2&gt;

&lt;p&gt;Devin AI é uma inteligência artificial desenvolvida pela empresa Cognition AI (também chamada de Cognition Labs). O software ganhou destaque no mundo corporativo ao ser adotado por grandes empresas como Nubank e Goldman Sachs como um "engenheiro de softwares" virtual, capaz de atuar de forma autônoma na resolução de problemas complexos de programação. TechTudo&lt;/p&gt;

&lt;h2&gt;
  
  
  Quem criou
&lt;/h2&gt;

&lt;p&gt;A Cognition Labs é uma startup composta por dez membros, incluindo o CEO Scott Wu e o CTO Steven Hao, com financiamento do fundo Founders Fund, de Peter Thiel. Vários dos membros participaram de competições de programação antes de fundar a empresa. O software foi desenvolvido combinando o treinamento de grandes modelos de linguagem com aspectos de aprendizado por reforço. Google Translate&lt;br&gt;
A equipe inclui medalhistas de olimpíadas internacionais de informática e profissionais com experiência em empresas como Google DeepMind, Waymo e Scale AI. Vidu AI&lt;/p&gt;

&lt;h2&gt;
  
  
  O que ele faz
&lt;/h2&gt;

&lt;p&gt;Devin é capaz de construir e implantar aplicativos de ponta a ponta, desde o código inicial até o deploy final. Ele também tem a capacidade de treinar e ajustar seus próprios modelos de IA, tornando-o independente e adaptável ao ambiente em que é empregado. DIO&lt;br&gt;
Equipado com um ambiente de desenvolvimento que inclui editor de código, shell para testes e navegador para acessar documentação, o Devin pode escrever e testar seu próprio código, além de explorar novas áreas de desenvolvimento de maneira independente. Sua capacidade de trabalhar em tempo real, respondendo a solicitações em linguagem natural, permite que se integre perfeitamente no fluxo de trabalho de uma equipe. Data Hackers&lt;/p&gt;

&lt;h2&gt;
  
  
  Desempenho e benchmarks
&lt;/h2&gt;

&lt;p&gt;Devin foi avaliado no SWE-bench, um benchmarking desafiador que pede aos agentes que resolvam problemas reais do GitHub encontrados em projetos de código aberto como Django e scikit-learn. O Devin conseguiu resolver corretamente 13,86% dos problemas de ponta a ponta, superando em muito as IAs anteriores que chegaram a apenas 1,96% de resolução. Faberhausplay&lt;/p&gt;

&lt;h2&gt;
  
  
  Versão 2.0 e preços
&lt;/h2&gt;

&lt;p&gt;Com o lançamento do Devin 2.0, a Cognition AI trouxe uma queda significativa nos preços. O custo passou a ser de apenas US$ 20 por mês, uma redução drástica em comparação com os US$ 500 anteriores. O modelo de cobrança é baseado em "Agent Compute Units" (ACU), onde cada unidade custa US$ 2,25, permitindo que os usuários paguem de acordo com os recursos computacionais realmente utilizados. Data Hackers&lt;br&gt;
Versões posteriores do Devin ganharam capacidade de operação multi-agente, onde um agente de IA delega tarefas a outros agentes de IA, além de avaliação de confiança, pedindo esclarecimentos quando não tem certeza suficiente para executar uma tarefa. Google Translate&lt;/p&gt;

&lt;h2&gt;
  
  
  Adoção corporativa
&lt;/h2&gt;

&lt;p&gt;O Goldman Sachs anunciou planos de incorporar o Devin à sua operação de tecnologia. Diferente de ferramentas de apoio como o Copilot, o Devin realiza o trabalho completo de um especialista, criando aplicativos do zero, construindo bancos de dados e realizando correções e testes automáticos — tudo sem intervenção humana. O CTO do Goldman, Marco Argenti, afirmou que centenas de Devins seriam inicialmente contratados, podendo chegar a milhares. NeoFeed&lt;/p&gt;

&lt;h2&gt;
  
  
  Recepção e impacto
&lt;/h2&gt;

&lt;p&gt;O CEO da Perplexity.ai, Aravind Srinivas, elogiou o Devin, afirmando que ele parecia ser "a primeira demonstração de qualquer agente que parece cruzar o limite da capacidade humana." Google Translate A ferramenta gerou tanto entusiasmo quanto debate sobre o futuro dos desenvolvedores humanos no mercado de trabalho.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
