Présentation de l'architecture de l'inférence Knative

Cette page présente l'architecture de la diffusion Knative et aborde les modifications qui se produisent lorsque vous activez la diffusion Knative dans votre cluster Google Kubernetes Engine.

Ces informations sont utiles pour les types d'utilisateurs suivants :

  • Utilisateurs qui font leurs premiers pas avec l'inférence Knative
  • Les opérateurs qui disposent déjà d'une expérience dans l'exécution de clusters GKE
  • Les développeurs d'applications qui ont besoin d'en savoir plus sur l'intégration de Knative Serving avec les clusters Kubernetes afin de concevoir de meilleures applications ou de configurer leur application de diffusion Knative

Composants de l'installation par défaut

Installez la diffusion Knative dans votre cluster pour connecter et gérer vos charges de travail sans état. Les composants Knative sont créés dans l'espace de noms knative-serving.

La diffusion Knative utilise Anthos Service Mesh pour acheminer le trafic. Par défaut, Anthos Service Mesh installe les composants dans l'espace de noms istio-system.

Voici la liste des composants installés par Knative Serving et Anthos Service Mesh:

  • Composants installés par Knative Serving dans l'espace de noms knative-serving:

    • Activateur : lorsque les pods font l'objet d'un scaling vertical à zéro ou sont surchargés de requêtes envoyées à la révision, l'activateur met temporairement les requêtes en file d'attente et envoie des métriques à l'autoscaler pour qu'il lance d'autres pods. Une fois que l'autoscaler a procédé au scaling de la révision en fonction des métriques reçues et des pods disponibles, l'activateur transfère les requêtes en file d'attente à la révision. L'activateur est un composant du plan de données. Les composants du plan de données gèrent toutes les fonctions et tous les processus de transfert du trafic utilisateur.
    • Autoscaler : agrège et traite les métriques envoyées par l'activateur ainsi que par le conteneur du side-car proxy de file d'attente, qui est un composant du plan de données appliquant les limites de simultanéité des requêtes. L'autoscaler calcule ensuite la simultanéité constatée pour la révision et ajuste la taille du déploiement en fonction du nombre de pods souhaité. Lorsque les pods sont disponibles dans la révision, l'autoscaler est un composant du plan de contrôle. En revanche, lorsque les pods font l'objet d'un scaling vertical à zéro, l'autoscaler est un composant du plan de données.
    • Contrôleur : crée et met à jour les ressources enfants de l'autoscaler et les objets Service. Le contrôleur est un composant du plan de contrôle. Les composants du plan de contrôle gèrent toutes les fonctions et tous les processus établissant le chemin de requête du trafic utilisateur.
    • Collecteur de métriques: collecte des métriques à partir des composants de diffusion Knative, puis les transmet à Cloud Monitoring.
    • Webhook: définit les valeurs par défaut, rejette les objets incohérents et non valides, et valide et modère les appels d'API Kubernetes sur les ressources de diffusion Knative. Le webhook est un composant du plan de contrôle.
  • Composants installés par Anthos Service Mesh s'exécutant dans l'espace de noms istio-system:

    • Passerelle locale du cluster: équilibreur de charge du plan de données chargé de gérer le trafic interne arrivant d'un service de diffusion Knative à un autre. La passerelle locale du cluster n'est accessible qu'à partir de votre cluster GKE et n'enregistre pas de domaine externe pour empêcher l'exposition accidentelle d'informations privées ou de processus internes.
    • Passerelle d'entrée Istio : équilibreur de charge du plan de données chargé de recevoir et gérer le trafic entrant provenant de l'extérieur du cluster, y compris le trafic provenant de réseaux externes ou internes.
    • Istiod : configure la passerelle locale du cluster et la passerelle d'entrée Istio pour que les requêtes HTTP soient traitées aux points de terminaison appropriés. Istiod est un composant du plan de contrôle. Pour plus d'informations, consultez la page Istiod.

Les composants de diffusion Knative sont automatiquement mis à jour avec les mises à jour du cluster du plan de contrôle GKE. Pour en savoir plus, consultez la page Versions de GKE disponibles.

Utilisation des ressources du cluster

L'installation initiale pour la diffusion avec Knative nécessite environ 1,5 processeur virtuel et 1 Go de mémoire pour votre cluster. Le nombre de nœuds de votre cluster n'affecte pas les exigences en termes d'espace et de mémoire pour une installation de diffusion Knative.

Un activateur peut consommer des requêtes avec un maximum de 1 000 milliprocesseurs et 600 Mio de RAM. Lorsqu'un activateur existant ne peut pas gérer le nombre de requêtes entrantes, un activateur supplémentaire démarre, ce qui nécessite une réservation de 300 milliprocesseurs et 60 Mio de RAM.

