cloud provisioning mit juju

43
Cloud Provisioning mit Juju

Upload: frank-mueller

Post on 07-Aug-2015

74 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Cloud Provisioning mit Juju

Cloud Provisioningmit Juju

Page 2: Cloud Provisioning mit Juju

Frank Müller

OldenburgBaujahr 1965

EntwicklerFachautor

[email protected]@themue

Page 3: Cloud Provisioning mit Juju

Bereitgestellte Infrastruktur ...

Page 4: Cloud Provisioning mit Juju

... ist nichts ohne bereitgestellte Dienste

Page 5: Cloud Provisioning mit Juju

mysql

wordpress

Bekanntes Szenario

auf individuellen

Servern

Page 6: Cloud Provisioning mit Juju

Höhere Komplexität in Clouds

wordpress

mediawikihaproxy-w mediawiki memcached

haproxy-b wordpress mysql

wordpressvarnish

Page 7: Cloud Provisioning mit Juju

Ein mühsamer Weg

Page 8: Cloud Provisioning mit Juju

Juju - Open Source Tool zur Automatisierung von Clouds

http://jujucharms.com

Page 9: Cloud Provisioning mit Juju

Plattformen

Page 10: Cloud Provisioning mit Juju

Plattformen

mediawiki

wordpress

AWS Azure OpenStack Joyent ...

haproxy-w mediawiki memcached

haproxy-b wordpress mysql

wordpressvarnish

Page 11: Cloud Provisioning mit Juju

juju generate-config

# ~/.juju/environments.yaml # https://jujucharms.com/docs/config-aws.html amazon: type: ec2 # region: us-east-1 # access-key: <secret> # secret-key: <secret> # image-stream: "released" ...

Page 12: Cloud Provisioning mit Juju

juju bootstrap

Bootstrap

Page 13: Cloud Provisioning mit Juju

Bootstrap

API

State

Provisioner

...

Zentrale Funktionen

Page 14: Cloud Provisioning mit Juju

Provisionierung

Page 15: Cloud Provisioning mit Juju

juju deploy juju-gui juju deploy wordpress juju deploy mysql juju expose juju-gui

Bootstrap

juju-gui wordpress mysql

Page 16: Cloud Provisioning mit Juju

Deploy mit Constraints

• arch (amd64, arm, i386, arm64, ppc64)

• container (none, lxc, kvm)

• cpu-cores / cpu-power / mem

• root-disk

• instance-type

• networks / tags (nur für MaaS)

Page 17: Cloud Provisioning mit Juju

Relationen

Page 18: Cloud Provisioning mit Juju

juju add-relation wordpress mysql juju expose wordpress

Bootstrap

juju-gui wordpress mysql

Page 19: Cloud Provisioning mit Juju

Konfiguration

Page 20: Cloud Provisioning mit Juju

juju set mysql dataset-size=50% juju set wordpress tuning=optimized

Bootstrap

juju-gui wordpress* mysql*

Page 21: Cloud Provisioning mit Juju

Skalieren

Page 22: Cloud Provisioning mit Juju

juju deploy memcached juju add-relation wordpress memcached juju add-unit wordpress

wordpress*

Bootstrap

juju-gui wordpress* mysql*

memcached

Page 23: Cloud Provisioning mit Juju

Varianten

Page 24: Cloud Provisioning mit Juju

Unit

Unit

Unter- geordnete

Unit

Unit

Unit

Unit

ContainerDirekte AbhängigkeitStandard

Page 25: Cloud Provisioning mit Juju

Vom Charm zur Unit

Individuelle Agenten Machiner / Uniter

Zentrale Agenten Provisioner / Firewaller

Unit

Charm

Page 26: Cloud Provisioning mit Juju

Komfort alsGeschenk

Page 27: Cloud Provisioning mit Juju

Juju GUI (1)

Page 28: Cloud Provisioning mit Juju

Juju GUI (2)

Page 29: Cloud Provisioning mit Juju

Bundles

Page 30: Cloud Provisioning mit Juju

Status

juju status

machines: "0": agent-state: started agent-version: 1.12.0 dns-name: 15.185.88.51 instance-id: "1736045" series: precise ... services: wordpress: charm: cs:precise/wordpress-42 exposed: true units: wordpress/0: agent-state: started agent-version: 1.12.0 machine: "1" open-ports: - 80/tcp public-address: 15.185.89.236

Page 31: Cloud Provisioning mit Juju

Charms

Page 32: Cloud Provisioning mit Juju

Charm-Bestandteile

Bauplan aus

statischen und

dynamischen Anteilen

Metadaten

Konfigurationsoptionen

Unit Hooks install / config-changed / start

upgrade-charm / stop

Relation Hooks x-relation-joined / x-relation-changed x-relation-departed / x-relation-broken

Actions z.B. pause / snapshotrestore / optimize ...

Page 33: Cloud Provisioning mit Juju

Barebone Charm mit Charm Tools

juju charm create vanilla

Page 34: Cloud Provisioning mit Juju

Charm metadata.yaml

name: wordpress summary: WordPress is a ... maintainer: Marco Ceppi <[email protected]> description: | This will install and setup WordPress ... categories: ["applications"] requires: db: interface: mysql nfs: interface: mount cache: interface: memcache provides: website: interface: http peers: loadbalancer: interface: reversenginx

Page 35: Cloud Provisioning mit Juju

Hooks - Wordpress install

#!/bin/bash

set -xe

add-apt-repository ppa:charmers/charm-helpers apt-get update && apt-get -y upgrade

apt-get -y install php5-memcache mysql-client pwgen \ php5 php5-fpm php-apc mailutils php-mail sysstat \ php5-mysql php5-mcrypt charm-helper-sh php5-curl \ rsync nfs-common git-core mktemp

modprobe nfs || true ...

Page 36: Cloud Provisioning mit Juju

Wichtige Umgebungsvariablen für Hooks

• JUJU_HOOK_NAME

• JUJU_API_ADDRESSES

• JUJU_ENV_NAME / JUJU_ENV_UUID

• JUJU_UNIT_NAME

• JUJU_RELATION / ..._ID

• JUJU_REMOTE_UNIT

Page 37: Cloud Provisioning mit Juju

Tools in Hooks

• juju-log für Logging

• juju-reboot für Reboots, zum Beispiel nach einem Upgrade

• unit-get <private-address | public-address> zur Abfrage von Adressinformationen

• config-get zur Abfrage der Konfiguration

• open-port / close-port / opened-ports für die Verwaltung von Ports

• relation-set / relation-get / relation-list / relation-ids für die Verwaltung von Relationen

Page 38: Cloud Provisioning mit Juju

actions.yaml definiert Actions

pause: description: Pause the database. ... resume: description: Resume a paused database. ... snapshot: description: Take a snapshot of the database. params: outfile: type: string description: The filename to write to. required: [outfile] additionalProperties: false

Page 39: Cloud Provisioning mit Juju

Tools in Action-Skripten

• action-get um Parameter abzufragen

• action-set für Rückgabewerte

• action-fail zum Signalisieren von Fehlern

Page 40: Cloud Provisioning mit Juju

Action-Kommandos

juju action defined mysql

juju action do mysql/0 snapshot filename=out.tar.gz

juju action fetch <ID>

juju action status <ID>

Page 41: Cloud Provisioning mit Juju

Einige Charms

ceph

mediawiki mongodb

cassandra

rails

mysql

wordpress

rabbitmq

haproxy

apache2

hadoopsquid

hbase

couchdb

postgresqlnfsntp

Page 42: Cloud Provisioning mit Juju

Viel Spaß in den Wolken

Page 43: Cloud Provisioning mit Juju

Bildquellen 123RFiStockphotoeigene Quellen