So richten Sie WordPress mit MySQL unter Kubernetes mit Helm ein

Einführung

Da immer mehr Entwickler in verteilten Umgebungen arbeiten, spielen Tools wie Kubernetes eine zentrale Rolle bei der Vereinheitlichung von Anwendungskomponenten in dynamischen Build- und Produktionsumgebungen. Mit der zunehmenden Komplexität von Anwendungsökosystemen und der wachsenden Beliebtheit von Kuberbetes sind Tools zur Verwaltung von Ressourcen in Kubernetes-Clustern unverzichtbar geworden.

Helm ist ein Open-Source-Paketmanager für Kubernetes, der das Bereitstellen und Aktualisieren von Anwendungen in einem Kubernetes-Cluster vereinfacht und gleichzeitig die Möglichkeit bietet, installationsfertige Anwendungen zu finden und gemeinsam zu nutzen sind als Kubernetes Charts verpackt.

In diesem Tutorial verwenden wir Helm, um https://wordpress.com [WordPress] auf einem Kubernetes-Cluster einzurichten und eine hochverfügbare Website zu erstellen. Dieses Setup nutzt nicht nur die intrinsische Skalierbarkeit und die Hochverfügbarkeit von Kubernetes, sondern trägt auch dazu bei, WordPress durch vereinfachte Upgrade- und Rollback-Workflows über Helm abzusichern.

Wir verwenden einen externen MySQL-Server, um die Datenbankkomponente zu abstrahieren, da diese aus Gründen der erweiterten Verfügbarkeit Teil eines separaten Clusters oder eines verwalteten Dienstes sein kann. Nachdem Sie die in diesem Tutorial beschriebenen Schritte ausgeführt haben, verfügen Sie über eine voll funktionsfähige WordPress-Installation in einer von Kubernetes verwalteten containerisierten Cluster-Umgebung.

Voraussetzungen

Um diesen Leitfaden zu vervollständigen, benötigen Sie Folgendes:

  • Ein Kubernetes 1.10+ -Cluster mit aktiviertem role- based access control (RBAC).

  • Das Befehlszeilentool "+ kubectl +", das auf Ihrem lokalen Computer oder Entwicklungsserver installiert ist und für die Verbindung mit Ihrem Cluster konfiguriert ist. Anweisungen zum Einrichten finden Sie in der official Kubernetes documentation.

  • Der Helm -Paketmanager, der auf Ihrem lokalen Computer oder Entwicklungsserver installiert ist, und Tiller, der auf Ihrem Cluster installiert ist, werden in diesem Lernprogramm erläutert: https://www.digitalocean.com/community/tutorials/ Wie-man-Software-auf-Kubernetes-Clustern-mit-dem-Helm-Paket-Manager-installiert [So installieren Sie Software auf Kubernetes-Clustern mit dem Helm-Paket-Manager].

  • Ein externer MySQL-Server mit SSH-Zugriff und dem * root * MySQL-Passwort. Um dies einzurichten, können Sie einem unserer MySQL-Tutorials folgen, wie zum Beispiel: How To Install MySQL unter Ubuntu 18.04.

Stellen Sie vor dem Fortfahren sicher, dass Sie sich bei Ihrem MySQL-Server anmelden können und eine Verbindung zu Ihrem Kubernetes-Cluster besteht. Falls Sie mehrere Cluster in Ihrer + kubectl + Konfigurationsdatei eingerichtet haben, sollten Sie sicherstellen, dass Sie mit dem richtigen Cluster verbunden sind, indem Sie den folgenden Befehl von Ihrem lokalen Computer oder Entwicklungsserver ausführen:

kubectl config get-contexts

Dies ist eine Beispielausgabe:

Output
CURRENT   NAME                        CLUSTER                     AUTHINFO                          NAMESPACE
*         do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster   do-sfo2-wordpress-cluster-admin
         minikube                    minikube                    minikube

Das Sternchen (*) gibt an, welcher Cluster derzeit der Standardkontext ist. Wenn Sie den aktuellen Kontext ändern müssen, führen Sie Folgendes aus:

kubectl config use-context

Sie sollten jetzt bereit sein, dem Rest des Handbuchs zu folgen.

Schritt 1 - Konfiguration von MySQL

Zunächst erstellen wir einen dedizierten MySQL-Benutzer und eine Datenbank für WordPress, mit der Verbindungen von externen Hosts hergestellt werden können. Dies ist erforderlich, da Ihre WordPress-Installation auf einem separaten Server im Kubernetes-Cluster ausgeführt wird. Wenn Sie bereits einen dedizierten MySQL-Benutzer und eine dedizierte MySQL-Datenbank für WordPress eingerichtet haben, können Sie mit dem nächsten Schritt fortfahren.

Melden Sie sich vom MySQL-Server mit dem folgenden Befehl bei MySQL an:

mysql -u root -p

Sie werden aufgefordert, das Kennwort anzugeben, das Sie bei der Erstinstallation der Software für das * root * MySQL-Konto eingerichtet haben. Nach der Anmeldung erhalten Sie von MySQL eine Eingabeaufforderung, mit der Sie die Datenbank und den Benutzer erstellen können, die wir für WordPress benötigen.

Um die Datenbank zu erstellen, können Sie die folgende Anweisung verwenden:

CREATE DATABASE ;

Jetzt erstellen wir einen dedizierten MySQL-Benutzer für diese Datenbank:

CREATE USER  IDENTIFIED BY '';

Der Benutzer "++" wurde erstellt, hat jedoch noch keine Zugriffsberechtigung. Mit dem folgenden Befehl erhält der Benutzer Administratorzugriff (alle Berechtigungen) auf die * wordpress * -Datenbank sowohl von lokalen als auch von externen Netzwerken:

GRANT ALL PRIVILEGES ON .* TO @'%';

Verwenden Sie die folgende Anweisung, um die internen MySQL-Tabellen zu aktualisieren, die die Zugriffsberechtigungen verwalten:

FLUSH PRIVILEGES;

Jetzt können Sie den MySQL-Client beenden mit:

exit;

Um zu testen, ob die Änderungen erfolgreich waren, können Sie sich erneut beim MySQL-Befehlszeilen-Client anmelden, diesmal mit dem neuen Konto "++" zur Authentifizierung:

mysql -u  -p

Sie sollten dasselbe Kennwort verwenden, das Sie beim Erstellen dieses MySQL-Benutzers mit der Anweisung + CREATE_USER + angegeben haben. Um zu bestätigen, dass Ihr neuer Benutzer Zugriff auf die ++ - Datenbank hat, können Sie die folgende Anweisung verwenden:

show databases;

Die folgende Ausgabe wird erwartet:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
|           |
+--------------------+
2 rows in set (0.03 sec)

Nachdem Sie sich vergewissert haben, dass die ++ - Datenbank in den Ergebnissen enthalten ist, können Sie den MySQL-Befehlszeilen-Client folgendermaßen beenden:

exit;

Sie haben jetzt eine dedizierte MySQL-Datenbank für WordPress und gültige Zugangsdaten, die Sie darin verwenden können. Da unsere WordPress-Installation auf einem separaten Server ausgeführt wird, müssen wir unsere MySQL-Konfiguration noch bearbeiten, um Verbindungen von externen Hosts zuzulassen.

Öffnen Sie auf Ihrem MySQL-Server die Datei "+ / etc / mysql / mysql.conf.d / mysqld.cnf +" mit dem Befehlszeileneditor Ihrer Wahl:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Suchen Sie die Einstellung "+ Bindeadresse " in dieser Datei. Standardmäßig hört MySQL nur auf ` 127.0.0.1 ` (localhost). Um Verbindungen von externen Hosts zu akzeptieren, müssen wir diesen Wert auf " 0.0.0.0 " ändern. So sollte Ihre " bind-address +" Konfiguration aussehen:

/etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            =

Wenn Sie diese Änderungen vorgenommen haben, speichern und schließen Sie die Datei. Sie müssen MySQL mit dem folgenden Befehl neu starten:

sudo systemctl restart mysql

Führen Sie den folgenden Befehl auf Ihrem lokalen Computer oder Entwicklungsserver aus, um zu testen, ob Sie eine Remoteverbindung herstellen können:

mysql -h  -u  -p

Denken Sie daran, "++" in die IP-Adresse oder den Hostnamen Ihres MySQL-Servers zu ändern. Wenn Sie eine fehlerfreie Verbindung herstellen können, können Sie jetzt mit dem nächsten Schritt fortfahren.

Schritt 2 - Installieren von WordPress

Jetzt, da wir über die notwendigen Informationen verfügen, um eine Verbindung zur MySQL-Datenbank herzustellen, können wir WordPress mithilfe von Helm installieren.

Standardmäßig installiert das WordPress-Diagramm MariaDB auf einem separaten Pod im Cluster und verwendet es als WordPress-Datenbank. Wir möchten dieses Verhalten deaktivieren und WordPress für die Verwendung einer externen MySQL-Datenbank konfigurieren. Diese und andere Konfigurationsoptionen (z. B. der Standardbenutzer und das Standardkennwort für WordPress-Administratoren) können während der Installation entweder über Befehlszeilenparameter oder über eine separate YAML-Konfigurationsdatei festgelegt werden.

Um die Dinge organisiert und einfach erweiterbar zu halten, verwenden wir eine Konfigurationsdatei.

Erstellen Sie auf Ihrem lokalen Computer oder Entwicklungsserver ein neues Verzeichnis für Ihre Projekteinstellungen und navigieren Sie dorthin:

mkdir myblog-settings
cd myblog-settings

Als nächstes erstellen Sie eine Datei mit dem Namen "+ values.yaml +" mit dem Texteditor Ihrer Wahl:

nano values.yaml

In dieser Datei müssen wir einige Variablen einrichten, die definieren, wie WordPress eine Verbindung zur Datenbank herstellt, sowie einige grundlegende Informationen zu Ihrer Site und dem anfänglichen Administrator-Benutzer, um sich bei WordPress anzumelden, wenn die Installation abgeschlossen ist.

Wir werden unsere Konfiguration auf der Standarddatei "+ values.yaml +" aus dem WordPress Helm chart basieren. Der Abschnitt * Blog / Site Info * enthält allgemeine Optionen für Ihr WordPress-Blog, z. B. den Namen des Blogs und die anfänglichen Benutzeranmeldeinformationen. Der Abschnitt * Datenbankeinstellungen * dieser Datei enthält die Einstellungen für die Verbindung zum Remote-MySQL-Server. MariaDB ist im letzten Abschnitt deaktiviert.

Kopieren Sie den folgenden Inhalt in Ihre Datei + values.yaml + und ersetzen Sie die hervorgehobenen Werte durch Ihre benutzerdefinierten Werte:

values.yaml

## Blog/Site Info
wordpressUsername:
wordpressPassword:
wordpressEmail:
wordpressFirstName:
wordpressLastName:
wordpressBlogName:

## Database Settings
externalDatabase:
 host:
 user:
 password:
 database:

## Disabling MariaDB
mariadb:
 enabled: false

Wir haben gerade die folgenden Optionen konfiguriert:

  • * wordpressUsername *: Login des WordPress-Benutzers.

  • * wordpressPassword *: Passwort des WordPress-Benutzers.

  • * wordpressEmail *: E-Mail des WordPress-Benutzers.

  • * wordpressFirstName *: Vorname des Wordpress-Benutzers.

  • * wordpressLastName *: Nachname des Wordpress-Benutzers.

  • * wordpressBlogName *: Name der Site oder des Blogs.

  • * host *: IP-Adresse oder Hostname des MySQL-Servers.

  • * user *: MySQL-Benutzer.

  • * Passwort *: MySQL Passwort.

  • * database *: Name der MySQL-Datenbank.

Speichern Sie nach Abschluss der Bearbeitung die Datei und schließen Sie den Editor.

Nachdem wir alle Einstellungen vorgenommen haben, ist es an der Zeit, "+ helm " auszuführen, um WordPress zu installieren. Der folgende Befehl weist ` helm ` an, die neueste stabile Version des WordPress-Diagramms unter dem Namen `+` zu installieren, wobei + values.yaml + als Konfigurationsdatei verwendet wird:

helm install --name  -f values.yaml stable/wordpress

Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

