Veloce e facile: la nostra prova di Kubernetes gestito su OVHcloud

Veloce e facile: la nostra prova di Kubernetes gestito su OVHcloud

Abbiamo 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

di pubblicato il nel canale Cloud
OVHcloudBig del Cloud
 

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.

Pannello di configurazione di OVHcloud

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 - info
igiolo11 Marzo 2024, 11:23 #1
bell'articolo
acerbo11 Marzo 2024, 13:36 #2
non ho capito qual'é il valore aggiunto della proposta cloud di OVH, per fare questo semplice test basta un portatile con minikube.
Slater9113 Marzo 2024, 13:32 #3
Originariamente inviato da: acerbo
non ho capito qual'é il valore aggiunto della proposta cloud di OVH, per fare questo semplice test basta un portatile con minikube.


Non 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".

La discussione è consultabile anche qui, sul forum.
 
^