Vanilla All the Way. Vanilla Cloud Solution em K8s

Estamos publicando a tradução de um artigo sobre Vanilla Stack - uma nova tecnologia de código aberto baseada em nuvem baseada em Kubernetes.


Recentemente descobri o Vanilla Stack , que inclui muitos componentes de código aberto. Neste artigo, daremos uma olhada rápida no processo de instalação e mostraremos os diferentes casos de uso.







Vanilla Stack em resumo



Vanilla Stack pode ser definido como um cluster Kubernetes com muitos componentes de código aberto.



Entre eles:



  • Rook - gerencia o armazenamento distribuído (sistema de arquivos, bloco, objeto),
  • OpenStack - fornece infraestrutura como serviço (IaaS),
  • Cloud Foundry - fornece plataforma como serviço (PaaS).


O diagrama a seguir da documentação oficial ilustra a arquitetura global da pilha.



Observação: todas as soluções que vêm com Vanilla Stack (Rook, Cloud Foundry, OpenStack e outras ferramentas) funcionam como pods no cluster Kubernetes subjacente.



Como podemos ver no diagrama acima, os usuários podem:



  • execute aplicativos no cluster básico do Kubernetes por meio da criação de implantações, serviços, gráficos Helm etc.
  • use o Cloud Foundry para executar seu aplicativo a partir do código (com um código simples cf push



    );
  • use o OpenStack para criar novas infraestruturas (máquinas virtuais, rede definida por software, etc.).


Nota: Os requisitos de hardware dependem dos componentes que serão instalados na pilha.



O diagrama a seguir é mais detalhado, ele contém uma lista de todos os componentes, organizados por categoria, que podem vir com o Vanilla Stack:







Acho que este diagrama é bastante preciso. Alguns componentes são instalados por padrão, outros podem ser selecionados durante a instalação.



Neste artigo, vamos percorrer as principais etapas do processo de instalação. Para simplificar a tarefa, instalaremos o Vanilla Stack em seis máquinas virtuais preparadas pelo hoster: três atuarão como nós mestres do Kubernetes e o restante atuará como trabalhadores.



Nota:Os provedores de nuvem devem ser selecionados de acordo com os componentes que queremos instalar, pois alguns deles podem não atender aos requisitos de instalação. Por exemplo, para instalar o Rook, precisamos de um provedor de infraestrutura que forneça armazenamento em bloco.



Começamos a instalação



Existem duas maneiras de instalar o Vanilla Stack, elas são descritas na seção de download . Estaremos usando uma instalação do Docker que pode ser iniciada com o seguinte comando:



$ docker run \
  --name VanillaStack-installer -d \
  -p 8080:8080 \
  harbor.vanillastack.io/vanillastack/installer:latest

      
      





A interface da web do instalador pode ser acessada por meio da porta 8080. A instalação pode ser concluída em dez etapas fáceis, que discutiremos a seguir.



Requisitos









A primeira etapa, Iniciar , define os requisitos de hardware e software para as máquinas nas quais a pilha será instalada. Em nosso caso, usaremos seis máquinas virtuais. Cada um roda no Ubuntu 20.04 e tem 4 GB de RAM / 2 CPUs.



Conforme escrevemos anteriormente, três máquinas virtuais atuarão como os nós principais do Kubernetes e o restante estará funcionando.



# IP addresses of the master nodes
master1 - 159.65.92.123
master2 - 178.62.32.212
master3 - 178.62.40.225

# IP addresses of the worker nodes
worker1 - 178.62.41.87
worker2 - 178.62.27.97
worker3 - 178.62.67.29

      
      





Além disso, precisamos configurar um domínio (e alguns subdomínios) para acessar o cluster. Voltaremos a esta etapa mais tarde, ao configurar o balanceador de carga.



Termos e Condições



Aceitar os Termos é nossa segunda etapa. Certifique-se de ler as informações de licença especificadas.







Configurações Gerais



Em seguida, vem a etapa de Configurações Gerais . É necessário indicar o tipo de instalação que nos convém: a quantidade de nós mestre e de trabalho e a carga inicial.











Em nosso caso, escolheremos uma instalação HA com três nós mestres, os três nós restantes atuando como trabalhadores. A torre é selecionada por padrão para a instalação do repositório. Não estamos usando OpenStack ou Cloud Foundry aqui. Este poderia ser um tópico para outro artigo.



