The panel on the latest DevGraph webinar had a lively and informative discussion regarding container adoption trends and best practices. The panel consisted of:
- James Rutt (Moderator): Chief Information Officer, The Dana Foundation
- Andriy Zhylenko: CEO Portaone
- Valentina Alaria: Director of Product Management, VMWare
- Rahul Subramaniam: CEO DevFactory, EngineYard
- Mark Hahn: Directory of Cloud Strategies and Devops, Ciber Global
Many organizations report that they are interested in containers, yet the rate at which they are migrating to containerized infrastructure remains low. Why is that the case and what can be done so that organizations can leverage the benefits of this technology? Let’s see what our panel had to say about this critical topic.
Trend #1: Containers are a viable option now due to Kubernetes
Organizations are moving to the cloud in order to increase agility, and containers are increasingly becoming a part of that equation. In terms of standards, Kubernetes has largely won the mindshare of the container platform market: Everyone is gravitating towards it, despite it being a fairly complex set of infrastructure.
All of the major cloud providers support it. It was a different situation five years ago when you still had a number of players (Mezos, Docker Swarm, AWS ECS) competing, and it was uncertain which technology to go with.
Now, the decision is much easier as Kubernetes has largely won that race. It is an open standard, vendor neutral, and the big cloud providers have adopted it even for native managed services. It’s universal acceptance as the standard has enabled it to become a self-sustaining ecosystem.
Trend #2: The use of managed Kubernetes services
Using container technology is extremely helpful, but an orchestration platform on one of the cloud providers (AWS Fargate, Azure Containers, Google Kubernetes Engine) is becoming the norm. Kubernetes is hard, and it can be quite expensive to staff up teams to manage it.
Oftentimes people try one container on a cluster, see that working, and then think that they’ve got it. However, as you grow and add attached storage, distributed data, and various types of workloads, organizations realize they don’t have a full grasp on the technology and how to best utilize it.
Don’t try to reinvent this stuff or work at the lower levels unless it is truly critical to your business. Use a management layer on top of Kubernetes to take care of the headaches. They often provide simpler abstractions that allow you to be more productive and focus on your business.
Critical concerns such as secrets management are often made easy with managed services. Each major cloud provider has a solution that safely and security distributes secrets to your applications running on containers.
Trend #3: A few clusters often turn into many
Many organizations initially imagine a few big clusters for which the capacity can be leveraged across teams. However, they typically end up with a large number of clusters. You want to have a multi-cluster visibility and management mechanism, which includes access control policies to segregate teams and make sure your infrastructure is secure.
This becomes critical from the very beginning because a benefit of establishing container infrastructure is to enable self-service provisioning of developer environments. Devise your plan of chunking up the capacity, isolating each area’s resources, and establishing management practices and procedures.
Security is important in multi-cluster environments. Scans need to be done to prevent outside attackers, and policies need to be put in place to define who internally can access each cluster.
The nice part is that resource utilization truly does increase with container adoption, as long as you are prepared to handle It. The technical management is complex, so use a platform to help with that aspect because you will need organizational management practices in place to make the best use of the technology.
Trend #4: CI/CD makes the whole thing go
The word “containerization” puts you on the wrong track. Containers provide a great way to make portable code, but you have to consider how you will handle configuration management and perform deployments. Otherwise your DevOps won’t keep up with your software development.
One point which a lot of people miss is that containers are fundamentally a different paradigm than VMs. They try to draw parallels, but in a sense you need to unlearn some things from your traditional deployments. Auto scaling is done a different way. Dependencies are managed differently. Attached storage has a different set of considerations. Organizations are realizing that their practices for delivering software are changing.
One other related item is that organizations sometimes conflate the move to containers with the move to microservices. Certainly containers provide a perfect platform to host microservices, but first get your app running on containers before tackling that problem. Otherwise, it will be too overwhelming all at once.
If you want your traditional applications to be portable, start with containerization. This becomes a strong driver for some teams that have older products that only build on one VM due to all of the dependencies. But keep these concerns separate from the move to a microservice architecture. Incremental migrations are typically much more successful and you don’t want to do everything all at once.
Trend #5: Radical improvements to observability
Traceability and observability are key concepts of interest to organizations moving to containers. There are no longer multiple applications and processes running on a VM. Container technology provides a more fine-grained component that can be closely observed. Now, the ecosystem has taken advantage of this by providing many great tools in this space: Prometheus, Grafana and Kibana just to name a few.
All of these tools have open APIs and can be plugged into industry standard platforms. Container platforms often have these mechanisms baked into the infrastructure, so you get it for free. The capabilities are not all native to the Kubernetes platform, but you get the benefit all the same.
One thing to keep in mind is that many containers are ephemeral, short-lived. Thus, where do the logs go after their life-cycle ends? Having the tooling in place becomes really important to handle concerns like this.
When incidents do occur, you need the forensics mechanisms in place. Generally, Kubernetes sends these events off to something external. For example, you would use X-Ray and Cloudwatch on AWS to make sure you have visibility into events. Similar setups are available on all the major platforms.
Trend #6: ROI from your investment is realized in multiple ways
Some container benefits are less tangible, for example, developer productivity. You will likely discover multiple value streams within your organization, so be prepared to define and measure them.
Unlike previous compute platforms, containers provide the ability to scale to near zero although a lot will depend on the type of applications you have. Web services fronting a number of other services are relatively straightforward. If you have stateless application servers such Ruby, PHP, or Django, they can scale up or down quite easily as they primarily use the database to maintain state. Big traditional Java monoliths will be less agile in this regard.
One big area of ROI is on the underlying compute capacity for your clusters. Each year, AWS introduces new instance types which are often cheaper than the previous generation. Portable containers make it fairly easy to move to newer instances so you can realize these cost savings.
The most recent example of this are graviton-based instances which bring a 40% price/performance boost. You need to have portable applications in order to make these migrations.
Keep in mind that the benefit you get from containers may be realized in areas where you were not first looking.