PuppetConf 2016. Kubernetes para administradores de sistema. Parte 2

PuppetConf 2016. Kubernetes para administradores de sistema. Parte 1

Defina um limite de recurso. Usando matemática simples, você pode calcular quantas cópias do aplicativo você pode executar - se uma cópia precisar de 1 GB de RAM e, com 10 GB de memória, você poderá executar 10 cópias. Isso não precisará ser monitorado, porque sei que o núcleo do sistema simplesmente começará a cumprir o contrato estipulado. Esse contrato ou acordo entre você e o sistema é muito importante porque, se estiver disponível, todas as ferramentas funcionam muito melhor. Assim, introduzimos a disciplina de execução no sistema.



Portanto, o agendador iniciará isso apenas se cada uma das réplicas tiver 1 GB de memória livre. Se não houver memória suficiente, o processo não será iniciado. Então, insiro o comando kubectl create e, após sua execução, o contêiner mysql será criado.



Há uma ressalva aqui relacionada aos sistemas com estado - você tem várias opções. Eu destaquei um trecho de código no qual indiquei que desejo usar o PersistentDisk do meu provedor de nuvem.



Pode ser NFS, ISCSI ou qualquer outro protocolo que forneça acesso em nível de bloco de rede a dispositivos de armazenamento. Eu faço isso para desconectar meu armazenamento das máquinas. Se uma das máquinas falhar, eu posso recriar o processo na outra máquina usando o mesmo armazenamento de dados. Se você montar o armazenamento a partir do host no qual a falha ocorre, simplesmente perderá seus dados e precisará restaurar tudo do backup novamente.

Portanto, nosso objetivo é que o armazenamento seja executado mais rapidamente à medida que nossas redes crescem mais rapidamente. Não se trata de migração, mas da capacidade de montar e desmontar rapidamente o armazenamento fora da máquina. Isso é bem possível de fazer. Vamos ver como estão as coisas na nossa lareira - ela ainda está sendo criada e agora quero criar serviços para que outras aplicações possam encontrar a nossa.



Assim que eu criar esse serviço, o Kubernetes irá gerar um registro DNS, então você pode chamar o mysql e detectar automaticamente que esse contêiner está em execução. Vamos continuar e inserir o comando $ kubectl create –f services / mysql.yaml. Como você pode ver, o contêiner ainda está sendo criado. A propósito, você pode assistir a este vídeo de demonstração no meu site. Você vê como o serviço se parece com um aplicativo mysql - ele contém os endereços IP do cluster, endereços IP externos, números de portas e protocolos de rede.



Vamos ver o que acontece com esse contêiner em particular. Como você pode ver, funciona.



Então, no momento, acredito que o aplicativo mysql realmente funcione. A próxima coisa que precisamos é de um aplicativo da web. Então, vamos implantar um aplicativo chamado "lagostas", peguei no GitHub, este é um clone do Hacker News. Como é um projeto Ruby-on-Rails, acabei de criar um contêiner com base nos dados fornecidos aqui e na configuração básica.



Se você não estiver atualizado: o Hacker News o tornará super popular em qualquer conferência de hackers. Basta ler o que está escrito aqui e você pode discutir todos os tópicos populares do mundo da tecnologia da computação. Então, se você quiser impressionar os outros - leia as notícias deste portal.

Então, eu quero criar um clone dessa coisa e colocá-lo na Internet para ganhar dinheiro. Obviamente, este não é um projeto de negócios real, mas apenas uma demonstração de oportunidades.
Atualmente, estou implantando um aplicativo chamado Lobsters. Do meu segredo, recebo o URL do banco de dados, para o qual uso o comando $ kubectl get secrets. Segredo também tem um nome de usuário e senha.



Em seguida, quero criar um contêiner que se comunique com meu aplicativo, para o qual eu uso o comando $ kubectl create –f deployments / lobsters.yaml. Como você pode ver, o aplicativo está sendo executado.



Além disso, temos um endereço IP. Entro no comando $ kubectl get svc e uso o balanceador de carga global, que aponta para a página com o endereço IP externo 101.198.12.60.





Iremos ao navegador e tentaremos inserir esse endereço por HTTP. Sim, erro aguardando migração! Isso é Ruby-on-Rails, então eu esperava algo assim.



Então, precisamos de uma migração de banco de dados. Precisamos executar esse processo uma vez, e é isso. No entanto, queremos fazer isso da mesma maneira - sem autorização no servidor, sem servidores especiais, como o Jump box, queremos entrar em contato com o planejador e dizer: “Ei, execute esta tarefa uma vez e após a execução, apenas mate o processo!”. Ou seja, quero executar apenas um comando e sair. Portanto, para executar o processamento em lote usando o comando $ cat jobs / lobsters-db-schema-load.yaml, criei um objeto Jobs que implementa esse esquema.



O sinalizador de comando rake "db: schema: load" é ​​enviado diretamente ao site do GitHub e diz: "pegue a imagem de código: kelseyhightower / lobsters: 2.0.0 e execute este comando uma vez". A linha restartPolicy: never no final do código informa ao Kubernetis que ele deve executar isso apenas uma vez e nunca repeti-lo. Também limito os recursos do processador e da memória, ou seja, indico os parâmetros de uma máquina adequada na qual isso pode ser iniciado e executado, após o qual a transferência do banco de dados será concluída. Então, eu “coloquei nos trilhos” todos os objetos de Jobs que devem ser executados no sistema usando o comando $ kubectl create –f jobs / lobsters-db-schema-load.yaml.
Você vê que o trabalho correspondente é criado, após o qual digito o comando $ watch kubectl get jobs.



Então, o contêiner foi puxado para a máquina, o agendador funcionou, a tarefa de rake foi criada. Vamos voltar e atualizar a página de erro do banco de dados. Como você pode ver, agora nosso esquema foi implementado com sucesso.



Em seguida, preciso fazer login. Eu uso o comando $ kubectl create –f jobs / lobsters-db-seed.yaml. Você vê que o planejador ainda está carregando o contêiner e, após alguns segundos, o trabalho está concluído. Para iniciar a migração, usamos o mesmo nível de código de antes. Entro nesta página e tudo o que precisa ser feito agora é obter o conteúdo. O conteúdo é necessário se queremos "arrecadar" algum dinheiro. É assim que os hackers de crescimento se parecem, ou "hacking growth" - você acessa o site de outra pessoa, pega o conteúdo de lá e o publica em seu próprio site, semelhante ao original.



Mas precisamos não apenas de conteúdo, mas de bom conteúdo. Seria uma pena deixar as coisas à deriva, então eu empresto algumas notícias manualmente. Você pode copiar o conteúdo automaticamente, mas não é legal. Então, seleciono as notícias, copio o endereço do link, defino a tag “test”, marque a caixa “Eu sou o autor da história localizada neste URL” e pressione o botão Enviar. Veja como as notícias roubadas são ótimas!



Agora é hora de escalar o aplicativo. Para fazer isso, basta alterar a definição do que estamos fazendo - em vez de 1 réplica, vá, por exemplo, para 10. Em seguida, corro o bloco de comando novamente.



O Kubernetes aceita essas informações, executa uma ação e agora temos 10 cópias do aplicativo Lobsters em execução em nossa lareira. Além disso, esse processo é adicionado automaticamente ao balanceador de carga, graças ao trabalho dos Serviços.



Vamos ver o que acontece no back-end. Para fazer isso, eu uso o comando $ kubectl get svc, obtenha um status curto e peça para descrevê-lo com o comando $ kubectl description svc. O Kubernetes detecta automaticamente todos os nossos pontos de extremidade e os coloca atrás de um balanceador de carga.



Ao mesmo tempo, tudo o que é inútil é excluído e tudo o que é necessário é adicionado automaticamente. Não precisamos criar isso repetidamente, tudo está totalmente integrado à plataforma.
A próxima pergunta importante é como atualizar e obter registros. Se você se lembra, tirei seu acesso SSH, então você precisa centralizar os logs usando algo como Log Stash ou log interno do Google Cloud. Mas se você deseja apenas exibir logs ad hoc, lembre-se de que você não tem acesso às máquinas. No entanto, você pode usar a API para capturar logs usando nomes de contêineres. Para fazer isso, digite o comando $ kubectl logs lobsters-240734871-03rmn –f, em que 03rmn é o nome de uma cópia específica do aplicativo lobsters-240734871 no contêiner. Assim, você pode visualizar o log de cada contêiner com uma réplica, para que, se necessário, solucione problemas.



Vamos ver nosso conteúdo usando o comando $ kubectl get pods, como você pode ver, tudo funciona. A próxima coisa importante a fazer é contratar um profissional de marketing. Ele olha para esta página e diz: “Faça o que quiser, mas remova essas manchas brancas do site!”.



Tudo o que você precisa fazer é criar um novo contêiner além do já criado e personalizar o CSS para o que queremos promover. Deixe-me lembrá-lo de que não estamos falando de nós, nós não são importantes para nós, porque o próprio sistema fornecerá exatamente o que queremos.

Para continuar em breve ...


Um pouco de publicidade :)


Obrigado por ficar com a gente. Você gosta dos nossos artigos? Deseja ver materiais mais interessantes? Ajude-nos fazendo um pedido ou recomendando aos seus amigos o VPS baseado em nuvem para desenvolvedores a partir de US $ 4,99 , um analógico exclusivo de servidores básicos que foi inventado por nós para você: Toda a verdade sobre o VPS (KVM) E5-2697 v3 (6 núcleos) 10 GB DDR4 480 GB SSD 1 Gbps de US $ 19 ou como dividir o servidor? (as opções estão disponíveis com RAID1 e RAID10, até 24 núcleos e até 40GB DDR4).

Dell R730xd 2 vezes mais barato no data center Equinix Tier IV em Amsterdã? Somente nós temos 2 TVs Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV a partir de US $ 199 na Holanda!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - a partir de US $ 99! Leia sobre Como criar um prédio de infraestrutura. classe c usando servidores Dell R730xd E5-2650 v4 que custam 9.000 euros por um centavo?

All Articles