Acesso à máquina virtual por chave SSH



A seção Chave pública fornece uma chave pública RSA, que deve ser copiada para cada uma das máquinas virtuais. Esta etapa é necessária para permitir que a máquina de instalação (que está executando o instalador) execute os manuais do Ansible para configurar cada VM.



Nota: Ansible é um sistema de gerenciamento de configuração. Ele só executa comandos em máquinas por meio de uma conexão SSH. O Ansible não requer a instalação de um agente, ao contrário de análogos como Chef e Puppet .







As instruções para copiar a chave são indicadas no instalador:



  • salve a chave em um arquivo chamado key.pub



    .
  • copie a chave para o computador de destino usando ssh-copy-id



    :


ssh-copy-id -f -i key.pub <username>@<ip-address-of-node>
      
      





  • repita isso com todos os nós.


Para Windows, siga as instruções neste artigo , começando com Copiar chave SSH para dispositivo Linux remoto.



Definir informações do nó



No estágio Nodes , precisamos definir os endereços IP e o usuário de cada um dos nós mestre e de trabalho.









Também precisamos definir os nós que iniciarão os pods de torre. De acordo com os requisitos, usamos todos os três nós de trabalho.







Verificando a configuração do nó



Na etapa Node-Check , verificamos se todos os nós atendem aos requisitos.







Antes de clicar no botão Validar Nós, é importante rolar para baixo e certificar-se de que estamos seguindo as regras da Torre: um dispositivo de bloco bruto deve ser conectado a cada nó.







Usando o comando lsblk -f



, podemos verificar se tudo está configurado corretamente.







Ao clicar no botão Validar nós no instalador, podemos ter certeza de que todos os nós estão configurados corretamente.







Configurações de cluster



A primeira coisa a ser configurada na etapa Configurações do cluster é o CIDR do pod e o CIDR do serviço (ou seja, os intervalos de IP usados ​​para fornecer IPs do pod e IPs virtuais do serviço). Em nosso caso, usamos os valores padrão.







Além disso, precisamos criar um balanceador de carga para redirecionar o tráfego para o nó mestre ou de produção.



Devido à natureza do provedor de nuvem que você está usando, não é possível usar o mesmo balanceador de carga para redirecionar o tráfego para um conjunto diferente de nós.



Portanto, criaremos dois balanceadores de carga: na frente dos nós mestres

e na frente dos trabalhadores.



Balanceador de carga na frente dos nós mestres



O primeiro balanceador de carga é necessário para acessar o servidor API do cluster. Deve ser configurado assim:



  • redirecionar o tráfego TCP da porta 6443 para a mesma porta nos hosts mestres;
  • verifique regularmente a operação dos nós mestres enviando solicitações TCP para a porta 6443.




Nesse caso, o balanceador de carga obtém o endereço IP 159.65.211.35.



Balanceador de carga na frente dos nós de trabalho



O segundo balanceador de carga é necessário para fornecer acesso ao controlador de ingresso do cluster (o componente que dá acesso aos aplicativos no cluster). Suas configurações:



  • redirecionar o tráfego HTTP (porta 80) para a porta 30080 de nós de trabalho;
  • redirecionar o tráfego HTTPS (porta 443) para a porta 30443 dos nós de trabalho;
  • verifique regularmente a integridade dos nós de trabalho que enviam solicitações TCP na porta 30080.




Nesse caso, o balanceador de carga obtém o IP 46.101.64.165.



Configurando entradas DNS



O endereço IP do balanceador de carga deve ser associado ao nome de domínio do cluster. Em nosso artigo, usamos vanilla.techwhale.io



. Subdomínios adicionais são necessários para acessar o servidor API e os aplicativos expostos por meio do controlador de ingresso.







Neste estágio, podemos fornecer apenas o endereço IP de um balanceador de carga, mas nas próximas versões do instalador haverá mais opções.







Vamos criptografar a configuração



Let's Encrypt é uma autoridade de certificação gratuita amplamente usada. Ele nos permite receber e renovar automaticamente certificados HTTPS. O Kubernetes Let's Encrypt costuma ser usado por meio do Cert Manager , o componente padrão do Vanilla Stack. O Cert Manager pode obter um certificado do Let's Encrypt (bem como de várias outras fontes) e disponibilizá-lo para o aplicativo por meio do Kubernetes Secret.







