Panoramica dell'architettura di Knative serving

Questa pagina fornisce una panoramica dell'architettura di Knative serving e illustra le modifiche che si verificano quando attivi Knative serving nel tuo in un cluster Google Kubernetes Engine.

Queste informazioni sono utili per i seguenti tipi di utenti:

  • Utenti che iniziano a utilizzare Knative serving.
  • Operatori con esperienza nell'esecuzione di cluster GKE.
  • Gli sviluppatori di applicazioni che hanno bisogno di saperne di più Knative serving si integra con i cluster Kubernetes per progettare o configurare Knative serving un'applicazione.

Componenti nell'installazione predefinita

Installa Knative serving in il tuo cluster per connettere e gestire i carichi di lavoro stateless. Knative vengono creati nello spazio dei nomi knative-serving.

Knative serving utilizza Cloud Service Mesh per instradare il traffico. Per impostazione predefinita, Cloud Service Mesh installa i componenti nello spazio dei nomi istio-system.

Di seguito è riportato un elenco dei componenti installati da Knative serving e da Cloud Service Mesh:

  • Componenti installati da Knative serving nello spazio dei nomi knative-serving:

    • Activator: quando i pod. vengono scalati a zero o sovraccaricati dalle richieste inviate revisione, Attivatore mette temporaneamente in coda le richieste e invia le metriche Gestore della scalabilità automatica per l'avvio di più pod. Una volta che il gestore della scalabilità automatica scala la revisione sulle metriche segnalate e sui pod disponibili, l'attivatore inoltra la coda richieste di revisione alla revisione. L'attivatore è un componente del piano dati, piano dati gestiscono tutte le funzioni e i processi di inoltro del traffico degli utenti.
    • Gestore della scalabilità automatica: aggrega ed elabora le metriche di Attivatore e il container collaterale proxy, un componente del piano dati che applica limiti di contemporaneità per le richieste. Il gestore della scalabilità automatica calcola quindi della revisione e regola la dimensione del deployment in base in base al numero di pod desiderato. Quando i pod sono disponibili nella revisione, Il gestore della scalabilità automatica è un componente del piano di controllo, altrimenti quando i pod vengono scalati a zero, il gestore della scalabilità automatica è un componente del piano dati.
    • Controller: crea e aggiorna le risorse figlio del gestore della scalabilità automatica dagli oggetti di servizio. Il controller è un piano di controllo componente; i componenti del piano di controllo gestiscono tutte le funzioni e i processi che stabilisce il percorso di richiesta del traffico degli utenti.
    • Raccoglitore delle metriche: raccoglie le metriche dai componenti di Knative serving e le inoltra a Cloud Monitoring.
    • Webhook: imposta i valori predefiniti, rifiuta incoerenti e non validi. oggetti e convalida e mutate Chiamate API Kubernetes alle risorse Knative serving. Il webhook è un componente del piano di controllo.
  • Componenti installati da Cloud Service Mesh in esecuzione nello spazio dei nomi istio-system:

    • Gateway locale del cluster: il bilanciatore del carico nel piano dati responsabile del e gestire il traffico interno che arriva da uno Knative serving a un altro servizio. Il cluster locale È possibile accedere al gateway solo dall'interno di GKE cluster e non registra un dominio esterno per prevenire di informazioni private o processi interni.
    • Gateway Istio Ingress: bilanciatore del carico nel piano dati che responsabile della ricezione e della gestione del traffico in entrata dall'esterno nel cluster, incluso il traffico proveniente da indirizzi o reti interne.
    • Istiod: configura il gateway locale del cluster e Istio Gateway in entrata per gestire le richieste HTTP agli endpoint corretti. Istio è un componente del piano di controllo. Per ulteriori informazioni, vedi Istiod.

I componenti di Knative serving vengono aggiornati automaticamente con Aggiornamenti del cluster del piano di controllo GKE. Per ulteriori informazioni, consulta Versioni GKE disponibili.

Utilizzo delle risorse del cluster

L'installazione iniziale per Knative serving richiede circa 1,5 con CPU virtuale e 1 GB di memoria per il cluster. Il numero di nodi nel tuo in un cluster non influiscono sui requisiti di spazio e memoria per Installazione di Knative serving.

Un Attivatore può consumare richieste fino a un massimo di 1000 milliCPU e 600 MiB di RAM. Quando un Attivatore esistente non è in grado di supportare il numero di richieste in arrivo, l'Activator aggiuntivo si avvia, il che richiede una prenotazione di 300 milliCPU e 60 MiB di RAM.

Ogni pod creato dal servizio Knative serving crea una il sidecar del proxy che applica i limiti di contemporaneità delle richieste. Il proxy della coda prenota 25 milliCPU e non ha una prenotazione di memoria. Il proxy di coda dipende da quante richieste vengono messe in coda e dalle dimensioni richieste; non c'è alcun limite alle risorse di CPU e memoria che può utilizzare.

Crea un Service

Diagramma che mostra l'architettura del servizio Knative serving
Architettura di Knative serving Service (fai clic per ingrandire)

Knative serving estende Kubernetes definendo un set di Definizioni delle risorse (CRD): Service, Revision, Configuration e Route. Questi CRD definiscono e controllano il modo le applicazioni si comportano sul cluster:

  • Knative serving Service è la risorsa personalizzata di primo livello. è definita da Knative serving. Si tratta di una singola applicazione per gestire l'intero ciclo di lavoro del carico di lavoro. Il servizio garantisce che la tua app ha un route, una configurazione e una nuova revisione per ogni aggiornamento il servizio.
  • La revisione è uno snapshot point-in-time immutabile del codice e configurazione.
  • La configurazione mantiene le impostazioni correnti per l'ultima revisione e registra una cronologia di tutte le revisioni precedenti. La modifica di una configurazione crea nuova revisione.
  • Route definisce un endpoint HTTP e lo associa a uno o più le revisioni delle richieste inoltrate.

Quando un utente crea un servizio Knative serving, viene fatto quanto segue avvengono nel seguente modo:

  1. L'oggetto Knative serving Service definisce:

    1. Una configurazione su come pubblicare le tue revisioni.
    2. Una revisione immutabile per questa versione del servizio.
    3. Un percorso per gestire l'assegnazione del traffico specificata alla tua revisione.
  2. L'oggetto di route crea VirtualService. L'oggetto VirtualService configura Gateway in entrata e gateway locale del cluster per instradare il traffico del gateway alla revisione corretta.

  3. L'oggetto revisione crea i seguenti componenti del piano di controllo: un oggetto Service Kubernetes e un oggetto Deployment.

  4. La configurazione di rete connette l'attivatore, il gestore della scalabilità automatica e i bilanciatori del carico per la tua app.

Gestione delle richieste

Il seguente diagramma mostra una panoramica generale di un possibile percorso di richiesta per il traffico degli utenti attraverso i componenti del piano dati Knative serving su una cluster Google Kubernetes Engine di esempio:

Diagramma che mostra l'architettura dei cluster Knative serving
Architettura dei cluster Knative serving (fai clic per ingrandire)

Il prossimo diagramma si espande rispetto a quello precedente per offrire una visione approfondita al percorso di richiesta del traffico dell'utente, descritto anche nel dettaglio di seguito:

Diagramma che mostra il percorso della richiesta di Knative serving
Percorso di richiesta di Knative serving (fai clic per ingrandire)

Per un percorso di richiesta di Knative serving:

  1. Il traffico arriva attraverso:

    • Il gateway in entrata per il traffico proveniente dall'esterno dei cluster
    • Gateway locale del cluster per il traffico all'interno dei cluster
  2. Il componente VirtualService, che specifica le regole di routing del traffico, configura i gateway in modo che il traffico degli utenti sia instradato al server revisione.

  3. Il servizio Kubernetes, un componente del piano di controllo, determina il passaggio successivo il percorso di richiesta dipende dalla disponibilità dei pod per gestire traffico:

    • Se la revisione non contiene alcun pod:

      1. L'attivatore mette temporaneamente in coda la richiesta ricevuta ed esegue il push di un al gestore della scalabilità automatica per scalare più pod.
      2. Il gestore della scalabilità automatica scala lo stato desiderato dei pod nel deployment.
      3. Il deployment crea più pod per ricevere richieste aggiuntive.
      4. L'attivatore riprova a inviare le richieste al sidecar del proxy della coda.
    • Se il servizio viene fatto lo scale out (sono disponibili pod), il servizio Kubernetes invia la richiesta al sidecar del proxy della coda.

  4. Il sidecar del proxy della coda applica i parametri della coda delle richieste, singoli o richieste multi-thread, che il container può gestire contemporaneamente.

  5. Se il sidecar del proxy della coda ha più richieste di quante ne possa gestire, il gestore della scalabilità automatica crea altri pod per gestire richieste aggiuntive.

  6. Il sidecar del proxy di coda invia il traffico al contenitore utente.