DevOps

and

Application Modelling

Tim Penhey

@howbazaar

What we'll cover

  • What is DevOps
  • What is Application Modelling
  • How does Juju help

DevOps

DevOps is a Culture

It depends who you ask

  • Automation
  • Repeatability
  • Feedback
  • Operations

Application Modelling

What do we model?

Self-contained

Application

What do we model?

Self-contained

Application

Configuration

Software is Complicated

  • Most software starts quite simple
  • Complexity grows over time as components are added
  • Components often need to be configured to work together

A Simple Example

Django Application

  • Web application using Django
  • PostgreSQL database

Django Application

  • For the database, django needs
    • Database credentials
    • Database created for the application
    • Connection URL - where is the DB server

Production Deployment

  • Web application using Django
  • PostgreSQL database
  • gunicorn as an efficient WSGI HTTP Server
  • nginx as efficient static file server

Gunicorn

  • Python environment
  • WSGI configuration
  • Port to listen on

Nginx

  • Hostname
  • Static files path extension
  • Static files file location
  • Port to forward non-static calls to

Scale Out

  • Highly available database - 2 or 3 nodes
  • Multiple web application servers
  • HA proxy

Extend and Monitor

  • Add celery for asynchronous tasks
  • Now we need redis or rabbitMQ
  • Monitor with nagios

Juju

and

Charms

Juju

  • An Open Source tool
    • github.com/juju/juju
  • Manages the deployment and operation of charms
  • Provides the modelling abstraction
    • Can think more about the applications and their relationships rather than machines

Charms are

Encapsulated DevOps

  • Installation and configuration
  • Relationship management
  • Operational activities
  • Can become projects in their own right

A Charm

  • It is just a ZIP file
  • Metadata defined in YAML
  • Hooks are executed at specific times of change

Installation and Configuration

  • install, config-changed, and upgrade-charm
  • start, stop, update-status
  • leader-elected, leader-settings-changed

Relationship Management

  • Relations between software using agreed "protocols"
  • For example, "pgsql" for PostgreSQL information
  • Protocol goes something like this:
    • django establishes relationship with postgresql
    • django says my app is "foo"
    • postgresql creates a database "foo", a user "fooish" and a password, and sets these values
    • django picks up those settings and saves them for its configuration

Operational Activities

  • A charm can also define any number of named actions
  • These actions can be invoked by an operator at any time
  • For example:
    • backup / restore
    • quiesce
    • update content

Deployment Targets

  • Juju also abstracts the deployment target being used
  • Kubernetes - for container workloads
  • Public clouds:
    • AWS, Azure, GCE, Joyent, Oracle cloud
  • Private clouds:
    • OpenStack, VMWare, MAAS, LXD, Manual

Modelling Requirements

  • Some software has more defined needs
    • High IOPS
    • GPU
    • Attached storage
  • Networks
    • Extra layer 2 devices, VLANs, subnets
    • Spaces - multiple connected subnets with same ingress and egress rules, e.g. DMZ

Simple Repeatability

  • Bundles are YAML documents
  • Lists the applications to deploy
    • Charm and Configuration
    • Target Constraints
    • Relationships

DevOps and Application Modelling

By Tim Penhey

DevOps and Application Modelling

  • 383