The DevOps Toolchain
In this article, take a look at the core technology categories and specific technologies that help you realize your DevOps objectives.
Join the DZone community and get the full member experience.
Join For FreeIn this article, we’ll be looking at the core technology categories and specific technologies that help you realize your DevOps objectives.
What Is a DevOps Toolchain?
A DevOps toolchain is a set of integrated tools that facilitate and automate the processes involved in software development, testing, deployment, and operations within a DevOps framework. It spans the entire software development lifecycle, aiming to streamline collaboration, enhance efficiency, and ensure continuous delivery. The toolchain typically includes tools for version control, build automation, continuous integration, continuous deployment, configuration management, monitoring, and collaboration.
By connecting these tools in a cohesive workflow, a DevOps toolchain promotes a seamless and automated pipeline, allowing development and operations teams to work collaboratively, iterate rapidly, and deliver high-quality software with speed and reliability. The ultimate goal is to achieve continuous improvement and faster time-to-market while maintaining the stability and reliability of the software.
About DevOps and Tools
Things to remember about DevOps and its corresponding tools:
- The goal is continuous improvement.
- You can’t buy DevOps.
- Tool adoption happens in stages.
DevOps Technology Categories
1. Planning
Why Does It Matter for DevOps?
-
Shared purpose: Planning in DevOps is crucial for establishing a shared purpose among cross-functional teams. Through collaborative planning, teams align their goals, priorities, and expectations, fostering a unified understanding of the project's objectives. This shared purpose promotes cohesion and collaboration, ensuring that everyone is working towards common goals, which is essential for the success of a DevOps initiative.
-
Transparency: Planning provides transparency into the entire software development lifecycle, from ideation to deployment. Transparent planning processes enable all team members to have visibility into project timelines, progress, and dependencies. This transparency facilitates communication and helps teams identify potential bottlenecks or challenges early in the development cycle, allowing for proactive problem-solving and mitigating risks.
-
Empowerment: Planning empowers DevOps teams by involving them in decision-making processes and giving them a sense of ownership. When teams actively participate in planning, they have a better understanding of their responsibilities and how their work contributes to the overall project. This empowerment fosters a culture of accountability, innovation, and continuous improvement, as team members are motivated to take ownership of their tasks and contribute to the success of the entire DevOps pipeline.
Examples of Planning Tools
- GitLab
- GitLab is a web-based DevOps lifecycle tool. It provides a Git repository manager, which provides a wiki, issue tracking, and CI/CD pipeline features, using an open-source license developed by GitLab, Inc.
- GitLab has some tools for actually planning things out and being able to look at the scope of the work.
- Tasktop: Tasktop allows all of these tools to be added to the entire range of Agile and application lifecycle management (ALM), PPM, and ITSM tools supported by Tasktop, enabling unprecedented visibility across the entire lifecycle.
- CollabNet’s VersionOne: VersionOne supports Scrum, Kanban, XP, SAFe, and hybrid development methodologies and makes it easier to plan, track, and report across all teams, programs, software portfolios, and the enterprise.
- Pivotal Tracker: The Agile project-management tool of choice for developers around the world for real-time collaboration around a shared, prioritized backlog
- Trello:
- Trello is a web-based Kanban-style list-making application that’s a subsidiary of Atlassian.
- It’s used by many teams as they plan out individual Sprints of work.
- Azure Boards: Track your software projects and plan better with Agile tools, including Scrum boards, Kanban boards, and dashboards for any Agile methodology.
And, again, these are ways to visualize work, share plans, track progress, and make sure you’re moving toward the goal.
2. Issue Tracking
Why Does It Matter for DevOps?
- Customer responsiveness: By systematically logging and addressing issues, teams can promptly identify and resolve customer-reported problems. This ensures a rapid response to user feedback and enhances customer satisfaction. Moreover, issue tracking allows DevOps teams to prioritize and address issues efficiently, demonstrating a commitment to delivering a reliable and customer-focused product.
- Limited knowledge waste: By documenting and categorizing issues, teams create a centralized repository of information that can be referenced to understand past challenges and solutions. This knowledge base reduces redundancy and prevents team members from reinventing the wheel when encountering similar issues. This streamlined approach to issue resolution contributes to improved efficiency and a more informed decision-making process across the entire DevOps lifecycle.
- Feedback loop: Establishing a feedback loop within DevOps workflows enables teams to continuously monitor and evaluate the performance of their applications, infrastructure, and development processes. Through the analysis of tracked issues, teams can identify patterns, root causes, and areas for improvement. This iterative feedback loop helps DevOps teams refine their practices and deliver higher quality software with each iteration.
Examples of Issue-Tracking Tools
- Atlassian’s Jira: Jira is a proprietary issue-tracking product developed by Atlassian that allows bug tracking and Agile project management.
- JetBrains’ YouTrack: YouTrack is a proprietary, commercial browser-based bug tracker, issue-tracking system, and project-management software developed by JetBrains. It focuses on query-based issue searching — with auto-completing, manipulating issues in batches, customizing the set of issue attributes, and creating custom workflows.
- Zendesk: Zendesk makes it simple to track every customer issue from all of your channels. Many companies, including Uber and Airbnb, use Zendesk Support as their issue-tracking software.
3. Source Control
Why Does It Matter for DevOps?
- Asset control: Source control is fundamental to DevOps as it provides a centralized and versioned repository for managing source code and related assets. This ensures precise control over the development artifacts, allowing teams to track changes, rollback to previous states, and maintain a clear audit trail of modifications. Asset control through source control is critical for maintaining the integrity of the codebase, enabling reproducibility, and supporting collaborative development efforts within a DevOps environment.
- Limit transportation waste: Source control helps limit transportation waste in the software development process. Instead of manually sharing code files or relying on ad-hoc methods, source control systems offer a structured and automated way to manage code changes. Developers can efficiently collaborate by pulling, merging, and pushing changes through a controlled and versioned process. This reduces the risk of errors, enhances code consistency, and minimizes the time and effort spent on coordinating code changes.
- Empower teams: Source control empowers DevOps teams by providing a platform for collaborative and distributed development. With versioned repositories, teams can work concurrently on different features or fixes without conflicts, fostering parallel development. Additionally, source control platforms often include features like branching and merging, enabling teams to experiment with new ideas, isolate changes, and integrate them seamlessly. This empowerment enhances team agility, allowing them to adapt to changing requirements and deliver high-quality software in a more responsive and collaborative manner.
Examples of SCM Tools
- Git: Git is a distributed version-control system for tracking changes in source code during software development. It’s designed for coordinating work among programmers, but it can be used to track changes in any set of files. Its goals include speed, data integrity, and support for distributed, nonlinear workflows.
- GitHub: GitHub offers the distributed-version control and source code management functionality of Git, plus its own features.
- GitLab: Version control in GitLab helps your development team share, collaborate, and maximize their productivity with world-class source code management.
- Bitbucket: Bitbucket is a web-based version control-repository hosting service owned by Atlassian for source code and development projects that use either Mercurial or Git revision-control systems.
- Subversion: Apache Subversion is a software-versioning and revision-control system distributed as open source under the Apache License. Software developers use Subversion to maintain current and historical versions of files, such as source code, web pages, and documentation.
4. Build Tools
Why Do They Matter for DevOps?
- Consistent packaging: Build tools are essential in DevOps for ensuring consistent packaging of software artifacts. These tools automate the compilation, packaging, and assembly of code into executable binaries or deployable packages. This automation guarantees that every build follows a standardized process, reducing the likelihood of configuration errors and ensuring that the generated artifacts are consistently structured. Consistent packaging is crucial for seamless deployment and helps avoid compatibility issues across different environments in the development, testing, and production stages.
- Automates an error-prone activity: Building software manually can be error-prone and time-consuming. Build tools automate the build process, eliminating human errors associated with compiling code, managing dependencies, and packaging applications. By automating these repetitive tasks, build tools reduce the risk of introducing inconsistencies or defects in the final build. This automation not only improves accuracy but also frees up developers' time, allowing them to focus on more complex and creative aspects of software development.
- Yields early quality signals: Build tools play a pivotal role in providing early quality signals during the development process. Automated builds can incorporate various static code analysis and testing tools to assess code quality, identify potential bugs, and ensure adherence to coding standards. By integrating these checks into the build process, developers receive immediate feedback on the health of their code, enabling them to address issues early in the development cycle. This proactive approach to quality assurance contributes to the overall stability and reliability of the software, supporting the principles of continuous integration and continuous delivery in DevOps.
Examples of Build Tools
- Maven/Gradle: Maven is a build-automation tool used primarily for Java projects. Maven can also be used to build and manage projects written in C#, Ruby, Scala, and other languages.
Gradle is an open-source build-automation system that builds upon the concepts of Apache Ant and Apache Maven and introduces a Groovy-based domain-specific language instead of the XML form used by Apache Maven for declaring the project configuration.
Related: How to publish Maven artifacts to Nexus OSS using pipelines.
- MSBuild: Microsoft Build Engine, better known as MSBuild, is a free and open-source build tool set for managed code as well as native C++ code and was part of .NET Framework. Visual Studio depends on MSBuild (but not vice versa).
- Rake: Rake is a software task-management and build-automation tool. It allows the user to specify tasks and describe dependencies. You can also do this for group tasks in a namespace.
- JFrog Artifactory: JFrog Artifactory is a tool designed to store the binary output of the build process for use in distribution and deployment. Artifactory provides support for a number of package formats, such as Maven, Debian, npm, Helm, Ruby, Python, and Docker.
JFrog offers high availability, replication, disaster recovery, and scalability, and works with many on-prem and cloud storage offerings.
- Sonatype Nexus: Sonatype Nexus is a repository manager. It allows you to proxy, collect, and manage your dependencies so you’re not constantly juggling a collection of JARs. It makes it easy to distribute your software.
Internally, you configure your build to publish artifacts to Nexus, and they then become available to other developers.
- NuGet: NuGet is the package manager for .NET. The NuGet client tools provide the ability to produce and consume packages.
The NuGet Gallery is the central package repository used by all package authors and consumers.
5. Testing Tools
Why Do They Matter for DevOps?
- Puts focus on built-in quality: Testing tools are integral to DevOps as they emphasize the importance of built-in quality throughout the software development lifecycle. By incorporating automated testing tools, teams can establish a comprehensive testing strategy that includes unit tests, integration tests, and end-to-end tests. This approach shifts the focus from identifying and fixing defects later in the development process to preventing them from being introduced in the first place.
- Creates confidence in deployed artifacts: Testing tools play a critical role in creating confidence in the artifacts deployed in production environments. Automated testing, including regression testing and performance testing, helps ensure that new code changes do not introduce unintended side effects or performance degradation. By thoroughly validating each build, testing tools provide teams with the assurance that the deployed artifacts meet predefined quality criteria and are less likely to cause disruptions in production.
Examples of Testing Tools
- JUnit: JUnit is a unit-testing framework for the Java programming language. JUnit has been important in the development of test-driven development and is one of a family of unit-testing frameworks, collectively known as xUnit, that originated with SUnit.
- xUnit.net: xUnit.net is an open-source unit-testing tool for the .NET Framework written by the original author of NUnit.
- Selenium: Selenium is a portable framework for testing web applications. Selenium provides a playback tool for authoring functional tests without the need to learn a test-scripting language.
- Jasmine: Jasmine is an open-source testing framework for JavaScript. It aims to run on any JavaScript-enabled platform, to not intrude on the application or the IDE, and to have an easy-to-read syntax. It’s heavily influenced by other unit-testing frameworks, such as Screw.Unit, JSSpec, JSpec, and RSpec.
- Cucumber: Cucumber is a software tool that supports behavior-driven development. Central to the Cucumber BDD approach is its ordinary-language parser called Gherkin. It allows expected software behaviors to be specified in a logical language that customers can understand.
6. Continuous Integration and Deployment (CI/CD)
Why Do They Matter for DevOps?
- Fast feedback: Continuous Integration (CI) and Continuous Deployment (CD) are crucial in DevOps for providing fast and continuous feedback on code changes. Through CI, developers integrate their code changes into a shared repository multiple times a day. Automated build and test processes are triggered with each integration, allowing teams to detect and address issues early in the development cycle. This rapid feedback loop enables developers to identify and resolve problems quickly, resulting in greater agility and responsiveness in the development process.
- Reduce defect waste and waiting waste: CI/CD pipelines significantly contribute to waste reduction by minimizing both defect waste and waiting waste. Defect waste is reduced as automated testing in CI/CD pipelines helps catch and rectify issues early, preventing the propagation of defects to subsequent stages. Waiting waste is minimized through the automated and continuous deployment process, ensuring that code changes move swiftly from development to production without unnecessary delays. This efficiency in the development pipeline reduces idle time and accelerates the delivery of features, improvements, or bug fixes.
Examples of CI Tools
- Jenkins: Jenkins is a free and open-source automation server. Jenkins helps to automate the nonhuman part of the software development process with CI and facilitates technical aspects of CD. It’s a server-based system that runs in servlet containers, such as Apache Tomcat. DZone’s previously covered Jenkins vs Bamboo CI.
- CircleCI: CircleCI is the world’s largest shared CI/CD platform and the central hub where code moves from idea to delivery.
As one of the most-used DevOps tools, processing more than 1 million builds a day, CircleCI has unique access to data on how engineering teams work and how their code runs. Companies like Spotify, Coinbase, Stitch Fix, and BuzzFeed use CircleCI to improve engineering-team productivity, release better products, and get to it faster.
- Travis CI: Travis CI is a hosted CI service used to build and test software projects hosted on GitHub. Travis CI provides various paid plans for private projects and a free plan open source. TravisPro provides custom deployments of a proprietary version on the customer’s own hardware.
- Concourse: Concourse is an automation system written in Go. It’s most commonly used for CI/CD and is built to scale to any kind of automation pipeline, from simple to complex.
- AWS CodePipeline: AWS CodePipeline is a fully managed CD service that helps you automate your release pipelines for fast and reliable application and infrastructure updates.
CodePipeline automates the build, test, and deploy phases of your release process every time there’s a code change, based on the release model you define. This enables you to rapidly and reliably deliver features and updates.
You can easily integrate AWS CodePipeline with third-party services, such as GitHub, or with your own custom plugin. With AWS CodePipeline, you only pay for what you use. There are no upfront fees or long-term commitments.
- Azure Pipelines: Get cloud-hosted pipelines for Linux, macOS, and Windows. Build web, desktop, and mobile applications. Deploy to the cloud or on-premises.
Automate your builds and deployments with Pipelines so you spend less time with the nuts and bolts and more time being creative.
7. CD Tools
Why Do They Matter for DevOps?
- Limit your preproduction inventory: Continuous Deployment (CD) tools are essential in DevOps for limiting preproduction inventory, meaning the backlog of completed but not yet deployed features or changes. CD tools automate the process of deploying code changes to production, ensuring that features are released as soon as they pass necessary tests. This reduces the time between development completion and actual deployment, minimizing the backlog of unimplemented features and allowing organizations to deliver value to customers more rapidly.
- Automate complex pipelines: In a DevOps environment, software delivery often involves intricate workflows, including various testing stages, approvals, and environment deployments. CD tools automate these pipelines, orchestrating the entire process from code integration to production deployment. Automation not only speeds up the delivery process but also ensures consistency and reliability, reducing the likelihood of manual errors and enhancing the overall efficiency of the deployment workflow.
- Unify team around getting value to customers: CD tools contribute to unifying cross-functional teams around the common goal of delivering value to customers. By automating the deployment process, CD tools facilitate collaboration between development, testing, and operations teams. The automation streamlines communication, removes silos, and encourages shared responsibility for the end-to-end delivery pipeline.
Examples of CD Tools
- Spinnaker: Spinnaker is a free and open-source CD software platform originally developed by Netflix and quickly picked up and extended by Google.
Spinnaker is a multi-cloud CD platform for releasing software changes with high velocity and confidence. It combines a powerful and flexible pipeline-management system with integrations to the major cloud providers. Learn more about CI/CD with Jenkins and Spinnaker.
- Octopus Deploy: Octopus Deploy is an automated deployment and release-management tool used by leading CD teams worldwide.
Octopus is a toolset that can drastically streamline any DevOps process for continuous testing and deployment of numerous microservices or applications via cloud or virtual machines.
- AWS CodeDeploy: AWS CodeDeploy is a fully managed deployment service that automates software deployments to a variety of compute services, such as Amazon EC2, AWS Fargate, AWS Lambda, and your on-premises servers.
You can use AWS CodeDeploy to automate software deployments, eliminating the need for error-prone manual operations.
8. Configuration-Management Tools
Why Do They Matter for DevOps?
- Enforce consistency: Configuration-management tools enable the automation of configuration tasks, ensuring that servers, networks, and other components are configured identically and in accordance with specified standards. By enforcing consistency, configuration-management tools help mitigate configuration drift – the unintended variance in configurations that can lead to operational issues and security vulnerabilities. Consistency promotes reliability, reduces the risk of errors, and streamlines the management of diverse infrastructure components within a DevOps environment.
- Treat Infrastructure as Code: Configuration-management tools encourage the practice of treating Infrastructure as Code (IaC). This involves representing infrastructure configurations in a code format, allowing for version control, collaboration, and automation. By adopting IaC principles, DevOps teams can manage and provision infrastructure in a systematic and repeatable manner. Configuration changes are tracked, and documented, and can be rolled back if needed. This approach aligns infrastructure management with software development practices, enhancing agility, traceability, and the ability to apply DevOps principles to the entire infrastructure lifecycle.
Examples of Configuration-Management Tools
- Terraform: Terraform is an open-source infrastructure-as-code (IaC) software tool created by HashiCorp. It enables users to define and provision a data-center infrastructure using a high-level configuration language known as Hashicorp Configuration Language or, optionally, JSON.
- BOSH: BOSH is a project that unifies release engineering, deployment, and the lifecycle management of small and large-scale cloud software. BOSH can provision and deploy software over hundreds of VMs. It also performs monitoring, failure recovery, and software updates with zero-to-minimal downtime.
While BOSH was developed to deploy Cloud Foundry, it can also be used to deploy almost any other software (Hadoop, for instance). BOSH is particularly well-suited for large distributed systems.
In addition, BOSH supports multiple infrastructure-as-a-service (IaaS) providers like VMware vSphere, Google Cloud Platform, Amazon Web Services EC2, Microsoft Azure, OpenStack, and Alibaba Cloud. There’s a Cloud Provider Interface (CPI) that enables users to extend BOSH to support additional IaaS providers, such as Apache CloudStack and VirtualBox.
- Chef: Chef is a configuration-management tool for dealing with machine setup on physical servers, virtual machines, and in the cloud. Many companies use Chef software to control and manage their infrastructure, including Facebook, Etsy, Cheezburger, and Indiegogo.
Chef is the leader in continuous automation software, an innovator in application automation, and one of the founders of the DevOps movement. Chef works with more than 1,000 of the most innovative companies around the world to deliver their vision of digital transformation, providing the practices and platform to deliver software at speed
- Ansible: Ansible is an open-source software-provisioning, configuration-management, and application-deployment tool. It runs on many Unix-like systems and can configure both Unix-like systems as well as Microsoft Windows. It includes its own declarative language to describe system configuration.
- Puppet: Puppet provides the ability to define which software and configuration a system requires and then maintains a specified state after an initial setup.
- You use a declarative domain-specific language (DSL) that’s similar to Ruby to define configuration parameters for a specific environment or infrastructure. Puppet discovers information about a system by using a utility called Facter, which is installed when you install the Puppet software package.
- The Puppet master is the system that manages important configuration information for all of the nodes that it controls by using manifests.
- The nodes that the master controls are those that have Puppet installed on them and are running the Puppet agent, which is a daemon. The configuration information that the agent collects about a node is sent to the Puppet master. The Puppet master then compiles a catalog based on how the node should be configured. Each node uses that information to apply any necessary configuration updates to itself.
- Puppet works by using a pull mode, where agents poll the master at regular intervals to retrieve site-specific and node-specific configurations. In this infrastructure, managed nodes run the Puppet agent application, typically as a background service.
- Google Cloud Deployment Manager: Google Cloud Deployment Manager is an infrastructure-management service that makes it simple to create, deploy, and manage Google Cloud Platform resources.
9. Cloud Platforms
Why Do They Matter for DevOps?
- Automation-friendly: Cloud platforms provide DevOps teams with automation-friendly environments that support the seamless integration of automated processes throughout the software development lifecycle. These platforms offer a wide range of APIs, services, and tools that facilitate the automation of infrastructure provisioning, configuration management, deployment, scaling, and monitoring tasks. By leveraging cloud-native automation capabilities, DevOps teams can streamline workflows, reduce manual intervention, and achieve greater agility and efficiency in delivering software.
- Observable runtimes for software: Cloud platforms offer observable runtimes that enable comprehensive monitoring and debugging of software applications in production environments. With built-in monitoring, logging, and tracing capabilities, DevOps teams can gain real-time insights into the performance, health, and behavior of their applications running on cloud infrastructure. This visibility allows teams to quickly detect and diagnose issues, optimize resource utilization, and ensure the reliability and availability of their software.
Examples of Cloud Platforms
- Amazon Web Service: Amazon Web Services (AWS) is a secure cloud-services platform, offering compute power, database storage, content delivery, and other functionality to help businesses scale and grow.
In simple words, AWS allows you with the following things:
- Running web and application servers in the cloud to host dynamic websites
- Securely store all your files on the cloud so you can access them from anywhere
- Using managed databases, like MySQL, PostgreSQL, Oracle, or SQL Server, to store information
- Deliver static and dynamic files quickly around the world using a content delivery network (CDN)
- Send bulk email to your customers
- Microsoft Azure: Microsoft Azure is a cloud-computing service created by Microsoft for building, testing, deploying, and managing applications and services through Microsoft-managed data centers.
Microsoft Azure, formerly known as Windows Azure, is Microsoft’s public cloud-computing platform. It provides a range of cloud services, including compute, analytics, storage, and networking. Users can pick and choose from these services to develop and scale new applications or run existing applications in the public cloud.
- Google Cloud Platform: Google Cloud Platform, offered by Google, is a suite of cloud-computing services that run on the same infrastructure that Google uses internally for its end-user products, such as Google Search, Gmail, and YouTube.
Google Cloud Platform is a provider of computing resources for deploying and operating applications on the web. Its specialty is providing a place for individuals and enterprises to build and run software, and it uses the web to connect to the users of that software.
Meet your business challenges head-on with cloud-computing services from Google, including data management, hybrid and multi-cloud, and AI and ML.
- Pivotal Cloud Foundry: Pivotal Cloud Foundry (PCF) is an open-source, multi-cloud application platform as a service (PaaS) governed by the Cloud Foundry Foundation, a 501 organization. The software was originally developed by VMware but was transferred to Pivotal Software. It was brought back into VMware at the end of 2019 with VMware’s takeover of Pivotal.
PCF is a multi-cloud platform for the deployment, management, and continuous delivery of applications, containers, and functions. PCF allows developers to deploy and deliver software quickly, without needing to manage the underlying infrastructure.
- Heroku: Heroku is a cloud PaaS supporting several programming languages. One of the first cloud platforms, Heroku has been in development since June 2007, when it supported only the Ruby programming language, but now supports Java, Node.js, Scala, Clojure, Python, PHP, and Go.
Heroku is a container-based cloud PaaS. Developers use Heroku to deploy, manage, and scale modern apps. Our platform is elegant, flexible, and easy to use, offering developers the simplest path to getting their apps to et.
- Container schedulers: The main task of a container scheduler is to start containers on the most appropriate host and connect them together. It has to handle failures by doing automatic failovers, and it needs to be able to scale containers when there’s too much data to process/compute for a single instance.
The three most popular container schedulers are Docker Swarm, Apache Mesos, and Google Kubernetes.
- Docker Swarm: Docker Swarm is a container scheduler developed by Docker. The development of this cluster solution being managed by Docker offers advantages like the use of the standard Docker API.
- Apache Mesos: The purpose of Mesos is to build a scalable and efficient system that supports a wide array of both current and future frameworks. This is also the main issue: frameworks like Hadoop and MPI are developed independently — thus it’s not possible to do fine-grained sharing across frameworks.
The proposition of Mesos is to add a thin resource-sharing layer, giving frameworks a common interface for accessing cluster resources. Mesos is delegating control over scheduling to the frameworks because many frameworks already implement sophisticated scheduling.
Four types of frameworks exist depending on the type of jobs you want to run on your cluster, and some of them have native Docker support like Marathon. The support of Docker containers has been added in Mesos 0.20.0.
We’ll focus on the use of Mesos with Marathon because it’s a framework actively maintained by Mesosphere that offers many features in terms of scheduling, such as constraints, health checks, service discovery, and load balancing.
As we can see in the image, there are four elements in the cluster. ZooKeeper helps Marathon look up the address of the Mesos master — multiple instances are available to handle failure.
Marathon starts, monitors, and scales the containers. The Mesos master sends the tasks assigned to a node and makes offers to Marathon when a node has some free CPU/RAM. The Mesos slaves run the container and submit a list of their available resources.
- Google Kubernetes: Kubernetes is an orchestration system for Docker containers using the concepts of labels and pods to group containers into logical units. Pods are the main difference between Kubernetes and the two other solutions — they’re collections of colocated containers forming a service deployed and scheduled together. This approach simplifies the management of the cluster — compared to an Affinity-based co-scheduling of containers (like Swarm and Mesos).
The Kubernetes scheduler’s task is to watch for pods that have an empty PodSpec
. NodeName
attributes a value to schedule the container somewhere in the cluster.
This is a difference compared to Swarm and Mesos, as Kubernetes allows developers to bypass the scheduler by defining a PodSpec.NodeName
when running the pod.
The scheduler uses predicates and priorities to define which nodes a pod should run. The default values of these parameters can be overridden using a new scheduler policy configuration.
By using the command-line flag — policy-config-file
— pointing to a JSON file describing the predicates and priorities to use when starting Kubernetes, the scheduler will use the policy defined by the administrator.
10. Monitoring and Logging Tools
Why Do They Matter for DevOps?
- Fast recovery: Monitoring and logging tools allow DevOps teams to swiftly detect and address system failures or performance issues, minimizing downtime and restoring normal operations quickly. Real-time insights provided by these tools enable rapid response, ensuring business continuity and mitigating the impact on end-users.
- Responsiveness: By collecting and analyzing metrics and logs in real-time, monitoring and logging tools empower DevOps teams to proactively identify and resolve potential issues before they escalate. This proactive approach enhances system reliability and responsiveness, maintaining a positive user experience and instilling confidence in the software's reliability.
- Transparency: Centralizing logs and metrics from various components provides a holistic view of system health, facilitating collaboration and informed decision-making among team members. Transparent monitoring practices foster accountability and trust within the organization, as stakeholders have access to accurate and up-to-date information about system performance.
- Limited human involvement during incidents: Automated alerting and remediation workflows reduce the need for manual intervention during incidents, freeing up DevOps teams to focus on strategic tasks. By automating incident response, monitoring and logging tools improve operational efficiency, shorten incident resolution times, and enhance the overall reliability of systems.
Examples of Monitoring/Logging Tools
- ELK Stack: The ELK Stack is a collection of three open-source products — Elasticsearch, Logstash, and Kibana. They’re all developed, managed, and maintained by the company Elastic.
- E stands for ElasticSearch — used for storing logs
- L stands for Logstash — used for both shipping as well as processing and storing logs
- K stands for Kibana — a visualization tool (a web interface)
- Datadog: Datadog is a monitoring service for cloud-scale applications, providing monitoring of servers, databases, tools, and services through a SaaS-based data analytics platform.
Datadog Application Performance Monitoring (APM or tracing) provides you with deep insight into your application’s performance — from automatically generated dashboards for monitoring key metrics, like request volume and latency, to detailed traces of individual requests — side by side with your logs and infrastructure monitoring.
When a request is made to an application, Datadog can see the traces across a distributed system and show you systematic data about precisely what is happening to this request.
- New Relic: New Relic is a San Francisco, California–based technology company that develops cloud-based software to help website and application owners track the performances of their services.
New Relic’s software analytics product for application-performance monitoring (APM) delivers real-time and trending data about your web application’s performance and the level of satisfaction your end users experience.
- Prometheus: Prometheus is a free software application used for event monitoring and alerting. It records real-time metrics in a time-series database, built using an HTTP pull model with flexible queries and real-time alerting.
The Prometheus server works on the principle of scraping — i.e., invoking the metrics endpoints of the various nodes that it’s configured to monitor. It collects these metrics at regular intervals and stores them locally. The nodes expose these over the endpoints that the Prometheus server scrapes.
- Zipkin: Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in service architectures. Features include both the collection and lookup of this data.
If you have a trace ID in a log file, you can jump directly to it. Otherwise, you can query based on attributes such as service, operation name, tags, and duration. Some interesting data will be summarized for you, such as the percentage of time spent in a service and whether or not operations have failed.
- Azure Monitor: Azure Monitor maximizes the availability and performance of your applications and services by delivering a comprehensive solution for collecting, analyzing, and acting on telemetry from your cloud and on-premises environments.
It helps you understand how your applications are performing and proactively identifies issues affecting them and the resources they depend on.
Here are just a few examples of what you can do with Azure Monitor include:
- Detect and diagnose issues across applications and dependencies with Application Insights
- Correlate infrastructure issues with Azure Monitor for VMs and Azure Monitor for Containers
- Drill into your monitoring data with Log Analytics for troubleshooting and deep diagnostics
- Support operations at scale with smart alerts and automated actions
- Create visualizations with Azure dashboards and workbooks
11. Communication Tools
Why Do They Matter for DevOps?
- Connect teams: Communication tools are vital for DevOps as they facilitate seamless communication and collaboration among distributed teams. These tools provide instant messaging, video conferencing, and collaborative workspace features, enabling team members to connect and communicate in real-time regardless of geographical location. By fostering continuous communication, these tools ensure that all team members stay informed and engaged throughout the development process.
- Limit waiting waste: Communication tools help reduce waiting waste in DevOps workflows by enabling swift decision-making and issue resolution. With instant messaging and real-time collaboration features, teams can quickly escalate and address issues, preventing delays in the development pipeline. By minimizing the time spent waiting for responses or approvals, communication tools optimize workflow efficiency and accelerate the delivery of software.
- Improve collaboration: Effective collaboration is essential for successful DevOps practices, and communication tools play a key role in facilitating collaboration among team members with diverse roles and expertise. These tools provide centralized platforms for sharing information, documents, and updates, fostering a collaborative environment where ideas can be exchanged, feedback can be provided, and decisions can be made collectively. Improved collaboration enhances teamwork, innovation, and the overall effectiveness of DevOps initiatives.
Examples of Communication Tools
- Slack: Slack is a proprietary instant messaging platform developed by Slack Technologies.
Slack is essentially a chat room for your whole company, designed to replace email as your primary method of communication and sharing. Its workspaces allow you to organize communications by channels for group discussions and allow for private messages to share information, files, and more all in one place.
- Microsoft Teams: Microsoft Teams is a unified communication and collaboration platform that combines persistent workplace chat, video meetings, file storage, and application integration.
Teams is a chat-based collaboration tool that provides global, remote, and dispersed teams with the ability to work together and share information via a common space. You can utilize cool features like document collaboration, one-on-one chat, team chat, and more.
- Google Hangouts: Google Hangouts is a communication software product developed by Google. Originally a feature of Google+, Hangouts became a stand-alone product in 2013, when Google also began integrating features from Google+ Messenger and Google Talk into Hangouts.
Hangouts Chat is a powerful way to communicate with people in your organization. Start a message with one or more coworkers, create a room for ongoing conversations with groups of people, and use bots to help automate your work. Chat works in your computer browser and in mobile apps for Android and iOS.
- Zoom: Zoom Video Communications is a remote conferencing services company headquartered in San Jose, California. It provides a remote conferencing service that combines video conferencing, online meetings, chat, and mobile collaboration.
Skype is better for teams looking for a holistic business solution. Zoom is a better fit for teams that have frequent video chats and meetings. However, neither tool was specifically built for remote work.
12. Knowledge-Sharing Tools
Why Do They Matter for DevOps?
- Reduce knowledge waste: Knowledge-sharing tools are essential for DevOps as they provide a centralized repository for storing and sharing information, thereby reducing knowledge waste within the organization. By documenting best practices, lessons learned, and troubleshooting guides, these tools ensure that valuable insights and expertise are captured and accessible to all team members. This promotes knowledge sharing and collaboration, empowering teams to learn from each other's experiences and avoid reinventing the wheel.
- Increase new-hire productivity: Knowledge-sharing tools play a crucial role in increasing the productivity of new hires by providing them with access to onboarding materials, training resources, and institutional knowledge. These tools enable new team members to quickly get up to speed on project workflows, coding standards, and infrastructure configurations, accelerating their integration into the team and reducing the time required for onboarding. By facilitating knowledge transfer from experienced team members to newcomers, these tools ensure a smoother transition and faster ramp-up for new hires.
- Limit repeat mistakes: Knowledge-sharing tools help limit repeat mistakes by capturing and disseminating information about past issues, solutions, and workarounds. By documenting root causes and resolutions for common problems, these tools enable teams to learn from past mistakes and avoid repeating them in the future. This proactive approach to knowledge management promotes continuous improvement and helps teams maintain high standards of quality and reliability in their work.
Examples of Knowledge-Sharing Tools
- GitHub Pages: GitHub Pages is a static site-hosting service that takes HTML, CSS, and JavaScript files straight from a repository on GitHub, optionally runs the files through a build process, and publishes a website. You can see examples of GitHub Pages sites in the GitHub Pages examples collection.
- Confluence: Confluence is a collaboration software program developed and published by Atlassian. Atlassian wrote Confluence in the Java programming language and first published it in 2004.
Confluence is a collaboration wiki tool used to help teams collaborate and share knowledge efficiently. With Confluence, you can capture project requirements, assign tasks to specific users, and manage several calendars at once with the help of the Team Calendars add-on.
- Jekyll: Jekyll is a simple, blog-aware, static site generator for personal, project, or organizational sites. Written in Ruby by Tom Preston-Werner, GitHub’s co-founder, it’s distributed under the open-source MIT license.
Jekyll is a parsing engine, bundled as a Ruby gem, used to build static websites from dynamic components, such as templates, partials, liquid code, down, etc. Jekyll is known as “a simple, blog-aware, static-site generator.”
- Google Sites: Google Sites is a structured wiki- and webpage-creation tool offered by Google. The declared goal of Google Sites is for anyone to be able to create simple websites that support collaboration between different editors.
Collaboratively create engaging, high-quality sites for your team, project, or event. The sites look great on every screen, from desktop to smartphone — all without learning design or programming.
Summary
I covered all these different categories that come together to collectively help you do DevOps. Any one of these is helpful, but I’d argue all of these are required for you to be in the place where you’re continuously delivering value to the customer in a way that’s sustainable to the team, as well as helping you differentiate.
I covered the overall DevOps toolchain — things like planning tools, issue-tracking tools, source-control management, building and testing your code and being successful with that, continuously integrating and deploying your source code, managing configurations, using cloud platforms, and then monitoring and logging before doing some of the softer things like communication and knowledge sharing.
DevOps is an exciting way to work. It’s not going to be the only way or even the best way. Something better may come along in the future, but for right now, it seems to represent a good way for teams to collectively work together to ship value that matters in a way that’s sustainable for the people on the team, while also helping them focus on the customer, not on IT efficiency — and not just on internal things but on speed, on learning, and on the things that actually matter as companies are differentiating now based on how good they are at technology.
Thank you for reading this. I hope you enjoyed the article.
Opinions expressed by DZone contributors are their own.
Comments