Veloce e facile: la nostra prova di Kubernetes gestito su OVHcloud
di Riccardo Robecchi pubblicato il 08 Marzo 2024 nel canale CloudAbbiamo provato l'offerta di Kubernetes gestito su OVHcloud, per verificare la semplicità d'impiego di questo servizio: per farlo, abbiamo scelto di unire l'utile al dilettevole e abbiamo usato Whisper, un modello di intelligenza artificiale specializzato nella trascrizione del parlato, così da aiutarci nel lavoro quotidiano di trascrizione delle nostre interviste
Complici la sua incredibile scalabilità e la sua capacità di essere eseguito dovunque, negli ultimi anni Kubernetes si è imposto come il principale strumento per gestire applicazioni in ambienti cosiddetti "cloud native". A fare la fortuna di Kubernetes è certamente sia il fatto che è open source, sia quello che semplifica molte operazioni e consente di ottenere configurazioni anche molto complesse in maniera semplice. Abbiamo provato il servizio di Kubernetes gestito (ovvero, un servizio in cui si usa Kubernetes senza dover gestire, operare e mantenere il Master Control Plane) proposto da OVHcloud. Per questa prova abbiamo deciso di sperimentare un caso d'uso reale: l'uso di Whisper, modello di intelligenza artificiale specializzato nel riconoscimento vocale e nella trascrizione del parlato prodotto da OpenAI, per trascrivere automaticamente le nostre interviste.
Come funziona Kubernetes e perché viene usato nel cloud
Le virtual machine consentono di creare dei computer virtuali su cui è possibile installare un sistema operativo esattamente come avviene con i sistemi fisici: per il sistema operativo non ci sono (teoricamente) differenze, ma è possibile usare l'hardware per eseguire più sistemi in contemporanea. I container, invece, spostano questo concetto sul sistema operativo: anziché emulare l'intero hardware del computer, creano un ambiente isolato all'interno dell'OS, così da poter, ad esempio, eseguire diverse copie dell'applicazione senza che queste siano in contatto l'una con l'altra.
Il vantaggio di questo approccio è che i container possono contenere librerie e programmi differenti rispetto a quelli disponibili sul sistema operativo ospitante, ed è possibile creare configurazioni fisse che si possono poi riportare sempre identiche ovunque. Questo è un fatto piuttosto importante, perché permette di avere la certezza che la propria applicazione funzionerà dovunque: tanto nell'ambiente di sviluppo in locale quanto su un servizio cloud, ad esempio.
Kubernetes aggiunge un ulteriore strato sopra i container che ne semplifica la gestione: tra le altre cose, è in grado di gestire automaticamente il bilanciamento del carico, il numero di container da eseguire (e tra i quali effettuare il bilanciamento), il riavvio dei container che non rispondono e così via. Il motore per l'esecuzione dei container è lo stesso di Docker e ciò fa sì che sia possibile usare l'amplissimo catalogo di container per Docker per creare la propria applicazione o per usarne una già configurata e pronta all'uso.
Come avviene anche con Docker, è possibile specificare la configurazione dei container usando dei file YML con una specifica sintassi.
Kubernetes usa diversi componenti per il suo funzionamento: la componente principale, o Master Control Plane, che agisce da coordinatore ed è quello con cui si interagisce per la gestione dei container; i nodi, chiamati anche "Worker", su cui vengono effettivamente eseguiti i container secondo le modalità definite dal Master; i volumi, che fungono da archiviazione gestendo così la persistenza dei dati in esecuzione sui nodi; i bilanciatori di carico o load balancer, che distribuiscono il carico tra i nodi disponibili e fungono da punto d'ingresso del traffico.
Un aspetto fondamentale di Kubernetes è il fatto che viene creata una rete privata che mette in comunicazione i vari nodi: in questo modo quello principale comunica con i lavoratori e questi comunicano tra di loro, così da coordinare i calcoli. Nella configurazione predefinita non c'è però un modo per accedere direttamente dall'esterno alle applicazioni nei container ed è necessario definire nel file YML un modo per accedervi: il metodo più diffuso è quello dei load balancer, che distribuiscono le richieste tra i vari nodi.
L'offerta di Kubernetes gestito su OVHcloud
L'offerta di public cloud di OVHcloud è ricca e varia, e include anche la possibilità di impiegare Kubernetes come servizio gestito. "Servizio gestito" è un termine equivalente a "platform as a service": significa che OVHcloud mette a disposizione la piattaforma Kubernetes come pronta all'uso e si occupa di gestire tutto ciò che sta sotto (e quindi gestione e aggiornamento del sistema operativo ospitante, dello stesso Kubernetes, della rete e così via). Gli utenti possono dunque usare Kubernetes senza doversi preoccupare di tutto ciò che è esterno a esso ma necessario per la sua esecuzione.
Il Master Control Plane è incluso nel prezzo, dunque si pagherà solo per le altre componenti. I nodi Worker possono essere scelti tra le varie proposte nell'offerta di OVHcloud: ci sono quelli generici, con un buon rapporto tra memoria, numero di core di CPU, spazio di archiviazione e velocità della rete; quelli con un maggior numero di core (che operano anche a una frequenza più elevata); quelli con più RAM; quelli con una GPU NVIDIA, ad esempio per eseguire applicazioni di intelligenza artificiale; quelli con uno, due o quattro SSD NVMe da 1,9 TB ciascuno. La scelta dipende dal tipo di applicazione da eseguire, nonché dal budget a disposizione.
Va notato che nell'offerta di OVHcloud le istanze di terza generazione (ad esempio b3 e c3), dotate di processori AMD, hanno generalmente più memoria, più spazio su disco (generalmente di tipo NVMe e dunque più veloce) e connessione di rete più veloce, con un costo medio del 30% inferiore rispetto alla generazione precedente con processori Intel.
Nel caso in cui si desiderasse archiviazione aggiuntiva rispetto a quella inclusa con i nodi, è possibile includere anche le offerte di object storage e block storage.
Bisogna altresì segnalare che il load balancer, che è di fatto essenziale per accedere alle applicazioni in ambienti di produzione, è un'aggiunta a pagamento (dal prezzo inferiore al centesimo di euro per ora nella configurazione di base, ma comunque da tenere in conto).
La configurazione predefinita prevede che ciascun nodo abbia un IP pubblico e sia dunque accessibile dall'esterno; è possibile creare delle reti private così da garantire una maggior sicurezza.
Un ulteriore aspetto che segnaliamo è relativo ai prezzi: in fase di creazione di un'istanza, OVHcloud segnala una tariffa mensile e una oraria. Le due non sono equivalenti e quella mensile è nettamente più economica di quella oraria: spesso è la metà o meno. La scelta tra le due va quindi effettuata in base all'effettivo utilizzo che si pianifica di fare della piattaforma.
Cominciare a usare Kubernetes su OVHcloud
Una volta registrato un account, abbiamo selezionato la scheda "Public Cloud" e abbiamo creato il progetto "Whisper". Una volta selezionato questo, abbiamo cliccato su "crea un cluster Kubernetes", selezionando il data center di Gravelines (Francia), la versione 1.28 di Kubernetes, il tipo di istanza, il numero di nodi e il tipo di fatturazione (a ore o per mese). Abbiamo poi scelto il nome per il cluster.
Viste le nostre esigenze, abbiamo scelto di usare un'istanza b2-15, dotata di quattro core, 15 GB di RAM e 100 GB di spazio su disco. Ciò ci consente di usare anche il modello "large" di Whisper che, come spiegato dalla documentazione ufficiale, richiede circa 10 GB di RAM.
C'è voluto solo qualche minuto perché le risorse richieste venissero assegnate alla nostra istanza e potessimo cominciare a usarla. L'unico aspetto rimasto è stato configurare gli strumenti sulla nostra macchina locale per accedere a Kubernetes: il sito ufficiale del progetto spiega come effettuare l'installazione su Linux, macOS e Windows. Nel nostro caso, abbiamo usato un computer con Linux (una derivata di Ubuntu, per la precisione), pertanto abbiamo seguito le istruzioni relative.
Una volta fatto ciò, abbiamo scaricato il file di configurazione kubeconfig.yml così da poterci collegare al nostro cluster Kubernetes, come spiegato in questa guida.
Il tutto non ha richiesto che pochi minuti, a testimonianza della facilità con cui è possibile configurare un'applicazione sul cloud pubblico (e uno dei motivi del successo di questo approccio).
Configurare un container con Whisper
Whisper è disponibile gratuitamente e liberamente con licenza open source su GitHub. Ciò significa che chiunque può usarlo senza limitazioni particolari, il che ben si presta al nostro caso d'uso. Per poterlo sfruttare, però, dobbiamo inserirlo in un container Docker: Kubernetes, infatti, richiede che le applicazioni siano contenute in container (perdonateci il gioco di parole) creati per Docker, che vengono poi orchestrati e gestiti.
Così come è possibile creare i propri container con i Dockerfile nel mondo Docker, anche nel mondo Kubernetes si creano dei file YAML in cui si inserisce la configurazione desiderata. Ciò è utile per poter effettuare la messa in opera dell'applicazione con la stessa configurazione su più server, che è poi in effetti il punto di questa tecnologia.
Abbiamo scelto di affidarci a una soluzione già pronta per eseguire Whisper e di impiegare dunque il container Docker già creato da Ahmet Oner e disponibile su Docker Hub con il nome "OpenAI Whisper ASR Webservice". Si tratta di un container che mette a disposizione non soltanto il servizio Whisper, ma anche un'interfaccia Web che permette di facilitare il caricamento dei file audio e il recupero della trascrizione.
Abbiamo dunque creato il file whisper.yaml in locale e abbiamo inserito questo codice:
apiVersion: apps/v1
kind: Deployment
metadata:
name: whisperapp
namespace: default
labels:
app: whisperapp
spec:
selector:
matchLabels:
app: whisperapp
replicas: 1
template:
metadata:
labels:
app: whisperapp
spec:
containers:
- name: whisperapp
image: onerahmet/openai-whisper-asr-webservice
ports:
- containerPort: 9000
name: whisperapp
volumeMounts:
- name: cache
mountPath: /root/.cache/whisper
args: ["-e", "ASR_MODEL=medium", "-e", "ASR_ENGINE=openai_whisper"]
volumes:
- name: cache
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: whisperappsvc
namespace: default
spec:
selector:
app: whisperapp
type: LoadBalancer
ports:
- name: whisperappsvc
protocol: TCP
port: 9000
targetPort: 9000
Va notato che inizialmente avevamo definito non un Deployment, ma un Pod: tale configurazione non ci consentiva però di accedere al servizio. L'assistenza di OVHcloud ci ha però indirizzato nella giusta direzione e la configurazione qui sopra funziona senza problemi.
Seguendo le migliori pratiche bisognerebbe inserire anche un container cosiddetto d'ingresso (ingress container in inglese, come spiegato nella documentazione) che smisti le richieste in base al servizio; vista la semplicità del nostro progetto e il fatto che si tratta di una demo, abbiamo tuttavia deciso di soprassedere.
Whisper all'opera su OVHcloud
Per far funzionare il nostro container con Whisper è ora sufficiente applicare il file YML creato in precedenza:
riccardo@Sleipnir ~/dev/OVH $ kubectl apply -f whisper.yml
deployment.apps/whisperapp created
service/whisperappsvc created
A questo punto possiamo verificare che l'applicazione sia pronta:
riccardo@Sleipnir ~/dev/OVH $ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
whisperapp 0/1 1 0 80s
Una volta che il comando riporta "1/1" sotto "ready", possiamo accedere all'applicazione. Per fare ciò, dobbiamo risalire all'indirizzo IP pubblico del load balancer, segnalato come "EXTERNAL-IP":
riccardo@Sleipnir ~/dev/OVH $ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.3.0.1 < none > 443/TCP 71d
whisperappsvc LoadBalancer 10.3.82.133 1.2.3.4 9000:30354/TCP 45h
Nel browser inseriamo dunque tale IP, seguito da ":9000". La pagina si carica correttamente e possiamo quindi cominciare a usare Whisper.
In pochi minuti, Whisper trascrive le nostre interviste: vittoria!
In conclusione
La nostra esperienza d'uso di Kubernetes è stata un viaggio decisamente interessante. Personalmente, per quanto avessi già avuto a che fare con Docker, non avevo mai sperimentato Kubernetes e questo è stato di fatto il mio primo contatto sia con tale piattaforma, sia con l'offerta di cloud pubblico di OVHcloud. La semplicità con cui è stato possibile far funzionare l'applicazione è quasi disarmante, in particolare quando confrontata con i metodi "tradizionali".
Con ciò non intendo sminuire le complessità, a volte significative, che intervengono quando si usa Kubernetes (come testimoniato d'altronde dal problema in cui sono incappato con la differenza tra Deployment e Pod), ma voglio mettere in luce quanto sia facile sperimentare e fare esperienza con questa piattaforma. Ad aiutare in ciò, la documentazione di OVHcloud è molto completa e chiara nello spiegare i concetti, ed è dunque un aiuto reale per chi si approccia per la prima volta a Kubernetes e al cloud pubblico.
Creare un cluster sul cloud pubblico di OVHcloud è semplicissimo e richiede pochissimi click, e la documentazione getta luce su eventuali passaggi poco chiari. L'azienda è riuscita a creare una piattaforma che è facile da usare e chiara, fatto che la posiziona giustamente tra i principali hyperscaler. La nostra esperienza è dunque decisamente positiva nel complesso: OVHcloud ha fatto un ottimo lavoro nel rendere Kubernetes accessibile a chiunque voglia usarlo.
3 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - infoNon mi è chiaro come, ma hai preso il senso del pezzo al contrario Il punto del test non era provare Whisper o Kubernetes, ma quanto fosse facile usare l'infrastruttura di OVHcloud.
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".