Q.1 What do you know about DevOps?
A.1. DevOps is a collaborative work culture, aimed to synergize the efforts of the development and operations teams to accelerate the delivery of software products, with highest quality and minimal errors.
DevOps is about automation of the entire SDLC with the help of automation tools to achieve continuous development, continuous testing, continuous integration, continuous deployment and continuous monitoring.
DevOps is ‘re-org’ of the existing resources where continuous improvement is seeked through learning from constant feedback.
DevOps fulfils all the requirements for fast and reliable development and deployment of a software. Companies like Amazon and Google have adopted DevOps and are launching thousands of code deployments per day.
Q.2. Why has DevOps become so popular over the recent years?
A.2. Let us understand the impact of DevOps through some examples:
Netflix and Facebook are investing in DevOps to automate and accelerate application deployment and this has helped them grow their business tremendously. Facebook’s continuous deployment and code ownership models have helped them scale up and ensure high quality experience at the same time. Hundreds of lines of code are implemented without affecting the quality, stability, and security of the product.
Netflix is a streaming and on-demand video company which also follows similar practices and has fully automated processes and systems.
Facebook today, has 2 billion users while Netflix streams online content to more than 100 millions users worldwide. This is how DevOps has helped organizations ensure higher success rates for releases, reduce the lead time between bug fixes, streamline and continuously deliver through automation, and reduce their manpower costs.
Q.3. What is the difference between continuous deployment and continuous delivery?
A.3. Continuous deployment is fully automated, and the product deployment till production needs no manual intervention; whereas, in continuous delivery, the deployment is done till QA or UAT or pre-prod environment and further deployment requires approval from the manager or higher authorities to be deployed in production. According to your organization’s application risk factor and policy, continuous deployment/delivery approach will be chosen.
Q.4. Why are configuration management processes and tools important?
A.4. There are multiple software builds, releases, revisions, and versions for each software or testware that is being developed in a CICD pipeline. There is a need for storing and maintaining data, keeping track of development builds and simplified troubleshooting. CM tools let you achieve these objectives.
The purpose of Configuration Management (CM) is to ensure the integrity of a product or system throughout its life-cycle by making the development or deployment process controllable and repeatable, thereby creating a higher quality product or system with consistent performance across environments.
Q.5. What is a version control system?
A.5. Version control systems(VCS) consists of a central shared repository where teammates can commit changes and maintain a complete history of their work. It gives developers the flexibility to simultaneously work on a particular artifact and all modifications can be logically merged at a later stage.
Version control allows you to:
- Revert files back to a previous state.
- Revert the entire project back to a previous state.
- Compare changes over time.
- Track modifications done by developer with details.
- Does not allow overwriting on each other changes.
- Maintain the history of every version.
There are two types of Version Control Systems:
- Central Version Control System, Ex: Git, Bitbucket
- Distributed/Decentralized Version Control System, Ex: SVN
Q.6. What is IaaC? How you will achieve this?
A.6. IaaC (Infrastructure as a Code) is programmable infrastructure, where infrastructure is treated in the same way as any other code. The traditional approach to managing infrastructure is hardly used in a Devops scenario as manual configurations, obsolete tools, and manual scripts are less reliable and error-prone.
IaC can be achieved by using the configuration tools such as Chef, Puppet and Ansible etc. These tools let you make infrastructure changes more easily, rapidly, safely and reliably.
Hence, unit testing and integration testing of infrastructure configurations, and maintaining up-to-date infrastructure documentation becomes quite manageable and accurate with IaC.
Q.7. What is Ansible?
A.7. Ansible is a software configuration management tool to deploy an application using ssh without any downtime. Ansible is developed in Python language and is mainly used in IT infrastructure to manage or deploy applications to remote nodes.
If we want to deploy one application in 100’s of nodes by just executing one command, then Ansible is the one agentless tool which provides you this ability seamlessly.
Q.8. What are playbooks in Ansible?
A.8. Playbooks are Ansible’s configuration, deployment, and orchestration language. They can describe a policy you want your remote systems to enforce, or a set of steps in a general IT process. Playbooks are written in a human-readable, easy to understand text language.
Q.9. What is a Dockerfile used for?
A.9. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.
Using docker build users can create an automated build that executes several command-line instructions in succession.
Q.10. What is a Docker image?
A.10. Docker image is the source of Docker container. Docker images are used to create containers. Images are created with the build command, and they’ll produce a container when started with run. Images are stored in a Docker registry such as registry.hub.docker.com.
Docker containers are basically runtime instances of Docker images.
Q.11. What is Docker hub?
A.11. Docker hub is a cloud-based registry service which allows you to use pre-defined images, build your images and test them, store manually pushed images, and provide a link to Docker cloud so that you can deploy images on your hosts.
It provides a centralized resource for container image discovery, distribution and change management, user and team collaboration, and workflow automation throughout the development pipeline.
Q.12. What are the advantages that Containerization provides over virtualization?
A.12. These are the advantages of containerization over virtualization:
- Containers provide real-time provisioning and scalability but VMs provide slow provisioning
- Containers have a minimal OS, and share the kernel of the underlying OS. VMs have the full-fledged OS
- Containers are lightweight when compared to VMs
- VMs have limited performance when compared to containers
- Containers have better resource utilization compared to VMs
Q.13. What is NRPE (Nagios Remote Plugin Executor) in Nagios?
A.13. The NRPE addon is designed to allow you to execute Nagios plugins on remote Linux/Unix machines. The main reason for doing this is to allow Nagios to monitor “local” resources (like CPU load, memory usage, etc.) on remote machines. Since these public resources are not usually exposed to external machines, an agent like NRPE must be installed on the remote Linux/Unix machines.
Q.14. What is Jenkins? What are the advantages of Jenkins?
A.14. Jenkins is an open source Continuous Integration tool which is written in Java language.
It keeps a track on version control system and to initiate and monitor a build system if any changes occur. It monitors the whole CICD process and provides reports and notifications to alert the concern team.
Advantage of using Jenkins:
- Bug tracking is easy at an early stage in development environment.
- Provides support for many plugins to interface with various automation tools.
- Build failures are cached at integration stage.
- For each code commit change, an automatic build report notification get generated.
- To notify developers about build report success or failure, it can be integrated with LDAP mail server.
- Achieves continuous integration agile development and test-driven development environment.
- With simple steps, Maven release project can also be automated.