Dificilmente seria errado dizer que o melhor dos homens
encontrar alegria através do sofrimento.
Ludwig van Beethoven

Sou Sergey, trabalho na Yandex.Money na equipe de pesquisa de desempenho. Quero contar a vocês o início da história sobre nosso caminho até o uso da orquestração - como escolhemos os instrumentos e o que levamos em consideração. Todos os acontecimentos do artigo acontecem em tempo real, então vocês, queridos leitores, estão acompanhando quase ao vivo o desenrolar da situação.
Por que precisamos de um maestro em nossa equipe?
Quem é um maestro? Do frag. diriger - administrar, dirigir, liderar - no mundo da música - é a pessoa que lidera o aprendizado e a execução da música em conjunto. No nosso caso, este lugar é ocupado por sistemas de orquestração e automação.
O seu papel não difere do papel de um maestro na música - são necessários para ajudar a equipa, orientar e organizar a sua execução.
Via de regra, uma equipe possui um determinado conjunto de capacidades – vamos chamá-los de servidores – nas quais implementam seus projetos.
A abordagem para obter e operar esses servidores é variada. Alguns exemplos:
- A equipe faz uma solicitação, por exemplo, ao grupo de operações, para que lhe forneça recursos com determinados parâmetros.
- A equipe de operações fornece a quantidade necessária – cloud ou bare metal – e se compromete a mantê-los em boas condições de acordo com o SLA. A configuração também é realizada pela equipe de operações.
- A equipe recebe apenas recursos de nuvem ou bare metal do grupo de operações e os configura por conta própria.
- A própria equipe “compra” os recursos e os mantém/configura de forma totalmente independente.
Nossa equipe utiliza servidores que precisam de suporte - atualização do sistema operacional, instalação de novos pacotes, etc.
Para nós, nós os dividimos em dois tipos principais:
- grupo de tanques,
- grupo de serviço.
O grupo de tanques consiste em hosts com Yandex.Tank.
O grupo de serviços inclui tudo relacionado à manutenção - são diversos serviços para dar suporte ao ciclo de lançamento, gerar relatórios automáticos, etc.
A certa altura, tudo isso se tornou inconveniente de gerenciar manualmente, e pensamos em automatizar todo o processo, desde o “carregamento” dos servidores até o desenvolvimento, liberação e lançamento do nosso serviço interno.
Por que é necessário um maestro, mesmo que a própria orquestra possa tocar?
Para começar, dominamos o Ansible e começamos a “derramar” nossos servidores bare metal para ficarmos menos dependentes dos administradores de sistema - todos ganham aqui, ganhamos novas habilidades e aliviamos os administradores de parte do trabalho que eles sempre têm o suficiente sem nós . Nós nos esforçamos para desenvolver além de nossa especialidade e autonomia da equipe, tanto quanto possível.
Na empresa, o trabalho com Ansible está configurado e regulamentado há bastante tempo, por isso integrámos facilmente a nossa solução neste processo.
Atualmente, o pool de hosts consiste em três funções do Ansible:
- a primeira função instala o sistema operacional,
- o segundo executa configurações básicas para o host, autorização LDAP, por exemplo,
- e o terceiro instala Yandex.Tank e dependências relacionadas em um contêiner docker.
Passemos aos serviços que utilizamos dentro da equipe.
Para nossas tarefas, usamos Kotlin e Python igualmente, e um pouco mais de Golang. Para unificar o desenvolvimento e implantação de nossos serviços, decidimos empacotá-los em contêineres Docker. Isso lhe dá a liberdade de escolher uma linguagem de programação e ao mesmo tempo regula um formato de entrega uniforme para sua aplicação.
Uma pequena observação sobre o ipv6 no Docker
Alguns dos serviços com os quais interagimos só estão disponíveis via ipv6, então tivemos que descobrir como fazer ipv6 para containers.
De acordo com a documentação do ipv6 no site oficial do Docker, o ipv6 é habilitado adicionando parâmetros ao daemon.json:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}Neste caso, o provedor deverá emitir uma sub-rede ipv6, que você irá cadastrar em fixed-cidr-v6.
No entanto, escolhemos outra opção - NAT ipv6, e aqui está o porquê:
- Agora janela de encaixe apenas com ipv6.
- Ter um endereço roteável globalmente em cada contêiner significa que todas as portas (mesmo as não publicadas) serão expostas a todos, a menos que uma filtragem adicional seja realizada.
- proxy userland para publicar portas, .
NAT ipv6 é , que gerencia as regras em ip6tables e as edita ao adicionar um novo contêiner.
Para que esta solução funcionasse corretamente, foi necessário realizar uma série de outras manipulações. Certifique-se de inicializar ip6table_nat no sistema. A presença de um módulo instalado no sistema não garante que o módulo será carregado no kernel na inicialização. Encontramos isso quando recebemos este erro ao executar um contêiner com NAT em um novo host:
2019/01/22 14:59:54 running [/sbin/ip6tables -t filter -N DOCKER --wait]: exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory
ip6tables v1.6.2: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)O problema foi resolvido após adicionar inicialização à função Ansible usando o módulo modprobe e carregá-lo na inicialização do sistema operacional usando lineinfile:
- name: Add ip6table_nat module
modprobe:
name: ip6table_nat
state: present
- name: Add ip6table_nat to boot
lineinfile:
path: /etc/modules
line: 'ip6table_nat'A propósito, tem um bom no hub , que descreve de forma breve e clara as vantagens e desvantagens de um ou outro método para executar o ipv6 no docker.
Mas voltemos à nossa pergunta feita no início:
Por que é necessário um maestro, mesmo que a própria orquestra possa tocar?
Agora todos imaginam como jogar no nosso time:
- o processo de “derramar” servidores foi criado,
- o desenvolvimento e a implantação de serviços são unificados.
Surge uma questão razoável: como implantar, atualizar e controlar nossos serviços em contêineres Docker de maneira eficiente e automática possível?
Apesar de cada membro da orquestra conhecer a sua parte, ele pode ficar confuso e se desviar da ideia original. Aqui chegamos à conclusão de que sem um maestro a nossa orquestra não ensaiará eficazmente e tocará de forma coerente. O maestro é responsável por todos os parâmetros da performance, garantindo que tudo esteja unido por um único andamento e clima.
Como conseguir um bom maestro com investimento mínimo?
O tema orquestração está bastante desenvolvido no mercado. Mas primeiro vamos falar sobre ferramentas auxiliares que podem ajudar o maestro.
- um sistema que oferece duas funções principais:
- descoberta de serviço,
- armazenamento distribuído de valores-chave.
Em nossa orquestra, o Consul será responsável por cadastrar os serviços e armazenar suas configurações. Existem duas opções de registro:
- Ativo é quando o serviço se registra usando a API HTTP;
- Passivo – o serviço deve ser cadastrado manualmente.
Vault é um repositório que padroniza e unifica o armazenamento seguro e o manuseio de segredos – senhas, certificados.
Aqui estão os benefícios que obteremos ao usar esta ferramenta:
- Um único centro para criar e armazenar segredos e gerenciar seu ciclo de vida usando a API HTTP.
- Transit Secrets Engine - criptografia e descriptografia de dados sem salvá-los. A capacidade de transmitir dados de forma criptografada por canais de comunicação não seguros.
- Políticas de acesso fáceis de configurar.
- Auditoria de acesso a segredos.
- A capacidade de criar sua própria CA (Autoridade de Certificação) para gerenciar certificados autoassinados em sua infraestrutura.
Considerando todas as nossas necessidades, duas opções foram adequadas para o papel de maestro - Kubernetes e Nomad.
Kubernetes
Quantos artigos e livros já foram escritos sobre ele (aqui , por exemplo), há relatos que escreverei brevemente - esta é uma colheitadeira universal que pode fazer quase tudo. O preço disso é que nem sempre é fácil configurar e manter um cluster no Kubernetes.
Nômade
da HashiCorp, empresa conhecida pelo cônsul e cofre mencionados acima.
Descobrimos que o Nomad é muito mais fácil de instalar e configurar do que o Kubernetes. Um arquivo binário funciona tanto no modo servidor quanto no modo cliente. Ao mesmo tempo, o Nomad cobre toda a lista de tarefas que queremos resolver: gerenciamento de cluster, agendador rápido, suporte multidatacenter. Além disso, ao usar o consul e o vault, obtemos uma integração mais estreita para orquestrar nossos serviços.
O que está em andamento:
- servidores preparados para implantação do Consul,
- a configuração do cluster nomad será inserida no Consul, com a ajuda da qual o nomad deverá ser implantado automaticamente,
- Paralelamente, instalaremos o vault para armazenar segredos.
Pergunta para o público: vale a pena contratar um maestro para essas tarefas ou a orquestra vai bem sem ele? Conte-nos nos comentários o que você pensa sobre isso.
Assine nosso blog e fique em contato - em breve contaremos o que aconteceu no final e se configuramos o cluster nômade da maneira que queríamos.
Venha para o nosso aconchegante , onde você sempre pode pedir conselhos, ajudar colegas e apenas conversar sobre pesquisas de produtividade e muito mais.
Fonte: habr.com
