In dieser Anleitung wird gezeigt, wie Sie ein WordPress-Deployment mit einem einzigen Replikat in Google Kubernetes Engine (GKE) unter Verwendung einer MySQL-Datenbank einrichten. Statt MySQL zu installieren, verwenden Sie Cloud SQL, das eine verwaltete Version von MySQL bereitstellt. WordPress verwendet PersistentVolumes
(PVs) und PersistentVolumeClaims
(PVCs) zum Speichern von Daten.
Ein PV ist eine Darstellung des Speicher-Volumes im Cluster, das von einem Administrator manuell oder von Kubernetes dynamisch zur Verarbeitung einer Anfrage bereitgestellt wird, die in einem PVC gestellt wurde. Ein PVC ist eine vom Nutzer gesendete Anfrage zur Speicherung einer bestimmten Speicherklasse, die von einem PV verarbeitet werden kann. PVs und PVCs sind von Pod-Lebenszyklen unabhängig und behalten Daten auch dann bei, wenn Pods neu gestartet, neu geplant oder sogar gelöscht werden. WordPress nutzt nichtflüchtigen Speicher als Speicher für die PVs.
Hintergrund
WordPress ist ein Blogging-Tool, das die Blog-Artikel und ihre zugehörigen Objekte und Metadaten in einer relationalen Datenbank speichert. Inhalte wie Bilder in einem Blogpost werden dagegen im lokalen Dateisystem gespeichert. In dieser Anleitung wird das offizielle WordPress-Docker-Image von Docker Hub verwendet.
Im Allgemeinen eignet sich das Root-Dateisystem eines Containers nicht zum Speichern von nichtflüchtigen Daten. Die Container, die Sie in GKE ausführen, sind normalerweise entfernbare Entitäten. Der Clustermanager kann jeden Container löschen, bereinigen oder neu planen, der aufgrund von Knotenfehlern oder anderen Ursachen nicht mehr verfügbar ist. Wenn Knoten fehlschlagen, gehen alle Daten verloren, die im Root-Dateisystem eines Containers gespeichert sind.
Wenn Sie PVs mit Persistent Disk verwenden, können Sie die Daten der WordPress-Plattform außerhalb der Container speichern. Dadurch bleiben die Daten erhalten, auch wenn die Container gelöscht werden. Bei Verwendung der Standardspeicherklasse wandert Ihr nichtflüchtiger Speicher (und damit Ihr Datenbestand) nicht mit dem Pod mit, wenn dieser für einen anderen Knoten neu geplant wird. Es gibt verschiedene Möglichkeiten, das Verschieben der Daten zu verwalten. Eine Erläuterung dieser Möglichkeiten würde allerdings den Rahmen dieser Anleitung sprengen. Weitere Informationen finden Sie unter Bestehenden nichtflüchtigen Speicher als PersistentVolumes verwenden.
Für WordPress ist ein PV zum Speichern der Daten erforderlich. In dieser Anleitung verwenden Sie die Standardspeicherklasse, um einen nichtflüchtigen Speicher dynamisch zu erstellen und ein PVC für das Deployment zu erstellen.
Ziele
- GKE-Cluster erstellen
- PV und PVC auf Basis von Persistent Disk erstellen
- Cloud SQL for MySQL-Instanz erstellen
- WordPress bereitstellen
- WordPress-Blog einrichten
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
- 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.
- Aktivieren Sie in Cloud Shell die GKE APIs und die Cloud SQL Admin APIs:
gcloud services enable container.googleapis.com sqladmin.googleapis.com
Umgebung einrichten
Legen Sie in Cloud Shell die Standardregion für die Google Cloud CLI fest:
gcloud config set compute/region region
Dabei gilt:
region
: Wählen Sie eine Region aus, die geografisch in Ihrer Nähe liegt. Weitere Informationen finden Sie unter Regionen und Zonen.
Legen Sie die Umgebungsvariable
PROJECT_ID
auf Ihre Google Cloud-Projekt-ID fest (project-id).export PROJECT_ID=project-id
Laden Sie die Manifestdatei der Anwendung aus dem GitHub-Repository herunter:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Wechseln Sie in das Verzeichnis mit der Datei
wordpress-persistent-disks
:cd kubernetes-engine-samples/quickstarts/wordpress-persistent-disks
Legen Sie die Umgebungsvariable
WORKING_DIR
fest:WORKING_DIR=$(pwd)
Für diese Anleitung erstellen Sie Kubernetes-Objekte mit Manifestdateien im YAML-Format.
GKE-Cluster erstellen
Sie erstellen einen GKE-Cluster, um den WordPress-Anwendungscontainer zu hosten.
Erstellen Sie in Cloud Shell einen GKE-Cluster mit dem Namen
persistent-disk-tutorial
:CLUSTER_NAME=persistent-disk-tutorial gcloud container clusters create-auto $CLUSTER_NAME
Stellen Sie nach dem Erstellen eine Verbindung zum neuen Cluster her:
gcloud container clusters get-credentials $CLUSTER_NAME --region REGION
PV und PVC auf Basis von Persistent Disk erstellen
Erstellen Sie einen PVC als Speicher, der für WordPress erforderlich ist.
In GKE ist eine StorageClass
-Standardressource installiert, mit der Sie PVs dynamisch bereitstellen können, die Persistent Disk als Speicher verwenden. Zum Erstellen der PVCs, die für das Deployment erforderlich sind, verwenden Sie die Datei wordpress-volumeclaim.yaml
.
Diese Manifestdatei beschreibt ein PVC, das 200 GB Speicher anfordert. Da in der Datei keine StorageClass
-Ressource definiert wurde, verwendet dieses PVC die StorageClass
-Standardressource, um ein PV mit Persistent Disk bereitzustellen.
Stellen Sie in Cloud Shell die Manifestdatei bereit:
kubectl apply -f $WORKING_DIR/wordpress-volumeclaim.yaml
Es kann bis zu zehn Sekunden dauern, bis das PV mit Persistent Disk bereitgestellt und an das PVC gebunden wurde. Sie können den Status mit dem folgenden Befehl prüfen:
kubectl get persistentvolumeclaim
Die Ausgabe zeigt einen PersistentVolumeClaim mit dem Status
Pending
, ähnlich der folgenden:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE wordpress-volumeclaim Pending standard-rwo 5s
Dieser PersistentVolumeClaim verbleibt im Zustand
Pending
, bis Sie ihn später in dieser Anleitung verwenden.
Cloud SQL for MySQL-Instanz erstellen
Erstellen Sie in Cloud Shell eine Instanz namens
mysql-wordpress-instance
:INSTANCE_NAME=mysql-wordpress-instance gcloud sql instances create $INSTANCE_NAME
Fügen Sie den Namen der Instanzverbindung als Umgebungsvariable hinzu:
export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe $INSTANCE_NAME \ --format='value(connectionName)')
Erstellen Sie eine Datenbank für WordPress, um die Daten zu speichern:
gcloud sql databases create wordpress --instance $INSTANCE_NAME
Erstellen Sie einen Datenbanknutzer namens
wordpress
und ein Passwort für WordPress zur Authentifizierung bei der Instanz:CLOUD_SQL_PASSWORD=$(openssl rand -base64 18) gcloud sql users create wordpress --host=% --instance $INSTANCE_NAME \ --password $CLOUD_SQL_PASSWORD
Wenn Sie Ihre Cloud Shell-Sitzung schließen, geht das Passwort verloren. Notieren Sie sich das Passwort, da Sie es später in der Anleitung benötigen.
Damit haben Sie die Datenbank für Ihren neuen WordPress-Blog eingerichtet.
WordPress bereitstellen
Bevor Sie WordPress bereitstellen können, müssen Sie ein Dienstkonto erstellen. Sie erstellen ein Kubernetes-Secret für die Anmeldedaten des Dienstkontos und ein weiteres Secret für die Anmeldedaten der Datenbank.
Dienstkonto konfigurieren und Secrets erstellen
Damit die WordPress-Anwendung über einen Cloud SQL-Proxy auf die MySQL-Instanz zugreifen kann, müssen Sie ein Dienstkonto erstellen:
SA_NAME=cloudsql-proxy gcloud iam service-accounts create $SA_NAME --display-name $SA_NAME
Fügen Sie die E-Mail-Adresse des Dienstkontos als Umgebungsvariable hinzu:
SA_EMAIL=$(gcloud iam service-accounts list \ --filter=displayName:$SA_NAME \ --format='value(email)')
Fügen Sie Ihrem Dienstkonto die Rolle
cloudsql.client
hinzu:gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Erstellen Sie einen Schlüssel für das Dienstkonto:
gcloud iam service-accounts keys create $WORKING_DIR/key.json \ --iam-account $SA_EMAIL
Mit diesem Befehl wird eine Kopie der Datei
key.json
heruntergeladen.Erstellen Sie ein Kubernetes-Secret für die MySQL-Anmeldedaten:
kubectl create secret generic cloudsql-db-credentials \ --from-literal username=wordpress \ --from-literal password=$CLOUD_SQL_PASSWORD
Erstellen Sie ein Kubernetes-Secret für die Anmeldedaten des Dienstkontos:
kubectl create secret generic cloudsql-instance-credentials \ --from-file $WORKING_DIR/key.json
WordPress erstellen
Im nächsten Schritt stellen Sie den WordPress-Container im GKE-Cluster bereit.
Die Manifestdatei wordpress_cloudsql.yaml
beschreibt ein Deployment, das einen einzelnen Pod erstellt, der einen Container mit einer WordPress-Instanz ausführt. Dieser Container liest die Umgebungsvariable WORDPRESS_DB_PASSWORD
, die das von Ihnen erstellte Secret cloudsql-db-credentials
enthält.
Diese Manifestdatei konfiguriert außerdem den WordPress-Container für die Kommunikation mit MySQL über den Cloud SQL-Proxy, der im Sidecar-Container ausgeführt wird.
Der Wert der Hostadresse wird in der Umgebungsvariable WORDPRESS_DB_HOST
festgelegt.
Ersetzen Sie zur Vorbereitung der Bereitstellungsdatei die Umgebungsvariable
INSTANCE_CONNECTION_NAME
:cat $WORKING_DIR/wordpress_cloudsql.yaml.template | envsubst > \ $WORKING_DIR/wordpress_cloudsql.yaml
Stellen Sie die Manifestdatei
wordpress_cloudsql.yaml
bereit:kubectl create -f $WORKING_DIR/wordpress_cloudsql.yaml
Das Deployment dieser Manifestdatei dauert ein paar Minuten. In diesem Zeitraum wird Persistent Disk an den Compute-Knoten angehängt.
Beobachten Sie das Deployment, damit Sie die Statusänderung in
running
sehen:kubectl get pod -l app=wordpress --watch
Wenn die Ausgabe den Status
Running
anzeigt, können Sie mit dem nächsten Schritt fortfahren:NAME READY STATUS RESTARTS AGE wordpress-387015-02xxb 2/2 Running 0 2m47s
WordPress-Dienst freigeben
Im vorherigen Schritt haben Sie einen WordPress-Container bereitgestellt, auf den jedoch von außerhalb des Clusters derzeit nicht zugegriffen werden kann, da er keine externe IP-Adresse hat. Durch das Erstellen und Konfigurieren eines Kubernetes-Dienstes mit einem angehängten externen Load-Balancer können Sie die WordPress-Anwendung für Traffic aus dem Internet freigeben. Weitere Informationen zum Freigeben von Anwendungen mithilfe von Diensten in GKE finden Sie in der Anleitung.
Erstellen Sie einen Dienst von
type:LoadBalancer
:kubectl create -f $WORKING_DIR/wordpress-service.yaml
Das Erstellen eines Load-Balancers dauert einige Minuten.
Beobachten Sie das Deployment und warten Sie, bis dem Dienst eine externe IP-Adresse zugewiesen wurde:
kubectl get svc -l app=wordpress --watch
Wenn die Ausgabe eine externe IP-Adresse anzeigt, können Sie mit dem nächsten Schritt fortfahren: Ihre externe IP-Adresse unterscheidet sich vom folgenden Beispiel:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE wordpress 10.51.243.233 203.0.113.3 80:32418/TCP 1m
Notieren Sie sich das Adressfeld
EXTERNAL_IP
für die spätere Verwendung.
WordPress-Blog einrichten
In diesem Abschnitt richten Sie Ihren WordPress-Blog ein.
Rufen Sie in Ihrem Browser die folgende URL auf und ersetzen Sie dabei external-ip-address durch die
EXTERNAL_IP
-Adresse des Dienstes, der Ihre WordPress-Instanz freigibt:http://external-ip-address
Wählen Sie auf der Seite WordPress installation (WordPress-Installation) eine Sprache aus und klicken Sie dann auf Continue (Weiter).
Füllen Sie die Seite Information needed (Erforderliche Informationen) aus und klicken Sie dann auf Install WordPress (WordPress installieren).
Klicken Sie auf Log In (Anmelden).
Geben Sie den zuvor erstellten Nutzernamen und das Passwort ein.
Sie haben jetzt eine Blog-Website. Rufen Sie Ihren Blog im Browser über die folgende URL auf:
http://external-ip-address
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
- 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.
Einzelne Ressourcen löschen
Wenn Sie ein vorhandenes Projekt verwendet haben und es nicht löschen möchten, können Sie die einzelnen Ressourcen löschen.
Löschen Sie den Dienst:
kubectl delete service wordpress
Warten Sie, bis der für den Dienst
wordpress
bereitgestellte Load-Balancer gelöscht wurde. Der Load-Balancer wird asynchron im Hintergrund gelöscht.Beobachten Sie den Löschvorgang:
watch gcloud compute forwarding-rules list
Der Load-Balancer ist gelöscht, wenn Sie die folgende Ausgabe sehen:
Listed 0 items.
Löschen Sie das Deployment:
kubectl delete deployment wordpress
Löschen Sie das PVC für WordPress:
kubectl delete pvc wordpress-volumeclaim
Mit diesem Befehl werden auch das PV und Persistent Disk automatisch gelöscht.
Löschen Sie den GKE-Cluster:
gcloud container clusters delete $CLUSTER_NAME
Löschen Sie die Cloud SQL-Instanz:
gcloud sql instances delete $INSTANCE_NAME
Entfernen Sie die Rolle aus dem Dienstkonto:
gcloud projects remove-iam-policy-binding $PROJECT_ID \ --role roles/cloudsql.client \ --member serviceAccount:$SA_EMAIL
Löschen Sie das Dienstkonto:
gcloud iam service-accounts delete $SA_EMAIL
Nächste Schritte
- Statische IP-Adresse und Domainnamen für eine Anwendung konfigurieren
Weitere Kubernetes-Anleitungen
Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center