Implemente uma app num cluster do GKE

Neste início rápido, implementa uma amostra de um servidor Web de uma aplicação em contentores num cluster do Google Kubernetes Engine (GKE). Aprende a criar um cluster e a implementar a aplicação no cluster para que os utilizadores possam aceder à mesma.

Esta página destina-se a operadores e programadores que preparam e configuram recursos na nuvem, e implementam apps e serviços. Para saber mais sobre as funções comuns e as tarefas de exemplo que referimos no Google Cloud conteúdo, consulteFunções e tarefas comuns do utilizador do GKE.

Antes de ler esta página, certifique-se de que conhece o Kubernetes.

Antes de começar

Siga estes passos para ativar a API Kubernetes Engine:
  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry and Google Kubernetes Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry and Google Kubernetes Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Funções necessárias

    Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: your project ID.
    • USER_IDENTIFIER: the identifier for your user account—for example, myemail@example.com.
    • ROLE: the IAM role that you grant to your user account.

Inicie o Cloud Shell

Neste tutorial, vai usar o Cloud Shell, que é um ambiente de shell para gerir recursos alojados no Google Cloud.

O Cloud Shell vem pré-instalado com a CLI Google Cloud e a ferramenta de linha de comandos kubectl. A CLI gcloud fornece a interface de linhas de comando principal para o Google Cloude o kubectl fornece a interface de linhas de comando principal para executar comandos em clusters do Kubernetes.

Inicie o Cloud Shell:

  1. Aceda à Google Cloud consola.

    Google Cloud consola

  2. No canto superior direito da consola, clique no botão Ativar Cloud Shell:

É aberta uma sessão do Cloud Shell num frame na parte inferior da consola. Use esta shell para executar os comandos gcloud e kubectl. Antes de executar comandos, defina o projeto predefinido na CLI do Google Cloud com o seguinte comando:

gcloud config set project PROJECT_ID

Substitua PROJECT_ID pelo seu ID do projeto.

Crie um cluster do GKE

Um cluster consiste em, pelo menos, uma máquina do painel de controlo do cluster e várias máquinas de trabalho denominadas nós. Os nós são instâncias de máquinas virtuais (VMs) do Compute Engine que executam os processos do Kubernetes necessários para os tornar parte do cluster. Implementa aplicações em clusters e as aplicações são executadas nos nós.

Esta secção mostra-lhe como criar um cluster no modo Autopilot, que é o modo de cluster recomendado para a maioria dos exemplos de utilização de produção. Em alternativa, pode usar um cluster do modo padrão do GKE para realizar estes passos.

Crie um cluster do Autopilot com o nome hello-cluster:

gcloud container clusters create-auto hello-cluster \
    --location=us-central1

A criação do cluster pode demorar alguns minutos.

Obtenha credenciais de autenticação para o cluster

Depois de criar o cluster, tem de obter credenciais de autenticação para interagir com o cluster:

gcloud container clusters get-credentials hello-cluster \
    --location us-central1

Este comando configura o kubectl para usar o cluster que criou.

Implemente uma aplicação no cluster

Agora que criou um cluster, pode implementar uma aplicação contentorizada no mesmo. Para este início rápido, pode implementar a nossa aplicação Web de exemplo, hello-app.

O GKE usa objetos Kubernetes para criar e gerir os recursos do seu cluster. O Kubernetes fornece o objeto Deployment para implementar aplicações sem estado, como servidores Web. Os objetos Service definem regras e o equilíbrio de carga para aceder à sua aplicação a partir da Internet.

Crie a implementação

Para executar o hello-app no seu cluster, tem de implementar a aplicação executando o seguinte comando:

kubectl create deployment hello-server \
    --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Este comando do Kubernetes, kubectl create deployment, cria uma implementação denominada hello-server. O pod da implementação executa a imagem do contentor hello-app.

Neste comando:

  • --image especifica uma imagem de contentor a implementar. Neste caso, o comando extrai a imagem de exemplo de um repositório do Artifact Registry, us-docker.pkg.dev/google-samples/containers/gke/hello-app. :1.0 indica a versão específica da imagem a obter. Se não especificar uma versão, é usada a imagem com a etiqueta latest predefinida.

