Kubernetes Tudo sobre orquestração de contêineres
Lucas SantosSobre 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:
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.
Sobre o autor
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) e NodeSchool SP (http://nodeschool.io/saopaulo), me empenhando cada dia mais para levar o conhecimento de tecnologia e inspirar outras pessoas a aprender.
Você pode encontrar o link de todas as minhas redes sociais no meu site: http://lsantos.me/ ou escrevendo artigos no Medium (https://medium.com/@khaosdoctor), ou no portal iMasters (https://imasters.com.br/perfil/lucassantos).
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
Sumário
- Parte 1 - Um pouco de conceito
- 1 Introdução
- 1.1 Um sistema único – conhecendo os monólitos
- 1.2 Quando o bloco começa a quebrar – os problemas de um monólito
- 1.3 Computação fora do chão – O início da nuvem
- 1.4 Muitos monstrinhos – O que são microsserviços?
- 2 Kubernetes
- 2.1 O que é
- 2.2 Clusters
- 2.3 Aprendendo a se comunicar: o nó master
- 2.4 Slave nodes
- 2.5 Voltando ao trabalho
- Parte 2 - Mãos à obra
- 3 Preparando o ambiente
- 4 Comunicando-se com o cluster
- 4.1 Estrutura
- 4.2 Recursos de sistema
- 5 Indo para a nuvem
- 5.1 Criando nosso primeiro cluster no Google Cloud
- 5.2 Criando nosso primeiro cluster no Microsoft AKS
- 5.3 Azure SDK e acesso local
- Parte 3 - Kubernetes de verdade
- 6 Usando pods para criar algo útil
- 6.1 Pods
- 6.2 Mãos à obra
- 6.3 Ciclo de vida de um pod
- 6.4 Montando nossa imagem
- 7 Tornando nossos apps públicos com services
- 7.1 Services
- 7.2 Definindo um service
- 8 Dando nome aos bois utilizando ingresses
- 8.1 Edge routers
- 8.2 Ingresses
- 8.3 Criando um ingress
- 8.4 Tipos de ingress
- 8.5 Ingresses e Cloud
- 9 Mantendo dados com volumes
- 9.1 Volumes
- 9.2 Tipos de volume
- 9.3 Mãos à obra
- 10 Mantendo dados para sempre com volumes persistentes
- 10.1 Ciclo de vida
- 10.2 Criando um volume persistente local
- 10.3 Volume persistentes na nuvem
- 11 Utilizando secrets para armazenar dados sensíveis
- 11.1 Secrets
- 11.2 Pondo os dados para bom uso
- 11.3 Outros usos de secrets
- 12 Configurações sempre à mão com ConfigMaps
- 12.1 ConfigMaps
- 12.2 Utilizando ConfigMaps
- 12.3 Atualizando os dados automaticamente
- 13 Dando superpoderes aos nossos pods através de deployments
- 13.1 Deployments
- 13.2 Utilizando um deployment
- 13.3 Crescendo cada vez mais
- 13.4 Gerenciando versões
- 13.5 Gerenciando histórico de publicações
- 14 Tornando tudo escalável com um HPA
- 14.1 Como funciona?
- 14.2 Escalando um deployment
- 14.3 Versionando um autoscaler
- 15 Tarefas repetitivas com cronjobs
- 15.1 Jobs
- 15.2 Jobs no Kubernetes
- 15.3 Cronjobs
- 16 Colocando ordem na casa usando namespaces
- 16.1 Namespaces
- 16.2 Namespaces padrões
- 16.3 Manipulando namespaces
- 16.4 Namespaces e serviços
- 16.5 Quando criar um namespace
- 17 Dicas gerais
- 17.1 Melhores práticas de configuração
- 17.2 Helm
- Parte 4 - Apêndice
- 18 Guia de referência para comandos do Kubectl
- 18.1 Criação
- 18.2 Informação
- 18.3 Edição
- 18.4 Flags de modificação
- 19 Referências de estudo
Dados do produto
- Número de páginas:
- 333
- ISBN:
- 978-85-7254-024-7
- Data publicação:
- 08/2019