The Traditional Approach to DevOps
In a past DevOps method, developers write code and pledge it to a Git repository. Then they test how they behave locally and in a development environment. They publish a build of the code using a CI tool, which also executes functional tests during the build. After successfully passing the tests, those modifications are combined into a release branch.
The tests are handled in a staging environment and at the end of the sprint, then the release is issued. System administrators make scripts for software deployment to production using Puppet, Ansible, or Chef. Lastly, system administrators roll out the modifications (updating the version) to production.
Problems of the Traditional Approach
The first problem is that system administrators and developers use different tools. For example, the majority of developers don’t know how to work with Ansible, Puppet, or Chef. A single result of this situation is that the task of making release falls on the shoulders of system administrators. But system administrators often do not understand how an application should work, because developers are the ones who have the expertise in this area.
The second issue is that the development atmosphere is generally updated manually without any automation. As an outcome, they are not stable and always breaking down. Modification made by one developer break modifications made by another. Figuring out problems usually takes a lot of time. And finally, you get a slow time to market.
The third problem is that writing Ansible manifests is time-consuming and difficult. It is very easy to lose track of changes made in manifests, updating an application from version to version. It may result in a high number of mistakes.
Improvement of DevOps Approach with Docker
The significant benefit of this method is that both developers and system administrators use the same tool i.e Docker. Developers create Docker images from Docker files at the development stage, on local computers, and run them in a development environment.
The exact Docker images are used by administrators who create updates to the phase and production atmosphere using Docker. It is very crucial that Docker containers are not covered when updating to a new version of an application. This means that a new version of your software is represented by a new Docker image and a new copy of the Docker container, but not to patch the old Docker container.
As an outcome, you can make absolute development, staging, and production atmosphere. There are several benefits of using this approach. At very first, there is a top level of control over all modifications, because changes are made using absolute Docker images and containers.
You can roll back to the previous version at any moment. Development, staging, and production environments become more similar to each other than with Ansible. Using Docker, you are able to guarantee that if a functionality works in the development environment, it will work in phasing and production, too.
Ways to Get DevOps Power bloc With Docker and Kubernetes
- The process of developing software topology containing different interconnected elements becomes much easier and understandable with Docker.
- The procedure of load balancing configuration shortens greatly because of Ingress concepts and built-in Service.
- Thanks to the built-in features of Kubernetes Deployments, StatefulSets, and ReplicaSets, the process of rolling updates or green/blue deployments becomes very easy.
- You are able to run CI/CD using Helm, which is more suitable than just with Docker containers as
- Helm charts are more stable than separate Docker images.
- You were mostly facing this problem when you tried to communicate various Docker containers into a joint topology, but you unsuccessful because those images were not ready for such communication.
- It provides you with a high-level template language and a concept of application releases that can be rolled back if needed. Moreover, you can use existing Helm charts as dependencies for your own charts, which allows you to have complex topologies using third-party building blocks.
- Kubernetes helps out-of-the-box of deployment situations to multi-cloud (Google, Hidora, AWS, or another hosting supplier) through Federation or service mesh tools.