Exponha a implementação

Depois de implementar a aplicação, tem de a expor à Internet para que os utilizadores possam aceder à mesma. Pode expor a sua aplicação criando um serviço, um recurso do Kubernetes que expõe a sua aplicação ao tráfego externo.

Para expor a sua aplicação, execute o seguinte comando kubectl expose:

kubectl expose deployment hello-server \
    --type LoadBalancer \
    --port 80 \
    --target-port 8080

A transmissão da flag --type LoadBalancer cria um balanceador de carga do Compute Engine para o seu contentor. A flag --port inicializa a porta 80 pública para a Internet e a flag --target-port encaminha o tráfego para a porta 8080 da aplicação.

Os balanceadores de carga são faturados de acordo com os preços dos balanceadores de carga do Compute Engine.

Inspecione e veja a aplicação

  1. Inspecione os pods em execução com o comando kubectl get pods:

    kubectl get pods
    

    Deve ver um hello-server pod em execução no cluster.

  2. Inspeccione o hello-server serviço através de kubectl get service:

    kubectl get service hello-server
    

    A partir do resultado deste comando, copie o endereço IP externo do serviço da coluna EXTERNAL-IP.

  3. Veja a aplicação a partir do navegador de Internet através do endereço IP externo com a porta exposta:

    http://EXTERNAL_IP
    

Acabou de implementar uma aplicação Web contentorizada no GKE.

Para monitorizar e organizar os seus recursos do GKE de uma forma centrada na aplicação, pode adicionar os seus recursos como serviços e cargas de trabalho às aplicações do App Hub.

Para mais informações sobre os recursos suportados pelo App Hub, consulte o artigo Recursos suportados.

Para saber como configurar o App Hub no seu projeto, consulte o artigo Configure o App Hub.

Limpar

Para evitar incorrer em custos na sua Google Cloud conta pelos recursos usados nesta página, elimine o Google Cloud projeto com os recursos.

  1. Elimine o serviço da aplicação executando o comando kubectl delete:

    kubectl delete service hello-server
    

    Este comando elimina o balanceador de carga do Compute Engine que criou quando expôs a implementação.

  2. Elimine o cluster executando o comando gcloud container clusters delete:

    gcloud container clusters delete hello-cluster \
        --location us-central1
    

Opcional: hello-app revisão do código

hello-app é uma aplicação de servidor Web que consiste em dois ficheiros: main.go e um Dockerfile.

hello-app está incluído como uma imagem de contentor do Docker. As imagens de contentores são armazenadas em qualquer registo de imagens do Docker, como o Artifact Registry. Alojamos hello-app num repositório do Artifact Registry em us-docker.pkg.dev/google-samples/containers/gke/hello-app.

main.go

main.go é uma implementação de servidor Web escrita na linguagem de programação Go. O servidor responde a qualquer pedido HTTP com uma mensagem "Hello, world!".

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// register hello function to handle all requests
	mux := http.NewServeMux()
	mux.HandleFunc("/", hello)

	// use PORT environment variable, or default to 8080
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	log.Fatal(http.ListenAndServe(":"+port, mux))
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Ficheiro Docker

Dockerfile descreve a imagem que quer que o Docker crie, incluindo todos os respetivos recursos e dependências, e especifica a porta de rede que a app deve expor. Para mais informações sobre como este ficheiro funciona, consulte a referência do Dockerfile na documentação do Docker.

FROM golang:1.24.3 as builder
WORKDIR /app
RUN go mod init hello-app
COPY *.go ./
RUN CGO_ENABLED=0 GOOS=linux go build -o /hello-app

FROM gcr.io/distroless/base-debian11
WORKDIR /
COPY --from=builder /hello-app /hello-app
ENV PORT 8080
USER nonroot:nonroot
CMD ["/hello-app"]

O que se segue?

Experimente

Se está a usar o Google Cloud pela primeira vez, crie uma conta para avaliar o desempenho do GKE em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.

Experimente o GKE gratuitamente