It is pivotal to understand the application functionalities and available resources. This is especially the case when a microservice-based design is chosen, and solutions suck as IaaS (Infrastructure as a Service), PaaS (Platform as a Service), SaaS (Software as a Service) are available from a multitude of vendors. Choosing the most suitable deployment tooling will lead to the efficient delivery of the product.
Considering that the application code is available, these are the steps to adopt each proposed solution:
- create an OCI (Open Container Initiative) compliant image, usually created by using Docker
- deploy a Kubernetes cluster with a valid ingress controller for the routing of requests
- deploy an observability stack, including logs and metrics
- create the YAML manifests for the application deployment
- create a CI/CD pipeline to push the Kubernetes resources to the cluster
- write a manifest file to provide main application deployment parameters
- deploy Cloud Foundry or use Cloud Foundry PaaS solutions from 3rd part vendors
- deploy the application to Cloud Foundry (via CLI or UI)
Note: Cloud Foundry will create the OCI compliant image by default, and it will provide the routing capacities as well. Cloud Foundry provides a better developer experience for application deployment, as it offers a greater level of component abstraction (no need to manage the underlying infrastructure). However, a PaaS solution locks-in the customer to a specific vendor. On the other side, Kubernetes offers full control over the container orchestration, providing more flexible management of the application.