Escolar Documentos
Profissional Documentos
Cultura Documentos
Escalando as Nuvens
Softwares x Storages
- O mercado de storage sempre foi dominado por hardware desde a era do Raid,
até as super controladoras, que criavam discos e fitotecas, para armazenamento
massivo, mesmo com a adoção do raid via software havia além de uma perda
considerável de performance por uso de CPU, o mau aproveitamento de disco.
Uma mesma controladora poderia em alguns casos ter vários tipos de disco, mas esses
deveriam estar agrupados fisicamente em posições corretas e setados muitas vezes via
bios, sendo necessário desligar o equipamento para dar a manutenção adequada e
reconfigurar o novo disco na bios, em caso de falha.
Após algumas evoluções foram criados hardwares que identificavam o tipo de disco e era
necessário apenas adicionar ele aos blocos correspondentes.
SDS
Removendo uma mais uma fronteira
Com a criação dos Softwares Defined Storages, muita coisa começou a mudar
rapidamente em um mercado já considerado consolidado e sem muitas evoluções
drásticas, apesar dos discos estarem aumentando e evoluindo as controladoras
mantinham em sua essência a mesma logica padrão de manutenção de disco por
posição, mesmo sendo esses hot-swap.( que podem ser trocados sem desligar as
maquinas). O hot-swap havia sido a ultima grande invenção do mercado comecei a dar os
primeiros passos nessa área.
Objetos
A mudança de paradigma que mudou o jogo dos storages de vez
A grande mudança que tive contato veio ao jogo com os armazenamento em forma de
objetos, com isso a logica já estabelecida de grandes arvores de diretórios que eram
fortemente hierárquicos, gradualmente deixou de ser o padrão, para dar lugar a estruturas
mais livres de dados que podia estar em qualquer lugar.
Os object storages usam uma tecnologia que gera um identificador único pra cada parte
(objeto) a ser guardado em um dispositivo de armazenamento. Um software de leitura
consegue encontrar esse objeto usando seu identificador onde quer que eles esteja, por
mais que pareça muito mais complexo, e realmente é, a vantagem se dá nos grandes
volumes de dados. Enquanto um armazenamento comum, tem que vasculhar os dados
sempre partindo de um começo, um Object Storage sabe exatamente onde o dado está
além de garantir que aquele identificador é único, reduzindo a taxa de erros, hoje usamos
a mesma logica nos nossos computadores gerando uma camada a mais de indexação.
O Ceph nasceu de uma tese de doutorado de Sage Wail em 2004, após anos de
desenvolvimento ativo e crescimento da equipe o Ceph já despontava com uma grande
promessa de software sendo incorporado ao Kernel linux em 19 de março de 2010, mas a
primeira versão estável veio só 2 anos mais tarde em Julho de 2012, com codinome
Argonaut..
Mesmo com seu conceito revolucionário o ceph ainda tinha muita estrada a percorrer, a
instalação dos componentes eram todas manuais e exigiam praticamente a mesma
dedicação que o Dr. Wail tivera em seu inicio, as coisas ficaram um pouco mais amigáveis
em 2013 com o ceph-deploy, uma ferramenta que automatizava muitas partes da
instalação, colocando o ceph no jogo de vez, o ceph-deploy foi por muitos anos a
ferramenta padrão de instalação dos clusters baseados em ceph.
A virtualização é uma velha amiga dos nossos dias TI, estamos a tanto tempo rodeados
por ela que mal me lembro como era não ter esse recurso, servidores enormes podendo
ser vários mini servidores virtuais, ou mesmo nosso notebook de trabalho executando
sistemas operacionais diferentes ao mesmo tempo.
Como sempre no mundo do software livre, boas ideias e softwares se interligam e criam
algo maior, mais robusto e expandem seus níveis e recursos. Estava estudando
OpenStack, mais especificamente o Cinder quando vi que haveria em breve uma camada
de compatibilidade do Ceph, em pouco tempo vários virtualizadores como ProxmoX e
OpenNebula estavam implementando seus scripts de automação do Ceph, unindo no
mesmo hardware em que rodavam suas vms um poderoso storage de objetos, com
capacidades incrivelmente desejadas e nas pontas do mouse.
Com poucos cliques e configurações estávamos no céu dos virtualizadores, com baixo
custo, alta resiliência e capacidade expansão.
Esses pequenos fatos hoje já históricos, mudaram os formatos das empresas que tive o
privilegio de trabalhar.
O ceph não era mais um software experimental, havia estabilidade e recursos incríveis,
mas havia uma enorme curva de aprendizado que aqueles poucos cliques não traziam
nem nas letras miúdas e talvez se existissem essas letrinhas muitas noites teriam sido
economizadas, o que seira uma pena enorme, por que mesmo com todos os problemas
que tive por falta de conhecimento, o ceph sempre me deu mais alegria do que dor de
cabeça.
Dockerização
Um novo mundo
Junto com o docker e sua sopa de letrinhas vieram também as complexidades dos
containers, em pouco tempo ao invés de alguns servidores, passamos a dezenas de
contêineres e uma coisa chamada microsserviços, que desafiava ainda mais os storages
que tínhamos até ali.
O gerenciamento era a pior parte, como o ceph usa Posix, era comum sair montando
vários “containeres de dados” e cada um com um volume RBD em um path gerenciado
manualmente ou por scripts que desenvolvemos internamente.
Entendo que não era a melhor forma de fazer isso, mas estamos falando da época do
nascimento do docker, ele era um bebe, não fazia nada sozinho e dava muito mas muito
trabalho, mas tinha um grande futuro pela frente e o ceph estava ali pronto crescer junto
com ele.
A nuvem, e seus desafios
Quando falamos em nuvem, como estamos no backend a palavra que eu acho mais
indicada é escala: escalar serviços, servidores, rede, storage. Empilhar recursos cada vez
mais e mais para atender a uma demanda de conectividade sem fim, sem região
geográfica, sem limite de banda, sem hora pra dormir e com vários horários de pico.
Se por um lado a procura cresce de forma descontrolada do outro lado ficamos nós os
analistas surtando com os alertas e criando muitas vezes “na mão” os recursos pra suprir
essa demanda, esse cenário se repetia muitas vezes e mesmo com o ceph estando
razoavelmente implementado ainda demorava um pouco mais do que eu gostaria para
entregar um ambiente pronto a atender essa explosão de demanda chamada “pico de
acesso”. Junte as isso o recurso escasso que muitas micro empresas de TI tem e teremos
o caos perfeito.
Kubernetes
Deixando o docker mais resiliente e mais complexo também
Já vi acontecer e participei em vários casos, de produção usar uma VM com com disco
montado em um path especifico pro docker e o ceph por baixo servindo de storage do
virtualizador.
Sabemos que é bem rudimentar, varias camadas de virtualização desperdiçando recursos
valiosos piorando a performance porque não temos uma alternativa mais simples.
Eis que o mercado mais uma vez inova e me apresenta o Kubernetes uma tecnologia
muito mais assustadora de gestão e gerenciamento de containers, que honestamente eu
achei no começo que não iria vingar, devido a alta complexidade das soluções.
Mesmo achando meio doido aquilo, o kubernetes estava crescendo muito e rapido,
lembro dos primeiros artigos da RedHat que li sobre o tema, e como vários
orquestradores estavam se adaptando para a nova tendencia de gerenciamento.
Ao mesmo tempo o ceph estava cada vez mais avançado e haviam projetos ainda em
faze beta, que traziam o ceph pra esse mundo dos containers, era o inicio da jornada que
eu vivenciaria na parte de storage a cada lançamento dias e horas testando na tentativa e
falha, muitas e muitas falhas depois eu conheci o Rook.
Ceph e Kubernetes
Com o kubernetes consolidado alguns plugins foram lançados e um plugin para o ceph foi
um deles. Era um plugin bem manual, que me dava calafrios em cada montagem pois era
errar uma letra e lá se iam horas até achar o problema, fora o medo de apagar alguma
coisa por cansaço, das muitas horas trabalhadas em uma micro empresa de SP.
Rook
Casamento perfeito.
O rook inicialmente seria uma plataforma de automação para vários backends de storage
SDS, nessa época o próprio rook estava descobrindo como deveria seguir adiante.
Assim que o rook chegou em sua primeira versão estável a 0.9 passamos a usar ele de
forma oficial na empresa. O rook resolveu vários problemas, trazendo uma pegada de
virtualizador, para o mundo das super escalas do kubernetes, ainda usávamos uns
plugins não muito animadores mas agora haviam pods ( uma forma evoluida dos deploys
de containers) passamos a adicionar os volumes com algumas annotations do próprio
kubernetes, o rook fazia o trabalho preciso de um bom middleware, traduzindo parte das
chamadas do kubenetes para o ceph, tornando o processo mais amigavel e sem a
necessidade das velhas vms de produção.
Não demorou muito pra o rook passar usar a CSI, uma camada de storage nativa do
kubernetes, que também fala com o ceph.
Os deploys de ceph usando o rook se tonaram cada vez mais integrados a estrutura do
kubernertes e a medida que o ceph evoluía o rook ia adotando cada vez mais e mais o
ceph como seu backend principal.
Não é novidade que atualmente consegimos usar hardware simples, mas de boa
qualidade pra criar verdadeiras nuvens privadas com escalabilidade impressionante.
Tudo graças e essa dupla complexa de Kubernetes e Ceph que o rook junta e organiza
com carinho.