Nesta página, você aprende a fazer o seguinte:
- Criar um aplicativo "Hello World".
- Empacotar o aplicativo em uma imagem de contêiner usando o Cloud Build.
- Criar um cluster no Google Kubernetes Engine (GKE).
- Implantar a imagem de contêiner no cluster.
A amostra é exibida em várias linguagens, mas é possível usar outras além.
Antes de começar
-
Faça login na sua conta do Google.
Se você ainda não tiver uma, inscreva-se.
-
No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.
- Ative as APIs Cloud Build and Google Kubernetes Engine.
- Instale e inicialize o SDK do Cloud..
-
kubectl
é usado para gerenciar o Kubernetes, o sistema de orquestração de cluster usado pelo GKE. Instalekubectl
usandogcloud
:gcloud components install kubectl
Como escrever o aplicativo de amostra
Para instruções sobre como criar um aplicativo "Hello World" que seja executado no GKE, clique na linguagem usada por você:
Go
Crie um novo diretório com o nome
helloworld-gke
e altere o diretório nele:mkdir helloworld-gke cd helloworld-gke
Crie um novo módulo chamado
example.com/helloworld
:go mod init example.com/helloworld
Crie um novo arquivo chamado
helloworld.go
e cole o código a seguir nele:Com esse código, você cria um servidor da Web que realiza detecções na porta definida pela variável de ambiente
PORT
.
Você concluiu seu aplicativo. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Container Registry.
Node.js
Crie um novo diretório chamado
helloworld-gke
e mude para ele:mkdir helloworld-gke cd helloworld-gke
Crie um arquivo
package.json
com o seguinte conteúdo:No mesmo diretório, crie um arquivo
index.js
e copie as seguintes linhas nele:Com esse código, você cria um servidor da Web que realiza detecções na porta definida pela variável de ambiente
PORT
.
Você concluiu seu aplicativo. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Container Registry.
Python
Crie um novo diretório chamado
helloworld-gke
e mude para ele:mkdir helloworld-gke cd helloworld-gke
Crie um arquivo chamado
app.py
e cole o seguinte código nele:
Java
Crie um aplicativo Spring Boot.
Instale JDK Java SE 8 ou superior e cURL (links em inglês). O Java SE e cURL são necessários apenas para criar o novo projeto da Web na próxima etapa. O Dockerfile, descrito posteriormente, carrega todas as dependências no contêiner.
No terminal, crie um novo projeto da Web vazio:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d javaVersion=1.8 \ -d bootVersion=2.1.3.RELEASE \ -d name=helloworld \ -d artifactId=helloworld \ -d baseDir=helloworld-gke \ -o helloworld-gke.zip unzip helloworld-gke.zip cd helloworld-gke
Agora você tem um novo projeto de inicialização do Spring em
helloworld-gke
.No arquivo
src/main/java/com/example/helloworld/HelloworldApplication.java
, atualize a classeHelloworldApplication
adicionando um@RestController
para manipular o mapeamento/
.Com esse código, você cria um servidor da Web que realiza detecções na porta definida pela variável de ambiente
PORT
.
Você concluiu seu aplicativo. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Container Registry.
C#
Instale o SDK do .NET Core 2.2 (em inglês). Ele é necessário apenas para criar o novo projeto da Web na próxima etapa. O
Dockerfile
, que é descrito posteriormente, carrega todas as dependências no contêiner.No terminal, crie um novo projeto da Web vazio:
dotnet new web -o helloworld-gke
Altere o diretório para
helloworld-gke
.Atualize a definição
CreateWebHostBuilder
emProgram.cs
especificando o URL da porta para.UseUrls()
para definir a porta de exibição. A amostra mostra a porta8080
, mas é possível usar outras. Seu servidor precisa detectar na porta que você especificar aqui:
Você concluiu seu aplicativo. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Container Registry.
PHP
Crie um novo diretório chamado
helloworld-gke
e mude para ele:mkdir helloworld-gke cd helloworld-gke
Crie um arquivo chamado
index.php
e cole o seguinte código nele:
Você concluiu seu aplicativo. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Container Registry.
Ruby
Crie um novo diretório chamado
helloworld-gke
e mude para ele:mkdir helloworld-gke cd helloworld-gke
Crie um arquivo chamado
app.rb
e cole o seguinte código nele:Com esse código, você cria um servidor da Web que realiza detecções na porta definida pela variável de ambiente
PORT
.Crie um arquivo chamado
Gemfile
e copie o seguinte nele:
Como contentorizar um aplicativo com o Cloud Build
Para contentorizar o aplicativo de amostra, crie um novo arquivo chamado
Dockerfile
no mesmo diretório dos arquivos de origem e copie o seguinte conteúdo:Go
Node.js
Adicione outro arquivo
.dockerignore
para garantir que os arquivos locais não afetem o processo de criação do contêiner:Python
Adicione um arquivo
.dockerignore
para garantir que os arquivos locais não afetem o processo de criação do contêiner:Java
C#
Adicione um arquivo
.dockerignore
para garantir que os arquivos locais não afetem o processo de criação do contêiner:PHP
Adicione um arquivo
.dockerignore
para garantir que os arquivos locais não afetem o processo de criação do contêiner:Ruby
Receba seu ID do projeto do Google Cloud:
gcloud config get-value project
Crie sua imagem de contêiner usando o Cloud Build, que é semelhante à execução de
docker build
edocker push
, mas a versão acontece no Google Cloud. Substituaproject-id
pelo ID do Google Cloud:gcloud builds submit --tag gcr.io/project-id/helloworld-gke .
A imagem é armazenada no Container Registry.
crie um cluster do GKE;
Um cluster do GKE é um conjunto gerenciado de máquinas virtuais do Compute Engine que operam como uma única unidade. Dependendo da modo de operação escolhido para usar no GKE, ao criar um cluster, você especifica uma zona ou região padrão. Se você usar o modo Padrão, o cluster será zonal (neste tutorial), portanto, defina a zona de computação padrão. Se você usar o modo Autopilot, o cluster será regional. Portanto, defina a região de computação padrão.
Crie o cluster.
Padrão
Substitua
your-gcp-zone
pela zona do Google Cloud em que você quer hospedar seu cluster, comous-west1-a
:gcloud container clusters create helloworld-gke \ --num-nodes 1 \ --zone your-gcp-zone
Piloto automático
Substitua
your-gcp-region
pela região do Google Cloud em que você quer hospedar seu cluster, comous-west1
:gcloud container clusters create-auto helloworld-gke \ --region your-gcp-region
Verifique se você tem acesso ao cluster. O comando a seguir lista os nós no cluster do contêiner que estão em execução e indica que você tem acesso ao cluster.
kubectl get nodes
Se ocorrerem erros, consulte o Guia de solução de problemas do Kubernetes.
Como implantar no GKE
Para implantar o aplicativo no cluster do GKE que você criou, são necessários dois objetos do Kubernetes.
- O objeto Implantação para definir o aplicativo.
- O objeto Service para definir como acessar o aplicativo.
Implantar um aplicativo
O aplicativo tem um servidor de front-end que processa as solicitações da Web. Defina os recursos de cluster necessários para executar o front-end em um novo arquivo chamado deployment.yaml
. Eles são conhecidos como implantação. Use Implantações para criar e atualizar um ReplicaSet
(em inglês) e os pods associados.
Crie o arquivo
deployment.yaml
no mesmo diretório dos outros arquivos e copie o conteúdo a seguir, substituindo$GCLOUD_PROJECT
pelo ID do projeto do Google Cloud:Implante o recurso no cluster:
kubectl apply -f deployment.yaml
Acompanhe o status da implantação:
kubectl get deployments
A implantação é concluída quando todas as implantações
AVAILABLE
sãoREADY
.NAME READY UP-TO-DATE AVAILABLE AGE hello-deployment 1/1 1 1 20s
Se a implantação tiver um erro, execute
kubectl apply -f deployment.yaml
novamente para atualizar a implantação com alterações.Depois que a implantação for concluída, veja os pods criados por ela
kubectl get pods
Implantar um serviço
O objeto Service fornece um único ponto de acesso a um conjunto de pods. É possível acessar um único pod, mas eles são efêmeros, e o acesso só é confiável quando feito usando um endereço de Service. Em seu aplicativo Hello World, o serviço "hello" "define um balanceador de carga (em inglês) para acessar os conjuntos hello-app
a partir de um único endereço IP. Este Service é definido no arquivo service.yaml
.
Crie o arquivo
service.yaml
no mesmo diretório que seus outros arquivos de origem com o seguinte conteúdo:Os pods são definidos separadamente do Service que os usa. No Kubernetes, você usa etiquetas para selecionar os pods atendidos por um serviço. Com isso, você tem um Service que inclui pods de diferentes conjuntos de réplicas e vários Services que apontam para um pod específico.
Crie o serviço "Hello World":
kubectl apply -f service.yaml
Consiga o endereço IP externo do Service:
kubectl get services
Pode levar até 60 segundos para alocar o endereço IP. O endereço IP externo é listado na coluna
EXTERNAL-IP
do serviçohello
.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello LoadBalancer 10.22.222.222 35.111.111.11 80:32341/TCP 1m kubernetes ClusterIP 10.22.222.1 <none> 443/TCP 20m
Ver um aplicativo implantado
Agora você implantou todos os recursos necessários para executar o aplicativo "Hello World" no GKE. Use o endereço IP externo da etapa anterior para carregar o aplicativo no navegador da Web e executá-lo.
# Example cURL call to your running application on GKE (external IP address of service)
curl 35.111.111.11
Hello World!
Realizar a limpeza
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste guia de início rápido, siga estas etapas:
Você é cobrado pelas instâncias do Compute Engine em execução no cluster, bem como pela imagem de contêiner do Container Registry.Excluir o projeto
A exclusão do projeto do Cloud interrompe o faturamento de todos os recursos usados nesse projeto.
- No Console do Cloud, acesse a página Gerenciar recursos:
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir o cluster e o contêiner
Se quiser manter o projeto, mas excluir apenas os recursos usados neste tutorial, remova o cluster e a imagem.
Para excluir um cluster usando a ferramenta de linha de comando gcloud
, execute o comando a seguir para o modo que você usou:
Padrão
gcloud container clusters delete helloworld-gke \
--zone your-gcp-zone
Piloto automático
gcloud container clusters delete helloworld-gke \
--region your-gcp-region
Para excluir uma imagem de um dos repositórios do Container Registry, execute o comando a seguir:
gcloud container images delete gcr.io/project-id/helloworld-gke
A seguir
Para mais informações sobre o Kubernetes, consulte:
- Saiba mais sobre como criar clusters.
- Saiba mais sobre o Kubernetes.
- Leia a documentação de referência do
kubectl
.
Para mais informações sobre como fazer implantações no GKE, consulte:
- Saiba como empacotar, hospedar e implantar um aplicativo simples de servidor da Web.
- Implante um aplicativo de livro de visitas com Redis e PHP.
- Implante um aplicativo com estado do WordPress com armazenamento permanente e MySQL.
- Como configurar o Cloud Run no GKE.
Para mais informações sobre como fazer implantações no GKE diretamente do seu ambiente de desenvolvimento integrado com o Cloud Code, consulte: