Problemi comuni relativi all'esecuzione o alla scalabilità di cluster del servizio Azure Kubernetes di grandi dimensioni

Questo articolo risponde alle domande frequenti sui problemi comuni che possono verificarsi durante l'esecuzione o la scalabilità di cluster di grandi dimensioni in Microsoft servizio Azure Kubernetes (servizio Azure Kubernetes). Un cluster di grandi dimensioni è qualsiasi cluster eseguito su più di 500 nodi.

Viene visualizzato un errore di "quota superata" durante la creazione, l'aumento delle prestazioni o l'aggiornamento

Per risolvere questo problema, creare una richiesta di supporto nella sottoscrizione in cui si sta tentando di creare, ridimensionare o aggiornare e richiedere una quota per il tipo di risorsa corrispondente. Per altre informazioni, vedere Quote di calcolo a livello di area.

Viene visualizzato un errore "insufficientSubnetSize" quando si distribuisce un cluster del servizio Azure Kubernetes che usa la rete avanzata

Questo errore indica che una subnet in uso per un cluster non ha più indirizzi IP disponibili all'interno del CIDR per l'assegnazione corretta delle risorse. Questo problema può verificarsi durante gli aggiornamenti, le istanze orizzontale o la creazione del pool di nodi. Questo problema si verifica perché il numero di indirizzi IP liberi nella subnet è minore del risultato della formula seguente:

numero di nodi richiesti * valore del pool --max-pod di nodi

Prerequisiti

  • Per ridimensionare oltre 400 nodi, è necessario usare il plug-in di rete CNI di Azure.

  • Per pianificare la rete virtuale e le subnet per contenere il numero di nodi e pod da distribuire, vedere Pianificazione degli indirizzi IP per il cluster. Per ridurre il sovraccarico della pianificazione della subnet o della ricreazione del cluster a causa dell'esaurimento ip, vedere Allocazione ip dinamica.

Soluzione

Poiché non è possibile aggiornare l'intervallo CIDR di una subnet esistente, è necessario disporre dell'autorizzazione per creare una nuova subnet per risolvere questo problema. Seguire questa procedura:

  1. Ricompilare una nuova subnet con un intervallo CIDR più ampio sufficiente per gli obiettivi operativi.

  2. Creare una nuova subnet con un nuovo intervallo non sovrapposto.

  3. Creare un nuovo pool di nodi nella nuova subnet.

  4. Svuotare i pod dal pool di nodi precedente che si trova nella subnet precedente che verrà sostituita.

  5. Eliminare la subnet e il pool di nodi precedenti.

Si verificano errori sporadici di connettività in uscita a causa dell'esaurimento delle porte SNAT

Per i cluster eseguiti su scala relativamente elevata (più di 500 nodi), è consigliabile usare il gateway NAT (Managed Network Address Translation) del servizio Azure Kubernetes per una maggiore scalabilità. Il gateway NAT di Azure consente fino a 64.512 flussi di traffico UDP e TCP in uscita per ogni indirizzo IP e un massimo di 16 indirizzi IP.

Se non si usa NAT gestito, vedere Risolvere i problemi di esaurimento e timeout di connessione SNAT (Source Network Address Translation) per comprendere e risolvere i problemi di esaurimento delle porte SNAT.

Non è possibile aumentare fino a 5.000 nodi usando il portale di Azure

Usare l'interfaccia della riga di comando di Azure per aumentare fino a un massimo di 5.000 nodi seguendo questa procedura:

  1. Creare un numero minimo di pool di nodi nel cluster (perché il limite massimo di nodi del pool di nodi è 1.000) eseguendo il comando seguente:

    az aks nodepool add --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
    
  2. Aumentare le prestazioni dei pool di nodi uno alla volta. Idealmente, impostare cinque minuti di tempo di sospensione tra scale-up consecutive di 1.000. Esegui questo comando:

    az aks nodepool scale --resource-group MyResourceGroup --name nodepool1 --cluster-name MyManagedCluster
    

L'aggiornamento è in esecuzione, ma è lento

Nella configurazione predefinita, il servizio Azure Kubernetes aumenta durante un aggiornamento eseguendo le azioni seguenti:

  • Creazione di un nuovo nodo.
  • Ridimensionamento del pool di nodi oltre il numero di nodi desiderato di un nodo.

