If you want to optimize the usage of server resources, you can solve this task by transition of your servers to virtualization it requires a comprehensive solution that will consist of several components:
- Virtual infrastructure. Hypervisors on which the virtual server will be launched
- Server Automation to deploy servers and applications (Chef, Ansible, Puppet etc.)
- Server Continuous Integration and Server Continuous Deployment (Jenkins, TeamCity, Bamboo etc.)
- Server infrastructure: application server, monitoring system, backup etc
The advantages of using such a scheme:
- Personal cloud infrastructure with flexible management system
- Saving on server resources through the use of virtualization
- High level of security of a productive application environment
- Fully isolated environment for developers which is similar to the productive one
- Rapid build-up of server capacity for the application by adding new virtualization hypervisor cluster and automatic deployment of virtual servers for the cluster application
- A fully automated process of development, with the necessary steps of testing the application (alpha, beta and productive versions)
- A full control over what is happening in the process of development and the resources required for the stable operation of applications
- An ability to automatically deploy a homogeneous as well as a hybrid infrastructure, which may consist of Windows and Linux servers.
As a result we receive a system where you can quickly (in a couple of clicks) deploy a virtual machine for or the whole virtual environment of multiple virtual machines for the developer.
Examples of usage:
- IT audit has found distributed infrastructure to the physical servers for Windows and Linux of different versions and various virtualization systems. We have proposed and implemented solution of consolidating server infrastructure on a single hypervisor and the usage of automation with Ansible. The most regular tasks performed to support the server infrastructure had been automated, therefore maintenance time significantly reduced. Flexibility and manageability of the entire infrastructure were also improved. As a result we got of the ability to expand without significant increase in cost.
- Upgrading the software. The task was to: create of a new scalable infrastructure running under Microsoft Windows Server; a new e-mail infrastructure (Microsoft Exchange Server); sustainable and balanced access to the Internet; ensuring trouble-free operation of the new domain structure; gradual migration of users and services to the new domain structure.
Result of the project: significant reduction in the cost of maintenance of the servers by reducing the number of physical machines; reduced power consumption for the server room; balanced server load; flexibility and better control over the work environment; increased speed of deployment of new services on request.
- To automate the testing and deployment of a new version of the application we proposed to use several environments. Each environment is a single pool of resources. The first environment – for initial testing (pre-alpha). The second environment – for pre-release (alpha, beta, gamma), the third – a productive environment with the final version of The implementation scheme: when a developer commits the code of pre-alpha branch, CI / CD software runs code compilation, and then, in the case of successful compilation, starts the deployment process in the resource pool dedicated to this version. If this step is successful, the HTTP load balancer performs the proxy setting command for servers with the new software version. The last step is a complete scan of the deployed application. If the test is successful, the changes are made for all other pools. The load balancer will reconfigure a new version of the application for all servers.
Such approach was selected in order to able to easily return to a previous configuration in case of problems at some steps, and there is no need to use a compilation of previous versions of the project, as a backup.
For this project we used the following set of technologies:
- Jenkins as CI/CD software
- Jelastic (Kubernetes and Docker) for servers and resource pools
- Atlassian BitBucket for storage
- Atlassian Jira and Confluence for workflow management