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.
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_IDcomo o ID do projetoGoogle 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-samplesAltere para o diretório com o arquivo
wordpress-persistent-disks:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disksDefina 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_NAMEDepois de criar o novo cluster, conecte-se a ele:
gcloud container clusters get-credentials $CLUSTER_NAME --location 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.yamlPode 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 persistentvolumeclaimA 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
Pendingaté 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_NAMEAdicione 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_NAMECrie um usuário do banco de dados chamado
wordpresse 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_PASSWORDSe 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_NAMEAdicione 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_EMAILCrie uma chave para a conta de serviço:
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAILEsse 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_PASSWORDCrie 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
Implantar 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.yamlImplante o arquivo de manifesto
wordpress_cloudsql.yaml:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yamlEnquanto 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 --watchQuando 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.yamlA 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 --watchQuando 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_IPpara 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_IPdo 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