Práticas recomendadas e tutoriais

Criação de infraestrutura de VMs dinâmicas com hosts Xen

Introdução

No mundo atual, as máquinas de infraestrutura de servidor estão em data centers locais, data centers privados ou data centers de nuvem pública. Essas máquinas são máquinas físicas bare metal, máquinas virtuais (VMs) com hipervisores ou pequenos contêineres, como contêineres docker, em cima de máquinas físicas ou virtuais. Essas máquinas podem estar fisicamente no laboratório local. Em um cenário de data center privado, em que seus próprios hosts adquiridos são colocados em um espaço físico compartilhado em um data center de terceiros e conectados remotamente. Já nos data centers públicos, como AWS, GCP, Azure e OCI, as máquinas são reservadas ou criadas sob demanda para as necessidades altamente escalonáveis que se conectam remotamente. Cada um deles tem suas próprias vantagens em termos de escalabilidade, segurança, confiabilidade, gerenciamento e custos associados a essas infraestruturas. 

As equipes do ambiente de desenvolvimento de produtos podem precisar de muitos servidores durante o processo de SDLC. Digamos que alguém tenha escolhido o data center privado com suas próprias máquinas físicas e servidores Xen. Agora, o desafio é como o ciclo de vida das VMs é gerenciado para provisionamento ou encerramento, de forma semelhante aos ambientes de nuvem com processos enxutos e ágeis.

 

O objetivo deste documento é fornecer o modelo básico de infraestrutura, a arquitetura, as APIs mínimas e os exemplos de trechos de código para que seja possível criar facilmente ambientes de infraestrutura dinâmicos.

 

Benefícios

Primeiro, vamos entender a sequência típica das etapas seguidas no processo de infraestrutura desse servidor. Você pode relembrá-la da seguinte forma.

    1. Aquisição de novas máquinas pela TI
    2. Virtualização de host - Instalar o Xen Server e criar modelos de VM por TI
    3. Solicitação de VMs estáticas pelas equipes de desenvolvimento e teste por meio de tíquetes (digamos, JIRA) para a TI
    4. Mantenha os IPs de VM recebidos em um banco de dados ou em um arquivo estático ou codificados em arquivos de configuração ou ferramentas de CI, como no config.xml do Jenkins
    5. Monitore as VMs quanto a verificações de integridade para garantir que elas estejam íntegras antes de usá-las para instalar os produtos
    6. Limpeza ou desinstalação antes ou depois das instalações do servidor
    7. O Windows pode precisar de alguma limpeza do registro antes de instalar o produto
    8. A alocação fixa de VMs para uma área ou uma equipe ou dedicada a um engenheiro pode ter sido feita

Agora, como você pode tornar esse processo mais enxuto e ágil? Você pode eliminar a maioria das etapas acima com uma automação simples?

Sim. Em nosso ambiente, tínhamos mais de 1.000 VMs e tentamos alcançar e, principalmente, o seguinte. 

"VMs descartáveis sob demanda, conforme necessário durante a execução dos testes. Resolva problemas de limpeza do Windows com ciclos de teste regulares."

Como você pode ver abaixo, usando o serviço de API do gerenciador de servidor de VMs dinâmicas, 6 das 8 etapas podem ser eliminadas e isso proporciona uma visão ilimitada da infraestrutura para toda a equipe de produtos. Somente as duas primeiras etapas - aquisição e virtualização de host - são necessárias. De fato, isso economiza em termos de tempo e custo!

Typical flow to get infrastructure

Fluxo típico para obter infraestrutura

Modelo de infraestrutura dinâmica

A imagem abaixo mostra nossa infraestrutura proposta para um ambiente típico de produto de servidor, com 80% de contêineres do docker, 15% como VMs dinâmicas e 5% como VMs estáticas em pool para casos especiais. Essa distribuição pode ser ajustada com base no que funciona melhor em seu ambiente.

Infrastructure model

Modelo de infraestrutura

