Despite all the attention containers in cloud has garnered in the IT community, it still remains a bit like what...
we would've seen if Beethoven crowdsourced his Ninth Symphony: somewhat disjointed, missing major motifs and definitely not ready for the Berlin Opera House.
Kubernetes and Docker appear to have won the battle for container technology domination, but there is still plenty of room for growth. Kubernetes deployment, for example, is still a challenge, and communication between containers and VM-based instances could improve.
These features remain on enterprises' wish lists for containers in cloud.
Deployment at the press of a button
Kubernetes simplifies Docker container orchestration, but it's still a complex technology that takes time to set up. Kubernetes uses YAML for configuration, which is designed to be a simple-to-use format. However, Kubernetes requires some advanced YAML constructs, such as text blobs.
IT vendors have taken some steps to address container deployment challenges. Many of the large cloud providers, including AWS, Microsoft and Google, offer managed Kubernetes services that reduce setup burdens on IT teams. And Red Hat, for its part, acquired CoreOS and likely will fold the CoreOS managed Kubernetes distribution, Tectonic, into OpenShift to do the same.
Enterprises today typically deploy containers inside VMs that provide the shared OS image. This can limit deployment flexibility of containers and increase startup time if IT needs to instantiate the VM first. Some container users are taking an interest in unikernels to avoid the VM setup. Unikernels are small, stripped-down kernels that can run a single container. While this model is still immature, it shows a lot of potential.
More efficient compute
Containers in cloud could also benefit from more efficient compute processes. Take container support for software-defined storage as an example. Processes, such as compression and erasure coding, work well within a single server, but to maintain efficiency and performance, you need to avoid copying data across interfaces -- including the interface between containers themselves. The exchange of memory pointers is a lot faster than the use of memcopy to move a data block, so one way to speed up operations would be to affinitize services to the same server and have some way to share memory between them. This would also prevent LAN-based copies, which increase latency.
Standard APIs would be useful to enable more efficient compute processes for containers. This would support greater agility between services and reduce recoding efforts for a new API.
VM-level storage support for containers in cloud is a work in progress but will become a major issue as nonvolatile dual in-line memory modules enter the mainstream, and IT teams want to share dynamic RAM across clusters.
We've made progress in this area, but both container software and storage vendors still have work to do. The overall objective is for VMs and containers to be able to access storage across multiple cloud platforms.
Other wish-list items
Container communication with VMs is another area where there's room for improvement. Better communication would simplify the deployment of large, multi-cloud clusters, especially given VMware's huge install base.
Like container technology, microservices are making their way into the enterprise. And, also like containers, they show room for improvement.
Microservices enable everything from chaining storage operations to piecemeal transitions of legacy apps. Adopters need to manage these microservices through automation. This should entail much more than detecting where a service is hosted or if it has failed. Instead, more advanced microservices automation should include things like autoscaling, integrity verification and a way to easily chain services together in real time.
The open source Istio project might help meet some of these goals and look for maturity and more tools around microservices as more enterprises adopt them.
GUI support in containers could speed up legacy app porting and open up a wider market for containers in the near term.
And, lastly, security is always an issue for containers in cloud. The use of a VM to host containers supports a more mature security profile but can still introduce vulnerabilities. Unikernels could offer a possible solution here, given their 1-to-1 relationship with the container.