Offrire app Kubernetes Terraform tramite Cloud Marketplace

Le app Kubernetes Terraform in Google Cloud Marketplace consentono ai clienti di utilizzare Terraform per eseguire il deployment delle app containerizzate su Google Kubernetes Engine. Agli utenti non vengono addebitati costi per l'utilizzo delle app Kubernetes Terraform, ma vengono addebitati costi per il loro utilizzo delle Google Cloud risorse. Puoi offrire le app Kubernetes Terraform pubblicamente a tutti gli utenti di Cloud Marketplace o privatamente utilizzando le offerte private.

Le app Kubernetes Terraform che offri tramite Cloud Marketplace definiscono le configurazioni utilizzando i grafici Helm, che ospiti in Artifact Registry. Una volta configurato, esegui l'onboarding dell'app in Cloud Marketplace tramite Producer Portal.

Prima di iniziare

Panoramica dell'onboarding di un'app Kubernetes Terraform

L'offerta di un'app Kubernetes Terraform tramite Cloud Marketplace prevede i seguenti passaggi:

  1. Prepara l'app Kubernetes Terraform per Cloud Marketplace. Ciò include la configurazione di Artifact Registry e il push delle immagini dell'app.

  2. Aggiungi le informazioni sui prezzi per l'app in Producer Portal.

  3. Configura il deployment dell'app in Producer Portal, inclusi il modulo Terraform, il grafico Helm e le immagini container.

  4. Aggiungi un'etichetta per monitorare il consumo associato delle risorse Google Cloud dell'app.

  5. Pubblica l'app su Cloud Marketplace. Durante l'onboarding dell'app, invii varie parti dell'app per la revisione. Il team di Cloud Marketplace esamina ogni invio e collabora con te per risolvere eventuali problemi prima di approvarlo. Una volta approvati tutti gli invii, puoi pubblicare e lanciare il prodotto in pochi minuti.

Requisiti specifici del prodotto

Tutti i prodotti che offri tramite Cloud Marketplace devono rispettare i requisiti delle schede di Cloud Marketplace.

L'app Kubernetes Terraform deve soddisfare i seguenti requisiti aggiuntivi:

  • L'app deve essere eseguita su nodi GKE che utilizzano processori x86.
  • Tutti i grafici Helm e le immagini container dell'app devono essere caricati nel registro di Artifact Registry, nello stesso repository e progetto che utilizzi per l'app Kubernetes Terraform.
  • Il registro di Artifact Registry deve includere un grafico Helm.
  • Devi aggiungere un'etichetta ai grafici Helm dell'app per monitorare il consumo associato delle risorse dell'app Google Cloud . Per i dettagli, vedi Monitorare il consumo associato delle app Kubernetes con le etichette.
  • Il modulo Terraform deve essere ospitato come file ZIP in un bucket Cloud Storage che si trova nello stesso progetto che utilizzi per l'app Kubernetes Terraform.
  • Devi abilitare il controllo delle versioni per il bucket Cloud Storage che utilizzi per ospitare il modulo Terraform.
  • Devi includere una guida per l'utente con i passaggi per eseguire il deployment dell'app dalla riga di comando, configurarla e utilizzarla. Per i dettagli, vedi Requisiti per la guida per l'utente in questo documento.
  • Per proteggere gli utenti dalle API instabili, utilizza solo risorse Kubernetes in versione beta o disponibili a livello generale.

Requisiti per le immagini dell'app

Le immagini dell'app devono soddisfare i seguenti requisiti:

  • Tutte le immagini dell'app devono essere contrassegnate con il canale di rilascio e la versione corrente. Ad esempio, se rilasci la versione 2.0.5 nel 2.0 canale di rilascio, tutte le immagini corrispondenti devono essere contrassegnate con 2.0 e 2.0.5. Per i dettagli, vedi Organizzare le release.
  • Tutte le immagini dell'app devono contenere la seguente annotazione nel manifest dell'immagine:

    com.googleapis.cloudmarketplace.product.service.name=services/SERVICE_NAME
    

    Sostituisci SERVICE_NAME con il nome del servizio (ad esempio, example.endpoints.example-project.cloud.goog). Puoi trovare il nome del servizio per il tuo prodotto nella pagina Panoramica di Producer Portal, nella colonna Nome servizio. Per saperne di più sulle annotazioni, consulta la documentazione sulle annotazioni dell'Open Container Initiative su GitHub.

Requisiti per il repository di Artifact Registry

Il grafico Helm e le immagini container dell'app devono far parte di un singolo repository di Artifact Registry.

Ad esempio, se il repository di Artifact Registry è us-docker.pkg.dev/exampleproject, il grafico Helm e le immagini container dell'app dovrebbero essere simili a quanto segue:

  • us-docker.pkg.dev/exampleproject/exampleapp/chart
  • us-docker.pkg.dev/exampleproject/exampleapp/image1
  • us-docker.pkg.dev/exampleproject/exampleapp/image2

Requisiti per il modulo Terraform

I clienti utilizzano il modulo Terraform per eseguire il deployment del tuo prodotto da Cloud Marketplace tramite Infrastructure Manager. Il modulo Terraform pacchettizza la configurazione Kubernetes dell'app.

Utilizza il modulo di esempio come punto di partenza e segui la guida per i partner per creare un modulo Terraform compatibile con la tua app.

Parametri passati all'app

Il modulo Terraform deve dichiarare i parametri che devono essere raccolti dai clienti quando selezionano l'app. Questi parametri vengono quindi forniti al container del grafico Helm quando gli utenti eseguono il deployment dell'app.

