Our Cloud Stack

posted by Cristian Russo on

We started working with VM’s almost a decade ago. During that time, we were provisioning and orchestrating virtual machines using AWS Cloudformation, Ansible, Chef and Puppet, among other tools.


Soon after, we continued with containers, microservices architectures and DevOps, which has helped us to build, run and operate applications faster.


As part of our persuit of (re)searching and learning new ways to create cloud infrastructure, we found some tools that helped along the way. Here is a list of some of them.


Ansible

Managing a fleet of servers is complex, specially when they are threated as Pets (see Cattle vs Pets analogy)

Thanks to Ansible’s dynamic inventory feature, we can query Cloud Providers and get a list of servers and orchestrate them. For example: We can get a list of servers running on a particular region, filter the ones that are running a database and perform tasks against them.


We can also use some roles created by the ansible-galaxy community. These roles can help you to provision, secure, deploy and troubleshoot the servers.


Docker and Kubernetes

The management overhead introduced by running and operating VM’s was very high. Engineers were spending more time building and fixing infrastructure code rather than focusing on new features.


Containers helped us reducing the overhead as the provisioning was encapsulated on each application: The Operating System, dependencies, test code and the application itself were now part of the same single package. This has not just minimized the overhead, but also helped to deploy applications faster.


Kubernetes as also played a significant role by reducing the challenges of running Containers, allowing our clients to exploit the benefits of Cloud Computing. This has dramatically helped us to focus on building applications very fast, while keeping our applications resilient.


Helm

We are currently using Helm to install applications (Charts) inside kubernetes. Helm provides:

    • An easier way to create the recipies to install and run custom applications.
    • Infrastructure Tests, Upgrades and Rollbacks.


Prometheus, Grafana and the Elastic Stack

Prometheus provides a time series database while Grafana is a visualization tool that support several data-sources, such as Prometheus but also InfluxDB, AWS CloudWatch or Elastic Search.


The Elastic Stack is a set of open-source projects built by Elastic that allows to search, analyse and visualize any source of data in real time.


Use cases:

    • We use Prometheus to store cluster usage metrics (CPU, Memory) and costs.
    • The Elastic Stack is used as a Centralised Logging Mechansim.
    • Kibana (part of the elastic stack) to analyse the data.
    • Grafana to create Dashboards.

Tip

Gitlab shared their Grafana dashboards. Check them out on https://dashboards.gitlab.com


Cert-Manager

Renewing and managing SSL certificates is now in the past. Thanks to Cert-Manager, the validation and renewal of certs is an automated process.


The certificates are issued by Let’s Encrypt, a free certificate authority that also provides a Staging environment for testing purposes.


External-DNS

Some of our clients are running applications on hybrid clouds: Applications run in one cloud but the data is keep on another cloud provider or datacenter, sometimes on premises.


External-DNS can create entries on 3rd Party DNS, i.e. Applications and data can be running on Catalyst Cloud and DNS entries are delegated on AWS Route53