Per le impostazioni di max surge, il valore predefinito di un nodo indica che il servizio Azure Kubernetes crea un nuovo nodo prima di svuotare le applicazioni esistenti e sostituisce un nodo con controllo delle versioni precedenti. Questo nodo aggiuntivo consente al servizio Azure Kubernetes di ridurre al minimo l'interruzione del carico di lavoro.

Quando si aggiornano i cluster con molti nodi, l'aggiornamento dell'intero cluster può richiedere diverse ore se si usa il valore predefinito di max-surge. È possibile personalizzare la max-surge proprietà per pool di nodi per consentire un compromesso tra la velocità di aggiornamento e l'interruzione dell'aggiornamento. Aumentando il valore max surge, si abilita il processo di aggiornamento per terminare prima. Tuttavia, un valore elevato per max surge potrebbe anche causare interruzioni durante il processo di aggiornamento.

Eseguire il comando seguente per aumentare o personalizzare l'aumento massimo per un pool di nodi esistente:

az aks nodepool update --resource-group MyResourceGroup --name mynodepool --cluster-name MyManagedCluster --max-surge 5

È anche importante considerare come le impostazioni di distribuzione potrebbero ritardare il completamento dell'operazione di aggiornamento o ridimensionamento:

Suggerimento

Per ottenere altre informazioni dettagliate su questo comportamento, è possibile visualizzare i dettagli degli errori nella pagina Log attività nel portale di Azure o esaminare i log delle risorse nel cluster.

L'aggiornamento raggiunge il limite di quota (5.000 cluster)

Per risolvere questo problema, vedere Aumentare le quote di vCPU a livello di area.

La creazione del servizio interno in più di 750 nodi è lenta o non riesce a causa di un errore di timeout

Gli aggiornamenti del pool back-end di Load Balancer Standard (SLB) sono un collo di bottiglia delle prestazioni noto. Microsoft sta lavorando a una nuova funzionalità che consentirà una creazione più rapida di servizi e bilanciamento del carico software su larga scala. Per inviare commenti e suggerimenti su questo problema, vedere Supporto di Azure Kubernetes per il servizio di bilanciamento del carico con pool back-end basato su IP.

Soluzione

È consigliabile ridurre il cluster a meno di 750 nodi e quindi creare un servizio di bilanciamento del carico interno per il cluster. Per creare un servizio di bilanciamento del carico interno, creare un tipo di servizio e azure-load-balancer-internal un'annotazioneLoadBalancer, in base alla procedura di esempio seguente.

Passaggio 1: Creare un servizio di bilanciamento del carico interno

Per creare un servizio di bilanciamento del carico interno, creare un manifesto del servizio denominato internal-lb.yaml che contiene il LoadBalancer tipo di servizio e l'annotazione azure-load-balancer-internal , come illustrato nell'esempio seguente:

apiVersion: v1
kind: Service
metadata:
  name: internal-app
  annotations:
    service.beta.kubernetes.io/azure-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: internal-app

Passaggio 2: Distribuire il servizio di bilanciamento del carico interno

Distribuire il servizio di bilanciamento del carico interno usando il kubectl apply comando e specificare il nome del manifesto YAML, come illustrato nell'esempio seguente:

kubectl apply -f internal-lb.yaml

Dopo aver creato il cluster, è anche possibile effettuare il provisioning di un servizio di bilanciamento del carico interno (in base a questa procedura) e mantenere in esecuzione un servizio con carico bilanciato interno. In questo modo è possibile aggiungere altri servizi al servizio di bilanciamento del carico su larga scala.

La creazione del servizio SLB su larga scala richiede ore per l'esecuzione

Gli aggiornamenti del pool back-end SLB sono un collo di bottiglia delle prestazioni noto. Microsoft sta lavorando a una nuova funzionalità che consentirà di eseguire servizi con carico bilanciato su larga scala con prestazioni notevolmente più veloci per le operazioni di creazione, aggiornamento ed eliminazione. Per inviare commenti e suggerimenti, vedere Supporto di Azure Kubernetes per il servizio di bilanciamento del carico con pool back-end basato su IP.

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.