Revisioni del piano di controllo di Cloud Service Mesh

Questa pagina si applica all'oggetto ISTIOD in-cluster e gestito implementazioni del piano di controllo. Questa pagina non si applica all'implementazione del piano di controllo TRAFFIC_DIRECTOR, un piano di controllo globale multi-tenant, senza revisioni individuali.

In questa pagina viene descritto il funzionamento delle revisioni del piano di controllo e il valore di usandole per gli upgrade (e i rollback) sicuri del mesh di servizi.

Concetti fondamentali dell'installazione di mesh di servizi

A livello generale, l'installazione di Cloud Service Mesh prevede due fasi principali:

  1. Innanzitutto, usa lo strumento asmcli per installare piano di controllo nel cluster o configurare piano di controllo gestito. Il piano di controllo è composto da un insieme di servizi di sistema responsabili per gestire la configurazione mesh.

  2. Successivamente, eseguirai il deployment di uno speciale proxy sidecar in tutto l'ambiente che intercetta le comunicazioni di rete da e verso ogni carico di lavoro. I proxy di comunicare con il piano di controllo per conoscerne la configurazione, di indirizzare e controllare il traffico (traffico del piano dati) attorno al tuo mesh senza apportare modifiche ai carichi di lavoro.

    Per il deployment dei proxy, utilizzi un processo denominato iniezione automatica del file collaterale (inserimento automatico) di eseguire un proxy come container collaterale aggiuntivo in ciascuno dei pod del carico di lavoro. Non è necessario modificare i manifest Kubernetes che utilizzi per il deployment dei carichi di lavoro, ma devi aggiungere un'etichetta e riavvia i pod.

Utilizza le revisioni per eseguire l'upgrade del tuo mesh in modo sicuro

La possibilità di controllare il traffico è uno dei principali vantaggi dell'utilizzo di una mesh di servizi. Ad esempio, puoi spostare gradualmente il traffico a una nuova versione di un'applicazione quando ne esegui il primo deployment in produzione. Se rilevi problemi durante l'upgrade, puoi riportare il traffico alla versione originale offrendo un metodo semplice e a basso rischio per il rollback. Questa procedura è nota come versione canary, che riduce notevolmente il rischio associato a nuove deployment di machine learning.

Utilizzando le revisioni del piano di controllo in un upgrade canary, installi il piano di controllo e la configurazione separati rispetto al piano di controllo esistente. Il programma di installazione assegna una stringa denominata revisione per identificare il nuovo controllo aereo. Inizialmente, i proxy sidecar continuano a ricevere la configurazione all'ultima versione del piano di controllo. Associa gradualmente i carichi di lavoro il nuovo piano di controllo, etichettando gli spazi dei nomi o i pod con il nuovo la revisione del piano d'azione. Dopo aver etichettato uno spazio dei nomi o i pod con il nuovo revisione, riavvia i pod del carico di lavoro in modo che i nuovi file collaterali vengano inseriti automaticamente e ricevono la configurazione dal nuovo piano di controllo. Se ci sono problemi, puoi facilmente eseguire il rollback associando i carichi di lavoro dal piano di controllo originale.

Come funziona l'inserimento automatico?

L'inserimento automatico utilizza una funzionalità Kubernetes chiamata controllo di ammissione. Viene registrato un webhook di ammissione mutante per osservare i pod appena creati. La webhook è configurato con un selettore dello spazio dei nomi in modo che corrisponda solo ai pod di cui viene eseguito il deployment in spazi dei nomi con una particolare etichetta. Quando un pod il webhook consulta un servizio di iniezione fornito dal controllo per ottenere una nuova configurazione mutata per il pod, che contiene i container e i volumi necessari per eseguire il file collaterale.

iniettore sidecar

  1. Durante l'installazione viene creata una configurazione webhook. Il webhook è registrato con il server API Kubernetes.
  2. Il server API Kubernetes controlla i deployment dei pod negli spazi dei nomi che corrisponde al webhook namespaceSelector.
  3. Uno spazio dei nomi è etichettato in modo che venga trovato dal namespaceSelector.
  4. I pod di cui è stato eseguito il deployment nello spazio dei nomi attivano il webhook.
  5. Il servizio inject fornito dal piano di controllo muta il pod specifiche per inserire automaticamente il file collaterale.

Che cos'è una revisione?

L'etichetta utilizzata per l'inserimento automatico è come qualsiasi altro ambiente Kubernetes definito dall'utente dell'etichetta. Un'etichetta è essenzialmente una coppia chiave-valore che può essere utilizzata per supportare concetto di etichettatura. Le etichette sono molto usate per il tagging e per revisioni. Ad esempio, tag Git, tag Docker Revisioni Knative.