Chaque pod créé par le service de diffusion Knative crée un side-car proxy de file d'attente qui applique les limites de simultanéité des requêtes. Le proxy de file d'attente réserve 25 milliprocesseurs et n'a aucune réservation de mémoire. La consommation du proxy de file d'attente dépend du nombre de requêtes mises en file d'attente et de leur taille. Les ressources de processeur et de mémoire qu'il peut consommer ne sont pas limitées.

Créer un service

Schéma illustrant l'architecture du service de diffusion Knative
Architecture du service de diffusion Knative (cliquez pour agrandir)

La diffusion Knative étend Kubernetes en définissant un ensemble de définitions de ressources personnalisées (CRD) : service, révision, configuration et route. Ces CRD définissent et contrôlent le comportement de vos applications sur le cluster :

  • Le service de diffusion Knative est la ressource personnalisée de premier niveau définie par la diffusion Knative. Il s'agit d'une application unique qui gère l'ensemble du cycle de vie de votre charge de travail. Votre service garantit que votre application dispose d'une route, d'une configuration et d'une nouvelle révision pour chaque mise à jour du service.
  • La révision est un instantané immuable à un moment précis du code et de la configuration.
  • La configuration conserve les paramètres actuels de votre dernière révision et enregistre l'historique de toutes les révisions précédentes. La modification d'une configuration crée une révision.
  • La route définit un point de terminaison HTTP et l'associe à une ou plusieurs révisions vers lesquelles les requêtes sont transférées.

Lorsqu'un utilisateur crée un service de diffusion Knative, voici ce qui se produit:

  1. L'objet de service de diffusion Knative définit les éléments suivants:

    1. Une configuration permettant de diffuser vos révisions
    2. Une révision immuable pour cette version de votre service
    3. Une route permettant de gérer la répartition du trafic spécifiée pour votre révision
  2. L'objet route crée un objet VirtualService. L'objet VirtualService configure la passerelle d'entrée et la passerelle locale du cluster pour que le trafic de passerelle soit acheminé vers la révision appropriée.

  3. L'objet de révision crée les composants de plan de contrôle suivants : un objet Service Kubernetes et un objet Déploiement.

  4. La configuration réseau connecte l'activateur, l'autoscaler et les équilibreurs de charge de votre application.

Gestion des requêtes

Le schéma suivant présente une vue d'ensemble d'un chemin de requête possible pour le trafic utilisateur via les composants du plan de données de diffusion Knative sur un exemple de cluster Google Kubernetes Engine:

Schéma illustrant l'architecture d'un cluster de diffusion Knative
Architecture du cluster de diffusion Knative (cliquez pour agrandir)

Le schéma suivant s'appuie sur le schéma ci-dessus pour fournir une vue détaillée du chemin de requête du trafic utilisateur, également décrit en détail ci-dessous:

Schéma illustrant le chemin d'accès de la requête de diffusion Knative
Chemin de la requête de diffusion Knative (cliquez pour agrandir)

Pour un chemin de requête de diffusion Knative:

  1. Le trafic arrive par :

    • la passerelle d'entrée pour le trafic provenant de l'extérieur des clusters ;
    • la passerelle locale du cluster pour le trafic interne aux clusters.
  2. Le composant VirtualService, qui spécifie les règles de routage du trafic, configure les passerelles de sorte que le trafic utilisateur soit acheminé vers la révision appropriée.

  3. Le service Kubernetes, un composant du plan de contrôle, détermine l'étape suivante du chemin de requête en fonction de la disponibilité des pods pour gérer le trafic :

    • S'il n'y a pas de pods dans la révision, les événements suivants se produisent :

      1. L'activateur met temporairement la requête reçue en file d'attente et envoie une métrique à l'autoscaler pour qu'il ajoute des pods.
      2. L'autoscaler effectue un scaling pour atteindre l'état souhaité des pods dans le déploiement.
      3. Le déploiement crée des pods pour que des requêtes supplémentaires puissent être reçues.
      4. L'activateur relance les requêtes envoyées au side-car proxy de file d'attente.
    • Si le service fait l'objet d'un scaling horizontal (des pods sont disponibles), le service Kubernetes envoie la requête au proxy side-car de file d'attente.

  4. Le side-car proxy de file d'attente applique les paramètres de file d'attente de requêtes (monothread ou multithread) que le conteneur peut gérer simultanément.

  5. Si le side-car proxy de file d'attente reçoit plus de requêtes qu'il ne peut en gérer, l'autoscaler crée davantage de pods pour que des requêtes supplémentaires puissent être traitées.

  6. Le side-car proxy de file d'attente envoie le trafic au conteneur utilisateur.