O estado de stateful v. stateless Kubernetes

Estou em um estado de descrença quando, em 2024, ouço com frequência operadores de plataformas afirmarem que o Kubernetes é apenas para cargas de trabalho stateless — ou que não exigem proteção de dados, como “todas as nossas aplicações são apátridas”. Neste artigo, vou oferecer um histórico sobre onde os estados existem em nossas aplicações, a ascensão do mito “Kubernetes = Stateless” e falar sobre as necessidades de proteção de dados em todos os ambientes Kubernetes.

Stateful vs. Stateless – O Básico

Stateless refere-se a uma carga de trabalho que não exige persistência de estado (stateful), o que significa que, ao reiniciar ou reimplantar a carga de trabalho, todos os dados coletados ou configurações alteradas são perdidos. Em contraste com as versões anteriores de máquinas virtuais (VMs) stateful, os contêineres são, por natureza, stateless. Ao reiniciar um contêiner, o usuário tem a certeza de que a carga de trabalho em execução é exatamente a mesma que foi definida na criação da imagem do contêiner.

Seguindo essa lógica, uma carga de trabalho stateful é aquela que mantém os dados de maneira que possam ser recuperados após reinicializações. Cargas de trabalho stateful comuns incluem bancos de dados como PostgreSQL, MySQL ou MongoDB.

Então, o que é um aplicativo stateless?

Normalmente, os aplicativos consistem em múltiplas cargas de trabalho. Até mesmo os aplicativos monolíticos baseados em VM costumam ser compostos por front-end, lógica de negócios e cargas de trabalho de banco de dados distintas. Os aplicativos baseados em microsserviços nativos da nuvem normalmente consistirão em muitas outras cargas de trabalho separadas, cada uma com sua função específica, com o objetivo de permitir que as organizações enviem novos recursos e serviços mais rápido do que nunca.

Isso implica que, na maioria das vezes, aplicativos completamente stateless não existem.

Seu aplicativo favorito de pedidos de comida, um aplicativo “a fazer” em seu telefone, um formulário que você preenche para marcar uma consulta médica – tudo isso seria efetivamente inútil se não houvesse algumas cargas de trabalho com estado responsáveis por persistir os dados críticos associados a cada um desses casos de uso.

Com o Kubernetes, é essencial entender onde os dados ou estado da sua aplicação residem: dentro ou fora do cluster.

Como chegamos aqui — Kubernetes = stateless?

Com o Docker se consolidando como a plataforma de contêineres líder no início e meio da década de 2010 para o empacotamento de software, era crucial ter uma solução capaz de orquestrar grupos de contêineres em larga escala para aproveitar ao máximo os benefícios operacionais da transição para microsserviços. E foi aí que o Kubernetes se destacou. Implantações declarativas, alta disponibilidade e escalabilidade automatizada foram vantagens importantes para cargas de trabalho stateless, que podiam ser interrompidas, reiniciadas e clonadas de maneira simples. Essas cargas de trabalho, que geralmente fornecem mais computação de front-end ou servidor de aplicativos, podem ser conectadas a serviços de dados em execução fora do cluster. A solução foi amplamente reconhecida como um sucesso. O Kubernetes foi, sem dúvida, desenvolvido para atender a cargas de trabalho stateless, não é mesmo?

No entanto, no Kubernetes v1.0, além de todos os recursos impressionantes voltados para cargas de trabalho stateless, também existiam os Persistent Volumes — uma funcionalidade nativa do Kubernetes que permite conectar storage persistente a pods efêmeros. Fica claro que o suporte a cargas de trabalho stateful foi uma preocupação desde o início, com várias melhorias importantes sendo implementadas ao longo do tempo:

Essas melhorias, combinadas com os esforços de muitos fornecedores e colaboradores de projetos diferentes, criaram um amplo ecossistema que dá aos usuários a liberdade de escolher quais serviços de dados fornecerão o estado de suas aplicações e onde essas cargas de trabalho serão executadas.

A ascensão do GitOps

Nesse período, a comunidade do Kubernetes viu surgir mais uma ideia para melhorar a orquestração de contêineres: o GitOps. O conceito é simples: Utilizar o controle de versão do código-fonte como a fonte da verdade, armazenando tudo o que é necessário para a implantação de uma aplicação, incluindo o código e os recursos do Kubernetes. Sempre que o código é mesclado no repositório para uma alteração, um controlador atualiza a implantação para refletir o estado desejado descrito no Git. As implementações de GitOps podem fornecer um mecanismo para controle de alterações, a capacidade de reimplantar um ambiente inteiro com um único clique e uma maneira de reverter alterações incorretas —  às vezes.

