Here in MindK, DevOps is a part and parcel of every project developed.
DevOps (‘development’ and ‘operations’) represents a culture that you can adopt for continuous improvement, aimed to unite the efforts of both developers and operations towards a common business goal.
The adoption of DevOps culture by Flickr resulted in 10+ deploys per day. It was only one year after the methodology was introduced to the community in 2008. This methodology helped Netflix to create a complicated cloud structure including dozens of microservices which are serving more than 100 million customers around the world.
For every client project in MindK, we work with plenty of third-party applications, manage a lot of servers, and collaborate within internal and client teams, so we are forced to find a way that makes the whole software development process seamless and efficient.
With that in mind, we begin to test and try different tools that could help us establish a DevOps culture.
we welcome you to enjoy looking through devops stack we’ve chosen, tools we use on a daily basis, really love and recommend to our clients.
#1 Сontainerization: DOCKER
Docker is a tool that makes it easier to create, deploy, and run applications employing containers. The containers pack your application into a standardized image that can be deployed, scaled, and monitored.
By the way,
such world-known giants as, for instance, Netflix, Spotify, Ebay, Yelp, Box, New York Times, Business Insider, PayPal, BBC, Shopify, Uber are already using Docker.
The main benefit of Docker for our engineers is its ability to streamline the development processes as the tool brings value to both operations and development teams.
As a rule,
we don’t use only one programming language for projects, moreover, the versions of programming languages may vary from project to project.
A developer should install and configure the working environment for each new project he works with. And all this arrangement is a significant time sink.
With Docker, developers are able to create an isolated environment (very similar to production server), run several applications on a single machine, improve development speed, and deploy and manage applications in a smoother manner.
Everything necessary to run the application (libraries, settings etc.) is packed in isolated containers, so the development team is sure the prepared images work seamlessly both in development, staging, and production.
Docker containers supported by cloud providers is another big edge of Docker. It enables us to transfer containers from one cloud platform to another (such as Amazon Web Services or other).
Docker works well as part of continuous integration pipelines with other popular devops tools (e.g. Jenkins). Every time your source code is updated, these tools can save the new version as a Docker image, tag it with a version number, push to Docker Registry, then deploy it to development, staging or production environment.
As a result,
Using Docker containers allows us to engage new developers on a project in a short run and facilitate the entire process with just one single customization, and run it anywhere (on any machine) with the identical configuration.
From our years of experience, it has become an invaluable aid for everyday development routine.
#2 Container management: DOCKER COMPOSE
The official documentation specifies Docker Compose as “a tool for defining and running multi-container Docker applications”.
We can complete this definition with the fact that Compose also allows building your multi-container Docker applications since Docker Compose resembles Dockerfiles by having both instructions for building images and for running containers with an ability to use build and run functionalities independently.
We use Docker Compose on a daily basis to orchestrate stack of Docker containers in simple situations and to spin up the environment for local development.
MindK benefits from the flexibility of the Docker Compose tool, as it can be used by teams with different software architecture stacks and repository topologies to solve a variety of problems.
#3 Container management: RANCHER
Rancher Labs create tools needed to take full advantage of container technology and provide the best experience for running Docker in production.
We use both of their main products:
- Rancher, a container management platform for Docker container systems; and
- RancherOS, a Linux operating system distribution simplified to host containers.
The first turnkey container management platform we use in most cases.
Working with Docker you have to do a lot to put everything together and make the application work:
- application orchestration,
- service discovery,
- load balancing,
- monitoring, and recovery.
Rancher deals with many of these tasks. It integrates and enhances orchestration tools for Docker like Docker Compose and Kubernetes (coming up next).
We’ve started using Rancher 1.x as a management platform for Docker containers. With the rise of Kubernetes in the marketplace, we’ve turned to new completely reworked Rancher 2.x as a multi-cloud Kubernetes management platform.
The main benefit of Rancher is no need to build a container services platform from scratch by means of a distinct set of open source technologies.
Rancher provides the entire software stack needed to manage containers in production.
#4 Orchestration: KUBERNETES
Kubernetes is a container orchestration platform that takes containerization to the next level.
It was originally designed by Google and is maintained today by the Cloud Native Computing Foundation. This combination has a promising future to become a trustworthy platform able to meet the scaling needs of any company in the digital economy.
We included it to our devops workflow for a good reason.
The keynote idea of Kubernetes is to draw machines, networks, and storage, away from their physical implementation. As a result, it helps to deploy containers to all kinds of clouds, virtual and physical machines.
It simplifies DevOps collaboration on application delivery by automating a great number of routine operations in building, testing, and production. As one of the best devops automation tools, it allows us to rollback containers, perform rolling updates, track release history, configure webhooks to automate release updates and more.
Working with Kubernetes compensates things Docker may lack. This is why they go hand-in-hand as the best architecture for now.
#5 Monitoring: ZABBIX
An open source, real-time application, and one of the most widely used monitoring tools for DevOps.
With the help of Zabbix, our teams monitor servers, networks, applications and collect various metrics from physical or virtual machines. The collected data is represented by means of screens, graphs, maps, and overviews, which are very convenient to analyze.
The main benefit for us is its ability to monitor a great number of servers, applications and networking devices simultaneously, as well as gather accurate statistics and performance data.
It notifies the responsible team members about issues or certain events by means of different channels and options so that we know about the problem immediately.
A flexible system of triggers and notification rules allows us to receive notifications long before the problem becomes critical.
Another great benefit of Zabbix is that it can be integrated with any part of the IT environment.
except for standard features, we have integrated Zabbix with: Slack, Hipchat, SmsGates, NodeJS applications, Bareos, and many custom solutions.
That is the way we receive notifications long before the client system was interrupted and have time to fix the issue ASAP.
#6 Continuous Integration and Delivery: JENKINS
Jenkins is one of the leading open-source continuous integration and continuous deployment tools which is widely used for managing continuous integration builds and software delivery pipelines.
The key advantage of Jenkins for any software development company is that it helps to build and test applications continuously.
Jenkins allows for differentiating access rights to various projects for different development teams and managing the development and delivery processes for different customers from one place.
With a great variety of extensions, it can be quickly integrated with various cloud services or baremetal infrastructure.
#7 Version control system: GIT and Bitbucket
A version control system (VCS), Git, enables two mission-critical things:
1) tracking changes to your code; and
2) saving code to the cloud.
Tracking code changes is vital, as it allows maintaining different versions of the application, preventing losing the code, recovering code changes and collaborating with other team members.
Being a distributed version control system, Git provides an opportunity for each contributor to have a local “copy” of the main repository, update their local repositories with new data and make changes to the main repository with certain commands.
Here is a brief diagram of the process:
We use Bitbucket, web-based version control repository hosting service owned by Atlassian.
Bitbucket, as well as Github (another version control repository), works with Git. Unlike GitHub, it provides an absolutely private repository (not supported before in the free GitHub plan). It is one of the reasons we once opted for it, although GitHub recently has also started providing free private repositories for its customers.
Another reason for using Bitbucket is the fact that we constantly rely on other Atlassian products (Jira, Trello, Confluence etc.) that makes them work really great together.
#8 Automation: ANSIBLE
Ansible is an open source automation engine which helps to automate software provisioning, configuration management, and application deployment.
Ansible has a growing community and clear documentation.
Ansible is a great tool for managing a many-server infrastructure. It empowers you to manage nodes in an inventory and configure all of them even in parallel.
Teams can easily integrate Ansible with most of the existing system management tools. It allows DevOps applying different tools at different stages of their pipelines.
Tip: In case you want to better understand whether Ansible complies with your DevOps set of tools you can read this article by the Red Hat blog, which explains the way Ansible can be used for environment provisioning and application deployment within a Jenkins pipeline.
Additionally to the already mentioned DevOps tools list we cannot but mention Amazon Web Services.
#9 Cloud computing platform: Amazon Web Services
Yes, it is a platform, not a tool.
However, AWS perfectly complements our tech infrastructure, thus completes the list of our top DevOps tools.
Amazon Web Services is a clear leader in providing a platform to host your own cloud-based software.
Depending on the customer needs, we use a different set of AWS services. Among them are EC2 services, Beanstalk, S3, CloudFront, CloudFormation, RDS, Route 53, Lambda, CloudWatch, Elasticsearch, SNS, EFS.
Using AWS services can significantly reduce the cost of infrastructure deployment and maintenance.
Despite the fact that the cost of AWS service is more expensive than in conventional data centers, it is possible to achieve comparable amounts of costs thanks to EC2 autoscaling depending on the load, automatic shutdown of test environments during off-hours, as well as buying reserved instances for up to 3 years.
The main advantages of using AWS for our company are that many common tasks such as backup, monitoring, volume snapshots, log collector, health check and instances recreating, load balancing, apps CI deploy, encryption, and access policy can be solved using native AWS services and it doesn’t require much time to implement and support, unlike self hosted installations.
For these reasons, we recommend our clients AWS for their projects.
DevOps tools which are right for you
The process of finding the best DevOps tools requires testing and experimentation. All the tools mentioned above were carefully selected by MindK development and operation teams.
This set showed great results for most of client projects, although required customization for specific business needs.
If you are upon the look of DevOps team to set custom infrastructure for your software product, you should definitely drop us a line. We would be happy to implement mindful strategies and produce the solutions and products necessary to increase the odds of success.