Per configurare questi parametri, il modulo Terraform deve includere un schema.yaml file.

Per scoprire come creare un schema.yaml, consulta la guida alla creazione di uno schema su GitHub.

Richieste di cluster GPU

Se la tua app ha esigenze specifiche per le GPU o è a uso intensivo di GPU, puoi specificare il tipo e il numero di GPU nel cluster utilizzando lo schema del deployer. Se specifichi le esigenze di GPU, disattivi la creazione assistita del cluster.

L'app può richiedere una GPU Nvidia generica o una piattaforma Nvidia specifica.

Requisiti per la guida per l'utente dell'app

La guida per l'utente dell'app deve includere le seguenti informazioni:

  • Panoramica: una panoramica generale dell'app, che illustra le funzioni di base e le opzioni di configurazione. Questa sezione deve anche includere un link all'app pubblicata su Cloud Marketplace.
  • Configurazione una tantum: include i passaggi per configurare Helm e installare l'applicazione CustomResourceDefinition (CRD) in modo che il cluster possa gestire la risorsa Application.
  • Installazione: include quanto segue:
    • Comandi per il deployment dell'app
    • Passaggio dei parametri disponibili nella configurazione dell'interfaccia utente
    • Blocco dei riferimenti alle immagini ai digest immutabili
    • Informazioni su eventuali campi di input personalizzati che hai aggiunto al tuo modulo Terraform, se applicabile; consulta le istruzioni per aggiungere campi di input al modulo Terraform
  • Utilizzo di base: guide per le seguenti attività:
    • Modifica di nomi utente e password
    • Connessione a una console di amministrazione, se applicabile
    • Connessione di uno strumento client ed esecuzione di un comando di esempio, se applicabile
    • Abilitazione del gateway in entrata e installazione dei certificati TLS, se applicabile
  • Backup e ripristino: informazioni sul backup dello stato dell'app e sul ripristino dello stato dell'app da un backup.
  • Aggiornamenti delle immagini: informazioni sull'aggiornamento delle immagini dell'app per patch o aggiornamenti secondari.
  • Scalabilità: informazioni sulla scalabilità dell'app, se applicabile.
  • Eliminazione: guide per eliminare l'app e pulire eventuali risorse rimanenti, ad esempio PersistentVolumeClaims.

Modelli di prezzi per le app Kubernetes Terraform

Puoi scegliere uno dei seguenti modelli di prezzi per la tua app:

  • Senza costi: i clienti pagano solo le Google Cloud risorse che utilizzano.
  • Basato sull'utilizzo: i clienti pagano l'app in base a misure che scegli, chiamate metriche, come il numero di container o il tempo di archiviazione. Se scegli un modello di prezzi basato sull'utilizzo, la tua app deve misurare e riportare le informazioni sull'utilizzo a Google.

Dopo aver pubblicato un'app Kubernetes Terraform con prezzi basati sull'utilizzo, puoi aggiornare i prezzi dell'app. Per aggiornare i prezzi dell'app, devono essere trascorsi almeno 30 giorni dalla pubblicazione dell'app o dall'ultimo aggiornamento dei prezzi.

Prezzi basati sull'utilizzo

Google Cloud Marketplace utilizza le annotazioni dei pod Kubernetes per monitorare l'utilizzo e addebitare ai clienti i costi per i deployment delle app di Cloud Marketplace. Cloud Marketplace monitora la fatturazione e la misurazione a livello di pod e le aggrega a livello di scheda di prodotto.

Se esegui il deployment di più pod sulla stessa macchina (vCPU, GPU, TPU o memoria), il sistema assegna a ogni pod l'utilizzo cumulativo che si verifica in tutti i pod di cui è stato eseguito il deployment sulla macchina. Ad esempio, se hai tre pod che condividono la stessa GPU, Cloud Marketplace li considera come tre GPU.

Cloud Marketplace considera identici gli SKU GKE diversi all'interno di ogni famiglia di SKU vCPU, TPU, GPU o memoria. Ad esempio, se la GPU è configurata come metrica, il prezzo configurato si applica indipendentemente dal fatto che il cliente utilizzi GKE Autopilot T4 GPU Premium, GKE Autopilot L4GKE Autopilot H100 GPU Premium, GKE Autopilot A100 40 GiB GPU, GKE Autopilot A100 80 GiB GPU o GKE Autopilot H100 GPU Premium.

Ti consigliamo vivamente di integrare la logica di business nelle app di Cloud Marketplace per garantire una fatturazione accurata dei clienti. Per ridurre l'impatto della rimozione accidentale delle annotazioni delle etichette, ti consigliamo di progettare l'app in modo che confermi periodicamente che le annotazioni delle etichette siano ancora presenti. Se manca un'annotazione, l'app deve limitare le sue funzionalità finché l'etichetta non viene ripristinata. Per un esempio in Python, vedi l'esempio seguente:

pod_name = os.environ.get("HOSTNAME")
namespace = open(
      "/var/run/secrets/kubernetes.io/serviceaccount/namespace"
).read()
# Load in-cluster config
config.load_incluster_config()
v1 = client.CoreV1Api()
# Get the Pod object
pod = v1.read_namespaced_pod(name=pod_name, namespace=namespace)
annotations = pod.metadata.annotations
if annotations:
print("Annotations for this pod:")
for key, value in annotations.items():
      print(f"  {key}: {value}")
else:
print("No annotations found on this pod.")

Passaggi successivi