4.4 Deployment Details

In diesem Abschnitt werden die spezifischen Kubernetes-Manifeste beschrieben, die für die Bereitstellung der Applikation verwendet werden. Diese Manifeste steuern die Konfiguration und das Verhalten der verschiedenen Komponenten der Anwendung und gewährleisten eine strukturierte Orchestrierung.

Namespace-Definition

Datei: namespace.yaml

Der Namespace eventgallery dient der Isolation aller Ressourcen, die zur Applikation gehören. Dadurch wird eine klare Trennung von anderen Diensten im Cluster gewährleistet.

apiVersion: v1
kind: Namespace
metadata:
  name: eventgallery

Backend Deployment

Datei: backend-deployment.yaml

Das Backend Deployment stellt die zentrale Logik der Applikation bereit und unterstützt mehrere Replikate, um die Verfügbarkeit zu gewährleisten. Zusätzlich wurde ein HorizontalPodAutoscaler (HPA) hinzugefügt, um die Skalierbarkeit der Pods basierend auf der CPU-Auslastung zu gewährleisten.

Wichtige Konfigurationen

  • Image: ghcr.io/noluchs/sem4-eventgallery/eventgallery-backend:latest
  • Replikate: 2
  • Ports: 5000 (HTTP)
  • Secrets: Verwendet backend-secret für sensible Informationen wie Datenbankzugangsdaten.

Deployment-Konfiguration:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
  namespace: eventgallery
spec:
  replicas: 2
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
      - name: backend
        image: ghcr.io/noluchs/sem4-eventgallery/eventgallery-backend:latest
        ports:
        - containerPort: 5000
        envFrom:
        - configMapRef:
            name: backend-config
        - secretRef:
            name: backend-secret

HorizontalPodAutoscaler

Zusätzlich wird die Anzahl der Backend-Pods durch einen HPA dynamisch angepasst.

HPA-Konfiguration:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: backend-hpa
  namespace: eventgallery
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: backend
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

Frontend Deployment

Datei: frontend-deployment.yaml

Das Frontend Deployment ermöglicht Benutzern den Zugriff auf die Applikation und stellt die Benutzeroberfläche bereit. Zusätzlich wurde ein HorizontalPodAutoscaler (HPA) hinzugefügt, um die Skalierbarkeit der Pods basierend auf der CPU-Auslastung zu gewährleisten.

Wichtige Konfigurationen

  • Image: ghcr.io/noluchs/sem4-eventgallery/eventgallery-frontend:latest
  • Replikate: 2
  • Ports: 3000 (HTTP)
  • Verbindung: Die API-URL wird über eine ConfigMap bereitgestellt.

Deployment-Konfiguration:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend
  namespace: eventgallery
spec:
  replicas: 2
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: frontend
        image: ghcr.io/noluchs/sem4-eventgallery/eventgallery-frontend:latest
        ports:
        - containerPort: 3000
        envFrom:
        - configMapRef:
            name: frontend-config

HorizontalPodAutoscaler

Zusätzlich wird die Anzahl der Frontend-Pods durch einen HPA dynamisch angepasst.

HPA-Konfiguration:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: frontend-hpa
  namespace: eventgallery
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: frontend
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

Datenbank-Service und Deployment

Dateien: mysql-service.yaml und mysql-deployment.yaml

MySQL Deployment

Das MySQL Deployment stellt die relationale Datenbank bereit, die von der Applikation genutzt wird.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: eventgallery
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: root-password

MySQL Service

Der Service ermöglicht den Zugriff auf die MySQL-Datenbank innerhalb des Clusters.

apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: eventgallery
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: mysql

Secrets und ConfigMaps

Backend Secrets

Datei: backend-secret.yaml

Speichert sensible Informationen wie Datenbankzugangsdaten und API-Schlüssel.

apiVersion: v1
kind: Secret
metadata:
  name: backend-secret
  namespace: eventgallery
stringData:
  db-password: supersecretpassword
  api-key: my-api-key

Backend ConfigMap

Datei: backend-config.yaml

Definiert Umgebungsvariablen für das Backend.

apiVersion: v1
kind: ConfigMap
metadata:
  name: backend-config
  namespace: eventgallery
data:
  DB_HOST: mysql.eventgallery.svc.cluster.local
  DB_PORT: "3306"

Mit diesen Konfigurationsdateien wird die gesamte Anwendung orchestriert und bereitgestellt. Die vollständigen Manifeste sind im Repository verfügbar: SEM4-EVENTGALLERY Kubernetes Manifeste.