Containers are changing how companies build and run their applications and infrastructure. As containers become more commonplace, they have ushered in more dynamic infrastructure and given rise to a vast array of supporting technologies. For this report, we analyzed more than 1.5 billion containers run by thousands of Datadog customers to reveal which technologies, programming languages, and orchestration practices have gained real-world traction in container environments.
With more companies migrating production workloads to containers, orchestration platforms like Kubernetes and Amazon Elastic Container Service (ECS) have become an integral part of the container ecosystem. If present trends continue, soon the majority of companies running containers will use Kubernetes to some extent. But Kubernetes is hardly the only game in town. For Amazon Web Services customers, ECS remains an equally popular choice, bolstered by the rapid adoption of ECS's Fargate compute engine.
Read on for more insights and trends gathered from the latest real-world usage data.
Kubernetes continues its steady rise
Orchestration is becoming standard practice for organizations using containers. Nowhere is this more evident than in the steady rise of Kubernetes usage, which shows no sign of tailing off. As of October 2019, roughly 45 percent of Datadog customers running containers use Kubernetes, whether in self-managed clusters or through a cloud service like Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS), or Amazon Elastic Kubernetes Service (EKS). That represents a 10-point gain in Kubernetes adoption over the previous 12 months, and a 20-point gain over the previous 24 months.
Kubernetes usage is growing fast in Azure
Kubernetes is widely used on all the major public cloud providers, especially on Google Cloud Platform (GCP), where GKE has long been a popular choice. In recent years, however, Kubernetes usage on Microsoft Azure has grown so much that Kubernetes is now nearly as popular in containerized environments on Azure as it is on GCP. Roughly 80 percent of Datadog customers running containers in Azure are now using Kubernetes, up from 67 percent a year earlier. Kubernetes usage on Azure spans both AKS deployments and self-managed Kubernetes clusters, although we do not differentiate between those deployment types in this study. Among organizations running containers in AWS, the popularity of Kubernetes has climbed as well, doubling to 45 percent over the past two years.
GKE dominates in Google Cloud
Managed Kubernetes services such as GKE (on Google Cloud Platform) and EKS (on Amazon Web Services) have seen wide adoption on their respective cloud platforms. Users of these services delegate Kubernetes Control Plane management to the cloud provider, so they can focus on the workloads running on the cluster's worker nodes.
On Google Cloud Platform, more than 90 percent of organizations running Kubernetes have adopted GKE. The popularity of GKE is likely due to several factors, among them:
- GKE has been generally available for more than four years
- Kubernetes was originally developed and open sourced by Google
- GKE has long been a marquee product on Google Cloud Platform
EKS, which is a much newer product, has already seen relatively strong adoption, and we expect more and more organizations to adopt EKS over time. After all, the popularity of Amazon Elastic Container Service (ECS) has already demonstrated a strong and increasing demand for hosted container services among AWS customers.
Fargate runs in 19% of
AWS container environments
AWS Fargate abstracts away the infrastructure layer in a container cluster, allowing customers to run applications in ECS without having to manage EC2 instances. In the two years since its initial launch, our research shows that Fargate has seen consistent, rapid growth. Among companies running containers in AWS, 19 percent now use Fargate, up from 5 percent a year earlier. Fargate's rapid growth has helped ECS keep pace with the continuing adoption of Kubernetes in AWS environments.
Container churn rates are
converging across platforms
Companies that use orchestration typically churn through containers much faster than companies that run containers without orchestration. In recent years, the disparity has been striking, with churn rates approximately 10 times higher in orchestrated environments. But in 2019, the churn rate of unorchestrated containers has increased considerably. The average container lifespan at a typical company running unorchestrated infrastructure is about two days, down from about 6 days in mid-2018.
Even though ECS and Kubernetes still cycle through containers faster, with typical container lifetimes of about one day, the gap between platforms has narrowed. Very long-lived containers are still much rarer in orchestrated infrastructure, however. For instance, average container lifetimes exceed 30 days in 19 percent of unorchestrated environments, compared to just 7 percent of ECS environments and 3 percent of Kubernetes environments.
Node.js reigns in containers
The programming languages and frameworks that our customers favor for application development differ somewhat between container and non-container environments. Fifty-seven percent of organizations running containerized workloads use Node.js, which is almost double the share of organizations running Node.js in non-containerized environments. Java, the second-most popular language in container environments, is the clear leader in conventional application environments. (Note that the percentages add up to more than 100 percent because each organization may run several languages.)
Node.js's popularity in container environments is likely due to its design, which favors lightweight, scalable applications that lend themselves well to containerization and replication. It is also worth noting that Node.js and Go, both of which are relatively new, are much more popular in container environments than in conventional environments, where legacy code is more likely to be found.
NGINX prevails in container environments
Among the off-the-shelf images running in container clusters, NGINX is by far the most common, especially in Kubernetes environments. NGINX runs in approximately 70 percent of Kubernetes environments, 30 percent of ECS environments, and 40 percent of unorchestrated container infrastructure. The high penetration of NGINX in Kubernetes environments is likely due in part to NGINX's popularity as a Kubernetes ingress controller for routing external traffic to services within the cluster.
Kubernetes users in general run far more off-the-shelf container images than ECS users. We hypothesize that many AWS users rely on managed services instead of self-hosted infrastructure components. For instance, many AWS organizations use Amazon Relational Database Service rather than running their own PostgreSQL or MySQL databases. Similarly, Amazon Application Load Balancers fulfill a similar role in ECS clusters that Kubernetes ingress controllers perform in Kubernetes clusters, which may help explain the disparity in NGINX usage across container platforms.
Notably, service mesh technologies do not yet rank among the top container images. Those technologies appear to remain in the realm of early adopters at the time of this report, although we have seen an uptick in usage in the second half of 2019.
The Kubernetes upgrade cycle is long
The Kubernetes platform is evolving fast, with a new minor version (e.g., v1.16) appearing every three months or so and incremental fixes in between. Our research shows, however, that most organizations prefer older, established releases to the bleeding-edge versions. The most popular version in use as of October 2019 was Kubernetes 1.13, which was first released in December 2018. Of the three versions released in 2019, only version 1.14 had significant adoption, finding use in 23 percent of Kubernetes organizations. Since each organization may run several versions of Kubernetes, the percentages in the graph below add up to more than 100 percent.
It is worth noting that Kubernetes version is not always a conscious choice: users of hosted Kubernetes services are usually presented with a default, stable version at cluster launch. At the time of this analysis, version 1.13 was still the default for GKE and AKS, whereas EKS provided version 1.14 by default.