Kubernetes: Montando Seu Próprio Cluster
A vida me presenteou com tempo livre, e estou determinado a aproveitá-lo ao máximo. Não vou fazer limonada, mas a ideia é a mesma: tirar o melhor proveito das oportunidades que tenho. Nesse período, decidi aprofundar meu conhecimento no Kubernetes, uma tecnologia que sempre me intrigou. E claro, a nuvem não ficou de fora dessa jornada. Testei o Kubernetes em diversos tipos de hardware, desde arquiteturas amd64 (Intel/AMD) até dispositivos Arm, como o Raspberry Pi. Descobri que ambos têm suas vantagens e desvantagens.
O Clouster com Raspberry Pi
Ao configurar um cluster com Raspberry Pi, ganhamos poder de processamento considerável, com vários Raspberry Pis atuando como nós (Workers/Nodes). Além disso, esse tipo de cluster consome pouca energia. No entanto, nem tudo são flores. Dispositivos como o Raspberry Pi deixam a desejar no acesso ao disco, independentemente do tipo. Além disso, a rede de armazenamento é crucial para clusters, e os Raspberry Pis têm apenas uma interface Gigabit, usada para todas as comunicações, desde armazenamento até bancos de dados e solicitações/respostas de APIs. Apesar dessas limitações, são excelentes para aprender sobre o funcionamento do Kubernetes ou para processar dados com baixa taxa de E/S e tráfego de rede. Mas, é importante mencionar que eles não chegam aos calcanhares de máquinas mais robustas, como as da família Ampere, que, infelizmente, ainda não cruzaram o meu caminho tecnológico.
Computadores com Processadores Intel/AMD
Em contrapartida, os computadores com processadores Intel/AMD e arquiteturas amd64 são ideais para a maioria dos clusters, incluindo GKE, AKS, AWS e outros players desse setor tecnológico. A capacidade de aumentar recursos, como E/S, rede e processamento, torna essas máquinas versáteis e escaláveis. Elas se encaixam perfeitamente no ecossistema Kubernetes.
A Origem do Kubernetes e sua Ubiquidade
O Kubernetes, carinhosamente chamado de K8s, nasceu no Google, como muitas outras tecnologias inovadoras. O Google o desenvolveu para correr seus próprios serviços, e, de forma colaborativa e aberta, tornou-se uma das ferramentas mais importantes para orquestração de containers em empresas de todos os tamanhos. Atualmente, é difícil encontrar uma empresa que ofereça serviços de nuvem e não execute Kubernetes em algum lugar de seus data centers.
Montando um Cluster Kubernetes Próprio
No entanto, este artigo tem um objetivo específico: iniciar uma série de artigos sobre a montagem de um Cluster Kubernetes local, utilizando máquinas desktops ou servidores, dependendo das necessidades de cada projeto.
Este projeto será focado nas aplicações, semelhante a um cluster no GKE, AKS, AWS, etc. Isso significa que as aplicações poderão alocar armazenamento, bancos de dados e dimensionar o cluster com réplicas conforme necessário. Além disso, o acesso externo ao cluster, através de vários domínios com certificados SSL, será um dos aspetos abordados.
Flexibilidade nos Requisitos de Hardware
No que diz respeito aos requisitos de hardware, incluindo máquinas/nós e dispositivos de rede, bem como o tipo e capacidade de armazenamento, deixaremos essas decisões nas mãos de cada um. Cada projeto é único, e os recursos, propriedades e necessidades variam. Se você planeia montar um cluster em casa, a arquitetura ARM Raspberry Pi ou semelhante pode ser a melhor escolha. No entanto, se sua empresa está focada no desenvolvimento de aplicativos para a nuvem, a criação de um cluster local pode economizar recursos significativos.
Facilidades do Ecossistema Kubernetes
Hoje, quem trabalha com essa tecnologia se beneficia de uma ampla gama de sistemas e abstrações. O software está bem desenvolvido, com uma infinidade de produtos gerais disponíveis. Por exemplo, o GitHub Actions e os Workflows são excelentes ferramentas para testes de software e para todo o ciclo de desenvolvimento CI/CD.
Ter um cluster que possa simular o ambiente de produção é excelente em termos de custo e praticabilidade. Processar, armazenar, transferir e utilizar recursos nas principais nuvens, como GKE, AKS, AWS, pode ser caro. No entanto, se não desejamos competir diretamente com essas grandes empresas, é necessário abrir mão de algumas das vantagens que elas oferecem.
Criando um Cluster de Teste
As grandes empresas de nuvem possuem data centers de alta qualidade, com redundâncias em todos os subsistemas, incluindo rede, armazenamento e hardware. Esses data centers são projetados para garantir o melhor desempenho e disponibilidade. No entanto, os artigos que pretendo escrever têm como objetivo principal possibilitar a execução de aplicativos de maneira semelhante à dos grandes players da nuvem.
Esse será um cluster de teste, e não recomendamos armazenar dados críticos nele. Os subsistemas não terão redundância, e falhas, como quedas de energia ou problemas de conectividade, podem ocorrer com mais frequência.
Componentes do Cluster
O sistema contará com um servidor MySQL como banco de dados, embora não esteja configurado em cluster, pois é apenas para fins de teste. Utilizaremos um armazenamento em NFS, sem redundância, e dois SSDs rápidos para acelerar as simulações e armazenar bases de dados do MySQL, bem como outros dados de teste. A rede terá NAT, sendo necessário direcionar as portas 80 e 443 para as aplicações web, além de outras portas, conforme necessário para diferentes protocolos.
Máquinas
- Servidor de Armazenamento NFS – Nome do Host: “kube-storage”. Este servidor será usado como nosso armazenamento no cluster.
- Nó Mestre (Master Node) – Nome do Host: “kube-master”. Essa máquina é o cérebro do cluster, permitindo o controle total e a execução de aplicativos.
- Nós de Trabalho (Worker Nodes) – Nomes dos Hosts: “kube-node1” e “kube-node2”. Essas máquinas são responsáveis por executar as tarefas e trabalhos no cluster. Você pode adicionar mais nós, conforme necessário, para testar aplicativos com várias réplicas e dimensionamento.
Explorando Possibilidades de Teste
Teremos um cluster de testes económico, ideal para diversos tipos de testes e experimentações. Claro, é possível adicionar outros sistemas de banco de dados e recursos à medida que seu projeto de desenvolvimento exigir. Empresas com recursos financeiros podem até implementar algumas redundâncias semelhantes às dos data centers, como UPS, armazenamento de alta qualidade, interfaces de rede velozes e switches confiáveis. O próximo artigo se concentrará no armazenamento NFS e descreverá os passos para transformar um Debian mínimo em um servidor NFS4 para o nosso futuro Cluster Kubernetes.
Requisitos
Para as máquinas que compõem o cluster, usaremos o sistema operacional Debian 12, com uma instalação mínima contendo apenas o SSH configurado. Essas máquinas podem ser virtuais, como as usadas no GKE ou AKS. No entanto, se você planeia usar as mesmas máquinas físicas para vários clusters, é essencial que as máquinas sejam virtuais, pois o Kubelet configura uma máquina específica para um cluster. Com máquinas virtuais, você pode adicionar várias delas em uma única máquina física, cada uma pertencendo a um cluster distinto.
Independente das necessidades e objetivos, escolhi o Debian com uma instalação mínima para evitar problemas e economizar espaço em disco.
Configuração da Rede
Para a rede das máquinas, usarei a faixa de endereços 192.168.16.0/24, simplificando a comunicação entre todas as máquinas do cluster, incluindo os nós mestre e de trabalho, o servidor de armazenamento e a Internet. Dentro do cluster, o Kubernetes cria várias redes da Classe A 10.X.X.X para a comunicação entre os PODs e outros sistemas internos do Kubernetes, permitindo a comunicações entre as diversas máquinas do cluster.