Proposer des applications Kubernetes Terraform sur Cloud Marketplace

Les applications Kubernetes Terraform sur Google Cloud Marketplace permettent à vos clients d'utiliser Terraform pour déployer vos applications conteneurisées sur Google Kubernetes Engine. Vos utilisateurs ne sont pas facturés pour leur utilisation de vos applications Terraform Kubernetes, mais ils le sont pour leur utilisation des ressources Google Cloud . Vous pouvez proposer publiquement des applications Terraform Kubernetes à tous les utilisateurs Cloud Marketplace, ou de manière privée à l'aide d'offres privées.

Les applications Kubernetes Terraform que vous proposez sur Cloud Marketplace définissent leurs configurations à l'aide de charts Helm que vous hébergez dans Artifact Registry. Une fois cette configuration effectuée, vous intégrez votre application à Cloud Marketplace via Producer Portal.

Présentation de l'intégration d'une application Kubernetes Terraform

Pour proposer une application Terraform Kubernetes sur Cloud Marketplace, vous devez suivre les étapes suivantes :

  1. Préparez votre application Kubernetes Terraform pour Cloud Marketplace. Cela inclut la configuration d'Artifact Registry et le transfert des images de votre application vers celui-ci.

  2. Ajoutez les informations tarifaires de votre application dans Producer Portal.

  3. Configurez le déploiement de votre application dans Producer Portal, y compris son module Terraform, son chart Helm et ses images de conteneurs.

  4. Publiez votre produit sur Cloud Marketplace. Lorsque vous intégrez votre produit, vous devez soumettre différentes parties de votre produit à un examen. L'équipe Cloud Marketplace examine chaque envoi et travaille avec vous pour résoudre les éventuels problèmes avant approbation. Une fois tous vos envois approuvés, vous pouvez publier et lancer le produit en quelques minutes.

Conditions requises pour les applications Kubernetes Terraform

Tous les produits que vous proposez sur Cloud Marketplace doivent respecter les exigences concernant les fiches de Cloud Marketplace.

Votre application Terraform Kubernetes doit répondre aux exigences supplémentaires suivantes :

  • Votre application doit s'exécuter sur des nœuds GKE qui utilisent des processeurs x86.
  • Tous les graphiques Helm et les images de conteneur de votre application doivent être importés dans votre registre Artifact Registry, dans le même dépôt et le même projet que ceux que vous utilisez pour votre application Terraform Kubernetes.
  • Votre registre Artifact Registry doit inclure un chart Helm.
  • Votre module Terraform doit être hébergé sous forme de fichier ZIP dans un bucket Cloud Storage situé dans le même projet que celui que vous utilisez pour votre application Terraform Kubernetes.
  • Vous devez activer la gestion des versions pour le bucket Cloud Storage que vous utilisez pour héberger votre module Terraform.
  • Vous devez inclure un guide de l'utilisateur expliquant la procédure de déploiement à partir de la ligne de commande, la configuration et l'utilisation de l'application. Pour en savoir plus, consultez Exigences concernant votre guide de l'utilisateur dans ce document.
  • Pour protéger les utilisateurs contre les API instables, n'utilisez que les ressources bêta ou Kubernetes généralement disponibles.

Exigences concernant les images de votre application

Les images de votre application doivent répondre aux exigences suivantes :

  • Toutes les images de votre application doivent comporter le tag du canal de publication et de la version actuelle. Par exemple, si vous publiez la version 2.0.5 sur le canal de publication 2.0, toutes les images correspondantes doivent comporter les tags 2.0 et 2.0.5. Pour en savoir plus, consultez Organiser vos releases.
  • Toutes les images de votre application doivent contenir l'annotation suivante dans leur fichier manifeste d'image :

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

    Remplacez SERVICE_NAME par le nom du service. Pour trouver le nom de votre service, consultez le tableau des produits sur la page Présentation de Producer Portal. Pour en savoir plus sur les annotations, consultez la documentation de l'Open Container Initiative sur les annotations sur GitHub.

Exigences concernant votre dépôt Artifact Registry

Le chart Helm et les images de conteneur de votre application doivent faire partie d'un même dépôt Artifact Registry.

Par exemple, si votre dépôt Artifact Registry est us-docker.pkg.dev/exampleproject, le chart Helm et les images de conteneur de votre application doivent ressembler à ce qui suit :

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

Exigences concernant le module Terraform

Les clients utilisent le module Terraform pour déployer votre produit depuis Cloud Marketplace via Infrastructure Manager. Le module Terraform regroupe la configuration Kubernetes de votre application.

Utilisez le module exemple comme point de départ et suivez le guide du partenaire pour créer un module Terraform compatible avec votre application.

Paramètres transmis à votre application

Votre module Terraform doit déclarer les paramètres qui doivent être collectés auprès des clients lorsqu'ils sélectionnent votre application. Ces paramètres sont ensuite transmis au conteneur du chart Helm lorsque les utilisateurs déploient l'application.

