Digital transformation in Software deployment using containers

In my recent role I had an opportunity to play a small part in the digital transformation. I had a possibility to stop a spinning wheel on how we developed and deployed an entire Software product for millions of users and hundreds of transactions per second. I wanted to share my thoughts for those who have not started the transition yet or for those who are just at the beginning of the transformation.
Transformation to a new orchestration platform
Kubernetes and Docker Swarm, both tools are orchestration platforms commonly used for containers deployment, automation and scaling of clusters. What does it mean for your organisation? How does it match to a digital transformation and virtualisation?
Well, these two platforms allow your IT Development to deliver faster and less buggy Software to production. To achieve that your organisation has to go through a transformation, a digital one. Presumably you have heard it already several times using different tools but this is the most paramount aspect in technology. Faster and better is what are we aiming for, think about a diesel car in the last decade, nowadays electric Tesla when you can drive a car for free and compare it to Model T the last century, the technology makes a difference. The biggest change in your organisation will require a new vision, new approach in terms of who is in charge of development, Dev or Ops if there is no real DevOps mindset. The shift of responsibility to Development Team has to be seeded in the first place.
In previous decades there was a big shift in terms of virtualisation and cloud infrastructure. The way how we think and deliver a working Software to production. How do we utilise Hardware resources in conjunction with product delivery? Right now is time for containers and orchestration platforms.
It is hard to say that it is an early adoption for containers in the 21st century when Google has already proven a concept. The trend within the technology market has started, therefore if your organisation has not bought a ticket yet it is the time to do so now. The vast majority of IT giants already communicated their vision in terms of technology direction, corporations like IBM, Google, Microsoft, HP, Oracle, Amazon, and others. You can join them or play against the trend.
What are containers?
The simplified version, the container is an image, the package where entire operating system, software, libraries, documents are packed all together. In the same way like your ISO executable image to install Windows or Linux. In theory, it sounds like a panacea for a buggy Software spaghetti. The product, exactly the same Software package which is developed and tested, it is running in production. Exactly the same environment, OS, libraries and dependencies are encapsulated, eliminating one layer of the onion in complexity of Software deployment. No more tricky games between Dev and Ops, Software and System level.
On top of that there is a potential for a huge cost reduction in HW utilisation. The isolated containers virtualise CPU, memory, storage, and network resources at the OS-level. It means that containers eliminate a hypervision layer, running much faster and use a fraction of resources in contrast with an entirely virtualised OS.
How about the mixture of VM and containers?
Although it is conceivable to run two technologies together it is not the most optimised and cost-effective way. This completely depends on how the company wants to manage their IaaS at scale. Usually it is used as an intermediate step when the entire organisation is not ready for a technology shift.
For instance, some Cloud engines provide a special optimised OS image with Docker embedded to launch the VM in the most optimised way for containers. However, running each of the microservices on VM will increase resources of the operating system which has an impact on the cost. It is not clearly visible, not to the shareholders but matters at the end in TCO.
The orchestration platform like Kubernetes supports deployment of several containers at once to optimize VM instances. The final verdict depends on the scale of your organization and approach in managing VM. The deep analysis and knowledge can lead to a cost-effective strategy. Certainly, smarter management and technology transition can increase profitability.
Docker Swarm
Docker Inc. is the company behind an open-source project which developed a platform to automate the deployment of Software inside containers. To launch any Docker container you need a tool, the platform to run an image from package. The first release of Docker went public in March 2013 and convinced almost immediately IT Clouds giants to follow a direction of digital transformation.
The Engine of the Docker platform has an integrated feature called Swarm mode which has the orchestration capabilities. Any docker engine can become a Swarm manager. Starting from Docker version 1.12 in June 2016 an integrated orchestration is capable of creating clusters and deploying automatically containers. It can modify a container’s configuration, network and volumes without manually restarting services. The swarm manager uses a load balancing feature to expose services externally. It has an internal DNS component that automatically assigns each service in a DNS entry.
The philosophy of Docker Swarm comes from simplicity. By one command you can manage entire cluster or deploy a new Software in exactly the same configuration which was tested. No detrimental mistakes in ESXi configuration in development, test, pre-production and production environment. There is no simpler tool on the market than Docker Swarm.
Some official attributes of Docker Swarm are:
  • Cluster management
  • Decentralized design of nodes, managers and workers
  • Declarative service model, definition of desire states of services
  • Scaling to automatically adapt to desire state
  • Desired state reconciliation, nodes monitoring and launch scaling
  • Multi-host networking, create a network for containers
  • Service discovery in the internal network of nodes, query every container through a swarm manager
  • Load balancing, expose externally services inside the cluster
  • Secure by default, TLS mutual authentication and encrypted communication between nodes
  • Rolling updates, schedule updates and roll-back function
However, if you run a production system on a bigger scale you will need to use an Enterprise Edition (EE) which is not free. Conversely, Kubernetes can deploy containers in a totally free way.
Kubernetes
Kubernetes is an orchestration platform developed by Google, open-source cluster management Software runs both on bare metal and cloud hosting providers. The platform can deploy different variety of containerised applications. It can be used for Docker images, LXD containers founded by Canonical company or any other. Kubernetes has three key features of any orchestration platform: deployment, scaling and monitoring in a fully automated way.
The first release of the tool was officially published in June 2014, earlier than Docker Swarm. Regardless of the official release Google claims that it brings 15 years of experience in production. Therefore, it is seen as the most robust solution, especially proven by Google on an extremely large-scale.
In terms of a flat comparison both tools have similar features inside. Both platforms help you to deploy a Software application onto a cluster of servers in a new containerized way.
Pros
  • More robust solution in large-scale systems
  • Open to different standards. Any type of container can be used or entire cluster can be converted from one to another. It has an advantage when a design of an entire architecture matters. For instance Docker or CoreOS rkt containers are stateless, using reduced resources and persistent data storage when LXD images are like VMs with a fully functional OS. What kind of containers your organisation would you like to deploy in production? Is Docker a right fit for your architecture? Who shall decide about container’s format in your organisation? Kubernetes gives you a choice.
  • More mature auto-scaling blocks to be used
  • The majority of users use it hence the support is easy to gain from communities
  • More flexibility in terms of configuration
Cons
  • Kubernetes is quite complex in installation and configuration, especially for beginners compared to Docker Swarm. You have to wire up more components manually to get the same functionality which Swarm offers at the start. However, this can be overcome by using the Rancher platform when you do not have the right people to configure everything correctly in your organisation.


References[1] Article: Large-scale cluster management at Google with Borg https://research.google.com/pubs/pub43438.html
[2] A Decade Of Container Control At Google https://www.nextplatform.com/2016/03/22/decade-container-control-google
[3] Docker Swarm vs. Kubernetes: Comparison of the Two Giants in Container Orchestration https://www.upcloud.com/blog/docker-swarm-vs-kubernetes
[4] https://kubernetes.io
[5] https://www.docker.com

Comments

Popular Posts