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.