Pour configurer ces paramètres, votre module Terraform doit inclure un fichier schema.yaml.

Pour savoir comment créer un schema.yaml, consultez le guide de création d'un schéma sur GitHub.

Demandes de cluster GPU

Si votre application a des besoins spécifiques ou élevés en matière de GPU, vous pouvez spécifier le type et le nombre de GPU dans le cluster à l'aide de votre schéma de déploiement. Si vous spécifiez vos besoins en GPU, vous désactivez la création assistée de cluster.

Votre application peut demander un GPU Nvidia générique ou une plate-forme Nvidia spécifique.

Exigences relatives au guide utilisateur de votre application

Le guide utilisateur de votre application doit inclure les informations suivantes :

  • Présentation : présentation générale de votre application, couvrant les fonctions de base et les options de configuration. Cette section doit également fournir un lien vers votre application publiée sur Cloud Marketplace.
  • Configuration unique : inclut les étapes de configuration de Helm et d'installation de la CustomResourceDefinition (CRD) Application afin que votre cluster puisse gérer la ressource Application.
  • Installation : cela inclut les éléments suivants :
    • Commandes pour déployer votre application
    • Paramètres de transfert disponibles dans la configuration de l'UI
    • Épinglage des références d'images à des condensés immuables
    • Informations sur les champs de saisie personnalisés que vous avez ajoutés à votre module Terraform, le cas échéant. Consultez les instructions pour ajouter des champs de saisie à votre module Terraform.
  • Utilisation de base : guides pour les tâches suivantes :
    • Modifier les noms d'utilisateur et les mots de passe
    • Connexion à une console d'administration, le cas échéant
    • Connexion d'un outil client et exécution d'un exemple de commande, le cas échéant
    • Activation de l'entrée et installation des certificats TLS, le cas échéant
  • Sauvegarder et restaurer : informations sur la sauvegarde de l'état de l'application et la restauration de l'état de l'application à partir d'une sauvegarde.
  • Mise à jour des images : informations sur la mise à jour des images d'application pour les correctifs ou les mises à jour mineures.
  • Scaling : informations sur le scaling de l'application, le cas échéant.
  • Suppression : guides pour supprimer l'application et nettoyer toutes les ressources qui pourraient subsister, telles que les PersistentVolumeClaims.

Modèles de tarification pour les applications Kubernetes Terraform

Vous pouvez opter pour l'un des modèles de tarification suivants pour votre application :

  • Gratuit : les clients ne paient que les ressources Google Cloud qu'ils utilisent.
  • En fonction de l'utilisation : les clients paient votre application en fonction des mesures, appelées métriques, que vous choisissez (le nombre de conteneurs ou la durée du stockage, par exemple). Si vous choisissez un modèle de tarification en fonction de l'utilisation, votre application doit mesurer et transmettre les informations d'utilisation à Google.

Une fois que vous avez publié une application Terraform Kubernetes avec une tarification basée sur l'utilisation, vous pouvez modifier la tarification de votre application. Pour modifier le prix de votre application, au moins 30 jours doivent s'être écoulés depuis sa publication ou la dernière modification de son prix.

Tarification en fonction de l'utilisation

Google Cloud Marketplace utilise des annotations de pod Kubernetes pour suivre l'utilisation et facturer aux clients les déploiements de vos applications Cloud Marketplace. Cloud Marketplace suit la facturation et la mesure au niveau du pod, et les agrège au niveau de la fiche produit.

Si vous déployez plusieurs pods sur la même machine (processeur virtuel, GPU, TPU ou mémoire), le système attribue à chacun des pods l'utilisation cumulée de tous les pods déployés sur la machine. Par exemple, si vous avez trois pods qui partagent le même GPU, Cloud Marketplace les comptabilise comme trois GPU.

Cloud Marketplace traite les différentes SKU GKE de chaque famille de SKU de processeur virtuel, de TPU, de GPU ou de mémoire comme identiques. Par exemple, si le GPU est configuré comme métrique, le prix configuré s'applique, que votre client utilise GKE Autopilot T4 GPU Premium, GKE Autopilot L4GKE Autopilot H100 GPU Premium, GKE Autopilot A100 40 Gio GPU, GKE Autopilot A100 80 Gio GPU ou GKE Autopilot H100 GPU Premium.

Nous vous recommandons vivement d'intégrer une logique métier à vos applications Cloud Marketplace pour garantir une facturation précise des clients. Pour atténuer l'impact de la suppression accidentelle d'annotations de libellés, nous vous recommandons de concevoir votre application de manière à vérifier régulièrement que les annotations de libellés sont toujours présentes. Si une annotation est manquante, votre application doit limiter ses fonctionnalités jusqu'à ce que le libellé soit rétabli. Pour obtenir un exemple en Python, consultez l'exemple suivant :

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

Étapes suivantes