Both sides previous revisionPrevious revisionNext revision | Previous revision |
sysadmin:paas [2015/02/08 19:04] – kobe | sysadmin:paas [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1 |
---|
====== PaaS ====== | |
| |
Se Docker di default puo' avere vantaggi principalmente in fase di sviluppo, per sfruttarlo in fase di ops e' necessario dotarsi di un orchestration engine o, ancora meglio, una PaaS Docker-based che quindi puo' portare a: | |
| |
* infrastruttura piu' agile basata sui microservizi | |
* migliorare l'efficienza del deploy di un'applicazione tramite: | |
* minimizzazione dei costi di deploy di un'applicazione | |
* migliorare la scalabilita' in produzione | |
| |
Cosa si intende per PaaS e a quale livello di astrazione si pongono questi strumenti? [[https://twitter.com/gabrtv/status/539805332432637952/photo/1|Qui]] e [[https://blog.openshift.com/openshift-v3-platform-combines-docker-kubernetes-atomic-and-more/|qui]] si puo' avere un'idea sui differenti livelli di astrazione. | |
| |
[[https://blog.openshift.com/platform-abstraction-advantage/|Qui]] invece un articolo che introduce la differenza tra PaaS e IaaS+. | |
| |
===== Orchestration ===== | |
| |
| |
==== Kubernetes ==== | |
| |
[[http://kubernetes.io/|Kubernetes]] e' stato presentato da Google all'I/O 2014 come proposta per standardizzare l'orchestrazione di applicazioni dockerizzate stateless (dove un'applicazione e' costituita da vari pod, ogni pod e' un insieme di container). Scritto in Go, puo' girare su bare metal, cosi' come su OpenStack, un VPS generico con Debian, Ubuntu, Fedora, CoreOS. | |
| |
* 6000+ GitHub stars | |
* in beta | |
* scritto in Go | |
* (per ora) permette solo applicazioni stateless | |
| |
| |
[[https://github.com/GoogleCloudPlatform/kubernetes/blob/master/DESIGN.md|Kubernetes Design]] | |
| |
Plugins (se cosi' possiamo chiamarli): | |
* [[https://github.com/google/cadvisor|cAdvisor]], monitora i container ed esporta in InfluxDB | |
* [[https://github.com/GoogleCloudPlatform/heapster|Heapster]], orchestra il monitoraggio di un cluster usando cAdvisor, InfluxDB e Grafana | |
| |
Kubernetes Doc Reference: | |
* https://github.com/GoogleCloudPlatform/kubernetes/tree/master/docs | |
* https://github.com/GoogleCloudPlatform/kubernetes/tree/master/examples | |
| |
In particular, an overview example can be found here: | |
* https://github.com/GoogleCloudPlatform/kubernetes/tree/master/examples/walkthrough | |
| |
* The example we usually demo is here: | |
* https://github.com/GoogleCloudPlatform/kubernetes/tree/master/examples/guestbook | |
| |
For full API details, you can bring up a Kubernetes cluster, and go to http://MASTER_ADDRESS/swaggerui | |
| |
That documentation is automatically generated from the source: | |
* https://github.com/GoogleCloudPlatform/kubernetes/blob/master/pkg/api/v1beta1/types.go | |
| |
===== PaaS ===== | |
| |
==== OpenShift 3 (Milestone 5) ==== | |
| |
[[https://www.openshift.com/products/origin|OpenShift 3 Origin]] e' la riscrittura della PaaS di RedHat in Go (prima era in Ruby) e basato su Docker (prima era su un container engine specifico di RedHat) | |
* estende le funzionalita' di Kubernetes, e si integra con Atomic | |
* in beta | |
* supporta l'**autoscaling** delle applicazioni basandosi sul traffico | |
* [[https://github.com/openshift/origin|repository]] | |
* [[https://docs.google.com/presentation/d/1Isp5UeQZTo3gh6e59FMYmMs_V9QIQeBelmbyHIJ1H_g/pub?start=false&loop=false&delayms=3000#slide=id.p|Technical Architecture Presentation]], [[https://github.com/openshift/openshift-pep/blob/master/openshift-pep-013-openshift-3.md|System Architecture]] | |
* 200+ GitHub stars | |
| |
==== Flynn ==== | |
| |
[[https://flynn.io/|Flynn]] e' stato sviluppato a partire dalla ricerca di Google presentata come [[http://research.google.com/pubs/pub41684.html|Omega]] | |
* in beta | |
* [[https://flynn.io/docs/architecture|Architecture Overview]] | |
* [[https://github.com/flynn/flynn|Repository]] | |
* 3000+ GitHub stars | |
| |
==== Tsuru ==== | |
| |
* [[https://tsuru.io/|Tsuru]] | |
* [[https://github.com/tsuru/tsuru|repository]] | |
* [[http://docs.tsuru.io/en/latest/understanding/architecture.html|Architecture Overview]] | |
* in alpha | |
* supporto sperimentale per l'autoscaling | |
* 1000+ GitHub stars | |
| |
===== Appendix: Microservices vs Lightweight VMs ===== | |
| |
Tra tutte e' emersa una [[https://github.com/phusion/baseimage-docker|proposta alternativa]] nell'uso di Docker non visto piu' come un container che fornisce microservizi ma una come VM a basso overhead. In questo caso la differenza principale e' data dall'avere (come in un normale OS) un normale demone di init come PID 0, mentre nei microservizi il PID 0 e' il processo che vogliamo lanciare (Nginx, uWSGI, PostgreSQL...). Questo approccio risolve alcuni aspetti nell'uso di Docker in produzione, come la questione del logging. Tuttavia per sfruttare appieno Docker non e' neanche sufficiente dotare ogni container di demoni init nativi, SSH e SysLog, ma bisogna andare un po' oltre e pensare un sistema di orchestrazione che risolve questo e altri problemi come l'HA, l'autoscaling, etc fermorestanto l'approccio dei microservizi. | |
| |
* [[http://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/|Part 1]] | |
* [[http://blog.phusion.nl/2015/01/20/baseimage-docker-fat-containers-treating-containers-vms/|Part 2]] | |
| |
===== Appendix: Host OS ===== | |
| |
==== CoreOS ==== | |
| |
In [[https://coreos.com/|CoreOS]] sono stati sviluppati numerosi tool: | |
| |
* [[https://github.com/coreos/rocket|Rocket]] | |
* [[https://github.com/coreos/etcd|Etcd]] | |
* [[https://github.com/coreos/fleet|Fleet]] | |
* [[https://github.com/coreos/flannel|Flannel]] | |
| |
==== Altri ==== | |
| |
* [[http://www.projectatomic.io/|Atomic]] (Red Hat) | |
* [[http://www.ubuntu.com/cloud/tools/snappy|Ubuntu Core]] | |
| |
| |
===== Appendix: PaaS for stateless-only apps ===== | |
| |
Per **stateless** s'intende che la soluzione proposta non gestisce dati persistenti (che sia su database o su file system), e questo e' dovuto al fatto che i container possono essere costruiti/distrutti in qualsiasi momento (piu' o meno come se fossero in sola lettura). | |
| |
Quindi eventuali database (relazionali o non) o file caricati dagli utenti dovranno risiedere altrove, ad esempio su un nostro VPS qualsiasi, oppure su un servizio dedicato come Google Persistent Disk, Amazon S3, etc. Tuttavia questo e' un argomento abbastanza complesso su cui siamo in piena fase di R&D, per cui ora non approfondiamo ulteriormente. | |
| |
==== Deis ==== | |
| |
* [[http://deis.io/|Deis]] e' la prima PaaS libera costruita su Docker ed evoluta nel tempo (ed attualmente l'unica pronta per la produzione) che implementa i principi di [[http://12factor.net/|12factor]] e rappresenta una sorta di Heroku libero | |
* basato su [[https://coreos.com/|CoreOS]] | |
* Deis e CoreOS sono entrambi production-ready | |
* Deis scritto in Python e Go, CoreOS in Go | |
| |
Requisiti minimi: | |
* occupa ~2/2.5GB di RAM e 30GB di disco | |
* almeno 3 server da 4GB di RAM (~120USD/anno) + Storage | |
| |
==== Altri ==== | |
| |
* [[http://www.cloudfoundry.org/about/index.html|Cloud Foundry]] (Shell/Ruby/.., [[https://github.com/cloudfoundry/cf-release|repository]], supportato dalla Linux Foundation) | |
| |
==== Micro PaaS ==== | |
| |
* [[https://github.com/progrium/dokku|Dokku]] (Shell, sponsorizzato da Deis per ambienti molto piccoli) | |
* [[http://www.octohost.io/|OctoHost]] (Shell, [[https://github.com/octohost/octohost|repository]]) | |
| |