Open Source Software for Cloud
1. Docker
Brought easy OS-level virtualization to Linux and added packaging and other nifty tricks. For a moment it looked like Docker would be the uncontested ruler of the next wave of virtualization. That changed, but while Kubernetes is gaining adoption among those building big clouds, Docker remains the default for almost everyone else. It is also the easiest path—especially if you just want to create a container or three on your laptop and share with others. If you’re not sure which to pick and you haven’t had a lot of experience with either, pick Docker.
2. Kubernetes
Provides a set of metaphors for running clusters of containers that are grouped together to form applications. In addition to simplifying deployments, updates, rollbacks, and high availability, Kubernetes makes multi-container apps portable across public and private clouds, because the same container patterns can be redeployed anywhere Kubernetes runs. In three short years Kubernetes has become a staple of the new application stack, and shows no sign of slowing down.
3. Kops
Kubernetes Operations is a command-line tool for provisioning production Kubernetes clusters on cloud infrastructure. In just a few commands, you can provision and maintain a Kubernetes cluster with relative ease. Currently, the only cloud provider supported is AWS, but Google Compute Engine and VMware vSphere are in alpha and other platforms are being planned.
4. Moby and LinuxKit
These projects give developers a “LEGO set” of components to build their own container systems. Moby provides a container runtime, an orchestration toolkit, and other core system components, all delivered as OCI-compatible containers. LinuxKit is for building minimal, stateless Linux distributions, though persistent storage can be attached. The resulting images can be booted and tested on every major OS by way of a hypervisor or run in any of the major cloud environments.
5. HashiCorp Terraform
They automates the deployment of infrastructure, allowing you to script the setup and configuration of server clusters and multi-tier applications in a datacenter or cloud—sort of like a Unix shell script can create devices, users, and services on a single machine. Compute, storage, networks, and supporting services like DNS can all be provisioned and combined in a repeatable, consistent manner.
6. OpenFaaS
If you’re plunging into serverless computing function as a service, it’s easy to get locked into a particular cloud provider. Amazon, Google, and Microsoft Azure all offer competing serverless computing services, but they all require writing to their standards—and that means sacrificing flexibility. OpenFaas is a serverless framework for Kubernetes and Docker Swarm, letting you maintain cloud provider flexibility while leveraging any programming language and Linux or Windows containers to create serverless functions.
7. Envoy
Envoy is an edge and service proxy with a pluggable filter chain model and support for HTTP L7 filtering. Envoy can be used for a variety of scenarios such as HTTP/2 gRPC proxying and MongoDB filtering and rate limiting, and its load balancing support includes eventually consistent service discovery, circuit breakers, retries, and zone-aware load balancing. Envoy also exposes both statistics and distributed tracing. Envoy is currently implemented in C++ 11 as a service mesh that runs out-of-process.
8. Jaeger
Jaeger s an OpenTracing-compatible distributed tracing system for monitoring microservice-based architectures. It has Go, Java, Python, and Node.js clients, and templates for Kubernetes and OpenShift. Jaeger uses consistent upfront sampling with individual per service/endpoint probabilities. Its back-end components are implemented in Go and its UI in React. It can use Cassandra or Elasticsearch as back-end storage plug-ins.
9. Linkerd
Linkerd is a transparent service mesh, designed to make modern applications safe and sane by transparently adding service discovery, load balancing, failure handling, instrumentation, and routing to all inter-service communication. Linkerd acts as a transparent HTTP/gRPC/Thrift/Etc proxy, and can usually be dropped into existing applications with a minimum of configuration, regardless of what language they’re written in. It works with many common protocols and service discovery backends, including scheduled environments like Mesos and Kubernetes.
10. Zipkin
Zipkin is a distributed tracing system that helps gather timing data needed to troubleshoot latency problems in microservice architectures. Applications are instrumented to report timing data to Zipkin. The Zipkin UI presents a dependency diagram showing how many traced requests went through each application. If you are troubleshooting latency problems or errors, you can filter or sort all traces based on the application, length of trace, annotation, or timestamp.
11. Awless
Awless is an alternative to the AWS CLI that offers a simpler syntax and some powerful enhancements. Awless makes it easy to create, update, or delete resources through simple scripts or template files that chain together commands. It supports aliases and provides autocompletion, inputting smart defaults and prompting for missing variables during resource creation. It even keeps a local RDF graph of your AWS resources that you can query offline, and a local log of operations you can use to revert to a previous state.