Helm chart di Cheshire Cat AI per Rancher / Kubernetes

In questo post realizziamo un semplice Helm Chart per installare Cheshire Cat AI come applicazione (app) su un sitema Rancher basato su Kubernetes.

Iniziamo riassumendo i concetti chiavi di un sistema Kubernetes, poi descriviamo l’Helm Chart e infine vediamo come fare in modo che sia posibile impostare alcuni parametri dall’interfaccia web di Rancher in fase di installazione e aggiornamento dell’app.

Introduzione: le componenti del sistema

Clicca sul nome per leggere la descrizione di ciascuna componente.

In pratica è possibile creare, per esempio, un assistente AI con Cheshire Cat  installarlo su dei container Docker, all’interno di un sistema basato su Kubernetes. Tutte le configurazioni delle componenti che costituiscono questo sistema possono essere descritte tramite degli Helm Chart e possono essere gestite tramite l’interfaccia web di Rancher.

Descrizione dell’ Helm Chart

L’Helm Chart realizzato definisce tutte le componenti che costituiscono il sistema e permettono all’applicazione di girare sul cluster.

I file principali sono:

  • Chart.yaml: E’ il file principale che definisce il pacchetto e contiene i metadati del chart: versione, nome, icona, descrizione, keywords, manteiners, ecc.
  • values.yaml: Contiene le proprietà configurabili di tutte le componenti, per esempio: l’immagine Docker di Cheshire Cat AI da usare, la porta su cui deve girare, la dimensione dei volumi usati,  il numero di repliche di ciascun pod, ecc.
  • questions.yaml: Definisce i campi interattivi visibili nell’interfaccia web di Rancher per personalizzare il deploy.
  • templates/deployment.yaml: Template per creare la risorsa Deployment che gestisce i pod dell’app. In questo caso creiamo un container kk-cheshirecatai sul quale installiamo l’immagine
    ghcr.io/cheshire-cat-ai/core:latest e sul quale vanno montati tre volumi: static-volume, data-volume e plugins-volume. Inoltre definiamo la variabile d’ambiente CCAT_API_KEY ed esponiamo le porte 80 e 5678.
  • templates/service.yaml: Indica quali sono le porte che il servizio espone (80 e 5678) e come deve essere effettuato il load balancing (ClusterIP).
  • templates/ingress.yaml: Indica che l’applicazione è associale all’URL cheshirecatai.cbc.it e deve gestire l’HTTPS.
  • templates/secret.yaml: Definisce il secret cheshirecatai-secret che è una API key che può essere usata per far comunicar eun sito WordPress con questa istanza di Cheshire Cat AI.
  • templates/_helpers.tpl: Contiene alcune funzioni riutilizzabili allo scopo di centralizzare la creazione di nomi ed etichette da riutilizzare negli altri file, per esempio {{- define “kk-cheshirecatai.name” -}} .

Come già detto tutti i file sono in formato YAML, tranne l’ultimo; e si può usare indifferentemente l’estensione yaml o yml.

Come funziona il file questions.yaml di Rancher

Tutti i file YAML che definisco le componenti del cluster contengono delle variabili, per esempio:

{{ .Values.service.ports.http }}
{{ .Values.image.repository }}:{{ .Values.image.tag }}
{{ .Values.image.pullPolicy }}

Questa sintassi indica che il valore da utilizzare è quello presente nel file values.yaml.

Quando viene installata o aggiornata una applicazione su Kubernetes tutti i valori delle variabili sono recuperati ed utilizzati per creare un certo componente.

Su Rancher è possibile impostare tutti o un sottoinsieme di parameteri dalla sua interfaccia grafica, per poterlo fare è necessario indicare nel file questions.yaml i parametri che si vogliono impostare, come mostrato nello screenshot seguente. Al momento di una installazione o di un aggiornamento questi valori sono usati per costruire un nuovo file values che è il merge di quello originale e dei valori sovrasctitti da questions.yaml. Il nuovo file values sarà passato al comado helm con il parametro –-values e i suoi valori saranno usati per creare/modificare i vari componenti (deployment.yaml, service.yaml, ingress.yaml, ecc.).

Verifica e installazione dell’App

Nella creazione degli Helm Chart è molto facile commettere vari tipi di errori, soprattutto di sintassi e di indentazione.

Si possono eseguire questi due comandi: il primo effettua alcuni semplici controlli, il secondo produce un file contenente la descrizione di tutte le componenti che saranno create/modificate sostituendo alle variabili i valori che verranno utilizzati (a meno delle personalizzazoni fatte direttamente su Rancher).

helm lint
helm template my-release . --debug > prova.yml

Per installare l’applicazione su Rancher è necessario collegare quest’ultimo al repository che contiene l’Helm Chart (Rancher->Apps->Repositories).

A questo punto l’app sarà visibile in Rancher->Apps->Charts e sarà installabile tramite l’interfaccia web.

 

Per installare/aggiornare l’app direttamente su Kubernetes, in mancanza di Rancher, si possono usare questi comandi:

helm install kk-cheshirecatai .  --namespace cheshire-cat --create-namespace
helm upgrade kk-cheshirecatai . --namespace cheshire-cat

In questo caso però il file questions.yaml è ignorato.

 

 

Fonti e riferimenti

  1. Cheshire Cat AI, sito ufficiale.
  2. Docker, sito ufficiale.
  3. Kubernetes, sito ufficiale.
  4. Helm, sito ufficiale.
  5. Rancher, sito ufficiale.
  6. Semplice chatbot per WordPress con Cheshire Cat AI, su questo blog.
  7. Componenti e tecnologie per la gestione di un sistema a microservizi, su questo blog.
  8. Microservizi: architettura, componenti e interoperabilità, su questo blog.
  9. Helm chart descritto in questo articolo.
2 giorni ago

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *