How ID3 Reached Greater Deployment Flexibility
The Background
The energy and oil & gas industries encompass a wide array of technologies for reasons extending beyond the technical realm. Often, the adoption of such tools must navigate resource-constrained environments, necessitating solutions that are agnostic to specific technologies (e.g., AWS Lambda) but operate at a lower level of the stack.
The Idea
For these reasons, id3 adapted its deployment methodology to accommodate both on-premise and cloud deployments. The challenge was to maintain the same infrastructure while ensuring cost-effectiveness. What technology could provide consistent deployment in both scenarios? We opted for Kubernetes.
Kubernetes
Kubernetes enjoys robust support across major cloud environments such as AWS, Azure, and Oracle Cloud, as well as for on-premise self-hosted solutions like K3s or K0s. It empowers us to manage deployments in a scalable and maintainable manner, leveraging technologies such as Helm and Kustomize for resource management.
id3 also manages persistence, with a high volume of operations (data retention is infinite). Therefore, we rely on disk drivers to enable persistence in the application.
Kubernetes on Cloud Environments
Each cloud environment typically offers its own Kubernetes distribution as a PaaS (Platform as a Service):
- Azure: Azure Kubernetes Service (AKS)
- AWS: Elastic Kubernetes Service (EKS)
- Oracle: Oracle Kubernetes Engine (OKE)
- and more.
In each case, the challenge lies in understanding network operations and persistence management to ensure proper networking configuration and persistence fulfillment, particularly in terms of disk latency and speed (IOPS).
But what if a cloud provider lacks Kubernetes support? In such cases, we turn to an IaaS (Infrastructure as a Service) technique to set up open-source Kubernetes distributions like K3s.
Networking
Networking is usually managed by a load balancer (possibly layer 7) acting as a Web Application Firewall to route traffic to the pods.
Kubernetes on Premise
On-premise, we rely on open-source Kubernetes distributions such as K3s and K0s. These utilities enable us to scaffold a cluster with custom configurations of nodes: mixed master-worker, tainted masters, etc.
On Premise - Networking
To utilize Ingress
resources in an on-premise Kubernetes cluster, we use load balancer technology like MetalLB. By specifying available front-end IPs in MetalLB, we can create Ingress
and Service
resources accessible within the network.
On Premise - Persistence
Persistence can be complex for on-premise installations. Relying on multiple nodes to manage storage carries performance costs. Technologies like Longhorn help maintain proper storage setups.
Kubernetes Operators
Operators, dedicated resources (pods, services, etc.), maintain specific functionalities within the cluster.
Infrastructure
While everything may seem ideal, maintaining proper infrastructure remains essential. To ensure cost-effectiveness across diverse sources, we turned to IaC (Infrastructure As Code). This technology allows us to maintain a remote state, segmented into environments (e.g., dev, preprod, prod), and compare this state against code stored in a Git repository, enabling versioning, cost control, and infrastructure auditability.
Conclusions
All these pieces of the puzzle enable us to scale our solution to manage an increasing volume of data processing and offer a solution suitable for all scenarios.