Questo tutorial mostra come configurare un deployment WordPress a replica singola su Google Kubernetes Engine (GKE) utilizzando un database MySQL.WordPress Anziché installare MySQL, utilizza
Cloud SQL,
che fornisce una versione gestita di MySQL. WordPress utilizza
PersistentVolumes
(PV)
e
PersistentVolumeClaims
(PVC)
per archiviare i dati.
Un PV è una rappresentazione del volume di archiviazione nel cluster di cui viene eseguito il provisioning da parte di un amministratore o dinamicamente da Kubernetes per soddisfare una richiesta effettuata in un PVC. Un PVC è una richiesta di spazio di archiviazione di una determinata classe di archiviazione da parte di un utente che può essere soddisfatta da un PV. I PV e le PVC sono indipendenti dai cicli di vita dei pod e conservano i dati riavviando, riprogrammando e persino eliminando i pod. WordPress utilizza un disco permanente come spazio di archiviazione per eseguire il backup dei PV.
Contesto
WordPress è uno strumento di blogging che utilizza un database relazionale per archiviare gli articoli del blog e i relativi oggetti e metadati, nonché il file system locale per archiviare le risorse, ad esempio le immagini in un post del blog. Questo tutorial utilizza l'immagine Docker di WordPress ufficiale di Docker Hub.
In generale, il file system principale di un contenitore non è adatto per archiviare dati permanenti. I container che esegui su GKE sono in genere entità usa e getta e il gestore del cluster può eliminare, espellere o riprogrammare i container che non sono più disponibili a causa di errori del nodo o di altre cause. Quando i nodi si arrestano in modo anomalo, tutti i dati salvati nel file system principale di un contenitore vengono persi.
L'utilizzo di PV basati su Persistent Disk ti consente di archiviare i dati della piattaforma WordPress al di fuori dei contenitori. In questo modo, anche se i contenitori vengono eliminati, i relativi dati rimangono. Con la classe di archiviazione predefinita, il Persistent Disk (e quindi i dati) non si spostano con il pod se il pod viene riprogrammato su un altro nodo. Esistono diversi modi per gestire il trasferimento dei dati, ma non rientrano nell'ambito di questo tutorial. Per ulteriori informazioni, consulta Volumi permanenti con Persistent Disk.
WordPress richiede un PV per archiviare i dati. Per questo tutorial, utilizza la classe di archiviazione predefinita per creare dinamicamente un Persistent Disk e un PVC per il deployment.
Obiettivi
- Creare un cluster GKE.
- Crea un PV e un PVC basati su Persistent Disk.
- Crea un'istanza Cloud SQL per MySQL.
- Esegui il deployment di WordPress.
- Configura il tuo blog WordPress.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
- 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.
- In Cloud Shell, abilita le API GKE e Cloud SQL Admin:
gcloud services enable container.googleapis.com sqladmin.googleapis.com
Configurazione dell'ambiente
In Cloud Shell, imposta la regione predefinita per Google Cloud CLI:
gcloud config set compute/region region
Sostituisci quanto segue:
region
: scegli la regione più vicina a te. Per maggiori informazioni, consulta Regioni e zone.
Imposta la variabile di ambiente
PROJECT_ID
sul tuo Google Cloud ID progetto (project-id).export PROJECT_ID=project-id
Scarica i file manifest dell'app dal repository GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Passa alla directory con il file
wordpress-persistent-disks
:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
Imposta la variabile di ambiente
WORKING_DIR
:WORKING_DIR=$(pwd)
Per questo tutorial, crei gli oggetti Kubernetes utilizzando i file manifest in formato YAML.
Crea un cluster GKE
Crea un cluster GKE per ospitare il contenitore dell'app WordPress.
In Cloud Shell, crea un cluster GKE denominato
persistent-disk-tutorial
:CLUSTER_NAME=persistent-disk-tutorial gcloud container clusters create-auto $CLUSTER_NAME
Una volta creato, connettiti al nuovo cluster:
gcloud container clusters get-credentials $CLUSTER_NAME --region REGION
Creazione di un PV e di una PVC basati su Persistent Disk
Crea un PVC come spazio di archiviazione richiesto per WordPress.
In GKE è installata una risorsa StorageClass
predefinita che ti consente di
eseguire il provisioning dinamico
delle PV basate su Persistent Disk. Utilizza il file wordpress-volumeclaim.yaml
per creare le PVC necessarie per il deployment.
Questo file manifest descrive una PVC che richiede 200 GB di spazio di archiviazione. Nel file non è stata definita una risorsa StorageClass
, pertanto questa PVC utilizza la risorsa StorageClass
predefinita per eseguire il provisioning di un PV basato su Persistent Disk.
In Cloud Shell, esegui il deployment del file manifest:
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yaml
Il provisioning del PV basato su Persistent Disk e il relativo collegamento alla PVC possono richiedere fino a dieci secondi. Puoi controllare lo stato con il seguente comando:
kubectl get persistentvolumeclaim
L'output mostra un PersistentVolumeClaim con stato
Pending
, simile al seguente:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE wordpress-volumeclaim Pending standard-rwo 5s
Questo PersistentVolumeClaim rimane nello stato
Pending
finché non lo utilizzi più avanti in questo tutorial.
Creazione di un'istanza Cloud SQL per MySQL
In Cloud Shell, crea un'istanza denominata
mysql-wordpress-instance
:INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAME
Aggiungi il nome della connessione dell'istanza come variabile di ambiente:
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')
Crea un database per WordPress per archiviare i relativi dati:
gcloud sql databases create wordpress --instance $INSTANCE_NAME
Crea un utente di database denominato
wordpress
e una password per WordPress per autenticarti nell'istanza:CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORD
Se chiudi la sessione di Cloud Shell, perdi la password. Prendi nota della password perché ti servirà più avanti nel tutorial.
Hai completato la configurazione del database per il tuo nuovo blog WordPress.
Eseguire il deployment di WordPress
Prima di poter eseguire il deployment di WordPress, devi creare un account di servizio. Devi creare un secret Kubernetes per contenere le credenziali dell'account di servizio e un altro secret per contenere le credenziali del database.
Configura un account di servizio e crea i secret
Per consentire all'app WordPress di accedere all'istanza MySQL tramite un proxy Cloud SQL, crea un account di servizio:
SA_NAME=cloudsql-proxy gcloud iam service-accounts create $SA_NAME --display-name $SA_NAME
Aggiungi l'indirizzo email dell'account di servizio come variabile di ambiente:
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')
Aggiungi il ruolo
cloudsql.client
all'account di servizio:gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Crea una chiave per l'account di servizio:
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAIL
Questo comando scarica una copia del file
key.json
.Crea un secret di Kubernetes per le credenziali MySQL:
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORD
Crea un secret Kubernetes per le credenziali dell'account di servizio:
kubectl create secret generic cloudsql-instance-credentials \ --from-file $WORKING_DIR/key.json
Esegui il deployment di WordPress
Il passaggio successivo consiste nell'eseguire il deployment del container WordPress nel cluster GKE.
Il file manifest wordpress_cloudsql.yaml
descrive un deployment che crea un singolo pod che esegue un container con un'istanza WordPress. Questo contenitore legge la variabile di ambiente WORDPRESS_DB_PASSWORD
contenente il secret cloudsql-db-credentials
che hai creato.
Questo file manifest configura anche il container WordPress per comunicare con MySQL tramite il proxy Cloud SQL in esecuzione nel container sidecar.
Il valore dell'indirizzo host è impostato sulla variabile di ambiente WORDPRESS_DB_HOST
.
Prepara il file sostituendo la variabile di ambiente
INSTANCE_CONNECTION_NAME
:cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yaml
Esegui il deployment del file manifest
wordpress_cloudsql.yaml
:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml
Il deployment di questo file manifest richiede alcuni minuti mentre un Persistent Disk è collegato al nodo di calcolo.
Monitora il deployment per vedere lo stato cambiare in
running
:kubectl get pod -l app=wordpress --watch
Quando l'output mostra lo stato
Running
, puoi procedere con il passaggio successivo.NAME READY STATUS RESTARTS AGE wordpress-387015-02xxb 2/2 Running 0 2m47s
Esponi il servizio WordPress
Nel passaggio precedente hai eseguito il deployment di un container WordPress, ma al momento non è accessibile dall'esterno del cluster perché non ha un indirizzo IP esterno. Puoi esporre la tua app WordPress al traffico proveniente da internet creando e configurando un servizio Kubernetes con un bilanciatore del carico esterno collegato. Per scoprire di più sull'esposizione delle app che utilizzano i servizi in GKE, consulta la guida dettagliata.
Crea un servizio di
type:LoadBalancer
:kubectl create -f $WORKING_DIR/wordpress-service.yaml
La creazione di un bilanciatore del carico richiede alcuni minuti.
Monitora il deployment e attendi che al servizio venga assegnato un indirizzo IP esterno:
kubectl get svc -l app=wordpress --watch
Quando l'output mostra un indirizzo IP esterno, puoi procedere al passaggio successivo. Tieni presente che il tuo indirizzo IP esterno è diverso dall'esempio riportato di seguito.
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress 10.51.243.233 203.0.113.3 80:32418/TCP 1m
Prendi nota del campo dell'indirizzo
EXTERNAL_IP
da utilizzare in un secondo momento.
Configurare il blog WordPress
In questa sezione, configuri il tuo blog WordPress.
Nel browser, accedi all'URL seguente, sostituendo external-ip-address con l'indirizzo
EXTERNAL_IP
del servizio che espone l'istanza WordPress:http://external-ip-address
Nella pagina Installazione di WordPress, seleziona una lingua e poi fai clic su Continua.
Completa la pagina Informazioni necessarie, quindi fai clic su Installa WordPress.
Fai clic su Accedi.
Inserisci il nome utente e la password che hai creato in precedenza.
Ora hai un sito di blog. Per visitare il tuo blog, nel browser, vai al seguente URL:
http://external-ip-address
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
- 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.
Elimina le singole risorse
Se hai utilizzato un progetto esistente e non vuoi eliminarlo, elimina le singole risorse.
Elimina il servizio:
kubectl delete service wordpress
Attendi che il bilanciatore del carico di cui è stato eseguito il provisioning per il servizio
wordpress
venga eliminato. Il bilanciatore del carico viene eliminato in modo asincrono in background.Guarda il processo di eliminazione:
watch gcloud compute forwarding-rules list
Il bilanciatore del carico viene eliminato quando viene visualizzato il seguente output:
Listed 0 items.
Elimina il deployment:
kubectl delete deployment wordpress
Elimina la PVC per WordPress:
kubectl delete pvc wordpress-volumeclaim
Questo comando elimina automaticamente anche il PV e il Persistent Disk.
Elimina il cluster GKE:
gcloud container clusters delete $CLUSTER_NAME
Elimina l'istanza Cloud SQL:
gcloud sql instances delete $INSTANCE_NAME
Rimuovi il ruolo dall'account di servizio:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Elimina l'account di servizio:
gcloud iam service-accounts delete $SA_EMAIL
Passaggi successivi
- Configura un IP statico e un nome di dominio per la tua app.
Configura un bilanciatore del carico delle applicazioni esterno con Ingress.
Esplora altri tutorial su Kubernetes Engine.
Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.