L'attuale procedura di installazione di Cloud Service Mesh ti consente di etichettare gli elementi installati il piano di controllo con una stringa di revisione. Il programma di installazione etichetta ogni piano di controllo con la revisione. La chiave nella coppia chiave-valore è istio.io/rev, ma il valore dell'etichetta di revisione è diverso per il piano di controllo gestito nei piani di controllo nel cluster.

  • Per i piani di controllo nel cluster, il servizio e il deployment istiod in genere hanno un'etichetta di revisione simile a istio.io/rev=asm-1214-5, dove asm-1214-5 identifica la versione di Cloud Service Mesh. La revisione diventa parte del nome del servizio, ad esempio: istiod-asm-1214-5.istio-system

  • Per il piano di controllo gestito, l'etichetta di revisione corrisponde a un canale di rilascio:

    Etichetta di revisione Canale
    istio.io/rev=asm-managed Normale
    istio.io/rev=asm-managed-rapid Rapida
    istio.io/rev=asm-managed-stable Stabile

Inoltre, hai la possibilità di utilizzare etichette di inserimento predefinite (ad es. istio-injection=enabled).

Per abilitare l'inserimento automatico, aggiungi un'etichetta di revisione agli spazi dei nomi che corrisponde all'etichetta di revisione sul piano di controllo. Ad esempio, un piano di controllo con la revisione istio.io/rev=asm-1214-5, seleziona i pod negli spazi dei nomi con l'etichetta istio.io/rev=asm-1214-5 e inserisce i file collaterali.

Processo di upgrade canary

Le etichette di revisione consentono di eseguire upgrade canary e rollback semplici del piano di controllo nel cluster. Il controllo gestito utilizza una procedura simile, ma viene eseguito automaticamente l'upgrade del cluster alla versione più recente canale.

upgrade canary

I seguenti passaggi descrivono il funzionamento della procedura:

  1. Inizia con un Cloud Service Mesh o Istio open source esistente dell'installazione. Non è importante se gli spazi dei nomi utilizzano una revisione o l'etichetta istio-injection=enabled.
  2. Utilizza una stringa di revisione quando installi la nuova versione del controllo aereo. A causa della stringa di revisione, il nuovo piano di controllo viene installato insieme alla versione esistente. La nuova installazione include un nuovo webhook con un namespaceSelector configurato per monitorare gli spazi dei nomi con quella specifica etichetta di revisione.
  3. Per eseguire la migrazione dei proxy sidecar al nuovo piano di controllo, rimuovi il vecchio etichetta dello spazio dei nomi, aggiungendo la nuova etichetta di revisione al riavvio dei pod. Se utilizzi le revisioni con Cloud Service Mesh, non deve più usare l'etichetta istio-injection=enabled. Un piano di controllo con revisione non seleziona i pod negli spazi dei nomi con un attributo istio-injection anche se c'è un'etichetta di revisione. Il webhook per il nuovo controllo inserisce i file collaterali nei pod.
  4. Testa attentamente i carichi di lavoro associati al piano di controllo aggiornato e continuare a implementare l'upgrade o eseguire il rollback dal piano di controllo.

Dopo aver associato i pod al nuovo piano di controllo, quest'ultimo esistente e webhook sono ancora installati. Il vecchio webhook non ha alcun effetto per i pod in gli spazi dei nomi di cui è stata eseguita la migrazione al nuovo piano di controllo. Puoi eseguire il rollback ai pod in uno spazio dei nomi al piano di controllo originale, rimuovendo il nuovo l'etichetta di revisione, aggiungendo di nuovo l'etichetta originale e riavviando i pod. Quando che l'upgrade è stato completato, puoi rimuovere il precedente aereo.

Per la procedura dettagliata sull'upgrade con le revisioni, consulta la Guida all'upgrade.

Uno sguardo ravvicinato alla configurazione mutante di webhook

Per comprendere meglio il webhook mutante per l'inserimento automatico del file collaterale, e non puoi controllare la configurazione. Utilizza questo comando:

kubectl -n istio-system get mutatingwebhookconfiguration -l app=sidecar-injector -o yaml

Dovresti vedere una configurazione separata per ogni piano di controllo installato. Un selettore dello spazio dei nomi per un piano di controllo basato su revisioni ha il seguente aspetto: questo:

 namespaceSelector:
    matchExpressions:
    - key: istio-injection
      operator: DoesNotExist
    - key: istio.io/rev
      operator: In
      values:
      - asm-1214-5

Il selettore può variare a seconda della versione di Cloud Service Mesh o Istio che che stai eseguendo. Questo selettore corrisponde agli spazi dei nomi con un'etichetta di revisione specifica purché non abbiano anche un'etichetta istio-injection.

Quando viene eseguito il deployment di un pod in uno spazio dei nomi corrispondente al selettore, il relativo pod la specifica viene inviata al servizio di iniezione per la mutazione. Iniettore servizio da chiamare è specificato come segue:

     service:
        name: istiod-asm-1214-5
        namespace: istio-system
        path: /inject
        port: 443

Il servizio è esposto dal piano di controllo sulla porta 443 all'URL inject del tuo percorso di apprendimento.

La sezione rules specifica che il webhook deve essere applicato alla creazione del pod:

   rules:
    - apiGroups:
      - ""
      apiVersions:
      - v1
      operations:
      - CREATE
      resources:
      - pods
      scope: '*'

Passaggi successivi