Daqui em diante, discutiremos mais sobre a parte do gerenciador do servidor de VM dinâmica.

 

Arquitetura do Dynamic Server Manager

No gerenciador de servidor de VMs dinâmicas, um serviço de API simples em que as APIs REST abaixo podem ser expostas e usadas em qualquer lugar no processo automatizado. Como mostra a pilha de tecnologia, as APIs Xen baseadas em python 3 e Python são usadas para a criação real de VMs com o host XenServer. O Flask está sendo usado para a criação da camada de serviço REST. O sistema operacional pode ser qualquer uma das plataformas compatíveis com seu produto, como windows2016, centos7, centos8, debian10, ubuntu18, oel8, suse15.

Dynamic VMs server manager architecture

Arquitetura do gerenciador de servidor de VMs dinâmicas

Salve o histórico das VMs para rastrear o uso e o tempo de provisionamento ou encerramento que pode ser analisado posteriormente. Para armazenar o documento json, pode ser usado o servidor corporativo Couchbase, que é um banco de dados de documentos nosql.

 

APIs REST simples

 

Método URI(s) Finalidade
OBTER /showall Lista todas as VMs no formato json
OBTER /getavailablecount/ Obtém a lista de contagem de VMs disponíveis para o fornecido
OBTER /getservers/?os=

/getservers/?os=&count=

/getservers/?os=&count=&cpus=&mem=

/getservers/?os=&expiresin=

Provisões dadas VMs de .

contagem de cpus e tamanho de memória também podem ser suportados.

parâmetro expiresin em minutos para obter a expiração (encerramento automático) das VMs.

OBTER /releaseservers/?os=

/releaseservers/?os=&count=

Encerra determinadas VMs de

Pré-requisitos para hosts Xen direcionados a VMs dinâmicas

  • Identificar hosts Xen de VM dinâmicos direcionados
  • Copiar/criar os modelos de VM 
  • Mova esses hosts Xen para uma VLAN/sub-rede separada (trabalhe com a TI) para reciclar os IPs

Implementação

Em um nível alto -

  1. Criar funções para cada API REST
  2. Chame um serviço comum para executar diferentes ações REST.
  3. Entenda a criação da sessão Xen, obtendo os registros, clonando a VM a partir do modelo, anexando o disco correto, aguardando a criação da VM e o recebimento do IP; exclusão de VMs, exclusão de discos
  4. Iniciar um thread para expiração automática de VMs
  5. Ler a configuração comum, como o formato .ini
  6. Compreender o trabalho com o banco de dados Couchbase e salvar documentos
  7. Teste todas as APIs com os sistemas operacionais e parâmetros necessários
  8. Corrigir problemas, se houver
  9. Executar um POC com poucos hosts Xen

Os trechos de código abaixo podem ajudá-lo a entender ainda melhor.

Criação de APIs

 

Criação da sessão Xen

 

Listar VMs

 

Criar VM

Excluir VM

 

Histórico de uso de VMs

É melhor manter o histórico de todas as VMs criadas e encerradas junto com outros dados úteis. Aqui está o exemplo de um documento json armazenado no Couchbase, um banco de dados Nosql gratuito servidor. Insira um novo documento usando a chave como o uuid de referência do xen opac sempre que uma nova VM for provisionada e atualize o mesmo sempre que a VM for encerrada. Acompanhe o tempo de uso da VM e também como o provisionamento/encerramento foi feito por cada usuário.

 

 

Configuração

A configuração do serviço do gerenciador de servidores Dynamic VM, como o servidor couchbase, os servidores xenhost, os detalhes do modelo, a expiração padrão e os valores de tempo limite da rede podem ser mantidos em um formato .ini simples. Qualquer novo host Xen recebido, basta adicionar como uma seção separada. A configuração é carregada dinamicamente sem reiniciar o serviço Dynamic VM SM.

Exemplo de arquivo de configuração: .dynvmservice.ini

 

Exemplos

