steering-wheel

Kubernetes Tutorial – Deployment Definition

Lesezeit: 2 Minuten

In unserer Kubernetes Artikel-Serie haben wir es und zum Ziel gesetzt, zu erklären wie Kubernetes funktioniert, um Ihnen ein besseres Verständnis von Kubernetes zu vermitteln. Wir erstellen dafür in unseren Beispielen eine eigene lokale, kleine Kubernetes-Installation. Die Beispiele sind jedoch auch in vielen Fällen auf größere Kubernetes-Installationen übertragbar, wie wir sie für unsere Kunden bereitstellen.

Im letzten Artikel unserer Kubernetes-Serie haben wir erklärt, wie man WordPress in einem Cluster installiert. Wenn Sie mitgemacht haben, haben Sie zwei YAML-Dateien heruntergeladen, die die Ressourcen für Ihre WordPress-Bereitstellung definiert haben. In diesem Artikel gehen wir genauer auf diese Konfigurationsdateien ein. Wir schauen uns die wordpress-deployment.yaml an, welche 3 Definitionen enthält: einen LoadBalancer-Service, eine PersistentVolumeClaim und das eigentliche WordPress-Deployment.

Load Balancer

Der Load Balancer leitet Netzwerk Pakete an Ihre App (in diesem Fall WordPress) weiter. Dies sollte nicht mit einer Ingress-Route verwechselt werden, da er keine Filterung oder Reverse-Proxying macht.

Unserer Load-Balancer wurde so konfiguriert, dass er Datenverkehr auf Port 80 annimmt und an die WordPress-App weiterleitet:

spec:
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend
  type: LoadBalancer

Persistent Volume Claim

Persistent Volume Claims bieten unseren Apps Speicherplatz im Cluster. Dieser Speicher wird bei einem Container Neustart nicht gelöscht.

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

Dieser Claim garantiert 20 GB Speicherplatz und ist im "ReadWriteOnce"-Modus eingestellt. Der "ReadWriteOnce" Modus stellt sicher, dass nur ein Node gleichzeitig das Volume für Lese-/Schreibzugriff mounten kann.

App Deployment

Wir werden uns auf die Template-Spezifikation unserer Bereitstellung beschränken und sie in kleinere Teile aufteilen, beginnend mit dem Container:

Hier definieren wir das Container-Image, das verwendet werden soll (in diesem Fall ein WordPress Container von DockerHub):

containers:
- image: wordpress:6.2.1-apache
  name: wordpress

Außerdem setzen wir auch einige Umgebungsvariablen spezifisch für WordPress. Diese setzen die relevanten Datenbankkonfigurationen, die von WordPress benötigt werden.

env:
- name: WORDPRESS_DB_HOST
  value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
  valueFrom:
    secretKeyRef:
      name: mysql-pass
      key: password

Die nächsten Blöcke hängen unser Volume ein und öffnen einen Port in unserem Container:

ports:
- containerPort: 80
  name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
  mountPath: /var/www/html

Außerdem verbinden wir den zuvor erstellten PVC mit unserem Deployment:

volumes:
  - name: wordpress-persistent-storage
    persistentVolumeClaim:
      claimName: wp-pv-claim

Fazit

Diese Bereitstellung ist recht typisch und bietet uns eine WordPress-Installation, Speicher-Ressourcen für den Betrieb, sowie einen Netzwerkzugang.

Die nächsten Schritte beinhalten die Einrichtung der Secret-Verwaltung, eines Ingress Controllers und eines verteilten Speichers. Lesen Sie dazu mehr in den folgenden Artikeln.