Containers + DevOps + Microservices + Kubernetes Flashcards
Da cosa sono composti le software units? Quali sono le componenti principali?
Che cos’è il linker?
Cosa sono i linking e a cosa servono?
Quali sono i tradeoff tra Linking statico e quello dinamico?
Quali sono le problematice dei pacchetti che contengono i software dell’installazione?
Le software units sono un insieme di meta-informazioni che vanno a comporre l’installazione di un determinato software, contiene le dipendenze e i passi necessari per installare un determinato sw.
_____
Le principali componenti di un software sono:
- Processi: Esecuzioni di codice con uno stato dinamicoe un codice statico associato.
- Codice statico: Include programmi, librerie (statiche e dinamiche) e i meccanismi di linking necessari per il loro funzionamento.
- Pacchetti software: Contenitori che raggruppano file, configurazioni e dipendenze per facilitare distribuzione, installazione e gestione del software.
____
Il linker è uno strumento che combina i file oggetto generati dal compilatore e le librerie per produrre un eseguibile funzionante. Risolve i simboli (riferimenti a funzioni e variabili) e collega i vari pezzi di codice necessari per l’applicazione.
__
Nel linking statico, le librerie vengono incorporate direttamente nell’eseguibile, rendendolo più grande ma autonomo (senza dipendenze esterne durante l’esecuzione). L’eseguibile interagisce direttamente con il kernel, e per aggiornare le librerie è necessaria una ricompilazione completa.
Nel linking dinamico, invece, l’eseguibile rimane più piccolo poiché utilizza oggetti condivisi (shared libraries) esterni. Dipende dalla disponibilità delle librerie al momento dell’esecuzione, ma consente di aggiornare le librerie senza ricompilare l’eseguibile.
____
Per i pacchetti che contengono sw come .apk o .dev contengono metadati sulle librerie e possono soffrire di grafo delle dipendenze complesso, conflitti e problemi d’aggiornamento delle dipendenze.
Che cosa sono i container?
Su cosa si basano i container
Come funziona il file system dei container?
Quali sono i vantaggi e selling point dei container?
I container sono unità software che contengono tutte le dipendenze necessarie per operare in autonomia e isolata dal resto dell’OS host (e anche da altri container).
“Un container è un binary staticamente linkato on steroids”
__
Dato che possiamo vedere un container come un processo, per isolare i processi in linux usiamo namespaces, quindi un processo assegnato a un name space può vedere le risorse assegnate a quel name space. Inoltre ci sono i cgroups che permettono di controllare e limitare le risorse per certi processi(possiamo assegnare un cgroup a un namespace).
__________
I container usano un FS a layers, simile a quello delle VM però ragione a livello di file non di blocchi, i layer sono read only tranne quello superiore che è write enabled. Quando un file viene modificato si performa una copy on write operation, specificamente in driver overlay2 si trova il file da modificare scendendo i layers, salva i risultati in cache, si prende la prima copia e si fa “copy_up” al layer writable, si applicano le modifiche a questa copia.
__________
I container sono utili per standarizzare l’ambiente di sviluppo/testing, condividendo l’immagine del container. Creiamo un pacchetto lightweight(accensione rapida) dei nostri servizi autocontenuti e standardizzati, gestibili in modo semplice per tutto il lifecycle e customizzabili.
Che cos’è il DevOps?
Quali sono le best practice del DevOps?
Il DevOps crea un flusso continuo tra Development e Operations, facilitando design, testing e rilascio rapido di nuove funzionalità attraverso cicli brevi (sprint) e testing automatizzato.
Questo approccio garantisce:
- Rilasci frequenti e senza interruzioni.
- Scalabilità e sicurezza con controlli precisi.
- Feedback rapidi per migliorare il prodotto costantemente.
Il processo include:
- Integrazione Continua (CI): Unione costante del codice con la codebase.
- Delivery Continua: Testing e approvazione automatizzata.
- Distribuzione Continua: Rilascio automatico all’utente finale dopo l’approvazione.
___
Le best practice del Dev Ops sono le seguenti:
- IaaS -> sicuro e affidabile, definiamo l’infrastruttura tramite codice
- Monitoraggio e logging (traceability)
- Infrastructure as code: usiamo file per configurare networking , replicas, policies
es. il deployment fallisce se manca una lib in requirements.txt
- Policy as Code: check durante il build time per rilevare le non compliance e possiamo prendere certificati come PCIDSS per pagamenti o HIPAA per privacy sanitaria
- Monitoring automatizzato in modo cost effective, oppure analisi in run time e post mortem per gestione di problemi e crash
Cos’è Docker?
Cos’è containerd?
Com’è l’architettura Docker?
Quali sono gli stati di un container?
Docker è un software per la gestione dei container e del loro ciclo di vita, l’engine è di Docker, la gestione da parte di containerd.
___
Containerd è un tool per la gestione dei container, utilizzato da Docker e Kubernetes, che si occupa di eseguire container tramite runc, gestire le immagini (pull, push, storage) e interagire con i registri delle immagini.
____
E’ composta da daemon dockerd, client che invoca i servizi chiesti da daemon tramite rest API e registry.
____
Running, stopped, paused, created.
Come funziona Docker Compose?
Docker Swarm?
Com’è l’architettura di swarm
Docker compose è un un estensione di Docker che permette di creare un ecosistema multi container tramite la dichiarazione di file YAML, da esso possiamo definire varie policy come la rete, volumes, replicas e altro.
______
Docker Swarm è un software d’orchestrazione, a livello dichiarativo definisce il deployment e ha meccanismi di state reconcilitation, inoltre ha le seguenti funzioni:
- Service Discovery DNS
applicare meccanismi di service discovery tramite DNS server integrato e discovery tramite nomi univoci dei nodi.
- Load Balancing
- Scaling: automatico per ogni servizio
- Networking multi host: connessioni su più nodi tramite overlay network, la config è automatica
- Sicurezza: Sicuro con comunicazioni criptate e TLS
- Rolling updates: Aggiornamenti incrementali per evitare burst di traffico sugli host/volumi/registry
____
Un Swarm è una rete di nodi che sta all’interno di un host che può essere: - Worker: Esegue i servizi swarm, riceve ed esegue tasks (che sono anche monitorati).
- Manager: Manda in esecuzione i servizi swarm, conosce la descrizione per il deployment e distribuisce tasks (a volte funziona anche come worker)
Come funziona Kubernetes?
Quali sono le funzioni principali?
Quali sono le componenti principali?
Quali sono i componenti del control plane?
Cosa sono i service e quali sono i suoi componenti?
Kubernetes è un software per la orchestrazione dei container organizzato in clusters, cioè nodi master e worker.
____
Kubernetes ha funzioni auto riparanti rileva guasti di un container come crash o controlli definiti dall’utente. Permette di orchestrare volumi and montare anche dal cloud, load balancing, DNS, rete, rollback e rollout per il desired state, supporta anche la creazione e rimozione dei container nonchè la migrazione delle risorse dei vecchi container.
______
I componenti principali sono:
- Nodi: macchine fisiche che eseguono e coordinano il carico di lavoro. I nodi worker hanno una kubelet in esecuzione che si occupa di fetchare i task ed eseguirli.
- Pods: Unità di elaborazione eseguibile in un nodo, raggruppa più container(o anche singolo container), astrae rete e storage per favorire la replicazione.
- Control plane: Punto di rifermento nel cluster per l’esecuzione dei container. Gestisce le applicazioni tramite chiave valore e salva le configurazioni tramite strutture key-value.
- Service: definisce come esporre dei pod su una rete interna o esterna. Cioè un endpoint per una o più pods della nostra applicazione.
_________
Il controller plane come detto prima ha una componente che comunica tramite API, e si suddivide in:
- Scheduler (kube-scheduler): tiene traccia dei pods, si occupa di assegnarli ai nodi e dare task ai pod. Implementa bin packing per placement e distribuzione delle ridondanze.
- Controller Manager: Gestisce i processi del controller specifico per il cloud cioè kube-controller-manager che ha accesso alle API del manager.
__________
Un service è l’esposizione di un uno o più pods verso l’esterno a una porta, la nostra applicazione è un deployment, che contiene pods o anche replica set(set di pod uguali per scalability).
Abbiamo deployment -> replicaset -> pod
Ogni pod ha un ip accessible attraverso il service che a sua volta ha un suo ip virtuale. Anche il cluster ha un ip, non supporta NAT e viene usato solo per applicazioni locali.
Che cos’è Minikube?
E’ conveniente installare Kubernetes su Bare metal?
Minikube è una versione utile per il testing su singolo nodo.
___________
No, conviene usare delle VM apposite perchè il set up può diventare complicato.