From Dev to Ops: An Introduction
What is DevOps
You can ask 10 people for a definition of DevOps and likely get 10 different answers.
If you want to find a definition of your own, your research will probably begin by
asking Google, “what is DevOps”. Naturally, Wikipedia is one of the first result
so that is where we will begin. The first sentence on Wikipedia defines DevOps
as “a software development method that stresses communication, collaboration
and integration between software developers and information technology (IT)
professionals.” Well, that’s a fairly dense definition, yet still pretty vague.
So let’s delve into how DevOps works and can better adjoin two traditionally
opposing departments.
I think DevOps can be explained simply as operations working together with
engineers to get things done faster in an automated and repeatable way. This
interesting graphic shows the interaction loop between the two sides.
From Developer to Operations – One and the Same?
As a developer I have always dabbled lightly in operations. I always wanted to focus
on making my code great and let an operations team worry about setting up the
production infrastructure. Real applications are much more complex. As I evolved
my skillset I started to do more and expand my operations knowledge.
Infrastructure Automation
You no longer have to build a server from scratch, buy power and connectivity in
a data center, and manually plug a machine into the network. After wearing the
operations hat for a few years I have learned many operations tasks are mundane,
manual, and often have to be done at two in the morning once something has
gone wrong. DevOps is predicated on the idea that all elements of technology
infrastructure can be controlled through code. With the rise of the cloud it can all
be done in real-time via a web service.
Growing Pains
When you are responsible for large distributed applications the operations
complexity grows quickly.
– How do you provision virtual machines?
– How do you configure network devices and servers?
– How do you deploy applications?
– How do you collect and aggregate logs?
– How do you monitor services?
– How do you monitor network performance?
– How do you monitor application performance?
– How do you alert and remediate when there are problems?
Combining the Power of Developers and Operations
The focus on the developer/operations collaboration enables a new approach
to managing the complexity of real world operations. I believe the operations
complexity breaks down into a few main categories: infrastructure automation,
configuration management, deployment automation, log management,
performance management, and monitoring. Below are some tools I have used to
help solve these tasks.
Infrastructure Automation
Infrastructure automation solves the problem of having to be physically present in
a data center to provision hardware and make network changes. The benefits of
using cloud services is that costs scale linearly with demand and you can provision
automatically as needed without having to pay for hardware up front.
– Amazon Web Services
– Windows Azure
– RackSpace Cloud
– HP Cloud
– OpenShift by Red Hat
– Ubuntu Cloud
– Citrix CloudPlatform
– Heroku
– EngineYard
Configuration Management
Configuration management solves the problem of having to manually install and
configure packages once the hardware is in place. The benefit of using configuration
automation solutions is that servers are deployed exactly the same way every time. If
you need to make a change across ten thousand servers you only need to make the
change in one place.
– Chef
– Puppet
– Ansible
– Salt Stack
– Pallet
– Bcfg2
There are other vendor-specific DevOps tools as well:
– Amazon’s OpsWorks and CloudFormation
– Ubuntu’s JuJu
Deployment Automation
Deployment automation solves the problem of deploying an application with an
automated and repeatable process.
– Jenkins
– Fabric
– Capistrano
Log Management
Log management solves the problem of aggregating, storing, and analyzing all logs in
one place.
– Splunk
– SumoLogic
– Loggly
– LogStash
Performance Management
Performance management is about ensuring your network and application are
performing as expected and providing intelligence when you encounter problems.
– AppDynamics
– Boundary
– Cloudweaver
Monitoring
Monitoring and alerting are a crucial piece to managing operations and making sure
people are notified when infrastructure and related services go down.
– Nagios
– Ganglia
– Sensu
– Icinga
– Zabbix
– PagerDuty
You can ask 10 people for a definition of DevOps and likely get 10 different answers.
If you want to find a definition of your own, your research will probably begin by
asking Google, “what is DevOps”. Naturally, Wikipedia is one of the first result
so that is where we will begin. The first sentence on Wikipedia defines DevOps
as “a software development method that stresses communication, collaboration
and integration between software developers and information technology (IT)
professionals.” Well, that’s a fairly dense definition, yet still pretty vague.
So let’s delve into how DevOps works and can better adjoin two traditionally
opposing departments.
I think DevOps can be explained simply as operations working together with
engineers to get things done faster in an automated and repeatable way. This
interesting graphic shows the interaction loop between the two sides.
From Developer to Operations – One and the Same?
As a developer I have always dabbled lightly in operations. I always wanted to focus
on making my code great and let an operations team worry about setting up the
production infrastructure. Real applications are much more complex. As I evolved
my skillset I started to do more and expand my operations knowledge.
Infrastructure Automation
You no longer have to build a server from scratch, buy power and connectivity in
a data center, and manually plug a machine into the network. After wearing the
operations hat for a few years I have learned many operations tasks are mundane,
manual, and often have to be done at two in the morning once something has
gone wrong. DevOps is predicated on the idea that all elements of technology
infrastructure can be controlled through code. With the rise of the cloud it can all
be done in real-time via a web service.
Growing Pains
When you are responsible for large distributed applications the operations
complexity grows quickly.
– How do you provision virtual machines?
– How do you configure network devices and servers?
– How do you deploy applications?
– How do you collect and aggregate logs?
– How do you monitor services?
– How do you monitor network performance?
– How do you monitor application performance?
– How do you alert and remediate when there are problems?
Combining the Power of Developers and Operations
The focus on the developer/operations collaboration enables a new approach
to managing the complexity of real world operations. I believe the operations
complexity breaks down into a few main categories: infrastructure automation,
configuration management, deployment automation, log management,
performance management, and monitoring. Below are some tools I have used to
help solve these tasks.
Infrastructure Automation
Infrastructure automation solves the problem of having to be physically present in
a data center to provision hardware and make network changes. The benefits of
using cloud services is that costs scale linearly with demand and you can provision
automatically as needed without having to pay for hardware up front.
– Amazon Web Services
– Windows Azure
– RackSpace Cloud
– HP Cloud
– OpenShift by Red Hat
– Ubuntu Cloud
– Citrix CloudPlatform
– Heroku
– EngineYard
Configuration Management
Configuration management solves the problem of having to manually install and
configure packages once the hardware is in place. The benefit of using configuration
automation solutions is that servers are deployed exactly the same way every time. If
you need to make a change across ten thousand servers you only need to make the
change in one place.
– Chef
– Puppet
– Ansible
– Salt Stack
– Pallet
– Bcfg2
There are other vendor-specific DevOps tools as well:
– Amazon’s OpsWorks and CloudFormation
– Ubuntu’s JuJu
Deployment Automation
Deployment automation solves the problem of deploying an application with an
automated and repeatable process.
– Jenkins
– Fabric
– Capistrano
Log Management
Log management solves the problem of aggregating, storing, and analyzing all logs in
one place.
– Splunk
– SumoLogic
– Loggly
– LogStash
Performance Management
Performance management is about ensuring your network and application are
performing as expected and providing intelligence when you encounter problems.
– AppDynamics
– Boundary
– Cloudweaver
Monitoring
Monitoring and alerting are a crucial piece to managing operations and making sure
people are notified when infrastructure and related services go down.
– Nagios
– Ganglia
– Sensu
– Icinga
– Zabbix
– PagerDuty
No comments: