Kubernetes: Tudo sobre orquestração de contêineres
De Lucas Santos
5/5
()
Sobre este e-book
Neste livro, Lucas Santos apresenta este orquestrador de contêineres. Você verá como o Kubernetes faz todo o processo de automação, sendo responsável por criar os contêineres, gerenciar seu funcionamento, manter a infraestrutura em estado de execução e administrar o estado ideal do cluster. Ao aprender a utilizar esta ferramenta, você poderá obter melhores resultados possíveis e escalar sua aplicação infinitamente, mas ainda mantendo o controle total de tudo o que está acontecendo.
Relacionado a Kubernetes
Ebooks relacionados
Fragmentos de um programador: Artigos e insights da carreira de um profissional Nota: 5 de 5 estrelas5/5Desbravando SOLID: Práticas avançadas para códigos de qualidade em Java moderno Nota: 5 de 5 estrelas5/5Primeiros passos com Node.js Nota: 0 de 5 estrelas0 notasAPIs REST: Seus serviços prontos para o mundo real Nota: 5 de 5 estrelas5/5Programação Funcional: Uma introdução em Clojure Nota: 4 de 5 estrelas4/5Programação funcional em .NET: Explore um novo universo Nota: 0 de 5 estrelas0 notasDesconstruindo a Web: As tecnologias por trás de uma requisição Nota: 0 de 5 estrelas0 notasAPIs REST em Kotlin: Seus serviços prontos para o mundo real Nota: 0 de 5 estrelas0 notasDesign Patterns com PHP 7: Desenvolva com as melhores soluções Nota: 5 de 5 estrelas5/5Caixa de Ferramentas DevOps: Um guia para construção, administração e arquitetura de sistemas modernos Nota: 0 de 5 estrelas0 notasJenkins: Automatize tudo sem complicações Nota: 0 de 5 estrelas0 notasDevOps na prática: Entrega de software confiável e automatizada Nota: 0 de 5 estrelas0 notasMeteor: Criando aplicações web real-time com JavaScript Nota: 5 de 5 estrelas5/5Arquitetura de software distribuído: Boas práticas para um mundo de microsserviços Nota: 0 de 5 estrelas0 notasDescomplicando o Docker 2a edição Nota: 0 de 5 estrelas0 notasGraphQL: A revolucionária linguagem de consulta e manipulação de dados para APIs Nota: 0 de 5 estrelas0 notasConstruindo APIs REST com Node.js: Caio Ribeiro Pereira Nota: 5 de 5 estrelas5/5Test-Driven Development: Teste e Design no Mundo Real Nota: 0 de 5 estrelas0 notasRoadmap back-end: Conhecendo o protocolo HTTP e arquiteturas REST Nota: 5 de 5 estrelas5/5Apache Kafka e Spring Boot: Comunicação assíncrona entre microsserviços Nota: 0 de 5 estrelas0 notasGuia prático de TypeScript: Melhore suas aplicações JavaScript Nota: 0 de 5 estrelas0 notasAzure: Coloque suas plataformas e serviços no cloud Nota: 0 de 5 estrelas0 notasSOA aplicado: Integrando com web services e além Nota: 0 de 5 estrelas0 notasO guia de Dart: Fundamentos, prática, conceitos avançados e tudo mais Nota: 4 de 5 estrelas4/5Orientação a Objetos e SOLID para Ninjas: Projetando classes flexíveis Nota: 5 de 5 estrelas5/5Segurança em aplicações Web Nota: 0 de 5 estrelas0 notasECMAScript 6: Entre de cabeça no futuro do JavaScript Nota: 5 de 5 estrelas5/5Vire o jogo com Spring Framework Nota: 0 de 5 estrelas0 notasMicrosserviços e EJB: Escale sua aplicação, não a complexidade Nota: 0 de 5 estrelas0 notasProdutividade em C#: Obtenha mais resultado com menos esforço Nota: 0 de 5 estrelas0 notas
Sistemas Operacionais para você
Certificação Linux Essentials Nota: 4 de 5 estrelas4/5Android nativo com Kotlin e MVVM: Simplificando técnicas avançadas Nota: 0 de 5 estrelas0 notasApp Inventor: Seus primeiros aplicativos Android Nota: 0 de 5 estrelas0 notasGuia prático do servidor Linux: Administração Linux para iniciantes Nota: 4 de 5 estrelas4/5Kotlin com Android: Crie aplicativos de maneira fácil e divertida Nota: 4 de 5 estrelas4/5Guia Rápido Kubernetes Nota: 0 de 5 estrelas0 notasComeçando com o Linux: Comandos, serviços e administração Nota: 4 de 5 estrelas4/5Swift: Programe para iPhone e iPad Nota: 0 de 5 estrelas0 notasEntrega contínua em Android: Como automatizar a distribuição de apps Nota: 0 de 5 estrelas0 notasCordova avançado e PhoneGap: Um guia detalhado do zero à publicação Nota: 0 de 5 estrelas0 notasCertificação Linux: Guia prático para a prova LPIC-1 101 Nota: 0 de 5 estrelas0 notasIonic Framework: Construa aplicativos para todas as plataformas mobile Nota: 0 de 5 estrelas0 notasLinux para principiantes Nota: 0 de 5 estrelas0 notasOpenLDAP Extreme Nota: 0 de 5 estrelas0 notas
Categorias relacionadas
Avaliações de Kubernetes
1 avaliação0 avaliação
Pré-visualização do livro
Kubernetes - Lucas Santos
Sumário
ISBN
Prefácio
Sobre o autor
Agradecimentos
Sobre o livro
Discussão
Um pouco de conceito
1 Introdução
2 Kubernetes
Mãos à obra
3 Preparando o ambiente
4 Comunicando-se com o cluster
5 Indo para a nuvem
Kubernetes de verdade
6 Usando pods para criar algo útil
7 Tornando nossos apps públicos com services
8 Dando nome aos bois utilizando ingresses
9 Mantendo dados com volumes
10 Mantendo dados para sempre com volumes persistentes
11 Utilizando secrets para armazenar dados sensíveis
12 Configurações sempre à mão com ConfigMaps
13 Dando superpoderes aos nossos pods através de deployments
14 Tornando tudo escalável com um HPA
15 Tarefas repetitivas com cronjobs
16 Colocando ordem na casa usando namespaces
17 Dicas gerais
Apêndice
18 Guia de referência para comandos do Kubectl
19 Referências de estudo
ISBN
Impresso e PDF: 978-85-7254-024-7
EPUB: 978-85-7254-025-4
MOBI: 978-85-7254-026-1
Caso você deseje submeter alguma errata ou sugestão, acesse http://erratas.casadocodigo.com.br.
Prefácio
A escrita de um livro não é um processo fácil. Nós, autores, contamos com diversas pessoas não só para nos ajudar a seguir em frente, mas também para tornar todo este trabalho possível e factível de forma mais fácil e prática. Assim podemos obter o melhor resultado possível para você, leitor ou leitora.
Com este livro não foi diferente, houve muitas pessoas que me ajudaram tanto na elaboração deste conteúdo quanto no processo de escrita como um todo. Duas delas se tornaram indispensáveis para que este livro de fato fosse completado. Diego Pinho, também autor da Casa do Código, por primeiro me mostrar os caminhos para a escrita independente e a esta forma de ensinar outras pessoas através de grandes editoras como a Casa do Código; Também o William Oliveira, outro autor da Casa do Código, que me deu diversas dicas sobre o processo de escrita e organização. Portanto, convidei os dois para escrever um pequeno prefácio sobre este livro.
"Ser uma pessoa desenvolvedora de software não é uma tarefa fácil, exige muita dedicação, paciência e força de vontade. Precisamos estar a todo momento procurando, aprendendo, praticando e fazendo novas tecnologias para nos mantermos relevantes no mercado. Sem esquecer é claro, de que tudo isso precisa estar alinhado aos prazos e pressões do dia a dia para que possamos entregar aos nossos clientes o melhor resultado possível. E com a velocidade com que as coisas acontecem atualmente, precisamos não somente criar nossas aplicações seguindo os melhores padrões, práticas e metodologias de desenvolvimento para garantir o melhor código possível; mas temos que ir além: temos que prepará-las para que sejam escaláveis, testáveis e facilmente atualizáveis em ambientes de produção. A grande questão é: como fazer tudo isso?
Neste livro, o Lucas traz toda a sua experiência e faz um excelente trabalho ao nos mostrar de ponta a ponta todo o processo de utilização do Kubernetes, um sistema de código aberto para orquestração de contêineres, que automatiza não somente a implantação, mas o dimensionamento e a gestão dessas aplicações. Por meio de uma didática prática e uma linguagem simples, você entenderá não somente o como fazer, mas por que e quando usar, tudo alinhado à maneira como o mercado de desenvolvimento faz.
Não tenho dúvidas de que, ao final deste livro, você e seus projetos de software serão melhores e mais completos.
Diego Martins de Pinho
Fundador da Code Prestige"
"A tecnologia de contêineres tem sido cada vez mais adotada por variados tipos e tamanhos de empresas. Hoje uma startup pode ter 500 acessos simultâneos em sua plataforma e amanhã receber o boom de acessos de milhares de pessoas; para uma grande empresa, isso já é uma realidade: milhares de acessos simultâneos e, de repente, milhões.
Possuir uma infraestrutura que se mantenha de pé em um aumento tão repentino de acessos é extremamente importante para qualquer empresa, mas isso também é bem custoso em manutenção e em dinheiro.
O uso do Docker barateou muito o custo de manter uma infraestrutura, além da facilidade e agilidade que temos para subir uma nova versão de nossa aplicação para produção, assim como escalar a nossa infra para uma grande quantidade de acessos. Se, em um dia, temos poucos acessos, então podemos configurar nossas máquinas e contêineres para poucos acessos; quando temos muitos acessos, utilizamos de escalabilidade, ou subimos manualmente nossos recursos computacionais para enfrentar esta demanda.
Mas nem tudo são flores, com o uso de contêineres vem o peso da orquestração, gerenciar dezenas e, às vezes, milhares microsserviços pode se tornar caótico para nosso time de SRE. Como poderíamos sobreviver a isso!?
É aí que o Kubernetes vai mostrar para que veio. Neste livro, Lucas nos leva a uma viagem de um caso hipotético, porém baseado na vida real, para que aprendamos a utilizar essa ferramenta e obtenhamos os melhores resultados. Ele nos traz a explicação completa de como tudo funciona e os benefícios dessa maneira de gerenciarmos nossa infraestrutura.
Espero que você aproveite este conteúdo e consiga extrair o máximo dos contêineres e do Kubernetes em suas aplicações.
William Oliveira
Desenvolvedor e autor do livro O Universo da Programação
Sobre o autor
Lucas SantosFigura -3.1: Lucas Santos
Meu nome é Lucas, sou desenvolvedor de software desde 2011, e desde 2013 venho trabalhando com aplicações de alta disponibilidade e performance, não só em Node.js mas em diversas outras tecnologias.
Minha paixão por tecnologia começou muito cedo, quando aos 4 ou 5 anos eu sentava ao lado do meu pai para poder descobrir o que ele estava fazendo nos antigos computadores dos anos 90. Logo depois estava montando e desmontando PCs (e outros equipamentos eletrônicos) para amigos e familiares, foi quando eu descobri que era o que eu queria fazer da vida. Desde aqueles dias, tudo que estudei e foquei em aprimorar tem a ver de uma forma ou outra com tecnologia, seja ela programável ou não. Sou um grande fã da cultura maker e hacker, prefiro fazer meus próprios gadgets e criar minhas próprias coisas, sempre aprendendo algo novo todos os dias, afinal, um dia em que não se aprende nada é um dia perdido.
Sou formado em informática pela ETEC de São Caetano do Sul e Ciências da Computação pela Universidade Federal do ABC. Fui agraciado com o premio Microsoft MVP em 2018 e com o premio de Google Developer Expert em 2019 por fazer parte na organização e divulgação de conteúdo em comunidades de desenvolvimento de software como o ABCDev (https://github.com/abc-dev), Barraco (https://obarra.co) e o Training Center (http://trainingcenter.io), NodeBR (https://meetup.com/nodebr), JSSP (https://www.meetup.com/Javascript-SP), VueJS SP (https://www.meetup.com/vuejssp), Typescript BR (https://meetup.com/typescriptbr) e NodeSchool SP (http://nodeschool.io/saopaulo), me empenhando cada dia mais para levar o conhecimento de tecnologia e inspirar outras pessoas a aprender. Além disso faço parte da Node.js Foundation ajudando a traduzir as documentações do runtime para o português.
Você pode encontrar o link de todas as minhas redes sociais no meu site: http://lsantos.dev ou escrevendo artigos no Medium (https://medium.com/@khaosdoctor), ou no portal iMasters (https://imasters.com.br/perfil/lucassantos).
Agradecimentos
Agradeço principalmente à minha família, pois sem eles não teria sido capaz de seguir nesta área e escrever este livro. Principalmente a meus pais, Humberto e Rose, por sempre me apoiarem e me incentivarem a seguir meus sonhos.
Um agradecimento especial a duas pessoas que foram essenciais para a escrita deste livro e, sem os quais o mesmo não teria nem saído da ideia. Primeiramente ao William Oliveira, por colocar a semente da escrita inicialmente e sugerir que um tema como este poderia ajudar muitas pessoas. Também, mas não menos importante, um outro agradecimento especial ao Diego Pinho, também autor pela Casa do Código, que me ajudou a dar início a todo o processo de escrita e me colocou em contato com a editora. Por último, mas não menos importante, gostaria muito de agradecer ao grande amigo Erick Wendel, por todos os debates e discussões sobre como este conteúdo poderia ser melhor apresentado e todas as ideias que vim a colocar em prática.
Por fim, agradeço a todo o pessoal da área de produto da Squid, que primeiro me apresentou à plataforma Kubernetes e me incentivaram a estudá-la, depositando em mim a confiança para testar ideias, errar e aprender com meus erros.
Sobre o livro
Este livro é destinado não só aos engenheiros de infraestrutura, sysadmins, devOps e à gama de profissões relacionadas a infraestrutura em si. Mas também a todos aqueles que queiram conhecer e aprender sobre o mundo de infraestrutura. Para isto será necessário um pouco de bagagem em tópicos base como redes, sistemas operacionais e contêineres Docker.
Pré-requisitos
Vamos conversar muito sobre máquinas virtuais, memória, CPU, recursos, rede, firewalls e outros jargões relacionados não à programação em si, mas a toda a tecnologia por trás do que move as nossas maiores ideias malucas. Então vai ser de muita ajuda se você já possuir um conhecimento prévio (seja ele básico ou avançado) sobre o assunto. Nada impedirá também a pesquisa em tempo real
durante a leitura do livro, pois não vamos nos aprofundar muito em nenhum destes tópicos de hardware.
Já o conhecimento prévio de contêineres (como os do Docker) é essencial, pois vamos trabalhar muito com este conceito e suas funcionalidades. Não é necessário ter o conhecimento do Docker em si, apesar de que vamos usar tanto as funcionalidades do Docker Hub quanto as demais opções da ferramenta. Se você quiser saber mais sobre Docker, refira à documentação oficial e aos links a seguir:
https://www.casadocodigo.com.br/products/livro-docker
https://docs.docker.com/
https://docs.docker.com/get-started/
Todo o trabalho de desenvolvimento do livro será trabalhado em ambiente Unix, portanto, o conhecimento prévio sobre ShellScript é fundamental, bem como o conhecimento do ambiente Linux/Mac como um todo. Enfatizo que, apesar de ser, sim, possível a instalação do Kubernetes em máquinas Windows, o tempo gasto para tal é impeditivo para a criação de um ambiente de desenvolvimento e para a conclusão deste livro. Vou deixar tutoriais para a instalação do ambiente em sistemas da Microsoft e também distribuições Linux, porém todo o desenvolvimento e testes do livro serão executados e testados em ambientes MacOSX (High Sierra).
Um detalhe para usuários Windows
Se você utiliza o Windows 10 em qualquer versão que não seja a Pro então você não terá como realizar a instalação do Docker, pois ele utiliza o Hyper-V para gerenciar as máquinas virtuais. Neste caso, aconselho a utilização de máquinas virtuais rodando Linux através do Virtual Box.
Discussão
Arquitetura de software é um tema empolgante por si só, a infraestrutura onde estes sistemas serão executados é algo muito mais! Porém, não é um assunto trivial e podemos ver pela internet várias discussões sobre melhores práticas, padrões, modelos etc. Por isso, não quero que este seja o único meio de interação tanto comigo mas também entre os leitores. O que proponho é a criação de uma pequena comunidade para que possamos fomentar discussões e conversas sobre este tema essencial nos dias de hoje.
Portanto, criei uma lista chamada Kubernetes: Tudo sobre orquestração de contêineres no link https://goo.gl/BCW4Xm/ de forma que possamos agilizar a interação dos leitores! Além disso, também temos o fórum da Casa do Código em http://forum.casadocodigo.com.br, uma ampla comunidade de leitores e autores dispostos a ajudar.
Além disso, todos os códigos que estou utilizando, imagens, arquivos declarativos e qualquer outro código-fonte está disponível em https://github.com/khaosdoctor/cdc-kubernetes-sources. Você também pode utilizar minhas imagens de contêineres pré-montadas em https://hub.docker.com/r/khaosdoctor.
Todos erramos, se você achou algo errado ou estranho neste livro e quiser submeter uma errata ou sugestão, acesse http://erratas.casadocodigo.com.br
Um pouco de conceito
Capítulo 1
Introdução
Para que possamos entender melhor todos os tópicos e arquiteturas que vamos ver durante o livro, primeiramente precisamos nos colocar nos lugares das pessoas que estão passando pelos problemas que queremos resolver. Desta forma vamos entender um pouco mais sobre as motivações, os prós e os contras de cada decisão tomada à medida que formos passando pelas situações.
Então, vamos nos colocar nos lugares de uma equipe de consultoria de software da empresa Código Limpo S.A. Nosso trabalho é entender os problemas do cliente e apresentar as melhores soluções possíveis. No nosso caso, somos especificamente da parte de infraestrutura.
Uma empresa chamada Container Corp fechou um projeto conosco. Eles precisam de uma solução para a sua arquitetura de sistemas porque ela está ficando cada vez mais ultrapassada e difícil de ser manuseada. Além disso, a empresa não possui nenhuma área de infraestrutura, tendo terceirizado todo o serviço, de forma que um dos maiores problemas atuais é a demora no atendimento.
Fomos convocados a uma reunião de alinhamento e briefing com o presidente da Container Corp. Ele quer nos contar a história da sua empresa e a motivação por trás de cada ideia e solução tomada ao longo dos anos, afinal, a empresa já possui mais de 10 anos de funcionamento, e precisamos desta informação para poder resolver o problema atual (que ainda não sabemos qual é).
1.1 Um sistema único – conhecendo os monólitos
O presidente nos recebeu em uma de suas salas de reuniões e, junto com seus sócios, começou a contar sobre a história da sua empresa.
A Container Corp foi fundada em 1999 e desde então é uma das maiores empresas de importação e exportação do Brasil. A maior parte da renda da empresa vem de seu produto principal, um e-commerce de produtos importados, mas a empresa também possui várias aplicações internas, ou seja, aplicações dedicadas à manutenção e gerência da própria empresa, como logística, RH, contabilidade e outras mais.
Na época de sua criação, não havia muitas tecnologias disponíveis para interação com a web, então o presidente nos apresentou o primeiro termo importante, uma aplicação monolítica.
O que é um monólito?
A primeira versão da aplicação da Container Corp era uma única aplicação, com toda a lógica de visualização, negócio e armazenamento de dados no mesmo lugar. Então todos os clientes acessavam o site utilizando seus respectivos browsers e o site continha tudo o que ele precisava para funcionar e interagia com o banco de dados para salvar os pedidos, tudo isso no mesmo lugar. O diagrama a seguir apresenta esta arquitetura visualmente:
Diagrama da arquitetura monolítica da Container CorpFigura 1.1: Diagrama da arquitetura monolítica da Container Corp
Isto, segundo o diretor de tecnologia, era o que supria todas as necessidades da empresa naquele momento. Tudo isto estava hospedado em uma empresa que vendia os chamados VPS (Virtual Private Servers), que nada mais eram do que máquinas muito robustas que continham separações lógicas que eram possíveis através de virtualização. A máquina não era totalmente dedicada e era compartilhada com outros clientes da empresa, mas todos os recursos como processamento, tráfego, espaço e RAM eram exclusivos daquele servidor, mais ou menos como no diagrama a seguir:
Diagrama de um VPS comum (Fonte: http://bit.ly/oqueevps)Figura 1.2: Diagrama de um VPS comum (Fonte: http://bit.ly/oqueevps)
O que é virtualização?
A técnica de virtualização é muito utilizada ainda hoje. Nela criamos máquinas virtuais (VMs) que são capazes de rodar uma nova instância de um sistema operacional completo dentro de uma outra máquina já existente. Ou seja, podemos executar diversos pequenos computadores dentro de um grande computador de forma isolada (sem que os recursos de um sejam compartilhados pelo outro), aproveitando ainda mais os recursos da máquina chamada de host.
Esta técnica também permite que executemos sistemas operacionais diferentes, como um Windows e um Linux na mesma máquina, sem que um interfira no outro.
Por muitos anos a loja virtual rodou tranquilamente neste modelo, mas então os problemas começaram a surgir.
1.2 Quando o bloco começa a quebrar – os problemas de um monólito
Com o crescimento do número de clientes e a quantidade de pedidos só aumentando, por volta de 2004, a Container Corp se viu obrigada a melhorar a sua infraestrutura para poder suportar toda a demanda que ela estava recebendo, a máquina VPS que foi alugada já não estava mais dando conta do recado.
A solução para este problema foi alugar um servidor dedicado. Ao invés de dividir o espaço de um servidor robusto com outras aplicações, o e-commerce agora estaria disposto em um servidor só dele.
Comparação entre um servidor dedicado e uma VPS (Adaptado de: http://bit.ly/servidor-dedicado-vps)Figura 1.3: Comparação entre um servidor dedicado e uma VPS (Adaptado de: http://bit.ly/servidor-dedicado-vps)
Um servidor dedicado leva mais tempo para ser configurado, pois ele vem de fábrica totalmente cru. Pessoas tiveram de ser contratadas para integrar a equipe de tecnologia, acarretando em um custo bastante alto para a empresa, não apenas com os novos funcionários, mas, principalmente, com a infraestrutura. Isso porque este tipo de servidor costuma ter seus preços mais elevados, pois a empresa que realiza o aluguel não pode diluir o valor