WordPress Anziché installare MySQL, utilizzerai
Cloud SQL,
che fornisce una versione gestita di MySQL. WordPress uses
PersistentVolumes (PV)
and
PersistentVolumeClaims (PVC)
per archiviare i dati.
Un PV è una rappresentazione del volume di archiviazione nel cluster di cui è stato eseguito il provisioning da parte di un amministratore o di cui Kubernetes ha eseguito il provisioning dinamico per soddisfare una richiesta effettuata in un PVC. Un PVC è una richiesta di archiviazione di una determinata classe di archiviazione da parte di un utente che può essere soddisfatta da un PV. I PV e i PVC sono indipendenti dai cicli di vita dei pod e conservano i dati durante il riavvio, la riprogrammazione e persino l'eliminazione dei pod. WordPress utilizza Persistent Disk come spazio di archiviazione per supportare i PV.
Sfondo
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 asset, come le immagini in un post del blog. Questo tutorial utilizza l'immagine Docker ufficiale di WordPress da Docker Hub.
In generale, il file system radice di un container non è adatto per archiviare dati permanenti. I container che esegui su GKE sono in genere entità eliminabili e il gestore del cluster può eliminare, espellere o riprogrammare tutti i container che diventano non disponibili a causa di errori dei nodi o di altre cause. Quando i nodi non funzionano, tutti i dati salvati nel file system radice di un container vengono persi.
L'utilizzo di PV supportati da Persistent Disk consente di archiviare i dati della piattaforma WordPress all'esterno dei container. In questo modo, anche se i container vengono eliminati, i relativi dati vengono mantenuti. Con la classe di archiviazione predefinita, il Persistent Disk (e quindi i dati) non si sposta con il pod se il pod viene riprogrammato su un altro nodo. Esistono diversi modi per gestire lo spostamento 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, utilizzerai la classe di archiviazione predefinita per creare dinamicamente un Persistent Disk e un PVC per il deployment.
Obiettivi
- Creare un cluster GKE.
- Creare un PV e un PVC supportati da Persistent Disk.
- Creare un'istanza Cloud SQL per MySQL.
- Eseguire il deployment di WordPress.
- Configurare il blog WordPress.
Costi
In questo documento vengono utilizzati 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 l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. 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 role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Nella Google Cloud console, attiva Cloud Shell.
Nella parte inferiore della Google Cloud console, viene avviata una sessiona di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già incluso e installato e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
- 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 una regione più vicina a te. Per maggiori informazioni, consulta Regioni e zone.
Imposta la variabile di ambiente
PROJECT_IDsull'Google Cloud ID progetto (project-id).export PROJECT_ID=project-id
Scarica i file manifest dell'app da il repository GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesPassa alla directory con il file
wordpress-persistent-disks:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disksImposta la variabile di ambiente
WORKING_DIR:WORKING_DIR=$(pwd)Per questo tutorial, creerai oggetti Kubernetes utilizzando i file manifest in formato YAML.
Creazione di un cluster GKE
Crea un cluster GKE per ospitare il container 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_NAMEUna volta creato, connettiti al nuovo cluster:
gcloud container clusters get-credentials $CLUSTER_NAME --location REGION
Creazione di un PV e un PVC supportati da Persistent Disk
Crea un PVC come spazio di archiviazione richiesto per WordPress.
GKE ha una risorsa StorageClass predefinita installata che consente di
eseguire il provisioning dinamico
dei PV supportati da Persistent Disk. Utilizzerai il file wordpress-volumeclaim.yaml per creare i PVC necessari per il deployment.
Questo file manifest descrive un PVC che richiede 200 GB di spazio di archiviazione. Nel file non è stata definita una risorsa StorageClass, quindi questo PVC utilizza la risorsa StorageClass predefinita per eseguire il provisioning di un PV supportato da Persistent Disk.
In Cloud Shell, esegui il deployment del file manifest:
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yamlIl provisioning del PV supportato da Persistent Disk e l'associazione al PVC possono richiedere fino a dieci secondi. Puoi controllare lo stato con il comando seguente:
kubectl get persistentvolumeclaimL'output mostra un PersistentVolumeClaim con lo stato
Pending, simile al seguente:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE wordpress-volumeclaim Pending standard-rwo 5s
Questo PersistentVolumeClaim rimane nello stato
Pendingfinché non lo utilizzerai 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_NAMEAggiungi il nome 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 dati:
gcloud sql databases create wordpress --instance $INSTANCE_NAMECrea un utente del database denominato
wordpresse una password per l'autenticazione di WordPress all'istanza:CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORDSe 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.
Esecuzione del deployment di WordPress
Prima di poter eseguire il deployment di WordPress, devi creare un account di servizio. Crea un secret Kubernetes per contenere le credenziali dell'account di servizio e un altro secret per contenere le credenziali del database.
Configurare un account di servizio e creare 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_NAMEAggiungi l'indirizzo email del 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.cliental tuo account di servizio:gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAILCrea una chiave per l'account di servizio:
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAILQuesto comando scarica una copia del file
key.json.Crea un secret Kubernetes per le credenziali MySQL:
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORDCrea un secret Kubernetes per le credenziali dell'account di servizio:
kubectl create secret generic cloudsql-instance-credentials \ --from-file $WORKING_DIR/key.json
Eseguire 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 container legge la variabile di ambiente WORDPRESS_DB_PASSWORD che contiene 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 nella 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.yamlEsegui il deployment del file manifest
wordpress_cloudsql.yaml:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yamlIl deployment di questo file manifest richiede alcuni minuti mentre un Persistent Disk è collegato al nodo di calcolo.
Osserva il deployment per vedere lo stato passare a
running:kubectl get pod -l app=wordpress --watchQuando l'output mostra lo stato
Running, puoi passare al 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 da internet creando e configurando un servizio Kubernetes con un bilanciatore del carico esterno collegato. Per saperne di più sull'esposizione delle app utilizzando i servizi in GKE, consulta la guida illustrativa.
Crea un servizio di
type:LoadBalancer:kubectl create -f $WORKING_DIR/wordpress-service.yamlLa creazione di un bilanciatore del carico richiede alcuni minuti.
Osserva il deployment e attendi che al servizio venga assegnato un indirizzo IP esterno:
kubectl get svc -l app=wordpress --watchQuando l'output mostra un indirizzo IP esterno, puoi procedere al passaggio successivo. Tieni presente che il tuo IP esterno è diverso dall'esempio seguente.
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_IPda utilizzare in un secondo momento.
Configurazione del blog WordPress
In questa sezione configurerai il tuo blog WordPress.
Nel browser, vai al seguente URL, sostituendo external-ip-address con l'indirizzo
EXTERNAL_IPdel servizio che espone l'istanza WordPress:http://external-ip-address
Nella pagina Installazione di WordPress , seleziona una lingua e fai clic su Continua.
Completa la pagina Informazioni necessarie e fai clic 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
Libera spazio
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
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.
Elimina le singole risorse
Se hai utilizzato un progetto esistente e non vuoi eliminarlo, elimina le singole risorse.
Elimina il servizio:
kubectl delete service wordpressAttendi l'eliminazione del bilanciatore del carico di cui è stato eseguito il provisioning per il servizio
wordpress. Il bilanciatore del carico viene eliminato in modo asincrono in background.Osserva la procedura di eliminazione:
watch gcloud compute forwarding-rules listIl bilanciatore del carico viene eliminato quando viene visualizzato il seguente output:
Listed 0 items.Elimina il deployment:
kubectl delete deployment wordpressElimina il PVC per WordPress:
kubectl delete pvc wordpress-volumeclaimQuesto comando elimina automaticamente anche il PV e il Persistent Disk.
Elimina il cluster GKE:
gcloud container clusters delete $CLUSTER_NAME --location=$REGIONElimina l'istanza Cloud SQL:
gcloud sql instances delete $INSTANCE_NAMERimuovi il ruolo dall'account di servizio:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAILElimina 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, diagrammi e best practice di riferimento su Google Cloud. Consulta il nostro Cloud Architecture Center.