So installieren Sie WordPress auf Kubernetes auf Linode

WordPress ist als eines der beliebtesten Blogging-Tools bekannt. Es verwendet eine relationale Datenbank, um die Inhalte zu speichern: Artikel, beteiligte Metadaten, während PersistentVolume (PV) und PersistentVolumeClaim (PVC) Asset-Daten speichern.

Dieses Tutorial zeigt Ihnen, wie Sie eine einzelne Replik einer WordPress-Site mithilfe der MySQL-Datenbank auf Kubernetes auf Linode installieren.

Kubernetes-Cluster auf Linode einrichten

In diesem Abschnitt werden alle Schritte zum Einrichten eines Kubernetes auf . beschrieben linode.com. Lassen Sie uns zuerst ein Konto bei Linode registrieren und dann beim Linode Dashboard anmelden. Gehen Sie zum Kubernetes-Untermenü, klicken Sie dann oben rechts auf die Schaltfläche “Cluster hinzufügen” und füllen Sie das Feld aus: Clusterbezeichnung, wählen Sie eine geeignete Region und die Kubernetes-Version aus.

Kubernetes-Untermenü im Linode-Dashboard

Fügen wir dann Knotenpools für Ihren Kubernetes-Cluster hinzu. In diesem Tutorial richten wir einen 1-Knoten-Cluster mit dem Plan ‘Dedicated 4GB’ ein, der Knoten verfügt über 4 GB RAM, 2 CPUs und 80 GB Speicher.

Knotenpools hinzufügenKnotenpools hinzufügen

Klicken Sie abschließend auf „Cluster erstellen“, um den Kubernetes-Cluster bereitzustellen.

Cluster erstellenCluster erstellen

Nach einigen Minuten Wartezeit wurde der Kubernetes-Cluster erfolgreich bereitgestellt. Laden wir die Kubeconfig-Datei auf Ihren lokalen Computer herunter, damit Sie bequem mit dem Cluster interagieren können.

kubeconfig herunterladenkubeconfig herunterladen

Erstellen Sie auf Ihrem lokalen Computer einen Ordner namens .kube im Home-Verzeichnis und verschieben Sie die heruntergeladene Datei in diesen Ordner:

$ mkdir ~/.kube
$ mv wordpress-kubeconfig.yaml .kube/config

Außerdem müssen Sie das kubectl-Tool installieren:

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
$ chmod +x kubectl
$ sudo mv kubectl /usr/local/bin

Jetzt können Sie die Informationen Ihres Kubernetes-Clusters abrufen, indem Sie den folgenden Befehl ausführen:

$ kubectl get node

NAME STATUS ROLES AGE VERSION
lke11043-13758-5f73eca05dae Ready 5m v1.18.8

Erstellen Sie PersistentVolume und PersistentVolumeClaim

Sowohl WordPress als auch MySQL benötigen PersistentVolume (PV), um Daten zu speichern. PersistentVolume (PV) und PersistentVolumeClaim (PVC) sind unabhängig vom Lebenszyklus des Anwendungs-Pods. Wenn Sie einen Pod neu starten, neu planen oder löschen, bleiben PV und PVC erhalten und die Daten bleiben erhalten.

Stellen Sie zunächst ein PersistentVolume (PV) bereit und es wird von einem PersistentVolumeClaim (PVC) beansprucht. Erstellen Sie die Manifestdatei mit dem Namen pvc-mysql-wp.yaml folgendermaßen:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi

Verwenden Sie den Befehl kubectl apply, um die PV zu erstellen:

$ kubectl apply -f pvc-mysql-wp.yaml
persistentvolumeclaim/mysql-pv-claim created
persistentvolumeclaim/wp-pv-claim created

Stellen Sie sicher, dass die PVs nach dem Erstellen von PVC automatisch bereitgestellt wurden:

$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-658d8d2da7a241bd 20Gi RWO Retain Bound default/wp-pv-claim linode-block-storage-retain 5m
pvc-ca93cd86df0d49c8 20Gi RWO Retain Bound default/mysql-pv-claim linode-block-storage-retain 5m1s

Passwort für MySQL-Datenbank erstellen

Kubernetes verwendet Secret, um sensible Daten wie Passwörter oder private Schlüssel zu speichern.

Lass uns eine Datei erstellen secret.yaml mit Ihrem Lieblingseditor wie folgt:

apiVersion: v1
kind: Secret
metadata:
name: mysql-pass
type: Opaque
data:
password: yourpassword

Wenden Sie das Manifest an:

$ kubectl apply -f secret.yaml
secret/mysql-pass created

Überprüfen Sie, ob das Geheimnis erfolgreich erstellt wurde:

$ kubectl get secret
NAME TYPE DATA AGE
default-token-gcgp4 kubernetes.io/service-account-token 3 7h52m
mysql-pass Opaque 1 2m33s

MySQL bereitstellen

Sie können die folgende Manifestdatei verwenden, um eine Einzelinstanz-Bereitstellung von MySQL zu erstellen. Das PersistentVolume wird unter /var/lib/mysql gemountet.

Lass uns eine Datei erstellen mysql-deployment.yaml:

apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim

Wenden Sie dann das obige Manifest an:

$ kubectl apply -f mysql-deployment.yaml
service/wordpress-mysql unchanged
deployment.apps/wordpress-mysql created

Überprüfen Sie, ob der MySQL-Pod erfolgreich bereitgestellt wurde:

$ kubectl get pod
NAME READY STATUS RESTARTS AGE
wordpress-mysql-57464b4779-vtjrf 1/1 Running 0 3m33s

WordPress bereitstellen

Sie können das folgende Manifest verwenden, um WordPress in Ihrem Kubernetes-Cluster bereitzustellen. Das vom WordPress-Container verwendete PersistentVolume wird unter /var/www/html gemountet.

Der Dienst WordPress hat den Typ LoadBalancer, um von außerhalb des Clusters darauf zuzugreifen.

Lass uns eine Datei erstellen wordpress-deployment.yaml:

apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim

Führen wir nun den folgenden Befehl aus, um WordPress bereitzustellen:

$ kubectl apply -f wordpress-deployment.yaml
service/wordpress created
deployment.apps/wordpress created

Überprüfen Sie, ob WordPress betriebsbereit ist:

$ kubectl get pod
NAME READY STATUS RESTARTS AGE
wordpress-6857459697-wmgn9 1/1 Running 0 3m34s
wordpress-mysql-57464b4779-vtjrf 1/1 Running 0 32m

Stellen Sie sicher, dass alle Dienste ausgeführt werden:

$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.128.0.1 443/TCP 12h
wordpress LoadBalancer 10.128.108.139 172.104.37.236 80:30567/TCP 5s
wordpress-mysql ClusterIP None 3306/TCP 29m

Jetzt können Sie über die EXTERAL-IP des Dienstes WordPress auf die WordPress-Seite zugreifen. Lassen Sie uns es kopieren und in Ihren Webbrowser einfügen:

WordPress-Setup-SeiteWordPress-Setup-Seite

Fazit

WordPress ist ein wirklich leistungsstarkes Blogging-Tool für alle Inhaltsersteller und auch Entwickler. In diesem Tutorial wurden alle Schritte zum Erstellen eines Kubernetes-Clusters auf Linode und zum Einrichten der WordPress-Seite darauf durchlaufen.

Vielen Dank fürs Lesen und hinterlassen Sie bitte Ihren Vorschlag im Kommentarbereich unten.