Skip to content

Instantly share code, notes, and snippets.

@darkn3rd
Last active June 15, 2022 15:12
Show Gist options
  • Save darkn3rd/9bea8c143b99f31543925617b77591f0 to your computer and use it in GitHub Desktop.
Save darkn3rd/9bea8c143b99f31543925617b77591f0 to your computer and use it in GitHub Desktop.
DevOps Learning Guide

DevOps Learning Guide

These are different methods that I have developed to rapidly learn technology.

Top Down Approach through Business Use Case

Understand the business case as to what problem trying to solve and how you are trying to solve it. Ultimately in business, problems are usually tied to lowering the time and money of some goal, and a particular application or DevOps tool will help in dimensions.

Any particular solution in DevOps also incorporates a particular philosophy and thus embeds processes into the tool or system. This is important to understand. It is vital to not to be deep into the weeds of any particular implementation specifics, or else you won't be able to see the concepts behind the tool and the business problem that is trying to be understood.

This problem oriented and business use case approach is a form of top-down, while the opposite, starting with the tool, is a bottom-up. The latter can lead confusion, as you may missed problem you are trying to solve.

Personally, after some practice with this method, I use a mix of top-down and bottom-up, doing small iterative jumps in knowledge acquisition, and refining as I go. This is an advanced method for later.

Implementation

Here are some things I do with this approach:

  • Start pre-baked canned solution, such as recipe in Chef Supermarket, or an official image on DockerHub.
  • After familiar with application or solution, do the following:
    • Implement solution manually, step-by-step, documenting each step, code snippets in Markdown or shell script.
    • Automate solution manually with desired tool, e.g. Dockerfile, Chef recipe, Ansible playbook, etc.
    • Use different tools to solve the same problem, e.g. Puppet vs. Ansible or Mesos vs. Kubernetes.
  • Automate application configuration and integration, e.g. Jenkins build server building/testing application, deploying software, hooks to github or other software.

Examples

WordPress

Implement simple low-availability WordPress solution, which is a web-application and database backend. After building intimate knowledge on this, create a high availability version with load balancer, multiple web servers, fail-over database replication, redis or memcached, and other integration points, such as WordPress plug-ins. Create a site that you might use personally, and automate this as well.

Some approaches:

  • Manually
    • Research How-To guides, such as those available by Digital Ocean.
    • Use Vagrant to orchestrate two systems, one for database, one for Wordpress.
  • Docker
    • Use pre-made docker images and orchestrate them with Docker Compose
    • Manually create the docker images from scratch
  • Change-Configuration
    • Use pre-made scripts (recipes, playbooks, modules) to stand up the services
    • Manually stand-up wordpress, apache/nginx, and database (separate systems)
  • Container Orchestration
    • Use any pre-made packages, e.g. helm for Kubernetes, to stand up system
    • Use pre-made images (Docker or rkt) and orchestrate containers
    • Use custom crafted images and orchestrate the containers
    • Do Chaos monkey and load testing to demonstrate resilience of solution
  • Cloud-Native Automation
    • Use pre-made Cloud Formation (or Terraform or Ansible) to stand up a solution. AWS has LA and HA CFN scripts for WordPress.
    • Manually create the automation, starting with CloudFormation designer in AWS, then raw manual scripting
    • These just setup the resources, and the hand-off will be to one of the above solutions
  • Others:
    • Image Building
      • Build the solution in the form of the image, using something like Packer
    • Provisioning
      • Experiment using Kickstart (RHEL/CentOS) or Preseed to build part of the solution
      • Experiment with Cloud-Init or if working with Cloud Formation use cfn-init
  • Application Level
    • Familiarize with features, attempt to automate such features

Client-Server Apps

There are many applications that have integration points that one can play. Here's a short list of solutions:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment