Este tutorial mostra como configurar uma implementação do WordPress de réplica única no Google Kubernetes Engine (GKE) com uma base de dados MySQL. Em vez de instalar o MySQL, usa o Cloud SQL, que oferece uma versão gerida do MySQL. O WordPress usa
PersistentVolumes
(PV)
e
PersistentVolumeClaims
(PVC)
para armazenar dados.
Um PV é uma representação do volume de armazenamento no cluster aprovisionado por um administrador ou aprovisionado dinamicamente pelo Kubernetes para satisfazer um pedido feito num PVC. Um PVC é um pedido de armazenamento de uma determinada classe de armazenamento por um utilizador que pode ser cumprido por um PV. Os PVs e os PVCs são independentes dos ciclos de vida dos pods e preservam os dados através do reinício, da reprogramação e até da eliminação dos pods. O WordPress usa o Persistent Disk como armazenamento para suportar os PVs.
Contexto
O WordPress é uma ferramenta de blogues que usa uma base de dados relacional para armazenar os artigos do blogue e os respetivos objetos e metadados relacionados, e o sistema de ficheiros local para armazenar recursos, como imagens numa publicação de blogue. Este tutorial usa a imagem do Docker do WordPress oficial de Docker Hub.
Em geral, o sistema de ficheiros raiz de um contentor não é adequado para armazenar dados persistentes. Normalmente, os contentores que executa no GKE são entidades descartáveis, e o gestor do cluster pode eliminar, despejar ou reagendar quaisquer contentores que fiquem indisponíveis devido a falhas de nós ou outras causas. Quando os nós falham, todos os dados guardados no sistema de ficheiros raiz de um contentor são perdidos.
A utilização de PVs suportados por um disco persistente permite-lhe armazenar os dados da plataforma WordPress fora dos contentores. Desta forma, mesmo que os contentores sejam eliminados, os respetivos dados persistem. Com a classe de armazenamento predefinida, o disco persistente (e, por conseguinte, os seus dados) não se move com o pod se o pod for reagendado para outro nó. Existem diferentes formas de processar a movimentação dos dados, mas isso está fora do âmbito deste tutorial. Para mais informações, consulte o artigo Volumes persistentes com disco persistente.
O WordPress requer um PV para armazenar dados. Para este tutorial, vai usar a classe de armazenamento predefinida para criar dinamicamente um disco persistente e criar um PVC para a implementação.
Objetivos
- Crie um cluster do GKE.
- Crie um PV e um PVC suportados por um disco persistente.
- Crie uma instância do Cloud SQL para MySQL.
- Implemente o WordPress.
- Configure o seu blogue do WordPress.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
- No Cloud Shell, ative as APIs GKE e
Cloud SQL Admin:
gcloud services enable container.googleapis.com sqladmin.googleapis.com
Configurar o seu ambiente
No Cloud Shell, defina a região predefinida para a CLI do Google Cloud:
gcloud config set compute/region region
Substitua o seguinte:
region
: escolha uma região mais próxima de si. Para mais informações, consulte o artigo Regiões e zonas.
Defina a variável de ambiente
PROJECT_ID
para o seu Google Cloud ID do projeto (project-id).export PROJECT_ID=project-id
Transfira os ficheiros de manifesto da app a partir do repositório do GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Mude para o diretório com o ficheiro
wordpress-persistent-disks
:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
Defina a variável de ambiente
WORKING_DIR
:WORKING_DIR=$(pwd)
Para este tutorial, vai criar objetos do Kubernetes com ficheiros de manifesto no formato YAML.
Criar um cluster do GKE
Cria um cluster do GKE para alojar o contentor da app WordPress.
No Cloud Shell, crie um cluster do GKE com o nome
persistent-disk-tutorial
:CLUSTER_NAME=persistent-disk-tutorial gcloud container clusters create-auto $CLUSTER_NAME
Depois de criado, estabeleça ligação ao novo cluster:
gcloud container clusters get-credentials $CLUSTER_NAME --location REGION
Criar um PV e um PVC com base no disco persistente
Crie um PVC como o armazenamento necessário para o WordPress.
O GKE tem um recurso StorageClass
predefinido instalado que lhe permite
aprovisionar dinamicamente
PVs suportados por um disco persistente. Usa o ficheiro wordpress-volumeclaim.yaml
para criar os PVCs necessários para a implementação.
Este ficheiro de manifesto descreve um PVC que pede 200 GB de armazenamento. Um recurso StorageClass
A não foi definido no ficheiro, pelo que este PVC usa o recurso StorageClass
A predefinido para aprovisionar um PV suportado por um disco persistente.
No Cloud Shell, implemente o ficheiro de manifesto:
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yaml
O aprovisionamento do PV suportado pelo disco persistente e a sua associação ao PVC podem demorar até dez segundos. Pode verificar o estado com o seguinte comando:
kubectl get persistentvolumeclaim
O resultado mostra um PersistentVolumeClaim com o estado
Pending
, semelhante ao seguinte:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE wordpress-volumeclaim Pending standard-rwo 5s
Este PersistentVolumeClaim permanece no estado
Pending
até o usar mais tarde neste tutorial.
Criar uma instância do Cloud SQL para MySQL
No Cloud Shell, crie uma instância com o nome
mysql-wordpress-instance
:INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAME
Adicione o nome da ligação da instância como uma variável de ambiente:
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')
Crie uma base de dados para o WordPress armazenar os respetivos dados:
gcloud sql databases create wordpress --instance $INSTANCE_NAME
Crie um utilizador da base de dados denominado
wordpress
e uma palavra-passe para o WordPress para autenticar na instância:CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORD
Se fechar a sessão do Cloud Shell, perde a palavra-passe. Tome nota da palavra-passe, uma vez que vai precisar dela mais tarde no tutorial.
Concluiu a configuração da base de dados para o seu novo blogue do WordPress.
Implementar o WordPress
Antes de poder implementar o WordPress, tem de criar uma conta de serviço. Cria um segredo do Kubernetes para guardar as credenciais da conta de serviço e outro segredo para guardar as credenciais da base de dados.
Configure uma conta de serviço e crie segredos
Para permitir que a sua app WordPress aceda à instância do MySQL através de um proxy do Cloud SQL, crie uma conta de serviço:
SA_NAME=cloudsql-proxy gcloud iam service-accounts create $SA_NAME --display-name $SA_NAME
Adicione o endereço de email da conta de serviço como uma variável de ambiente:
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')
Adicione a função
cloudsql.client
à sua conta de serviço:gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Crie uma chave para a conta de serviço:
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAIL
Este comando transfere uma cópia do ficheiro
key.json
.Crie um segredo do Kubernetes para as credenciais do MySQL:
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORD
Crie um segredo do Kubernetes para as credenciais da conta de serviço:
kubectl create secret generic cloudsql-instance-credentials \ --from-file $WORKING_DIR/key.json
Implemente o WordPress
O passo seguinte é implementar o contentor do WordPress no cluster do GKE.
O ficheiro de manifesto wordpress_cloudsql.yaml
descreve uma implementação que cria um único pod a executar um contentor com uma instância do WordPress. Este contentor lê a variável de ambiente WORDPRESS_DB_PASSWORD
que contém o segredo cloudsql-db-credentials
que criou.
Este ficheiro de manifesto também configura o contentor do WordPress para comunicar com o MySQL através do proxy do Cloud SQL em execução no contentor auxiliar.
O valor do endereço do anfitrião é definido na variável de ambiente WORDPRESS_DB_HOST
.
Prepare o ficheiro substituindo a variável de ambiente
INSTANCE_CONNECTION_NAME
:cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yaml
Implemente o
wordpress_cloudsql.yaml
ficheiro de manifesto:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml
A implementação deste ficheiro de manifesto demora alguns minutos enquanto um disco persistente está anexado ao nó de computação.
Monitorize a implementação para ver a alteração do estado para
running
:kubectl get pod -l app=wordpress --watch
Quando o resultado mostrar o estado
Running
, pode avançar para o passo seguinte.NAME READY STATUS RESTARTS AGE wordpress-387015-02xxb 2/2 Running 0 2m47s
Exponha o serviço WordPress
No passo anterior, implementou um contentor do WordPress, mas atualmente não é acessível a partir do exterior do cluster porque não tem um endereço IP externo. Pode expor a sua app WordPress ao tráfego da Internet através da criação e configuração de um serviço Kubernetes com um equilibrador de carga externo anexado. Para saber como expor apps através de serviços no GKE, consulte o guia de instruções.
Crie um serviço de
type:LoadBalancer
:kubectl create -f $WORKING_DIR/wordpress-service.yaml
A criação de um balanceador de carga demora alguns minutos.
Monitorize a implementação e aguarde até que o serviço tenha um endereço IP externo atribuído:
kubectl get svc -l app=wordpress --watch
Quando o resultado mostra um endereço IP externo, pode avançar para o passo seguinte. Tenha em atenção que o seu IP externo é diferente do exemplo seguinte.
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress 10.51.243.233 203.0.113.3 80:32418/TCP 1m
Anote o campo de endereço
EXTERNAL_IP
para usar mais tarde.
Configurar o seu blogue do WordPress
Nesta secção, configura o seu blogue do WordPress.
No navegador, aceda ao seguinte URL e substitua external-ip-address pelo endereço
EXTERNAL_IP
do serviço que expõe a sua instância do WordPress:http://external-ip-address
Na página Instalação do WordPress, selecione um idioma e, de seguida, clique em Continuar.
Preencha a página Informações necessárias e, de seguida, clique em Instalar WordPress.
Clique em Log In.
Introduza o nome de utilizador e a palavra-passe que criou anteriormente.
Agora, tem um site de blogue. Para visitar o seu blogue, no navegador, aceda ao seguinte URL:
http://external-ip-address
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Elimine o projeto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimine os recursos individuais
Se usou um projeto existente e não o quer eliminar, elimine os recursos individuais.
Elimine o serviço:
kubectl delete service wordpress
Aguarde que o balanceador de carga aprovisionado para o serviço
wordpress
seja eliminado. O balanceador de carga é eliminado de forma assíncrona em segundo plano.Veja o processo de eliminação:
watch gcloud compute forwarding-rules list
O balanceador de carga é eliminado quando vê o seguinte resultado:
Listed 0 items.
Elimine a implementação:
kubectl delete deployment wordpress
Elimine o PVC para o WordPress:
kubectl delete pvc wordpress-volumeclaim
Este comando também elimina automaticamente o PV e o disco persistente.
Elimine o cluster do GKE:
gcloud container clusters delete $CLUSTER_NAME --location=$REGION
Elimine a instância do Cloud SQL:
gcloud sql instances delete $INSTANCE_NAME
Remova a função da conta de serviço:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Elimine a conta de serviço:
gcloud iam service-accounts delete $SA_EMAIL
O que se segue?
- Configure um IP estático e um nome de domínio para a sua app.
Configure um balanceador de carga de aplicações externo com a entrada.
Explore outros tutoriais do Kubernetes Engine.
Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Consulte o nosso Centro de arquitetura na nuvem.