Upload
francesco-collova
View
295
Download
0
Tags:
Embed Size (px)
Citation preview
Francesco Collovà - francesco.collova @ gmail.comabout.me - http://about.me/francesco.collova
LinkedIn - it.linkedin.com/in/fcollova/
Infrastructure as Data24/11/2013
All’inizio c’erano due figure:
● Gli sviluppatori che facevano il SW● I sistemisti che lo installavano e lo configuravano.
Fino a quando!!!! ...anche i sistemisti hanno cominciato a scrivere SW.- Script Shell: installare e configurare automaticamente
I progetti SW
Oggi:i sistemi software diventano sempre più complessi distribuiti, in cloud, in continuo sviluppoe deployment.
Gli script non bastano più:● non sono robusti● difficili da comprendere● tutti diversi tra loro
SW per il deploy dei sistemi
Facilità - Velocità - AffidabilitàI sistemi sviluppati con metodologia agile, sono complessi, distribuiti e in cloud e pertanto occorre:
● Un modo semplice per installare e configurare i server nuovi o quelli già esistenti;
● Un modo di "sincronizzare" la configurazione ad una baseline;
● Ricreare una stessa macchina tante volte quanto necessita: in modo veloce, affidabile e senza sforzo;
● Un modo per gestire i “deployment” complessi che consenta anche di orchestrare servizi interconnessi;
Infrastructure as CodeForse avete sentito parlare del concetto di "infrastruttura come codice", mantra della cultura DevOps.(http://sdarchitect.wordpress.com/2012/12/13/infrastructure-as-code/)
Questa cultura ha fatto emergere tool popolari come Chef o Puppet. Tuttavia questi tools si sono rivelati incredibilmente complessi da utilizzareanche per i casi più semplici
Infrastructure as Data: AnsibleAnsible è un motore di orchestrazione semplice e radicale che rende le applicazioni ed i sistemi più facile da installare e distribuire.
● Si evita di scrivere script o codice personalizzato per distribuire e aggiornare le applicazioni
● Usa un linguaggio che si avvicina ad un inglese semplice● Usa SSH, senza agenti da installare su sistemi remoti
Ansible è il modo più semplice per automatizzare ed orchestrare:● Installazione di applicazioni distribuite● Gestione della configurazione● Gestire un ciclo continuo di installazione e sviluppo
AnsibleCreato da Michael De Haan Open Source: https://github.com/ansible/ansible/
(ora anche supportato da AnsibleWorks)
● Documentato molto bene● Supportato da una community molto attiva di
sviluppatori
Architettura
SSH - Nessun agente da installare
Come funziona - Step 1: Gli hosts
[local]127.0.0.1
[webserver]www.webserv1.itwww..webserv2.it
[database]10.0.1.123
Definizione dei gruppi di host su cui si eseguiranno i comandi o interi playbook
Come funziona - Step 2: i Comandi$ ansible database -i hosts -a "ls -lsa /usr"10.0.1.123 | success | rc=0 >>total 56 4 drwxr-xr-x 10 root root 4096 Apr 10 2012 . 4 drwxrwxr-x 22 root admin 4096 Jul 26 08:29 ..20 drwxr-xr-x 2 root root 20480 Oct 10 15:39 bin 4 drwxr-xr-x 2 root root 4096 Jan 27 2012 games 4 drwxr-xr-x 31 root root 4096 Jul 26 11:18 include 4 drwxr-xr-x 40 root root 4096 Oct 7 16:07 lib 4 drwxr-xr-x 10 root root 4096 Apr 10 2012 local 4 drwxr-xr-x 2 root root 4096 Oct 7 16:08 sbin 4 drwxr-xr-x 81 root root 4096 Aug 28 14:32 share 4 drwxr-xr-x 2 root root 4096 Jan 27 2012 src$ansible all -m ping
ansible webserver -a "/usr/bin/command arg1 arg2" --limit
[local]127.0.0.1
[webserver]www.webserv1.itwww..webserv2.it
[database]10.0.1.123
Host
Esempi di comandi
Come funziona - Step 3: Playbook● File in formato YAML (http://en.wikipedia.org/wiki/YAML)
● Formato dichiarativo della vostra configurazione
● Si possono specificare diversi “playbook” che si riferiscono a vari gruppi di macchine
La cosa grande è che con Ansible i playbook sono per la maggior parte idempotenti. Possono essere eseguiti molte volte il risultato non cambia.
In informatica, un'operazione idempotente è quella che non ha alcun effetto aggiuntivo se viene eseguita più di una volta con gli stessi parametri di ingresso. Cioè non non importa quante volte si chiama l'operazione il risultato sarà lo stesso
Le operazioni idempotenti sono spesso utilizzati nella progettazione di protocolli di rete, dove una richiesta di eseguire un'operazione di accadere viene garantita almeno una volta, ma potrebbe anche verificarsi più di una volta. Se l'operazione è idempotente, allora non c'è nulla di male nell’eseguire l'operazione due o più volte il risultato sarà sempre lo stesso.
Idempotenza (idempotent)
Come funziona - Step 3: Playbook
---- hosts: all user: root vars_files: - vars/settings-default.yml tasks: - name: PHP configuration file, php.ini action: template src=templates/etc-php5-apache2-php-ini.j2 dest=/etc/php5/apache2/php.ini notify: Restart Apache handlers: - name: Restart Apache action: service name=apache2 state=restarted
l’insieme dei task che devono essere svolti per fare il
deploy di un sistema sono registrati in un Playbook
ansible in formato YAML.
I playbook vengono poi eseguite sugli host.
Le componenti principali di un “playbook” Ansible
sono:
● Definizione degli Host
● Le “Variable” che sono usate nei “playbook” o
nei “template”
● I “Task” che saranno eseguiti nel “playbook”
● Gli “Handlers” che gestiscono le risposte di
cambiamento sul sistema fatto dai task.
Playbook
Esempio di Playbook--
- hosts: webserver
user: root
sudo: no
tasks:
- name: install apache2
action: apt pkg=apache2 state=latest
notify:
- start apache2
- name: Make sure index.html is present for the default virtual host
action: copy src=files/index.html dest=/var/www/index.html
- name: Make sure index.html is owned by www-data
action: file path=/var/www/index.html owner=www-data group=www-data
handlers:
- name: start apache2
action: service name=apache2 state=started
TaskOgni play contiene una lista di task che vengono eseguiti uno alla volta sugli host a cui si applica il play
ModuleAnsible dispone di una serie di moduli (‘‘module library’) che possono essere eseguiti direttamente sugli host remoti utilizzandoli nei playbook.
HandlerEseguono delle operazioni quando si verificano eventi eventi a seguito di un task che ha causato dei cambiamenti
Le azioni “notify” hanno dei trigger che sono eseguiti una sola volta anche se la notifica viene da più task.
Ad esempio può accadere che apache richieda un restart perchè è cambiata la sua configurazione e questo viene fatto una sola volta anche se più tsk hanno cambiato la sua configurazione.
Alcuni dei moduli di Ansible● add_host
● apt
● apt_key
● apt_repository
● authorized_key
● command
● copy
● cron
● ec2
● fetch
● file
● get_url
● git
● group
● hg
● lineinfile
● mount
● mysql_db
● mysql_user
● pause
● ping
● postgresql_db
● postgresql_user
● s3
● script
● service
● shell
● subversion
● template
● user
● virt
● wait_for
● yum
Moduli per gestire
● EC2, Rackspace, Linode, OpenStack, Digital Ocean
● Route53, S3, RDS
● MySQL, Postgres, Riak, Mongo
● Airbrake, Monit, Nagios, NewRelic, Pingdom
● Netscaler, BigIP, Arista
● FlowDock, HipChat, IRC, Jaber, Email
Infrastructure as Data:Ansible
La configurazione automatica delle macchine è abbastanza facile con Ansible.
E’ possibile configurare una singola macchina o tutta una serie con un processo
riproducibile.
● Tu descrivi la tua infrastruttura (in modo dichiarativo)● Definisci la sua versione● “Applichi” la descrizione alla tua infrastruttura:
l’esecuzione la fa Ansible
LinkAnsible
● https://github.com/ansible/ansible
Presentations● https://speakerdeck.com/mpdehaan/ansible● http://www.capsunlock.net/career/ansible-pyconph-2012.pdf
AnsibleWorks● http://www.ansibleworks.com/
Tutorial● https://github.com/ansible/ansible-examples● http://julien.ponge.org/blog/scalable-and-understandable-provisioning-with-ansible-and-vagrant/