Checkpoints
Create a Kubernetes cluster and launch Nginx container
/ 25
Create Monolith pods and service
/ 25
Allow traffic to the monolith service on the exposed nodeport
/ 5
Adding Labels to Pods
/ 20
Creating Deployments (Auth, Hello and Frontend)
/ 25
Orquestração na nuvem com o Kubernetes
- GSP021
- Informações gerais
- Objetivos
- Configuração e requisitos
- Tarefa 1. Acessar o exemplo de código
- Tarefa 2. Demonstração rápida do Kubernetes
- Tarefa 3. Pods
- Tarefa 4. Criar pods
- Tarefa 5. Interagir com os pods
- Tarefa 6. Serviços
- Tarefa 7: criar um serviço
- Tarefa 8. Adicionar rótulos aos pods
- Tarefa 9. Implantar aplicativos com o Kubernetes
- Tarefa 10. Criar implantações
- Parabéns!
GSP021
Informações gerais
O Kubernetes é um projeto de código aberto (disponível em kubernetes.io) que pode ser executado em diversos ambientes, de laptops a clusters com vários nós de alta disponibilidade, de nuvens públicas a implantações locais e de máquinas virtuais a bare metal.
Neste laboratório, será usado um ambiente gerenciado, como o Kubernetes Engine, para você se concentrar mais em testar o Kubernetes e não ter que configurar a infraestrutura. O Kubernetes Engine é um ambiente gerenciado para implantação de aplicativos conteinerizados. Ele inclui as mais recentes inovações em produtividade para desenvolvedores, eficiência de recursos, operações automatizadas e a flexibilidade do código aberto para acelerar seu tempo de lançamento.
Objetivos
Neste laboratório, você vai aprender a:
- provisionar um cluster completo do Kubernetes usando o Kubernetes Engine;
- implantar e gerenciar contêineres do Docker usando a
kubectl
; - dividir um aplicativo em microsserviços usando as implantações e serviços do Kubernetes.
Configuração e requisitos
Antes de clicar no botão Start Lab
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome).
- Tempo para concluir o laboratório---não se esqueça: depois de começar, não será possível pausar o laboratório.
Como iniciar seu laboratório e fazer login no console do Google Cloud
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta. -
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}} Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}} Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais. -
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Ativar o Cloud Shell
O Cloud Shell é uma máquina virtual com várias ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud. O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
- Clique em Ativar o Cloud Shell na parte de cima do console do Google Cloud.
Depois de se conectar, vai notar que sua conta já está autenticada, e que o projeto está configurado com seu PROJECT_ID. A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:
gcloud
é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- (Opcional) É possível listar o nome da conta ativa usando este comando:
-
Clique em Autorizar.
-
A saída será parecida com esta:
Saída:
- (Opcional) É possível listar o ID do projeto usando este comando:
Saída:
Exemplo de saída:
gcloud
, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.
Google Kubernetes Engine
- No ambiente do Cloud Shell, digite o seguinte comando para definir a zona:
- Inicie um cluster para usar neste laboratório:
gcloud container clusters get-credentials io
para fazer a autenticação novamente.
Tarefa 1. Acessar o exemplo de código
- Copie o código-fonte da linha de comando do Cloud Shell:
- Mude para o diretório deste laboratório:
- Liste os arquivos para saber com qual deles você está trabalhando:
O exemplo tem o seguinte layout:
Agora que você tem o código, é hora de começar a usar o Kubernetes.
Tarefa 2. Demonstração rápida do Kubernetes
A maneira mais fácil de começar a usar o Kubernetes é com o comando kubectl create
.
- Use-o para iniciar uma única instância do contêiner nginx:
O Kubernetes vai criar uma implantação. Há mais informações sobre implantações mais adiante. Por enquanto, tudo o que você necessita saber é que as implantações mantêm os pods funcionando mesmo quando há falha nos nós em que eles são executados.
No Kubernetes, todos os contêineres são executados em um pod.
- Use o comando
kubectl get pods
para acessar o contêiner nginx em execução:
- Assim que o contêiner nginx estiver com o status "Em execução", é possível expor esse contêiner fora do Kubernetes usando o comando
kubectl expose
:
O que aconteceu? O Kubernetes criará, em segundo plano, um balanceador de carga externo com um endereço IP público anexado a ele. Qualquer cliente que alcançar esse endereço IP público será encaminhado para os pods que estão por trás do serviço. Nesse caso, seria o pod do nginx.
- Liste nossos serviços usando o comando
kubectl get services
:
ExternalIP
do seu serviço seja preenchido. Isso é normal. Basta executar novamente o comando kubectl get services
em intervalos de alguns segundos até o campo ser preenchido.
- Adicione o IP externo a esse comando para acessar o contêiner Nginx remotamente:
Pronto! O Kubernetes oferece suporte para um fluxo de trabalho fácil e pronto para uso com os comandos kubectl
run e expose.
Teste a tarefa concluída
Clique em Verificar meu progresso abaixo para conferir seu andamento no laboratório. Depois de criar um cluster do Kubernetes e implantar um contêiner Nginx, você vai poder conferir uma pontuação de avaliação.
Depois desse tour rápido pelo Kubernetes, é hora de você conhecer melhor cada um dos componentes e abstrações.
Tarefa 3. Pods
A parte essencial do Kubernetes está no Pod.
Os pods representam e retêm uma coleção de um ou mais contêineres. Geralmente, quando há vários contêineres com forte dependência uns dos outros, você os empacota dentro de um único pod.
Neste exemplo, há um pod com os contêineres monolítico e nginx.
Os pods têm também Volumes. Volumes são discos de dados que duram o tempo que durarem os pods e podem ser usados pelos contêineres desses pods. Os pods fornecem um namespace compartilhado do conteúdo deles, ou seja, os dois contêineres dentro do nosso pod de exemplo podem se comunicar entre si e também compartilham os volumes anexados.
Os pods compartilham também um namespace de rede. Isso significa que há um endereço IP por pod.
A seguir, saiba mais sobre pods.
Tarefa 4. Criar pods
Os pods podem ser criados com arquivos de configuração de pods. Reserve um momento para conhecer o arquivo de configuração do pod monolítico.
- Acesse o diretório:
- Execute o comando a seguir:
A resposta mostra o arquivo de configuração aberto:
Há algumas coisas para serem observadas aqui. Você vai notar que:
- seu pod é composto de um contêiner (o monolítico);
- alguns argumentos serão passados para nosso contêiner quando ele iniciar;
- a porta 80 será aberta para o tráfego http.
- Crie o pod do monolítico usando o comando
kubectl
:
- Examine seus pods. Use o comando
kubectl get pods
para listar todos os pods em execução no namespace padrão:
- Quando o pod estiver funcionando, use o comando
kubectl describe
para receber mais informações sobre o pod do monolítico:
Você vai observar várias informações sobre o pod do monolítico, incluindo o endereço IP do pod e o log de eventos. Essas informações serão úteis na solução de problemas.
O Kubernetes facilita a criação de pods, basta descrevê-los nos arquivos de configuração, além de simplificar a visualização das informações sobre eles quando estão em execução. Agora, você vai conseguir criar todos os pods necessários para a implantação.
Tarefa 5. Interagir com os pods
Por padrão, os pods recebem um endereço IP privado e não podem ser acessados fora do cluster. Use o comando kubectl port-forward
para associar uma porta local a uma porta dentro do pod do monolítico.
-
Abra um segundo terminal do Cloud Shell. Agora você tem dois terminais, um para executar o comando
kubectl port-forward
e o outro para emitir comandoscurl
. -
No 2º terminal, execute este comando para configurar o encaminhamento de portas:
- No 1º terminal, comece a se comunicar com seu pod usando
curl
:
Sim. Você receberá um simpático "hello" do seu contêiner.
- Agora, use o comando
curl
para observar o que acontece quando você alcança um endpoint seguro:
Ops.
- Tente fazer login para receber um token de autenticação do monolítico:
- No prompt de login, use a senha supersecreta
password
para entrar.
A entrada fez com que o token JWT fosse impresso.
- Como o Cloud Shell não lida muito bem com a cópia de strings longas, crie uma variável de ambiente para o token.
-
Digite novamente a senha supersecreta
password
quando for solicitado. -
Use este comando para copiar e usar o token de acesso ao endpoint seguro com
curl
:
Nesse momento, você vai receber uma resposta do nosso aplicativo informando que está tudo certo novamente.
- Use o comando
kubectl logs
para acessar os registros do pod domonolith
:
-
Abra um 3º terminal e use a flag
-f
para receber um stream dos registros adicionados em tempo real:
- Agora, se você usar
curl
no 1º terminal para interagir com o monolítico, vai observar a atualização dos registros no 3º terminal:
- Use o comando
kubectl exec
para executar um shell interativo dentro do pod do monolítico. Isso pode ser útil para solucionar problemas de dentro de um contêiner:
- Por exemplo, quando há um shell em um contêiner monolítico, é possível testar a conectividade externa usando o comando
ping
:
- Não esqueça de sair quando terminar esse shell interativo.
Como você pode observar, a interação com os pods é tão fácil quanto usar o comando kubectl
. Seja para acessar remotamente um contêiner ou para receber um shell de login, o Kubernetes fornece tudo o que você precisa para iniciar e seguir em frente.
Tarefa 6. Serviços
Os pods não foram criados para serem persistentes. Eles podem ser interrompidos ou iniciados por muitas razões, por exemplo, falha nas verificações de integridade ou de prontidão, o que gera um problema:
O que acontece quando você quer se comunicar com um conjunto de pods? Quando eles forem reiniciados, é possível que tenham endereço IP diferente.
É aqui que entram os Serviços. Eles fornecem endpoints estáveis para pods.
Os serviços aplicam rótulos para determinar os pods em que eles operam. Se os pods tiverem os rótulos corretos, serão automaticamente selecionados e expostos por nossos serviços.
O nível de acesso de um serviço a um conjunto de pods depende do tipo de serviço. Atualmente, existem três tipos:
-
ClusterIP
(interno) é o tipo padrão, significa que esse serviço só é visível dentro do cluster. -
NodePort
concede a cada nó do cluster um IP externamente acessível. -
LoadBalancer
adiciona um balanceador de carga do provedor de nuvem que encaminha o tráfego do serviço para os nós dentro dele.
Agora, você vai aprender a:
- criar um serviço;
- usar seletores de rótulo para expor um conjunto limitado de pods externamente.
Tarefa 7: criar um serviço
Antes de criar serviços, crie um pod seguro que possa lidar com o tráfego HTTPS.
- Se você modificou diretórios, retorne para o diretório
~/orchestrate-with-kubernetes/kubernetes
:
- Conheça o arquivo de configuração de serviço do monolítico:
- Crie os pods de secure-monolith e os dados de configuração deles:
Agora que você tem um pod seguro, é hora de expor o pod secure-monolith externamente. Para isso, crie um serviço do Kubernetes.
- Conheça o arquivo de configuração de serviço do monolítico:
(Resposta):
* Há um seletor que é usado para localizar e expor automaticamente todos os pods com os rótulos "app: monolith" e "secure: enabled".
Agora é preciso expor o nodeport porque é assim que vamos encaminhar o tráfego externo da porta 31000 para o nginx, na porta 443.
- Use o comando
kubectl create
para criar o serviço do monolítico do arquivo de configuração de serviço do monolítico:
(Resposta):
Teste a tarefa concluída
Clique em Verificar meu progresso abaixo para conferir seu andamento no laboratório. Se o serviço e os pods monolíticos tiverem sido criados corretamente, você terá uma pontuação de avaliação.
Você está usando uma porta para expor o serviço. Isso significa que poderá haver colisões de porta se outro app tentar se vincular à porta 31000 em um de seus servidores.
Normalmente, o Kubernetes lidaria com essa atribuição de porta. Neste laboratório, você escolheu uma porta para facilitar a configuração das verificações de integridade mais tarde.
- Use o comando
gcloud compute firewall-rules
para permitir tráfego para o serviço do monolítico no nodeport exposto:
Teste a tarefa concluída
Clique em Verificar meu progresso abaixo para conferir seu andamento no laboratório. Se a regra do firewall para permitir tráfego TCP na porta 31000 tiver sido criada corretamente, você terá uma pontuação de avaliação.
Agora que está tudo configurado, você pode acessar o serviço secure-monolith de fora do cluster sem usar o encaminhamento de portas.
- Escolha um endereço IP externo para um dos nós.
- Agora, tente acessar o serviço secure-monolith usando
curl
:
Ops. O tempo limite esgotou. O que deu errado?
Observação: é hora de fazer um teste rápido de conhecimento.
Use os seguintes comandos para responder as perguntas abaixo:kubectl get services monolith
kubectl describe services monolith
Perguntas:
Dica: isso está relacionado a rótulos. Você vai corrigir o problema na próxima seção.
Tarefa 8. Adicionar rótulos aos pods
Atualmente, o serviço do monolítico não tem endpoints. Uma maneira de resolver um problema como este é usar o comando kubectl get pods
com uma consulta de rótulo.
- Observe que você tem alguns pods em execução com o rótulo monolith.
- Mas e o "app=monolith" e o "secure=enabled"?
Observe que essa consulta de rótulo não imprime nenhum resultado. Parece que é preciso adicionar o rótulo "secure=enabled" a eles.
- Use o comando
kubectl label
para adicionar ao pod do secure-monolith o rótulosecure=enabled
que falta. Depois, verifique se os rótulos foram atualizados.
- Agora que os pods estão rotulados corretamente, observe a lista de endpoints no serviço do monolítico:
Agora você tem um!
- Faça o teste acessando um dos nossos nós de novo.
Pimba! Deu tudo certo.
Teste a tarefa concluída
Clique em Verificar meu progresso abaixo para conferir seu andamento no laboratório. Se o rótulo tiver sido adicionado aos pods monolíticos corretamente, você terá uma pontuação de avaliação.
Tarefa 9. Implantar aplicativos com o Kubernetes
O objetivo deste laboratório é preparar você para escalonar e gerenciar contêineres na produção. É aqui que entram as Implantações. As implantações são uma maneira declarativa de garantir que o número de pods em execução seja igual ao número desejado de pods especificado pelo usuário.
O principal benefício das implantações é a abstração dos detalhes de nível inferior do gerenciamento de pods. As implantações usam conjuntos de réplicas ReplicaSet em segundo plano para gerenciar o início e a interrupção dos pods. Se for necessário atualizar ou escalonar os pods, a implantação cuidará disso. A implantação também trata do reinício dos pods, caso eles parem por algum motivo.
Observe um exemplo rápido:
Os pods estão vinculados ao ciclo de vida do nó no qual foram criados. No exemplo acima, o Node3 parou, e também um pod com ele. Em vez de criar manualmente um novo pod e encontrar um nó para ele, sua implantação criou um novo pod e o iniciou no Node2.
Isso é bem legal!
É hora de combinar tudo o que você aprendeu sobre pods e serviços para dividir o aplicativo monolítico em serviços menores usando as implantações.
Tarefa 10. Criar implantações
Vamos dividir o app monolítico em três partes separadas:
- Auth: gera tokens JWT para usuários autenticados.
- hello: saúda os usuários autenticados.
- front-end: encaminha o tráfego para os serviços Auth e hello.
Tudo pronto para criar implantações, uma para cada serviço. Depois, você vai definir serviços internos para as implantações de Auth e hello e um serviço externo para a implantação de front-end. Depois de finalizado, será possível interagir com os microsserviços, como faz com o monolítico. Mas agora, cada parte pode ser escalonada e implantada de maneira independente.
- Comece examinando o arquivo de configuração de implantação de Auth.
(Resposta)
A implantação está criando uma réplica, e você está usando a versão 2.0.0 do contêiner Auth.
Quando você executa o comando kubectl create
para criar a implantação de Auth, ele cria um pod de acordo com os dados contidos no manifesto de implantação. Isso significa que é possível escalonar o número de pods mudando o número especificado no campo "Replicas".
- De qualquer maneira, vá em frente e crie seu objeto de implantação:
- É hora de criar um serviço para sua implantação de Auth. Use o comando
kubectl create
para criar o serviço Auth:
- Repita o procedimento para criar e expor a implantação de hello:
- Repita o processo mais uma vez para criar e expor a implantação de front-end.
- Interaja com o front-end capturando o IP externo e usando o comando "curl".
EXTERNAL-IP
for pendente.Você vai receber uma saudação "hello" como resposta.
Teste a tarefa concluída
Clique em Verificar meu progresso abaixo para conferir seu andamento no laboratório. Se as implantações Auth, hello e front-end tiverem sido criadas corretamente, você terá uma pontuação de avaliação.
Parabéns!
Parabéns! Você desenvolveu um aplicativo de diversos serviços usando o Kubernetes. Use o conhecimento que você adquiriu aqui para implantar aplicativos complexos no Kubernetes utilizando uma coleção de implantações e serviços.
Próximas etapas / Saiba mais
- Fique por dentro das novidades do Kubernetes no X (em inglês) e no blog da comunidade.
- Lembre-se: o Kubernetes é um projeto de código aberto (http://kubernetes.io/) hospedado no GitHub. Sua participação com feedback e contribuições é sempre bem-vinda.
Treinamento e certificação do Google Cloud
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 29 de abril de 2024
Laboratório testado em 29 de abril de 2024
Copyright 2024 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.