Zum Hauptinhalt springen

Deployment eines akka Cluster auf AWS EKS (Kubernetes)

Tobias Jonas Tobias Jonas 3 min Lesezeit
Deployment eines akka Cluster auf AWS EKS (Kubernetes)

Mit Amazon Elastic Kubernetes Service (EKS) bietet AWS eine verwaltete Kubernetes-Lösung, die sich optimal für das Deployment von akka-basierten Microservices eignet. In diesem Beitrag zeigen wir, wie man ein akka Cluster auf AWS EKS deployt.

Was ist AWS EKS?

Amazon Elastic Kubernetes Service (EKS) ist ein verwalteter Kubernetes-Dienst, der es einfach macht, Kubernetes auf AWS zu betreiben. AWS übernimmt dabei die Verwaltung der Control Plane, sodass sich Entwickler auf ihre Anwendungen konzentrieren können.

Vorteile von EKS

  • Verwaltete Control Plane: AWS kümmert sich um Verfügbarkeit und Skalierung
  • Integration mit AWS-Diensten: Nahtlose Anbindung an IAM, VPC, ELB und mehr
  • Sicherheit: Automatische Sicherheitsupdates und Integration mit AWS-Sicherheitsdiensten
  • Hochverfügbarkeit: Control Plane läuft über mehrere Availability Zones

akka und Kubernetes - Eine perfekte Kombination

akka ist ein Toolkit für den Bau von hochgradig nebenläufigen, verteilten und fehlertoleranten Anwendungen auf der JVM. In Kombination mit Kubernetes ergeben sich besondere Vorteile:

akka Cluster Discovery

akka bietet mit dem akka-management-Modul eine Kubernetes-native Cluster-Discovery. Statt statischer Seed-Nodes können akka-Nodes sich über die Kubernetes API automatisch finden.

akka.discovery {
  method = kubernetes-api
  kubernetes-api {
    pod-namespace = "default"
    pod-label-selector = "app=my-akka-app"
  }
}

Health Checks

akka-management bietet HTTP-Endpoints für Kubernetes Liveness- und Readiness-Probes:

livenessProbe:
  httpGet:
    path: /alive
    port: 8558
readinessProbe:
  httpGet:
    path: /ready
    port: 8558

EKS Cluster erstellen

Voraussetzungen

  • AWS CLI konfiguriert
  • kubectl installiert
  • eksctl installiert

Cluster erstellen mit eksctl

eksctl create cluster \
  --name akka-cluster \
  --region eu-central-1 \
  --nodegroup-name standard-workers \
  --node-type t3.medium \
  --nodes 3 \
  --nodes-min 1 \
  --nodes-max 4 \
  --managed

kubeconfig aktualisieren

aws eks update-kubeconfig --region eu-central-1 --name akka-cluster

akka Anwendung für Kubernetes vorbereiten

Dockerfile

FROM openjdk:11-jre-slim
WORKDIR /app
COPY target/universal/stage/ .
EXPOSE 8080 8558 2552
CMD ["bin/my-akka-app"]

Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-akka-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-akka-app
  template:
    metadata:
      labels:
        app: my-akka-app
    spec:
      containers:
      - name: my-akka-app
        image: my-registry/my-akka-app:latest
        ports:
        - containerPort: 8080
          name: http
        - containerPort: 8558
          name: management
        - containerPort: 2552
          name: remoting
        livenessProbe:
          httpGet:
            path: /alive
            port: management
        readinessProbe:
          httpGet:
            path: /ready
            port: management

RBAC für Cluster Discovery

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
subjects:
- kind: ServiceAccount
  name: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Deployment durchführen

# Image bauen und pushen
docker build -t my-registry/my-akka-app:latest .
docker push my-registry/my-akka-app:latest

# Kubernetes Ressourcen erstellen
kubectl apply -f rbac.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

# Status prüfen
kubectl get pods
kubectl logs -l app=my-akka-app

Cluster-Status überwachen

Um den akka Cluster-Status zu überwachen, kann man die akka-management Endpoints nutzen:

kubectl port-forward svc/my-akka-app 8558:8558
curl http://localhost:8558/cluster/members

Fazit

AWS EKS bietet eine solide Plattform für das Deployment von akka Cluster-Anwendungen. Die Kombination aus verwalteter Kubernetes-Infrastruktur und akkas nativer Kubernetes-Integration ermöglicht den Aufbau hochverfügbarer, verteilter Systeme mit minimalem operativem Aufwand.

Bei innFactory setzen wir akka und Kubernetes erfolgreich in zahlreichen Projekten ein. Als AWS und Lightbend Partner unterstützen wir Unternehmen bei der Entwicklung und dem Betrieb von reaktiven Cloud-Anwendungen.

Tobias Jonas
Geschrieben von Tobias Jonas CEO & Gründer

Cloud-Architekt und Experte für AWS, Google Cloud, Azure und STACKIT. Vor der Gründung der innFactory bei Siemens und BMW tätig.

LinkedIn