Introduction: why Kubernetes?
Kubernetes has been widely adopted in modern software development as it offers a powerful, portable and open-source platform that automates the management of containerized applications. Containers allow software teams to embrace microservices architecture to develop applications that allow for portability, immutability and optimized resource usage.
When setting up a Kubernetes environment, it comes in two flavors: vanilla Kubernetes and managed Kubernetes. With vanilla Kubernetes, a software development team has to pull the Kubernetes source code binaries, follow the code path, and build the environment on the machine. On the other hand, managed Kubernetes comes pre-compiled and pre-configured with tools that improve features to enhance a certain focus area, such as storage, security, deployment, monitoring, etc. Managed Kubernetes versions are also known as Kubernetes distributions.
This post delves into the top 7 popular Kubernetes distributions, and their most suitable use cases.
Key elements of a Kubernetes distribution
To successfully build and manage a Kubernetes ecosystem, Kubernetes Distributions should include specific components. Some of the main components of a Kubernetes Distribution include:
- The Container Runtime: The Container Runtime Engine manages Kubernetes PODs- the most basic Kubernetes objects that host containers. The container runtime engine essentially helps create and manage containers on the physical/virtual machine in which they are hosted. Kubernetes uses the Container Runtime Interface (CRI) to coordinate cluster resources so any container runtime can host Kubernetes applications. Each Kubernetes Distribution may offer support for different Container Runtimes. Some popular container runtimes include Docker, CRI-O, Apache Mesos, CoreOS, rkt, Canonical LXC and frakti among others.
- Storage: Containers are transient in nature, that is, they only stay alive when the process they are running remains active. A container will exit once the process they are running terminates. Most containerized applications create and process large volumes of data while serving user requests. Storage is important for Kubernetes applications as it offers a way to persist this data. Kubernetes’ Container Storage Interface (CSI) allows third-party vendors to easily create storage solutions for containerized applications. Some Kubernetes Distributions build their own storage solutions while others integrate with existing third party solutions. Popular storage solutions for Kubernetes include: Amazon ElasticBlock Storage (EBS), GlusterFS, Portworx, Rook, OpenEBS among others.
- Networking: Kubernetes applications are typically broken down into container-based microservices which are hosted in different PODs, running in different machines. Networking implementations allow for the seamless communication and interaction between different containerized components. Networking in Kubernetes is a herculean task, and each distribution may rely on a networking solution to facilitate communication between pods, services and the internet. Popular networking implementations include Flannel, Weave Net, Calico and Canal among others.
Popular Kubernetes distributions
- RedHat OpenShift
- VMware Tanzu
- Docker kubernetes service (dks)
- Amazon elastic kubernetes service (eks)
- Elastisys compliant kubernetes
Rancher offers a full stack for software teams looking to manage Kubernetes applications anywhere: private cloud, public cloud or on-premises. The stack provides developers and administrators a set of tools that help deploy and manage Kubernetes resources on any platform, simplifying the administration of containerized workloads. The Rancher stack packages infrastructure services in a portable layer, which makes it easy to provision resources for containerized applications. Beyond infrastructure orchestration, Rancher also allows multi-cluster deployment using the application catalog, container scheduling & orchestration, and high-level enterprise-grade control.
Rancher Supports any container runtime, however, Docker is required for containers to be orchestrated through the Rancher Kubernetes Engine (RKE). Rancher is compliant with the Container Network Interface framework, meaning it can use network drivers supported by Kubernetes. Rancher implements Block Storage using Longhorn, its own Storage solution and also offers Persistent Storage Services for stateful applications.
Rancher is considered best for multi-cluster Kubernetes applications running on hybrid cloud environments. It is also highly recommended when cluster administrators need to delegate the management of namespaces and clusters directly to end-users.
OpenShift allows on-premises orchestration of containers developed in Docker and managed by Kubernetes. It was developed by the RedHat Linux team as part of a suite of container orchestration software that allows the development of cloud-enabled services on-premises, which can then be deployed anywhere.
The platform is open-source and offers a user-friendly interface where administrators can develop and test applications before running them on the cloud. OpenShift offers plenty of advantages, including: simplified cloud application management, quick application builds, and improved security among others. It is also the most popular option for hybrid and multi-cloud deployments, according to our Kubernetes statistics.
OpenShift is built around Docker and Kubernetes. It however supports the Open Container Initiative, allowing integration with multiple container runtimes. OpenShift relies on RedHat OpenShiftContainer Storage, which offers dynamic and available persistent storage for containerized applications. OpenShift implements Software Defined Networking (SDN) which offers plugins to configure overlay networks for Kubernetes clusters.
RedHat OpenShift is applicable for large production environments that require rigorous testing before any changes to applications are committed. It offers Platform-as-a-Service, Software-as-a-Service and Infrastructure-as-a-Service capabilities that allow for agile development, useful in many applications such as healthcare, finance, and transportation among others.
Mirantis is an Enterprise vendor of RedHat’s open-source Openstack platform that is mostly used to host Infrastructure-as-a-Service (IaaS) offerings on physical or virtual machines. The Mirantis Kubernetes Engine, formerly known as Docker Enterprise, allows DevOps teams to build and ship code faster to both private and public clouds. Mirantis adds a stack of custom databases, message queueing, staging components and orchestration functionality to the Openstack platform. This eliminates complexity in infrastructure & operations and provides unified cluster operations for multi-cloud applications. The simplicity and functionality of the Mirantis Kubernetes Engine make it an industry-leading Kubernetes distribution.
Mirantis is Open Container Initiative (OCI) compliant, meaning any container runtimes that comply with the specification should work properly. Additionally, Mirantis has built-in support for Dockershim- the Kubernetes component that lets it run Docker containers. Since Kubernetes has announced to deprecate support for Docker starting from version 1.2, teams using Mirantis can still manage Docker containers without committing major configuration changes or patching Kubernetes.
The Mirantis Cloud Platform primarily relies on software defined storage, particularly Ceph for block and object storage. Ceph is an open-source Software Defined Storage solution that provides a unified, distributed platform for high-performing, self-healing and scalable storage.
The default CNI plugin for the Mirantis Kubernetes Engine is Calico which enables highly scalable networks and supports multiple networking models.
VMware Tanzu is a stack of Kubernetes-specific products focused on modernizing application development and virtualization of infrastructure, facilitating simpler development and operations. With Vmware tanzu, organizations can speed application development and delivery using a set of container images created and maintained by administrators. This allows firms to benefit from:
- Automated developer experience
- Valid open-source containers
- An enterprise-ready Kubernetes Runtime
- Unified multi-cluster management
VMware Tanzu also enables full-stack observability, providing a single pane of glass for all teams monitoring and analyzing cluster application & infrastructure metrics.
Tanzu supports both OCI and CRI-compliant runtimes, which allows teams to use containers created in Docker or any other runtime engine. Storage in Tanzu is managed by vSphere, which has a CNS-CSI driver that allows it to support all Kubernetes storage solutions that follow ephemeral and persistent storage. Tanzu implements VMWare’s NSX Container Networking Solution which provides full-stack networking capabilities using vSphere for Kubernetes. This therefore allows teams to use any networking solution native to Kubernetes.
Docker Kubernetes service (DKS)
Included in the enterprise version of Docker, DKS was developed to reduce the complexity of configuring and running enterprise-grade applications using Kubernetes. The Docker Kubernetes Service allows development teams to integrate Kubernetes into the entire DevOps process, from the desktop to production environments. Besides simplifying Kubernetes operations, DKS makes Kubernetes applications secure throughout their lifecycle.
With Docker Kubernetes Engine, organizations can accelerate application development, benefit from the freedom of vendor and infrastructure options, and implement Kubernetes Container Runtime Interface (CRI) using Containerd.
While built on top of the Docker Engine, DKS is CRI compliant and supports multiple compliant runtimes. DKS uses pluggable architecture to support multiple storage drivers, depending on the OS and workloads. Some of the storage drivers DKS supports include aufs, overlay2, devicemapper, zfs and btrs among others. The Docker Engine implements flexible networking that supports multiple drivers through its pluggable subsystem. Supported drivers include bridge, host, overlay, macvlan and other third-party network plugins.
Amazon elastic Kubernetes service (EKS)
The Amazon Elastic Kubernetes Service is largely popular since it enables High Availability by running multiple instances of the Kubernetes Control Plane in different regions. The service makes it easy to deploy, manage and scale Kubernetes applications on-premises or in the AWS cloud. AWS offers various autoscaling solutions, including Fargate and EKS Managed Node Groups that allow on-demand provision of compute resources. The EKS service automatically commits the latest security updates to the Kubernetes control plane, addressing critical issues that ensure the application stays secure.
EKS is OCI, CRI, CNI and CSI compliant, allowing teams to build and deploy applications anywhere, on the public/private cloud or on-premises. Besides this, AWS offers plenty of built-in storage and networking solutions that integrate well with applications running on EKS, eliminating the possibility of vendor lock-in. Some of the most suitable use-cases for AWS-EKS include web applications, hybrid deployment, machine learning and batch processing.
Elastisys compliant Kubernetes
Elastisys is a managed Kubernetes service that offers full-time support throughout an application’s entire lifecycle. The platform comes with approved CNCF open-source tooling built in, and includes a security layer so teams can reap all the benefits of Kubernetes while also enforcing strict security guidelines. Compliant Kubernetes open-sourced the Elastisys distribution in November 2020 by allowing individuals and organizations to combine self-built infrastructure with managed tools for improved compliance and security.
The current distribution addresses requirements for GDPR, PCI-DSS, ISO-27001, SOC2 and HIPAA standards, ensuring security compliance throughout the entire Software Development Life Cycle. Besides security and compliance, Elastisys compliant kubernetes offers other benefits such as automation and platform observability.
Elastisys compliant kubernetes is cloud native and supports CRI and OCI runtimes. That means it can be used to orchestrate containers developed and deployed by any of such runtime engines. It also supports all networking and storage drivers available in Kubernetes, offering a complete cloud native experience.
Kubernetes distributions help teams efficiently manage Kubernetes clusters by leveraging pre-built environments. With the continued growth of Kubernetes adoption, more distributions are finding their way to the market. This article has covered some of the most popular Kubernetes distributions, including their features and suitable use cases. It is recommended to take these into consideration when deciding on a platform to manage your organizations workloads running on Kubernetes.