Implantar um app em uma imagem de contêiner em um cluster do GKE
Nesta página, você aprende as seguintes ações com relação à verificação de tempo de atividade:
- 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.
Para seguir as instruções da tarefa diretamente no editor do Cloud Shell, clique em Orientação:
Antes de começar
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Artifact Registry, Cloud Build, and Google Kubernetes Engine.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
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 app. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Artifact 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 app. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Artifact 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.6.6 \ -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 app. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Artifact Registry.
C#
Instale o SDK .NET. O SDK .NET será 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
.cd helloworld-gke
Atualize o
Program.cs
para detectar a atividade na porta8080
:
Você concluiu seu app. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Artifact 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 app. Ele está pronto para ser empacotado em um contêiner do Docker e enviado por upload ao Artifact 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
Neste guia de início rápido, você armazenará o contêiner no Artifact Registry e o implantará no cluster a partir do registro. Execute o seguinte comando para criar um repositório chamado
hello-repo
no mesmo local do cluster:gcloud artifacts repositories create hello-repo \ --project=PROJECT_ID \ --repository-format=docker \ --location=us-central1 \ --description="Docker repository"
Substitua os seguintes valores:
PROJECT_ID
é o ID do projeto do Google Cloud.
Crie sua imagem de contêiner usando Cloud Build, que é semelhante à execução de
docker build
edocker push
, mas isso acontece no Google Cloud:gcloud builds submit \ --tag us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/helloworld-gke .
A imagem é armazenada no Artifact 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.
Crie o cluster.
gcloud container clusters create-auto helloworld-gke \ --location us-central1
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.
- A 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. Substitua os seguintes valores no seu arquivo:$GCLOUD_PROJECT
é o ID do projeto do Google Cloud:$LOCATION
é o local do repositório, comous-central1
.
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 helloworld-gke 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 serviço. 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 serviço é 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 serviço que os usa. No Kubernetes, você usa identificadores para selecionar os pods abrangidos por um serviço. Com isso, é possível ter um serviço que atende pods de diferentes conjuntos de réplicas e ter vários serviços que apontam para um pod específico.
Crie o serviço "Hello World":
kubectl apply -f service.yaml
Encontre o endereço IP externo do serviço:
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 app "Hello World" no GKE.
Use o endereço IP externo da etapa anterior para carregar o app no navegador da Web e vê-lo em execução:
http://EXTERNAL_IP
Também é possível fazer uma chamada curl
para o endereço IP externo do serviço:
curl EXTERNAL_IP
O resultado exibido é:
Hello World!
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.
Você é cobrado pelas instâncias do Compute Engine em execução no cluster, bem como pela imagem de contêiner no Artifact Registry.Excluir o projeto
A exclusão do projeto do Google Cloud interrompe o faturamento de todos os recursos usados no projeto.
- No Console do Google 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 Google Cloud CLI, execute o comando a seguir no modo usado:
gcloud container clusters delete helloworld-gke \
--location us-central1
Para excluir uma imagem no repositório do Artifact Registry, execute o seguinte comando:
gcloud artifacts docker images delete \
us-central1-docker.pkg.dev/PROJECT_ID/hello-repo/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 de
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.
- Crie um aplicativo de livro de visitas com Redis e PHP.
- Implantar o WordPress no GKE com discos permanentes e o Cloud SQL.
- Como configurar o Cloud Run no GKE.
Para mais informações sobre como criar, desenvolver e executar aplicativos no GKE diretamente do seu ambiente de desenvolvimento integrado com o Cloud Code, consulte: