Custom Kubernetes Deployment

Users with a Lightbend Subscription new tab have access to the Akka Cloud Platform operator to run on their own Kubernetes cluster.

In order to best understand the basic deployment architecture and workflow, make sure you read the Cloud deployment and Deployment workflow before proceeding further.

Prepare your cluster

Running the Akka Cloud Platform operator requires Kubernetes 1.19 or newer.

Verify that your kubectl context points to your local Kubernetes cluster (for example, minikube new tab), or an external Kubernetes cluster (as illustrated in Azure new tab).

Next, make sure you have the akka-operator-helm chart:

helm repo add akka-operator-helm https://lightbend.github.io/akka-operator-helm/
helm repo update

Create environment variables with your Lightbend Login Credentials new tab:

export LIGHTBEND_COMMERCIAL_USERNAME=12345678-aaa-bbb-cccc-ddddeeeeff0e@lightbend
export LIGHTBEND_COMMERCIAL_PASSWORD=abcdef1243568790ababab470556835429873569

Install the operator with the command:

helm upgrade -i akka-operator akka-operator-helm/akka-operator \
  --set lightbendSubscription.username=$LIGHTBEND_COMMERCIAL_USERNAME \
  --set lightbendSubscription.password=$LIGHTBEND_COMMERCIAL_PASSWORD \
  --namespace lightbend \
  --version=1.1.22  (1)
1 1.1.22 is the latest available version.

The cluster is now ready for you to deploy AkkaMicroservice services.

Known limitations

Deploying the Akka Cloud Platform operator with Google Cloud Platform (GCP) or with Amazon Web Services (AWS) enables integration with databases, message brokers, and ingress specific to GCP or AWS.

When you install the Akka Cloud Platform operator on a custom Kubernetes cluster, it will not be in charge of creating the Ingress instances required to handle external traffic into your AkkaMicroservice. This is unlike the deployment on AWS or GCP, where the operator can fine-tune all the necessary resources. The Ingress resources require cloud-specific tuning. You will need to refer to your Kubernetes provider (such as minikube docs, Azure docs) to create an Ingress that can handle TLS-enabled, HTTP/2 traffic to serve gRPC externally.

As a consequence, when deploying on custom-managed Kubernetes clusters you can’t use the grpcIngress and httpIngress properties of the AkkaMicroservice Spec:

kubernetes/shopping-cart-service-cr.yml
apiVersion: akka.lightbend.com/v1
kind: AkkaMicroservice
metadata:
  name: shopping-cart-service
spec:
  image: <image>
  replicas: 3
  httpPort: "8080"
  grpcPort: "8101"
#  grpcIngress:
#    enabled: true
#    certificate: ingress-secret
#    class: ???
#  httpIngress:
#    enabled: true
#    certificate: ingress-secret
#    class: ???