Output
NAME:   myblog
LAST DEPLOYED: Fri Jan 25 20:24:10 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME              READY  UP-TO-DATE  AVAILABLE  AGE
myblog-wordpress  0/1    1           0          1s

==> v1/PersistentVolumeClaim
NAME              STATUS   VOLUME            CAPACITY  ACCESS MODES  STORAGECLASS  AGE
myblog-wordpress  Pending  do-block-storage  1s

==> v1/Pod(related)
NAME                               READY  STATUS   RESTARTS  AGE
myblog-wordpress-5965f49485-8zfl7  0/1    Pending  0         1s

==> v1/Secret
NAME               TYPE    DATA  AGE
myblog-externaldb  Opaque  1     1s
myblog-wordpress   Opaque  1     1s

==> v1/Service
NAME              TYPE          CLUSTER-IP     EXTERNAL-IP  PORT(S)                     AGE
myblog-wordpress  LoadBalancer  10.245.144.79  <pending>    80:31403/TCP,443:30879/TCP  1s

(...)

Nach Abschluss der Installation wird in Ihrem Kubernetes-Cluster ein Dienst mit dem Namen * myblog-wordpress * erstellt. Es kann jedoch einige Minuten dauern, bis der Container bereit ist und die Informationen zu "+ External-IP +" verfügbar sind. Führen Sie Folgendes aus, um den Status dieses Dienstes zu überprüfen und seine externe IP-Adresse abzurufen:

kubectl get services

Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

Output
NAME               TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
kubernetes         ClusterIP      10.245.0.1      <none>          443/TCP                      20h
  LoadBalancer   10.245.144.79      80:31403/TCP,443:30879/TCP   3m40s

Mit diesem Befehl erhalten Sie detaillierte Informationen zu Diensten, die auf Ihrem Cluster ausgeführt werden, einschließlich Name und Typ des Dienstes sowie IP-Adressen, die von diesen Diensten verwendet werden. Wie Sie der Ausgabe entnehmen können, wird die WordPress-Installation unter der externen IP-Adresse "+ 203.0.113.110 " als " myblog-wordpress +" bereitgestellt.

Ihre WordPress-Installation ist jetzt betriebsbereit. Um auf die Admin-Oberfläche zuzugreifen, verwenden Sie die öffentliche IP-Adresse, die Sie aus der Ausgabe von "+ kubectl get services " erhalten, gefolgt von " / wp-admin +" in Ihrem Webbrowser:

http:///wp-admin

Bild: http: //assets.digitalocean.com/articles/wordpress_kubernetes/admin_login.png [Anmeldebildschirm]

Sie sollten die in Ihrer Datei + values.yaml + definierten Anmeldeinformationen verwenden, um sich anzumelden und mit der Konfiguration Ihrer WordPress-Site zu beginnen.

Schritt 3 - Upgrade von WordPress

Aufgrund seiner Beliebtheit ist WordPress häufig ein Ziel für böswillige Ausnutzung. Daher ist es wichtig, es auf dem neuesten Stand zu halten. Wir können Helm-Versionen mit dem Befehl "+ helm upgrade" aktualisieren.

Führen Sie den folgenden Befehl auf Ihrem lokalen Computer oder Entwicklungsserver aus, um alle aktuellen Versionen aufzulisten:

helm list

Sie sollten eine Ausgabe ähnlich der folgenden erhalten:

OutputNAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      1           Fri Jan 25 20:24:10 2019    DEPLOYED    wordpress-        default

Wie Sie der Ausgabe entnehmen können, ist unsere aktuelle WordPress-Version "+ 5.0.3 " (App-Version), während die Chart-Version " 5.1.2 +" ist. Wenn Sie eine Version auf eine neuere Version eines Diagramms aktualisieren möchten, aktualisieren Sie zuerst Ihre Helm-Repositorys mit:

helm repo update

Sie können die folgende Ausgabe erwarten:

OutputHang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

Jetzt können Sie überprüfen, ob eine neuere Version des WordPress-Diagramms verfügbar ist:

helm inspect chart stable/wordpress

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

OutputapiVersion: v1
appVersion:
description: Web publishing platform for building blogs and websites.
engine: gotpl
home: http://www.wordpress.com/
icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png
keywords:
- wordpress
- cms
- blog
- http
- web
- application
- php
maintainers:
- email: [email protected]
 name: Bitnami
