Lab: Wordpress mit Front- und Backend
Ziel
- Eine Anwendung mit Front- und Backend deployen
Hilfsmittel
- Versuchen Sie, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets eigenständig zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Lab: Wordpress-Anwendung mit Front- und Backend
- Erstellen Sie ein Secret, das einen Schlüssel
password
mit dem Wert "mypassword" enthält - Fügen Sie den Metadaten die Bezeichnung "exercise: wordpress" hinzu.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Erstellen Sie eine Datei
secret.yaml
mit dem folgenden Inhalt:--- apiVersion: v1 kind: Secret metadata: name: db labels: exercise: wordpress type: Opaque stringData: password: "mypassword"
- Wenden Sie es an:
kubectl apply -f secret.yaml
- Erstellen Sie ein Deployment für die DB
- Den Metadaten des Deployments sollte ein Label
exercise: wordpress
hinzugefügt werden, das am Ende bereinigt werden muss. - Das Deployment sollte einen einzelnen Pod hochskalieren
- Der Container sollte das Image
mysql:5
verwenden - Ein hostPath-Volume vom Typ
DirectoryOrCreate
sollte unter dem Pfad/data/blog/mysql
erstellt werden - Das Volume sollte unter dem mountPath
/var/lib/mysql
gemountet werden - Die folgenden Umgebungsvariablen sollten gesetzt werden:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
- MYSQL_DATABASE: "wordpress"`
MYSQL_USER: "wordpress"
MYSQL_PASSWORD
, das auf das oben erstellte geheime Passwort verweist
- Der ContainerPort 3306 sollte konfiguriert werden
- Vergessen Sie nicht die Labels und LabelSelectors!
- Den Metadaten des Deployments sollte ein Label
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Erstellen Sie ein YAML-File
db-deployment.yaml
mit dem folgenden Inhalt:--- apiVersion: apps/v1 kind: Deployment metadata: name: db labels: app: blog component: db exercise: wordpress spec: replicas: 1 selector: matchLabels: app: blog component: db template: metadata: labels: app: blog component: db spec: volumes: - name: data hostPath: path: /data/blog/mysql type: DirectoryOrCreate containers: - name: mysql image: mysql:5 env: - name: MYSQL_RANDOM_ROOT_PASSWORD value: "yes" - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER value: wordpress - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: db key: password volumeMounts: - mountPath: /var/lib/mysql name: data ports: - containerPort: 3306
- Wenden Sie es an:
kubectl apply -f db-deployment.yaml
- Überprüfen Sie in den Logs, ob der Datenbankserver up and running ist:
$ kubectl logs deployments/db (...) [Note] mysqld: ready for connections.
- Erstellen Sie einen Service für die DB
- Ein Label
exercise: wordpress
sollte zu den Deployment-Metadaten hinzugefügt werden. - Der Dienst sollte Port 3306 auf targetPort 3306 abbilden
- Ein Label
- Vergessen Sie die labelSelectors nicht!
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Erstellen Sie einen Service
db-service.yaml
mit dem folgenden Inhalt:--- apiVersion: v1 kind: Service metadata: name: db labels: exercise: wordpress spec: selector: app: blog component: db ports: - protocol: TCP port: 3306 targetPort: 3306
- Wenden Sie es an:
kubectl apply -f db-service.yaml
- Erstellen Sie ein Deployment für das Wordpress-Frontend
- Den Metadaten des Deployments sollte ein Label
exercise: wordpress
hinzugefügt werden - Das Deployment sollte einen einzelnen Pod hochskalieren
- Der Container sollte das Image "wordpress:5" verwenden
- Die folgenden Umgebungsvariablen sollten gesetzt werden:
WORDPRESS_DB_HOST: "db"
WORDPRESS_DB_NAME: "wordpress"
WORDPRESS_DB_USER: "wordpress"
WORDPRESS_DB_PASSWORD
, das auf das oben erstellte geheime Passwort verweist
- Der ContainerPort 80 sollte konfiguriert werden
- Den Metadaten des Deployments sollte ein Label
- Vergessen Sie nicht die Labels und LabelSelectors!
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Erstellen Sie das Deployment
web-deployment.yaml
mit dem folgenden Inhalt:--- apiVersion: apps/v1 kind: Deployment metadata: name: server labels: exercise: wordpress spec: replicas: 1 selector: matchLabels: app: blog component: web template: metadata: labels: app: blog component: web spec: containers: - name: wordpress image: wordpress:5 imagePullPolicy: Always env: - name: WORDPRESS_DB_HOST value: db - name: WORDPRESS_DB_NAME value: wordpress - name: WORDPRESS_DB_USER value: wordpress - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: db key: password ports: - name: web containerPort: 80
- Wenden Sie es an:
kubectl apply -f web-deployment.yaml
- Prüfen Sie in den Wordpress-Logs, ob die Anwendung läuft:
$ kubectl logs deployments/server WordPress not found in /var/www/html - copying now... Complete! WordPress has been successfully copied to /var/www/html No 'wp-config.php' found in /var/www/html, but 'WORDPRESS_...' variables supplied; copying 'wp-config-docker.php' (WORDPRESS_DB_HOST WORDPRESS_DB_NAME WORDPRESS_DB_PASSWORD WORDPRESS_DB_USER) AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.42.130.234. Set the 'ServerName' directive globally to suppress this message AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.42.130.234. Set the 'ServerName' directive globally to suppress this message [Wed Feb 28 15:46:34.797478 2024] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.53 (Debian) PHP/7.4.29 configured -- resuming normal operations [Wed Feb 28 15:46:34.797511 2024] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
- Erstellen Sie einen Service für die Wordpress-Anwendung
- Ein Label
exercise: wordpress
sollte zu den Deployment-Metadaten hinzugefügt werden - Der Dienst sollte Port 80 auf targetPort "web" abbilden.
- Ein Label
- Vergessen Sie nicht die labelSelectors!
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Erstellen Sie ein YAML-File
web-service.yaml
mit dem folgenden Inhalt:--- apiVersion: v1 kind: Service metadata: name: server labels: exercise: wordpress spec: selector: app: blog component: web ports: - protocol: TCP port: 80 targetPort: web
- Wenden Sie es an:
kubectl apply -f web-service.yaml
- Verwenden Sie
kubectl get all
, um einen Überblick über alle Dinge zu erhalten, die bereitgestellt wurden. - Öffnen Sie ein neues Terminal und erstellen Sie eine Port-Weiterleitung. Diese ist erforderlich, um WordPress im Browser zu öffnen. Wir werden das Port-Forwarding später genauer kennen lernen.
kubectl port-forward service/server 8081:80 --address=127.0.0.1
- Verwenden Sie
curl
, um sicherzustellen, dass der Webserver wordpress ausliefert - Öffnen Sie einen Browser-Tab unter https://code-[INSTANZ_NUMMER].labs.corewire.io/proxy/8081/wp-admin/install.php, um wordpress zu öffnen
Hinweis
Erinnern Sie sich noch an die früheren Übungen mit kubectl run -it --image=cmd.cat/bash/curl
? Sie können mehr Befehle haben, indem Sie einfach den Namen des Bildes anhängen, z.B. --image=cmd.cat/bash/curl/lynx
. Weitere Informationen finden Sie unter commando
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
- Alle Kubernetes Objekte anzeigen:
$ kubectl get all NAME READY STATUS RESTARTS AGE pod/db-746b464d67-bg7gn 1/1 Running 0 49m pod/server-857cdbccfb-2xwfq 1/1 Running 0 5m22s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/db ClusterIP 10.42.80.39 <none> 3306/TCP 37m service/server ClusterIP 10.42.61.38 <none> 80/TCP 5s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/db 1/1 1 1 49m deployment.apps/server 1/1 1 1 5m23s NAME DESIRED CURRENT READY AGE replicaset.apps/db-746b464d67 1 1 1 49m replicaset.apps/server-857cdbccfb 1 1 1 5m23s
- Durch den WebInstaller auf Wordpress zugreifen:
$ kubectl run -it --image=cmd.cat/bash/curl --rm --command -- curl -sv server
Cleanup
- Löschen Sie alle Objekte, die wir mit
kubectl delete
erstellt haben, indem Sie den Label-Selektor für diese speziellen Übungen verwenden. - Beobachten Sie, wie sie mit
watch kubectl get all
verschwinden.
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl delete all --selector exercise=wordpress
kubectl delete secrets --selector exercise=wordpress