Implante seus sites do WordPress no GKE em minutos
O WordPress ainda é um dos mais populares criadores de sites do mundo, e com os serviços de hospedagem do Google Cloud, seu site do WordPress tem melhor desempenho, escalabilidade, maior segurança, mais controle e mais flexibilidade.
Como recomendação inicial, o Compute Engine é a opção de implantação mais simples e rápida do WordPress no Google Cloud, sendo ideal para tráfego baixo e médio com uma escalabilidade básica.
Porém, à medida que o site vai crescendo, começamos a ter tráfego intenso e vamos precisar de escalonamento automático. Para esse momento o Google Kubernetes Engine se torna a opção recomendada.
O WordPress é uma ferramenta que usa um banco de dados relacional para armazenar os dados e o sistema de arquivos local para armazenar recursos, como fotos em uma postagem. Em geral, o sistema de arquivos raiz de um container não é o adequado para armazenar dados permanentes, quando um dos nós falha, todos os dados salvos no sistema de arquivos raiz de um container são perdidos.
O uso de Persistent Volumes (PV) 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.
Criar um Cluster do GKE
No Google Cloud Console procuramos a seção de GKE, depois clique em CRIAR e selecionamos Standard:
Uma vez criado, vamos a conectarnos ao cluster usando o Cloud Shell:
Dentro do repositório de samples no GitHub temos o arquivo de manifesto wordpress-volumeclaim.yaml
para criar os Persistent Volume Claims (PVC) necessários para a implantação, para obter o arquivo executamos no Cloud Shell:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
cd kubernete-engine-samples/wordpress-persistent-disks
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.
# Executamos
kubectl apply -f wordpress-volumeclaim.yaml
# Pode levar até dez segundos para provisionar o PV salvo pelo
# Persistent Disk e para vinculá-lo ao seu PVC.
# Para verificar o status
kubectl get persistentvolumeclaim
# Output esperado
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
wordpress-volumeclaim Bound pvc-89d49350-3c44-11e8-80a6-42010a800002 200G RWO standard 5s
Como criar uma instância do Cloud SQL para MySQL
Como o WordPress usa um banco de dados relacional vamos a usar o Cloud SQL, que fornece uma versão gerenciada do MySQL
Na console, na seção de Databases, clique em “SQL”, e depois em “Criar Instância”.”
Selecionamos MySQL
Crie uma instância chamada mysql-wordpress-instance
Crie um banco de dados para que o WordPress armazene os dados:
Crie um usuário do banco de dados chamado wordpress e uma senha para o WordPress autenticar a instância:
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. Na seção de IAM e ADMINISTRADOR:
Adicione o role cloudsql.client
à sua conta de serviço:
E clique em CONCLUIR:
No final, crie uma chave para a conta de serviço:
Fazer download de uma chave para uma conta de serviço só deve ser feita em casos específicos e tem que ser protegida de agentes externos, para maior detalhe visite Práticas recomendadas para trabalhar com contas de serviço.
Agora vamos a usar Secret do Kubernetes para proteger os dados sensíveis, no Cloud Shell executamos:
# Crie um secret do Kubernetes para as credenciais do MySQL
kubectl create secret generic cloudsql-db-credentials \
--from-file=username.txt \
--from-file=password.txt
Criamos os arquivos username.txt e password.txt com os dados para que os dados sensíveis não fiquem no histórico do terminal. A recomendação é utilizar o Secret Manager.
Crie um secret do Kubernetes para as credenciais da conta de serviço, como a chave está no seu computador, vamos fazer upload do arquivo para o Cloud Shell:
# Criamos o secret
kubectl create secret generic cloudsql-instance-credentials \
--from-file key.json
Implante o WordPress
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, este post usa a imagem oficial do Docker para WordPress do Docker Hub. Esse contêiner lê a variável de ambiente WORDPRESS_DB_PASSWORD
WORDPRESS_DB_PASSWORD que contém a chave secreta cloudsql-db-credentials
que você criou.
Este arquivo de manifesto também configura o container do WordPress para se comunicar com o MySQL por meio do proxy do Cloud SQL. O valor do endereço do host é definido na variável de ambiente WORDPRESS_DB_HOST
.
Como último passo, precisamos indicar o INSTANCE_CONNECTION_NAME
dentro do arquivo de manifesto. Para obter esse dado vamos para a seção de Cloud SQL e procuramos pelo “Nome da conexão” e executamos:
# Adicione o nome da conexão da instância como uma variável de ambiente
export INSTANCE_CONNECTION_NAME=[YOUR-RPOJECT-ID]:southamerica-east1:mysql-wordpress-instance
# Prepare o arquivo de implantação substituindo a variável de ambiente INSTANCE_CONNECTION_NAME
cat wordpress_cloudsql.yaml.template | envsubst > \
wordpress_cloudsql.yaml
# Implante o arquivo de manifesto
kubectl create -f wordpress_cloudsql.yaml
# Verifique a implantação
kubectl get pod app=wordpress
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.
# Crie um serviço de type:LoadBalancer
kubectl create -f wordpress-service.yaml
# Aguarde até que o serviço tenha um endereço IP externo atribuído
kubectl get svc -l app=wordpress --watch
# Output esperado
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress 10.51.243.233 [CLUSTER-IP] 80:32418/TCP 1m
Finalmente com a IP externa pode concluir a instalação do WordPress:
Conclusão
Implantar o WordPress no Google Kubernetes Engine pode ser um primeiro passo para a modernização da infraestrutura, com os serviços gerenciados do Google Cloud esse passo é mais simples!.
Como seguintes passos podemos configurar um nome de domínio, configurar um balanceamento de carga HTTPS e integrar mais recursos disponíveis dentro do Google Cloud.
Em futuros posts iremos explorar mais recursos dentro do Google Kubernetes Engine.