Só porque o Kubernetes pode executar cargas de trabalho stateful, isso significa que você deve fazer isso?

Com a tarefa de criar uma aplicação de prova de conceito, um desenvolvedor geralmente pode optar por um banco de dados gerenciado hospedado na nuvem, ou DBaaS, para hospedar seus dados persistentes fora do cluster Kubernetes. As soluções DBaaS oferecem APIs intuitivas para desenvolvedores e proporcionam um rápido retorno de valor para os usuários, independentemente de sua experiência em administração de banco de dados. No entanto, como muitas vezes é verdade, o que é mais fácil nem sempre é o melhor. Vamos analisar os motivos para considerar a execução de cargas de trabalho stateful tanto dentro quanto fora do cluster:

Consolidar cargas de trabalho stateless e stateful no Kubernetes pode proporcionar maior flexibilidade quanto aos ambientes em que as aplicações podem ser executadas. Ele também pode fornecer autosserviço adicional para DevOps, reduzir custos e simplificar ferramentas e processos. Isso possibilita a aplicação da metodologia GitOps a todos os componentes de um aplicativo. Não deve ser surpresa, então, de acordo com o relatório mais recente da Datadog sobre o uso de contêineres no mundo real, que os bancos de dados continuem a ser a categoria mais popular de cargas de trabalho em contêineres.

Mantendo seus dados do Kubernetes protegidos

Equipe stateful

Se você já está convencido de que as cargas de trabalho stateful no Kubernetes são o caminho a seguir, provavelmente já percebeu que oferecer backup e recuperação de desastres para essas aplicações exige uma ferramenta desenvolvida especialmente para essa finalidade. Cada aplicativo é formado por diversos recursos do Kubernetes (como ConfigMaps, Secrets, Deployments, etc.), além de dados armazenados em volumes persistentes. Além disso, todos esses recursos precisam ser devidamente descobertos, ter snapshots criados e ser exportados para um local seguro fora do cluster.

Apresentamos o Veeam Kasten for Kubernetes, uma solução nativa de proteção de dados e mobilidade de aplicativos para ambientes Kubernetes. A Kasten oferece às organizações uma forma simples, escalável e segura de criar backups imutáveis e recuperar aplicações completas de maneira rápida e confiável.

Como a Kasten fornece uma API declarativa nativa do Kubernetes para definir políticas, executar ações e mais, a proteção de dados pode ser totalmente integrada a qualquer implementação de GitOps. Isso é válido em uma ampla gama de casos de uso, desde a implantação e configuração do Kasten em um novo cluster até o aprimoramento do GitOps, automatizando os backups antes de realizar atualizações de código. O GitOps, por si só, oferece a capacidade de reverter alterações de configuração em um recurso do Kubernetes. No entanto, se uma dessas alterações afetar os dados em um volume persistente (como uma alteração incorreta de esquema ou a exclusão de uma tabela), será necessário ter um backup recente que possa ser restaurado rapidamente.

Equipe stateless

Ainda não está pronto para substituir seu DBaaS favorito por um novo e sofisticado banco de dados hospedado no Kubernetes e gerenciado por operador? A Kasten ainda está com você. Vamos ver por que a proteção de dados nativa para Kubernetes ainda é necessária:

Equipe de proteção de dados para Kubernetes

O Kubernetes evoluiu para aceitar todos os tipos de cargas de trabalho, desafiando a crença persistente de que ele seria adequado apenas para cargas de trabalho stateless. À medida que as organizações trabalham para extrair o máximo de valor de seus investimentos em nuvem nativa, uma mudança contínua em direção à execução de cargas de trabalho stateful é inevitável. Melhor desempenho e mobilidade, geranciamento simplificado de dados de cópia, persistência poliglota e economia de custos são benefícios que esperam ser realizados.

Seja executando cargas de trabalho stateful ou stateless, a proteção de dados continua sendo crucial. O Veeam Kasten for Kubernetes fornece uma solução nativa do Kubernetes para backup de aplicações e dados, recuperação de desastres, mobilidade de aplicações e proteção contra ransomware. Além disso, é possível aprimorar as metodologias de GitOps com a integração da proteção de dados às implantações de aplicativos. Em última análise, adotar cargas de trabalho stateful no Kubernetes não só desbloqueia oportunidades de receita, mas também traz mais flexibilidade, autosserviço, economia e operações simplificadas para as empresas.

Teste nossa solução Veeam Kasten Free ou nossa versão de avaliação Enterprise para começar hoje mesmo.

Exit mobile version