Neste tutorial, mostramos como criar um aplicativo da Web de várias camadas usando o Google Kubernetes Engine (GKE).
Neste tutorial, você faz as ações a seguir:
- Configure um aplicativo da Web com um endereço IP externo e um balanceador de carga.
- Crie um cluster Redis com um único mestre (líder) e várias réplicas (seguidores).
O exemplo descreve os seguintes conceitos do Kubernetes:
- Configuração declarativa usando arquivos de manifestos YAML.
- Implantações, que são recursos do Kubernetes que determinam a configuração de um conjunto de pods replicados.
- Serviços para criar balanceadores de cargas internos e externos em um conjunto de pods.
Objetivos
Para implantar e executar o aplicativo no GKE:- Configurar o líder do Redis
- Configurar dois seguidores do Redis
- Configurar o front-end da Web
- Acesse o site
- Escalonar o front-end da Web
No diagrama a seguir, mostramos uma visão geral da arquitetura de cluster que você cria ao concluir estes objetivos:
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na sua projeção de uso, utilize a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpeza.
Antes de começar
O Cloud Shell vem pré-instalado com o software
necessário para este tutorial, incluindo kubectl e
gcloud CLI. Se você não usa o Cloud Shell, é necessário instalar a gcloud CLI.
- 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.
-
Install the Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Create or select 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Install the Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, execute o seguinte comando:
gcloud init -
Create or select 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the GKE API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
Defina as variáveis de ambiente:
export PROJECT_ID=PROJECT_ID export COMPUTE_LOCATION=COMPUTE_LOCATIONSubstitua:
PROJECT_ID: o ID do projeto do Google CloudCOMPUTE_LOCATION: um local do Compute Engine, comous-central1.
Clone o repositório do GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesMude para o diretório de trabalho:
cd kubernetes-engine-samples/quickstarts/guestbook/No manifesto a seguir, descrevemos uma implantação do Kubernetes que executa um pod líder do Redis de réplica única:
Aplique o manifesto ao cluster:
kubectl apply -f redis-leader-deployment.yamlVerifique se o pod líder do Redis está em execução:
kubectl get podsO resultado será assim:
NAME READY STATUS RESTARTS AGE redis-leader-343230949-qfvrq 1/1 Running 0 43sPode levar vários minutos para que
STATUSmude dePendingparaRunning.O manifesto a seguir descreve um serviço para o líder do Redis:
Esse manifesto inclui um conjunto de seletores de rótulos. Esses rótulos são iguais ao conjunto implantado na etapa anterior. Portanto, esse serviço faz o roteamento do tráfego de rede para o pod do líder do Redis criado em uma etapa anterior.
A seção
portsdo manifesto apresenta um único mapeamento de porta. O serviço encaminha o tráfego emport: 6379paratargetPort: 6379dos contêineres que correspondem aos rótulosselectorespecificados. OcontainerPortusado na implantação precisa corresponder atargetPortpara rotear o tráfego para a implantação.Aplique o manifesto ao cluster:
kubectl apply -f redis-leader-service.yamlVerifique se o GKE criou o serviço:
kubectl get serviceO resultado será assim:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.51.240.1 <none> 443/TCP 42s redis-leader 10.51.242.233 <none> 6379/TCP 12sNo manifesto a seguir, descrevemos uma implantação para os pods de seguidores do Redis:
Aplique o manifesto ao cluster:
kubectl apply -f redis-follower-deployment.yamlVerifique se as duas réplicas de seguidores do Redis estão em execução:
kubectl get podsO resultado será assim:
NAME READY STATUS RESTARTS AGE redis-follower-76588f55b7-bnsq6 1/1 Running 0 27s redis-follower-76588f55b7-qvtws 1/1 Running 0 27s redis-leader-dd446dc55-kl7nl 1/1 Running 0 119sPode levar vários minutos para que
STATUSmude dePendingparaRunning.O manifesto a seguir descreve um serviço para os seguidores do Redis:
Esse manifesto especifica que o serviço é executado na porta 6379. O campo
selectordo serviço corresponde aos pods de seguidores do Redis criados na etapa anterior.Aplique o manifesto ao cluster:
kubectl apply -f redis-follower-service.yamlVerifique se o GKE criou o serviço:
kubectl get serviceO resultado será assim:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.51.240.1 <none> 443/TCP 1m redis-leader 10.51.242.233 <none> 6379/TCP 49s redis-follower 10.51.247.238 <none> 6379/TCP 3sO manifesto a seguir descreve uma implantação para o servidor da Web:
O arquivo de manifesto especifica a variável de ambiente
GET_HOSTS_FROM=dns. Quando você fornece a configuração para o aplicativo de front-end da Web, o aplicativo de front-end usa os nomes de hostredis-followereredis-leaderpara realizar uma busca DNS. A busca DNS encontra os endereços IP dos serviços criados nas etapas anteriores. Esse conceito é chamado de descoberta de serviços DNS.Aplique o manifesto ao cluster:
kubectl apply -f frontend-deployment.yamlVerifique se as réplicas estão em execução:
kubectl get pods -l app=guestbook -l tier=frontendO resultado será assim:
NAME READY STATUS RESTARTS AGE frontend-7b78458576-8kp8s 1/1 Running 0 37s frontend-7b78458576-gg86q 1/1 Running 0 37s frontend-7b78458576-hz87g 1/1 Running 0 37sAmplie o número de pods
frontend:kubectl scale deployment frontend --replicas=5O resultado será assim:
deployment.extensions/frontend scaledVerifique o número de réplicas em execução:
kubectl get podsO resultado será assim:
NAME READY STATUS RESTARTS AGE frontend-88237173-3s3sc 1/1 Running 0 1s frontend-88237173-twgvn 1/1 Running 0 1s frontend-88237173-5p257 1/1 Running 0 23m frontend-88237173-84036 1/1 Running 0 23m frontend-88237173-j3rvr 1/1 Running 0 23m redis-leader-343230949-qfvrq 1/1 Running 0 54m redis-follower-132015689-dp23k 1/1 Running 0 37m redis-follower-132015689-xq9v0 1/1 Running 0 37mÉ possível reduzir o número de pods
frontendusando o mesmo comando, substituindo5por1.Exclua o serviço
frontend:kubectl delete service frontendExclua o cluster do GKE:
gcloud container clusters delete guestbook- Saiba como configurar o escalonamento automático de pod horizontal.
- Saiba como implantar o WordPress no GKE com o Persistent Disk e o Cloud SQL.
- Saiba como configurar nomes de domínio com endereços IP estáticos.
- Explore outros tutoriais do Kubernetes Engine.
Prepare o ambiente
Para configurar o ambiente, siga estas etapas:
Crie um cluster do GKE
Crie um cluster do Autopilot ou do GKE padrão:
Piloto automático
gcloud container clusters create-auto guestbook \
--location=${COMPUTE_LOCATION} \
Standard
gcloud container clusters create guestbook \
--location=${COMPUTE_LOCATION} \
--num-nodes=4
Conectar ao cluster
Configure kubectl para se comunicar com o cluster:
gcloud container clusters get-credentials guestbook \
--location=${COMPUTE_LOCATION}
Configurar o líder do Redis
No aplicativo, o Redis é usado para armazenar os dados. O aplicativo grava os dados em uma instância líder do Redis e lê os dados de várias instâncias de seguidores do Redis.
Criar o serviço de líder do Redis
O aplicativo precisa se comunicar com o líder do Redis para gravar os dados. É possível criar um serviço para redirecionar o tráfego ao pod do líder do Redis.
Um serviço é uma abstração do Kubernetes que define um conjunto lógico de pods e uma política para permitir o acesso aos pods. Ao criar um serviço, você descreve quais pods proxy com base nos rótulos.
Configurar seguidores do Redis
Embora o líder do Redis seja um único pod, é possível torná-lo altamente disponível e atender às demandas de tráfego adicionando algumas réplicas ou seguidores do Redis.
Criar o serviço de seguidor do Redis
O aplicativo da Web precisa se comunicar com os seguidores do Redis para ler os dados. Para que os seguidores do Redis possam ser descobertos, configure um serviço.
Configurar o front-end da Web do aplicativo
Agora que você tem o armazenamento Redis para seu aplicativo, inicie os servidores da Web. Assim como os seguidores do Redis, o front-end é implantado usando uma implantação do Kubernetes.
O aplicativo da Web usa um front-end PHP, que é configurado para se comunicar com os serviços de líder ou seguidor do Redis, dependendo de a solicitação ser de leitura ou gravação. O front-end apresenta uma interface JSON e veicula uma IU baseada em jQuery-Ajax.
Expor o front-end em um endereço IP externo
Com a configuração atual, os serviços redis-follower e redis-leader
criados nas etapas anteriores só podem ser acessados no
cluster do GKE porque o tipo padrão de um serviço é
ClusterIP.
Um serviço ClusterIP fornece um único endereço IP para o conjunto de pods para onde o serviço está apontando. Esse endereço IP só é acessível no cluster.
Para tornar o serviço de front-end da Web acessível externamente, é possível
especificar type: LoadBalancer ou type: NodePort
na configuração do serviço, dependendo de seus requisitos.
O manifesto a seguir descreve um serviço do tipo LoadBalancer.
A declaração de porta na seção ports especifica port: 80 e targetPort não é especificado. Quando você omite a propriedade targetPort, o padrão é o valor do campo port. Nesse caso, o serviço encaminha o tráfego externo da porta 80 para a porta 80 dos contêineres na implantação frontend.
Aplique o manifesto ao cluster:
kubectl apply -f frontend-service.yaml
Quando o serviço frontend é criado, o GKE cria um balanceador de carga e um endereço IP externo. Esses recursos
estão sujeitos à cobrança.
Acessar o site do aplicativo
Para acessar o site do aplicativo, veja o endereço IP externo do serviço frontend:
kubectl get service frontend
O resultado será assim:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend 10.51.242.136 109.197.92.229 80:32372/TCP 1m
A coluna EXTERNAL-IP pode mostrar <pending> enquanto o balanceador de carga está
sendo criado. Isso pode levar alguns minutos. Se você encontrar erros como
Does not have minimum availability, aguarde alguns minutos. Esse erro temporário ocorre porque o GKE recria os nós para fazer as alterações.
Copie o endereço IP e abra a página no navegador:

Tente adicionar algumas entradas digitando uma mensagem e clicando em Enviar. A mensagem que você digitou aparece no front-end. Essa mensagem indica que os dados foram adicionados ao Redis por meio dos Serviços que você criou.
Escalonar o front-end da Web
Suponha que seu aplicativo esteja em execução há algum tempo e de repente fique famoso. Você decide que seria uma boa ideia adicionar mais servidores Web ao seu front-end. Para isso, aumente o número de pods.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
Se você usou um projeto existente e não quer excluí-lo, exclua os recursos individuais.