DevOps
Steven J Zeil:
Last modified: Nov 30, 2020
Contents:
Abstract
DevOps is a merger of Development and Operations.
It can variously be viewed as a reaction to or an extension of Agile development.
1 Motivation
Tension between Incremental Development and Traditional Operations
- Incremental development promises the availability of multiple useful versions of the software.
- Agile development suggests that these increments will be available with only short time intervals (on the order of a few weeks) between them.
- This multiples the amount of work required to systems test and deploy software
- Tasks traditionally performed by a group separate (“siloed”) from the developers.
(figure from Atlassian)
DevOps attempts to merge development
- plan
- build
- continuous integration
with operations
- continuous deployment
- monitor
- operate
2 Challenges
- Developers often unaware of QA issues and consequent operational roadblocks.
- Lack of feedback on utility & value of implemented features.
- Unclear delineation of responsibilities for problems encountered during QA or operation
2.1 Values
- Collaboration & communication
- Agile, incremental methods
- Automation
- Version control
- CI Servers
- Virtualization
- Automated system tests
- Infrastructure as Code
- Monitoring
3 Infrastructure as Code
- Manage configuration & deployment via configuration files…
- …interpreted by configuration management tools
3.1 Puppet
- Linux tool for automating config mgmt
- Master-client architecture
- Provides a declarative language, PuppetDSL, for describing desired configuration
3.2 Chef
Systems administration tasks organized into “cookbooks” and “recipes”.
- Linux, Windows, cloud-friendly (AWS)
- Configurations are procedural in Ruby DSL
- Master-client
3.3 Ansible
- Written in Python, configuration based on YAML scripts
- Still heavily procedural(?)
- Single-node architecture
- Uses ssh to build artifact on target systems
3.4 Terraform
- Focus on provisioning, setting up servers before building the configuration
- Reputedly easier to use with Docker
- More declarative approach
4 Pipelines
Automation of continuous deployment is usually organized into pipelines.
- An assembly line of smaller stages.
- Does not seem to map well onto GitLab stages because build product do not persist (unless marked as artifacts)
- Instead must be rebuilt at each stage.
- Does not seem to map well onto GitLab stages because build product do not persist (unless marked as artifacts)
5 Monitoring
- Identify appropriate metrics
- Continuously collected
- Real-time analytics & reporting
Identifies both operational problems and provides feedback to Agile planning.
5.1 Elastic-Logstash-Kibana (ELK)
- E: search & analytics engine
- L: server-side logging
- K: visualization
Provide for capture & visualization of properties such as
- log files
- cloud data
- availability
- network traffic