Vamos implantar no Openshift

Está bem


Gostaria de compartilhar minha história sobre a migração de um aplicativo para o Openshift. Além disso, como resultado, compararei algumas das soluções e ferramentas mais populares para gerenciar seu aplicativo no Openshift. É a transcrição da minha apresentação no kubernetes SPB meetup # 3 .


Vamos implantar no Openshift


O que devemos fazer?


Primeiro de tudo, vamos falar sobre a nossa aplicação. É uma solução corporativa pronta para uso, suporta diferentes bancos de dados, servidores de aplicativos e interfaces de integração com sistemas de terceiros. Normalmente, nossos clientes estavam instalando em servidores dedicados; no entanto, enfrentávamos o problema. Tivemos que ajustar o aplicativo dentro do Openshift.


Pré-requisitos


Implantar


O aplicativo é o produto com uma longa história, deve funcionar imediatamente em ambientes completamente diferentes. Como resultado, há muitas páginas em nossos guias de instalação. No entanto, o esquema de nível superior é fácil como torta, você deve:


  • Aplique o esquema do banco de dados.
  • Prepare a configuração do servidor de aplicativos.
  • Instale sua licença.
  • Inicialize o aplicativo.

Implantar


Infelizmente, o mundo é cruel, havia alguns pré-requisitos importantes.


  • Poderíamos criar o aplicativo apenas em um escravo Jenkins especial, devido a restrições de segurança
  • Não houve acesso da instalação Openshift do cliente ao registro do docker dos desenvolvedores privados.
  • Não foi possível reutilizar as imagens do docker existentes, porque elas foram criadas apenas para desenvolvimento e teste.
  • Havia playbooks ansible para implantação de aplicativos em VMs.

Demonstração Ansible-Container


Recipiente Ansible


O Ansible Container é um projeto de código aberto que visa permitir a automação de todo o processo de criação, implantação e gerenciamento de contêineres. O melhor de tudo é que ele usa a mesma linguagem de automação Ansible simples, poderosa e sem agente que você já está usando, garantindo a automatização de todo o ciclo de vida do aplicativo.

Já tínhamos escrito algumas funções do Ansible para instalar o aplicativo nas VMs, então as reutilizamos com o ansible-container . O container Ansible é um conjunto de ferramentas para a construção de containers. Não tenho certeza se é realmente um bom conjunto de ferramentas, no entanto, permite:


  • Crie contêineres da mesma maneira que implantamos nossos servidores.
  • Pare de encadear comandos de shell nos Dockerfiles.

Não houve grande problema com o ansible-container porque o Openshift, criando linhas de guia de imagens, é incrível. No entanto, gostaria de observar:


  • Nós modificamos nossos papéis ansíveis, porque Docker + systemd = pain .
  • Não há capacidade de usar chroot, sudo dentro do Openshift por padrão, devido à segurança. Basta ler CVE-2019-5736 .
  • Por motivos de segurança, o Openshift como padrão também gera UID aleatório para cada contêiner, ou seja, o openshift ignora a opção USER de um Dockerfile.

O ponto principal é que o ansible-container nos ajudou a criar uma demonstração muito rapidamente, por causa da reutilização.


Demonstração de vários contêineres


Vários recipientes


O primeiro contêiner de demonstração foi construído via ansible-container. Foi bom o suficiente para a demonstração, no entanto, decidimos não usá-la. Dividimos o contêiner de monólito em diferentes:


  1. Utilizamos o contêiner Openshift PostgreSQL original sem nenhuma modificação.
  2. Criamos o contêiner sem estado de aplicativo.

Vários recipientes


No entanto, não estava claro para inicializar o banco de dados? Encontramos um ótimo artigo sobre a vida dos PODs dentro dos kubernetes. Então, decidimos usar o container init para a inicialização do banco de dados.


Inicialize o aplicativo


Vários recipientes


Como mencionei antes, o aplicativo deve funcionar imediatamente em ambientes completamente diferentes, oferecer suporte a diferentes servidores / bancos de dados de aplicativos e interfaces de integração com sistemas de terceiros.


Existem várias maneiras de inicializar o aplicativo:


  1. Passe a configuração através de variáveis ​​de ambiente. Isso significa adicionar toda a nossa documentação / conhecimento sobre como inicializar o aplicativo para cada caso de uso em cada contêiner. Não parece bom.
  2. Use o gancho de início, este é aproximadamente o mesmo que o primeiro.
  3. Inicialize durante a provisão para Openshift.
  4. Use um contêiner externo com configuração individual para cada caso de uso.

Escolhemos o último, criamos um controlador de replicação adicional para inicializar o aplicativo? Sério?


Vários recipientes


Lemos a documentação novamente.


Um pod (como em um pod de baleias ou de ervilha) é um grupo de um ou mais contêineres (como contêineres do Docker), com armazenamento / rede compartilhada e uma especificação de como executá-los.

POD é um grupo de contêineres. Como resultado, decidimos executar 3 contêineres em um aplicativo POD


  1. Contêiner de inicialização para uma inicialização do PostgreSQL.
  2. O contêiner do aplicativo.
  3. Contêiner de inicialização do aplicativo.

Essa abordagem permite armazenar nossa configuração como um código, existem dois resultados interessantes: a configuração do aplicativo é testável e reproduzível.


Ferramentas


Já existe muito para gerenciar o openshift.



Durante a migração, testei alguns deles. Eu gostaria de compartilhar meus resultados.


Modelos Openshift


Modelos Openshift


Modelos Openshift


Prós:


  • Nativo Tem documentação incrível.

Contras:


  • Ainda outros modelos YAML.
  • Registre um arquivo YAML horrível.
  • Você se importa com dependências de serviços.

Scripts e modelo


Scripts personalizados


Prós:


  • Script.

Contras:


  • Kludges.

Terraform k8s provider


Terraform k8s provider


Terraform k8s provider


Prós:


  • Não se preocupe em criar ordem.
  • Reutilize o código como módulos.
  • Você pode adicionar lógica de inicialização.

Contras:


  • Sem suporte Openshift, apenas k8s.
  • Às vezes desatualizado.
  • Mais uma ferramenta.

Recipiente Ansible


Recipiente Ansible


Recipiente Ansible


Prós:



Contras:


  • Imagens enormes, devido a uma única camada.
  • Parece abandonado e desatualizado.

O recipiente Ansible foi substituído pelo dobrador Ansible .


Módulo k8s Ansible


Módulo k8s Ansible


Módulo Ansible + k8s


Prós:


  • Manual único para todos.
  • Reutilize o código como funções.
  • Você pode adicionar lógica de inicialização.

Contras:


  • Sem suporte a proxy.
  • Você se preocupa em remover. Se você deseja remover algo, deve declarar.
  • Você se preocupa em criar ordem. Você deve implantar o aplicativo antes da inicialização.

Pacote de playbook Ansible


Pacote de playbook Ansible


Ansible Playbook Bundle (APB) é uma definição de aplicativo leve (meta-container). Eles são usados ​​para definir e implantar grupos complexos de aplicativos, configurações de implantação, implantações e serviços em um cluster do OpenShift Origin executando o Ansible Service Broker. Os APBs oferecem mais potência e configuração simples, aproveitando o poder do Ansible. Os APBs têm os seguintes recursos:

Pacote de playbook Ansible


A idéia principal é que você empacote todas as coisas necessárias em um contêiner e execute o contêiner dentro do Openshift. Pacote de playbook Ansible


Prós:


  • Empacota tudo.
  • Testável e reproduzível.
  • Integração de catálogo de serviços.

Contras:


  • Você precisa de permissões de administrador.
  • A documentação às vezes está desatualizada.

Resultado


Resultado


Por um lado, não quero ser a autoridade final, mas, por outro, gostaria de compartilhar meu ponto de vista. Não existe uma bala de prata.



PS


Source: https://habr.com/ru/post/pt441906/


All Articles