







Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Una panoramica dettagliata sulla virtualizzazione dei sistemi operativi, spiegando concetti come la virtualizzazione hardware, la virtualizzazione a livello sistema operativo, i container, l'hyper-v, xen, proxmox, kubernetes, terraform e la gestione di sistemi virtualizzati tramite bash scripting. Vengono inoltre spiegati concetti come la traduzione dinamica binaria, la gestione delle risorse, la replicazione dei pods su host diversi e l'autoscaling.
Tipologia: Sintesi del corso
1 / 13
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!








Virtualizzazione in senso generale
macchina fisica
consumano operosità al calcolatore.
Tassonomia di virtualizzazioni
Full/Para – Virtualization
Istruzioni privilegiate nella Full Virtualization
Container
1. Docker Swarm
2. KUBERNETES - Applicazioni
esecuzione su cluster di host fisici o virtuali.
Le app per Kubernetes sono costituite da pods , ciascuno dei quali è un insieme di container che cooperano e comunicano tra loro come se si trovassero in un unico host fisico e svolgono nel complesso un certo servizio, ad esempio un pod può realizzare un servizio web mentre un altro pod può eseguire una serie di calcoli, oppure può salvare dati in un database.
KUBERNETES – Gestione Scalabilità
L’app decide quanti pods impiegare, mentre kubernetes decide automaticamente su quali nodi allocare tali pods. Inoltre l’app può configurare kubernetes in modo tale che all’aumentare del carico dell’app effettui 3 tipi di operazioni:
Autoscaling verticale : aumenti le risorse a disposizione di un pod (uso CPU, memoria impiegata, …). Autoscaling orizzontale : aumenti il numero delle repliche dei pods applicativi. Cluster autoscaling : aumenti il numero di nodi che compongono il cluster redistribuendo i pods.
Ciò consente anche di mantenere l'applicazione in funzione anche se qualche host si guasta poiché ne rimangono altri a disposizione.
N.B.: La possibilità di realizzare un cluster autoscaling dipende da quali host usiamo:
Per host FISICI : occorre un sistema di accensione degli host fisici guidabile via SW. Per host VIRTUALI : occorre un supporto che ci dia la possibilità di creare e configurare nuove VM in automatico via SW.
KUBERNETES – Nodi Virtuali
Come detto precedentemente è possibile creare un cluster kubernetes formato da host che siano VM, le quali possono essere create manualmente su host fisici oppure create via SW su cloud pubblici/privati.
Esistono cloud di diversi provider:
Google Cloud Microsoft Azure Amazon AWS …
È possibile però creare cloud privati gestendo le proprie macchine con un insieme di applicativi open source noto come Openstack.
Inoltre i sistemi cloud forniscono delle API tramite le quali possiamo ordinare la creazione e configurazione delle VM. Purtroppo le API differiscono da cloud a cloud ma per ovviare a questa problematica esistono SW come Terraform , i quali offrono un servizio di astrazione dei sistemi cloud offrendo quindi un insieme di API universali utilizzabili su tutti i sistemi cloud.
Tramite tali strumenti è possibile creare cluster kubernetes composti da host virtuali e applicare il cluster autoscaling configurando kubernetes affinché usi Terraform per creare nuove VM quando necessario per scalare.
3. KUBERNETES-as-a-Service
Alcuni cloud offrono un servizio kubernetes senza che sia necessario creare il cluster, infatti questo viene installato dal provider su richiesta via SW e a chi produce l’app vengono fornite API mediante le quali inizializzare il cluster e dispiegarvi l’app.
In tal modo è possibile costruire app scalabili e resilienti in maniera più semplice pagando al provider cloud il costo del cluster (solitamente elevato).
4. Container-as-a-Service
Alcuni cloud offrono la possibilità di far eseguire un container in molteplici istanze su un cluster kubernetes- as-a-service costruito dal provider stesso. Il container in questione viene incapsulato in un pod eseguito nel cluster kubernetes. In tal modo essendo completamente gestito dal provider (a pagamento ), lo sviluppatore dell’app si deve preoccupare solo di costruire il container.
5. Serverless / Function-as-a-Service (FaaS)
Alcuni provider offrono un servizio che consenti di implementare funzione eseguite “apparentemente” senza definire né container né cluster. Ciò che accade è che il provider incorpora le funzioni definite dall’utente in un container e lo incapsula su un cluster kubernetes replicandolo in base al carico di richieste.
Per l’utente è facile creare tali funzioni ed il problema della creazione di container e pod è risolto, dietro pagamento , dal provider cloud.
SISTEMI VIRTUALIZZATI – Bash scripting
Struttura del Sistema Operativo:
In origine i terminali (schermo+tastiera) erano dispositivi separati dal computer vero e proprio (detto mainframe) e comunicavano con questo mediante una linea seriale. L’output verso l’utente era di tipo solo testuale.
Attualmente i terminali sono integrati nei computer (schermo e tastiera del PC).
Con l’avvento delle interfacce grafiche, lo schermo del terminale viene emulato in una “finestra” dell’ambiente grafico. Si parla di terminale virtuale.
La shell legge ciascuna riga di comando, e la interpreta eseguendo alcune operazioni. La shell comincia riconoscendo i caratteri speciali. Successivamente la shell opera alcune sostituzioni nella riga di comando, effettuando le cosiddette espansioni (expansion). Le espansioni principali sono:
history expansion brace expansion tilde expansion parameter and variable expansion arithmetic expansion command substitution (effettuata da sinistra verso destra) word splitting pathname expansion quote removal
Il comando echo permette di visualizzare a video la sequenza dei caratteri scritti subito dopo la parola echo e fino al primo carattere di andata a capolinea (che è inserito digitando il tasto
Se ho bisogno di far stampare a video anche caratteri speciali come punti e virgola, andate a capo (per visualizzare su più righe), e altri, devo inserire sia prima che dopo la stringa da stampare il separatore “ doppio apice.
La shell dei comandi permette di usare delle Variabili che sono dei simboli dotati di un nome e di un valore. Le variabili di una shell possono essere stabilite e modificate sia dal sistema operativo sia dall’utente che usa quella shell.
Alcune variabili (dette d’ambiente) vengono impostate subito dal sistema operativo non appena viene iniziata l’esecuzione della shell (ad es la variabile PATH).
Le variabili possono essere usate quando si digitano degli ordini per la shell. La shell riconosce i nomi delle variabili contenuti negli ordini digitati, e cambia il contenuto dell’ordine sostituendo al nome della variabile il valore della variabile.
Affinchè la shell distingua il nome di una variabile, questa deve essere preceduta dalla coppia di caratteri $ { e seguita dal carattere }.
Esiste una variabile d’ambiente particolare e importantissima, detta PATH che viene impostata dal sistema operativo già all’inizio dell’esecuzione della shell. L’utente può cambiare il valore di questa variabile.
La variabile PATH contiene una sequenza di percorsi assoluti nel filesystem di alcune directory in cui sono contenuti gli eseguibili. I diversi percorsi sono separati dal carattere :
Nei sistemi Unix/Linux esistono le astrazioni di utente (user) e gruppo di utenti (group).
Un utente (user) è caratterizzato da una stringa chiamata username che contiene il nome utente (studente, vic, syslog) e da un identificatore numerico chiamato userID entrambi univoci nel sistema.
Un gruppo (group) è caratterizzato da una stringa chiamata groupname che contiene il nome del gruppo (staff, admin, ) e da un identificatore numerico chiamato groupID entrambi univoci nel sistema. Ciascun utente appartiene ad uno o più gruppi.
Un utente può tentare di accedere ad un file, chiedendo di leggere o modificare il contenuto di un file oppure di eseguire un file eseguibile, anche se non è il proprietario del file.
Il proprietario di un file stabilisce chi può accedere a quel suo file, configurando i permessi di accesso a quel file. Il proprietario stabilisce, distinguendoli, i permessi assegnati al proprietario del file (sé stesso), agli utenti appartenenti allo stesso gruppo del file e, infine, a tutti gli altri.
Ogni file ha un proprietario (identificato da un numero intero univoco detto userID) ed un gruppo del proprietario (identificato da un intero detto groupID). Quando un utente crea un file, il s.o. assegna l’utente come proprietario del file appena creato. Il proprietario/creatore poi può cambiare il proprietario del file con il comando chown nuovoproprietario nomefile
Lettura (valore 4, simbolo r) File: lettura Directory: elenco file/directory nella cartella (non le proprietà di file e directory)
Scrittura (valore 2, simbolo w) File: modifica Directory: creazione, eliminazione, cambio nome file
Esecuzione (valore 1, simbolo x) File: esecuzione Directory: accesso all'interno della directory e proprietà di suoi file e directory
Solo il proprietario del file può cambiare proprietario, gruppo e permessi del proprio file. Comandi per cambiare proprietario, gruppo e permessi: chown, chgrp, chmod
Esempio di assegnazione contemporanea di permessi mediante formato numerico:
per owner (lettura, scrittura e esecuzione: 7), per group (lettura e scrittura: 6) e per other (sola lettura: 4)
chmod 764 ./miofile.txt
Se una var. non è mai stata dichiarata allora non esiste Se una var è stata creta ed inizializzata con “ ” allora esiste ma è vuota
Posso eliminare una var esistente tramite il comando “unset nome_variabile”.
History memorizza i comandi lanciati dalla shell e permette di visualizzarli come elenco ed eventualmente rievocarli tramite il comando “! n umero_comando ”
Set lanciato da solo restituisce l’elenco di tutte le variabili della shell e le funzioni implementate. Set con parametri setta/resetta un’opzione di comportamento della shell in cui viene lanciato, esempio: o Set +o history: disabilita memorizzazione history o Set -o history: abilita la memorizzazione history o Set -a: le variabili create sono istantaneamente definite d’ambiente