Configuração da Torre



Os passos a seguir permitem que você selecione os componentes da Torre a serem instalados (neste caso, o painel de controle e monitoramento da Torre), bem como o número de repetições de um dado (nível de réplica).







Instalando ferramentas adicionais



Na seção Ferramentas Adicionais , você pode especificar quais componentes serão instalados no cluster.









As ferramentas listadas aqui são bastante comuns. Eles se enquadram em diferentes categorias:



  • monitoramento (Prometheus, Jeager);
  • registro (fluentd, Elasticsearch, Grafana);
  • registro de contêineres e repositório de gráficos do Helm (Harbor);
  • controlador de ingresso (nginx).




Esta é uma maneira conveniente de instalar todos os componentes de um local. Eles também podem ser instalados posteriormente, se não forem selecionados neste estágio.



Inscrição



Se quisermos assinar um suporte comercial, nesta etapa podemos obter todas as informações necessárias.







O suporte é fornecido pela Cloudical . Ele suporta Vanilla Stack e fornece Vanilla Cloud , uma nova opção de pilha gerenciada.



Verificando todas as etapas



Aqui podemos visualizar e alterar (se necessário) os parâmetros de configuração.







Antes de passar para a próxima etapa e instalar a pilha inteira, precisamos ter certeza de que ela está

/etc/apt/sources.list



configurada corretamente em cada nó e direcionada aos repositórios oficiais.



Nota: Esta etapa é necessária, por exemplo, se Ansible não estiver disponível nos repositórios padrão.



A maneira mais fácil de corrigir isso é substituir o conteúdo pelas /etc/apt/sources.list



seguintes instruções:







Instalação



Agora tudo está pronto e podemos iniciar a instalação com uma xícara de chá.







Nos registros de instalação, veremos os manuais do Ansible aplicados a cada VM para:



  • instale todos os pacotes necessários;
  • configurar um cluster Kubernetes (três nós principais / três trabalhadores);
  • instale a Torre e todas as ferramentas selecionadas acima.




Instalar a pilha inteira não deve demorar muito.







Nota: Ao instalar a pilha, encontrei um pequeno problema devido às peculiaridades do provedor de nuvem usado: o balanceador de carga redireciona o tráfego para o endereço IP interno (privado) do host em vez do público. O controlador de entrada é mapeado para o endereço IP externo (público) dos nós, então os nós de trabalho são marcados como defeituosos, o que é errado.



Acesso de cluster



O arquivo kubeconfig



pode ser recuperado /etc/kubernetes/admin.conf file



.



# Get kubeconfig file
$ ssh root@master1 cat /etc/kubernetes/admin.conf > vanilla.cfg
# Configure local kubectl
$ export KUBECONFIG=$PWD/vanilla.cfg
      
      







Como de costume, começamos listando os nós em nosso cluster:



$ kubectl get no
NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   38m   v1.19.6
master2   Ready    master   37m   v1.19.6
master3   Ready    master   37m   v1.19.6
worker1   Ready    worker   37m   v1.19.6
worker2   Ready    worker   37m   v1.19.6
worker3   Ready    worker   37m   v1.19.6
      
      







Além disso, podemos verificar todos os pods em execução no cluster, bem como os serviços que os fornecem.









Parece que tudo está funcionando! A próxima etapa pode ser uma execução de teste, por exemplo, um aplicativo com estado, que:



  • usa armazenamento em bloco fornecido por um cluster Ceph criado por meio do Rook;
  • encaminhado através do controlador de ingresso nginx;
  • usa um certificado TLS de Let's Encrypt CA, gerado automaticamente pelo Cert Manager.




Resultado



A configuração do Vanilla Stack foi rápida e o instalador do Docker é simples e direto. Parâmetros adicionais devem ser adicionados em breve para mais conveniência.



Se você não deseja instalar o Vanilla Stack, pode usar o mesmo stack diretamente do Vanilla Cloud . Esta nova oferta de nuvem foi lançada em dezembro de 2020 e a primeira versão beta já está disponível.



Eu recomendo dar uma olhada nesta pilha, pois é uma ótima maneira de aprender mais sobre projetos populares de código aberto.



All Articles