Este tutorial mostra como configurar uma implantação
WordPress
de réplica única no
Google Kubernetes Engine (GKE) usando um banco de dados MySQL. Em vez de instalar o MySQL, use o
Cloud SQL,
que fornece uma versão gerenciada do MySQL. O WordPress usa
PersistentVolumes
(PV)
e
PersistentVolumeClaims
(PVC)
para armazenar dados.
Um PV é uma representação do volume de armazenamento no cluster que é provisionado por um administrador ou provisionado dinamicamente pelo Kubernetes para atender a uma solicitação feita em um PVC. Um PVC é uma solicitação de armazenamento de uma determinada classe de armazenamento feita por um usuário e que pode ser preenchida por um PV. PVs e PVCs são independentes dos ciclos de vida do pod e preservam os dados por meio de reinicialização, reprogramação e até mesmo exclusão de pods. O WordPress usa o Persistent Disk como armazenamento para os PVs.
Contexto
O WordPress é uma ferramenta de blog que usa um banco de dados relacional para armazenar os artigos do blog e seus objetos e metadados relacionados e o sistema de arquivos local para armazenar recursos, como fotos em uma postagem do blog. Este tutorial usa a imagem oficial do Docker para WordPress do Docker Hub.
Em geral, o sistema de arquivos raiz de um contêiner não é adequado para armazenar dados permanentes. Os contêineres executados no GKE normalmente são entidades descartáveis, e o gerenciador do cluster pode excluir, despejar ou reagendar qualquer contêiner que se torne indisponível devido a falhas de nós ou outras causas. Quando os nós falham, todos os dados salvos no sistema de arquivos raiz de um contêiner são perdidos.
O uso de PVs com backup por disco permanente permite que você armazene os dados da plataforma do WordPress fora dos contêineres. Dessa forma, mesmo se o contêiner for excluído, os dados permanecem. Devido à classe de armazenamento padrão, seu disco permanente e, consequentemente, seus dados não serão movidos com seu pod se ele for reprogramado para outro nó. Há maneiras diferentes de lidar com a movimentação de dados, mas isso está fora do escopo deste tutorial. Para mais informações, consulte Volumes permanentes com Persistent Disk.
O WordPress requer um PV para armazenar dados. Neste tutorial, você usa a classe de armazenamento padrão para criar dinamicamente um disco permanente e um PVC para a implantação.
Objetivos
- Crie um cluster do GKE.
- Crie um PV e um PVC com backup pelo Persistent Disk.
- Crie uma instância do Cloud SQL para MySQL.
- Implante o WordPress.
- Configure seu blog do WordPress.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
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.
-
Make sure 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.
-
Make sure 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 do GKE e de administrador do Cloud SQL:
gcloud services enable container.googleapis.com sqladmin.googleapis.com
Como configurar o ambiente
No Cloud Shell, defina a região padrão para a Google Cloud CLI:
gcloud config set compute/region region
Substitua:
region
: escolha uma região mais próxima de você. Para mais informações, consulte Regiões e zonas.
Defina a variável de ambiente
PROJECT_ID
para o ID do projeto do Google Cloud (project-id).export PROJECT_ID=project-id
Faça o download dos arquivos de manifesto do app a partir do repositório do GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Altere para o diretório com o arquivo
wordpress-persistent-disks
:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
Defina a variável de ambiente
WORKING_DIR
:WORKING_DIR=$(pwd)
Neste tutorial, você cria objetos do Kubernetes usando arquivos de manifesto em formato YAML.
crie um cluster do GKE;
Crie um cluster do GKE para hospedar seu contêiner do aplicativo do WordPress.
No Cloud Shell, crie um cluster do GKE chamado
persistent-disk-tutorial
:CLUSTER_NAME=persistent-disk-tutorial gcloud container clusters create-auto $CLUSTER_NAME
Depois de criar o novo cluster, conecte-se a ele:
gcloud container clusters get-credentials $CLUSTER_NAME --region REGION
Como criar um PV e um PVC com backup pelo Persistent Disk
Crie um PVC como o armazenamento necessário para o WordPress.
O GKE tem um recurso StorageClass
padrão instalado que permite
provisionar dinamicamente
os PVs que passaram por backup pelo Persistent Disk. Use o arquivo wordpress-volumeclaim.yaml
para criar os PVCs necessários para a implantação.
Este arquivo de manifesto descreve um PVC que solicita 200 GB de armazenamento. Um
recurso StorageClass
não foi definido no arquivo, então este PVC usa o parâmetro
StorageClass
para provisionar um PV que passou por backup pelo Persistent Disk.
No Cloud Shell, implante o arquivo de manifesto:
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yaml
Pode levar até dez segundos para provisionar o PV salvo pelo Persistent Disk e para vinculá-lo ao seu PVC. É possível verificar o status com este comando:
kubectl get persistentvolumeclaim
A saída mostra um PersistentVolumeClaim com status
Pending
, semelhante a este:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE wordpress-volumeclaim Pending standard-rwo 5s
Esse PersistentVolumeClaim permanecerá no estado
Pending
até ser usado posteriormente neste tutorial.
Como criar uma instância do Cloud SQL para MySQL
No Cloud Shell, crie uma instância chamada
mysql-wordpress-instance
:INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAME
Adicione o nome da conexão da instância como uma variável de ambiente:
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')
Crie um banco de dados para que o WordPress armazene os dados:
gcloud sql databases create wordpress --instance $INSTANCE_NAME
Crie um usuário do banco de dados chamado
wordpress
e uma senha para o WordPress autenticar a instância:CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORD
Se você fechar a sessão do Cloud Shell, perderá a senha. Anote a senha porque você precisará dela mais tarde no tutorial.
Você concluiu a configuração do banco de dados do seu novo blog do WordPress.
Como implantar o WordPress
Antes de implantar o WordPress, é preciso criar uma conta de serviço. Crie um segredo do Kubernetes para manter as credenciais da conta de serviço e outro secret para manter as credenciais do banco de dados.
Configurar uma conta de serviço e criar secrets
Para permitir que seu app WordPress acesse a instância do MySQL por meio 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 e-mail 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
Esse comando faz o download de uma cópia do arquivo
key.json
.Crie um secret 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 secret do Kubernetes para as credenciais da conta de serviço:
kubectl create secret generic cloudsql-instance-credentials \ --from-file $WORKING_DIR/key.json
Implante o WordPress
A próxima etapa é implantar seu contêiner do WordPress no cluster do GKE.
O arquivo de manifesto wordpress_cloudsql.yaml
descreve uma implantação que cria
um único pod que executa um contêiner com uma instância do WordPress. Esse contêiner
lê a variável de ambiente WORDPRESS_DB_PASSWORD
que contém a chave secreta
cloudsql-db-credentials
que você criou.
Este arquivo de manifesto também configura o contêiner do WordPress para se comunicar com o
MySQL por meio do
proxy do Cloud SQL em execução no contêiner secundário.
O valor do endereço do host é definido na variável
de ambiente WORDPRESS_DB_HOST
.
Prepare o arquivo de implantação substituindo a variável de ambiente
INSTANCE_CONNECTION_NAME
:cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yaml
Implante o arquivo de manifesto
wordpress_cloudsql.yaml
:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml
Enquanto o Persistent Disk é anexado ao nó de computação, o arquivo do manifesto leva alguns minutos para ser implantado.
Assista à implantação para ver a mudança de status para
running
:kubectl get pod -l app=wordpress --watch
Quando a saída mostrar o status
Running
, avance para a próxima etapa.NAME READY STATUS RESTARTS AGE wordpress-387015-02xxb 2/2 Running 0 2m47s
Expor o serviço do WordPress
Na etapa anterior, você implantou um contêiner do WordPress, mas ele não pode ser acessado de fora do cluster porque não tem um endereço IP externo. Para expor seu app do WordPress ao tráfego da Internet, crie e configure um Serviço do Kubernetes com um balanceador de carga externo anexado. Para saber mais sobre como expor apps usando 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 leva alguns minutos.
Assista à implantação e aguarde até que o serviço tenha um endereço IP externo atribuído:
kubectl get svc -l app=wordpress --watch
Quando a saída mostrar um endereço IP externo, será possível prosseguir para a próxima etapa: O IP externo é diferente do exemplo a seguir.
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.
Como configurar seu blog do WordPress
Nessa seção, você configurou seu blog do WordPress.
No navegador, acesse o seguinte URL, substituindo external-ip-address pelo endereço
EXTERNAL_IP
do serviço que expõe sua instância do WordPress:http://external-ip-address
Na página de instalação do WordPress, selecione um idioma e clique em Continuar.
Preencha a página Informações necessárias e clique em Instalar o WordPress.
Clique em Log In.
Digite o nome de usuário e a senha que você criou anteriormente.
Agora você tem um blog. Para acessar seu blog, insira o seguinte URL no navegador:
http://external-ip-address
Limpeza
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.
Exclua 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.
Excluir recursos individuais
Se você usou um projeto existente e não quer excluí-lo, exclua os recursos individuais.
Exclua o serviço:
kubectl delete service wordpress
Aguarde até que o balanceador de carga provisionado para o serviço
wordpress
seja excluído. O balanceador de carga é excluído de forma assíncrona em segundo planoAssista ao processo de exclusão:
watch gcloud compute forwarding-rules list
O balanceador de carga é excluído quando você vê a seguinte saída:
Listed 0 items.
Exclua a implantação:
kubectl delete deployment wordpress
Exclua o PVC para WordPress:
kubectl delete pvc wordpress-volumeclaim
Esse comando também exclui automaticamente o PV e o Persistent Disk.
Exclua o cluster do GKE:
gcloud container clusters delete $CLUSTER_NAME
Exclua a instância do Cloud SQL:
gcloud sql instances delete $INSTANCE_NAME
Remova o papel da conta de serviço:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Exclua a conta de serviço:
gcloud iam service-accounts delete $SA_EMAIL
A seguir
- Configure um IP estático e um nome de domínio para seu aplicativo.
Configure um balanceador de carga de aplicativo externo com o Ingress.
Explore outros tutoriais do Kubernetes Engine.
Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.