Exemplo de chamadas à API REST usando curl

 

Trabalhos Jenkins com uma única VM

 

São necessários trabalhos Jenkins com várias VMs

 

Principais considerações

Aqui estão algumas de minhas observações feitas durante o processo e é melhor lidar com elas para torná-las mais confiáveis.

  1. Manipular nome/ID de armazenamento diferente entre diferentes hosts Xen
    • Mantenha o controle do nome do dispositivo de armazenamento da VM no arquivo de configuração de entrada do serviço.
  2. Lidar com modelos parciais disponíveis apenas em alguns hosts Xen durante o provisionamento
  3. Quando os IPs de rede não estão disponíveis e as APIs do Xen obtêm o padrão 169.254.xx.yy no Windows. Aguarde até obter o endereço não 169 ou o tempo limite.
  4. Os servidores de versão devem ignorar o modelo do sistema operacional, pois alguns dos modelos podem não estar presentes Xen Hosts
  5. Provisão em uma referência específica de um determinado Xen Host
  6. Manipular Não há IPs disponíveis ou nnão está conseguindo obter IPs de rede para algumas das VMs criadas.
    • PO Xen Hosts é uma sub-rede diferente para VMs dinâmicas direcionadas a hosts Xen. A expiração do contrato de aluguel de IP DHCP da rede padrão pode ser em dias (digamos, 7 dias) e não são fornecidos novos IPs.
  7. Trate a verificação de capacidade para contar os IPs em andamento como IPs reservados e deve mostrar uma contagem menor do que a total no momento. Caso contrário, as solicitações em andamento e as solicitações de entrada poderão ter problemas. Uma ou duas VMs (tamanhos de cpus/memória/disco) podem estar no buffer durante a criação e a verificação de solicitações paralelas.

Referências

Algumas das principais referências que ajudam na criação do serviço de gerenciador de servidor de VM dinâmico.

  1. https://www.couchbase.com/downloads
  2. https://wiki.xenproject.org/wiki/XAPI_Command_Line_Interface
  3. https://xapi-project.github.io/xen-api/
  4. https://docs.citrix.com/en-us/citrix-hypervisor/command-line-interface.html
  5. https://github.com/xapi-project/xen-api-sdk/tree/master/python/samples
  6. https://www.citrix.com/community/citrix-developer/citrix-hypervisor-developer/citrix-hypervisor-developing-products/citrix-hypervisor-staticip.html
  7. https://docs.ansible.com/ansible/latest/modules/xenserver_guest_module.html
  8. https://github.com/terra-farm/terraform-provider-xenserver
  9. https://github.com/xapi-project/xen-api/blob/master/scripts/examples/python/renameif.py
  10. https://xen-orchestra.com/forum/topic/191/single-device-not-reporting-ip-on-dashboard/14
  11. https://xen-orchestra.com/blog/xen-orchestra-from-the-cli/
  12. https://support.citrix.com/article/CTX235403

Espero que você tenha tido um bom momento de leitura!

Isenção de responsabilidade: Veja isso como uma referência se estiver lidando com Xen Hosts. Sinta-se à vontade para compartilhar se tiver aprendido algo novo que possa nos ajudar. Seu feedback positivo é muito bem-vindo!


Agradecemos a Raju Suravarjjala, Ritam Sharma, Wayne Siu, Tom Thrush e James Lee por sua ajuda durante o processo.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Jagadesh Munta, engenheiro de software principal, Couchbase

Jagadesh Munta é engenheiro de software principal da Couchbase Inc., EUA. EUA. Antes disso, ele foi veterano na Sun Microsystems e na Oracle por 19 anos. Jagadesh é mestre em engenharia de software pela San Jose State University, EUA, e bacharel em tecnologia. Ciência e Engenharia da Computação na JNTU, Índia. Ele é autor do "Software Quality and Java Automation Engineer Survival Guide" para ajudar desenvolvedores de software e engenheiros de automação de qualidade.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.