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: 8558EKS 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 \
--managedkubeconfig aktualisieren
aws eks update-kubeconfig --region eu-central-1 --name akka-clusterakka 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: managementRBAC 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.ioDeployment 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-appCluster-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/membersFazit
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