name: wordpress
sources:
- https://github.com/bitnami/bitnami-docker-wordpress
version:

Wie Sie der Ausgabe entnehmen können, ist mit WordPress * 5.1.1 * (App-Version) ein neues Diagramm verfügbar (Version 5.9.0). Wann immer Sie Ihre WordPress-Version auf das neueste WordPress-Diagramm aktualisieren möchten, sollten Sie Folgendes ausführen:

helm upgrade -f values.yaml  stable/wordpress

Dieser Befehl erzeugt eine Ausgabe, die der Ausgabe von "+ helm install" sehr ähnlich ist. Es ist wichtig, dass Sie dieselbe Konfigurationsdatei bereitstellen, die wir bei der erstmaligen Installation des WordPress-Diagramms verwendet haben, da sie die benutzerdefinierten Datenbankeinstellungen enthält, die wir für unser Setup definiert haben.

Wenn Sie nun + helm list + erneut ausführen, sollten aktualisierte Informationen zu Ihrer Version angezeigt werden:

Output
NAME    REVISION    UPDATED                     STATUS      CHART           APP VERSION     NAMESPACE
myblog  2           Fri May  3 14:51:20 2019    DEPLOYED    wordpress-            default

Sie haben Ihr WordPress erfolgreich auf die neueste Version des WordPress-Diagramms aktualisiert.

Release zurücksetzen

Jedes Mal, wenn Sie ein Release aktualisieren, wird von Helm eine neue * revision * dieses Releases erstellt. Eine Revision legt einen festen checkpoint fest, an den Sie zurückkehren können, wenn die Dinge nicht wie erwartet funktionieren. Es ähnelt einem Commit in Git, da es einen Änderungsverlauf erstellt, der verglichen und zurückgesetzt werden kann. Wenn während des Upgrade-Vorgangs etwas schief geht, können Sie jederzeit mit dem Befehl + helm rollback + auf eine frühere Revision einer bestimmten Helm-Version zurücksetzen:

helm rollback

Wenn wir zum Beispiel das Upgrade rückgängig machen und unsere WordPress-Version auf die * erste * Version zurücksetzen möchten, würden wir Folgendes verwenden:

helm rollback myblog

Dies würde die WordPress-Installation auf die erste Version zurücksetzen. Sie sollten die folgende Ausgabe sehen, die angibt, dass das Rollback erfolgreich war:

Output
Rollback was a success! Happy Helming!

Das erneute Ausführen von + helm list + sollte nun anzeigen, dass WordPress zurück auf 5.0.3, Chart-Version 5.1.2, aktualisiert wurde:

Output
NAME        REVISION    UPDATED                     STATUS      CHART           APP VERSION NAMESPACE
myblog      3       Mon Jan 28 22:02:42 2019    DEPLOYED    wordpress-            default

Beachten Sie, dass beim Zurücksetzen einer Version tatsächlich eine neue Version erstellt wird, die auf der Zielversion des Zurücksetzens basiert. Unsere WordPress-Version mit dem Namen "+ myblog +" hat jetzt die Versionsnummer * drei *, die auf der Versionsnummer * eins * basierte.

Fazit

In diesem Handbuch haben wir WordPress mit einem externen MySQL-Server auf einem Kubernetes-Cluster mithilfe des Befehlszeilentools Helm installiert. Wir haben auch gelernt, wie man eine WordPress-Version auf eine neue Chart-Version aktualisiert und wie man eine Version zurücksetzt, wenn während des Aktualisierungsprozesses etwas schief geht.

Als zusätzliche Schritte können Sie https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes in Betracht ziehen, um Nginx einzurichten Ingress with Cert-Manager], um das namensbasierte virtuelle Hosting zu aktivieren und ein SSL-Zertifikat für Ihre WordPress-Site zu konfigurieren. Sie sollten auch die recommended production settings für das WordPress-Diagramm überprüfen, das wir in diesem Handbuch verwendet haben.

Wenn Sie mehr über Kubernetes und Helm erfahren möchten, lesen Sie bitte den Abschnitt Kubernetes auf unserer Community-Seite.