Risoluzione dei problemi relativi al cluster del carico di lavoro

Questa sezione include suggerimenti che consentono di risolvere i problemi dei cluster del carico di lavoro. Per informazioni sulla risoluzione dei problemi relativi alle distribuzioni dei cluster di gestione autonomi, vedere Risoluzione dei problemi dei cluster di gestione.

Attività comuni

Eliminazione di utenti, contesti e cluster con kubectl

Per pulire lo stato di kubectl eliminando alcuni o tutti i relativi utenti, contesti e cluster:

  1. Aprire il file ~/.kube/config.

  2. Per gli oggetti user che si desidera eliminare, eseguire:

    kubectl config unset users.USER-NAME
    

    In cui USER-NAME è la proprietà name di ciascun oggetto user di livello superiore, come indicato nei file config.

  3. Per gli oggetti context che si desidera eliminare, eseguire:

    kubectl config unset contexts.CONTEXT-NAME
    

    In cui CONTEXT-NAME è la proprietà name di ciascun oggetto context di livello superiore, come indicato nei file config, in genere nel formato contexts.mycontext-admin@mycontext.

  4. Per gli oggetti cluster che si desidera eliminare, eseguire:

    kubectl config unset clusters.CLUSTER-NAME
    

    In cui CLUSTER-NAME è la proprietà name di ciascun oggetto cluster di livello superiore, come indicato nei file config.

  5. Se nei file config il contesto corrente è indicato come cluster eliminato, annullare l'impostazione del contesto:

    kubectl config unset current-context
    

Pacchetti

Segreto non creato durante l'installazione di Grafana dal file YAML predefinito

Problema

Se si tenta di installare Grafana generando un file di configurazione di Grafana predefinito, l'installazione non riesce e viene visualizzato il messaggio di errore error: Secret in version "v1" cannot be handled as a Secret: illegal base64 data at input byte 4 (reason: BadRequest).

Soluzione

Creare il segreto manualmente e utilizzare lo stesso file YAML senza il tag del segreto per installare Grafana.

  1. Eseguire i passaggi di Distribuzione di Grafana nel cluster del carico di lavoro per creare il file di configurazione per la configurazione di Grafana.
  2. Rimuovere le voci grafana.secret.* dal file di configurazione generato.
  3. Creare un segreto manualmente.

    kubectl create secret generic grafana -n tanzu-system-dashboards  --from-literal=admin=admin
    
  4. Distribuire il pacchetto.

    tanzu package install grafana \
    --package grafana.tanzu.vmware.com \
    --version AVAILABLE-PACKAGE-VERSION \
    --values-file grafana-data-values.yaml \
    --namespace TARGET-NAMESPACE
    
  5. Eseguire i passaggi rimanenti di Distribuzione di Grafana nel cluster del carico di lavoro.

Errore durante l'esecuzione di tanzu package repository

Problema

Il comando tanzu package repository non riesce e si verifica un errore.

Soluzione

Eseguire kubectl get pkgr REPOSITORY-NAME -n NAMESPACE -o yaml​ per visualizzare i dettagli dell'errore.

In cui:

  • REPOSITORY-NAME è il nome del repository dei pacchetti.
  • NAMESPACE è lo spazio dei nomi di destinazione del repository del pacchetto.

È possibile che il comando tanzu package repository non riesca con un errore simile al seguente:

Errore Descrizione Soluzione
NOT_FOUND Il percorso dell'URL del repository non è valido. Assicurarsi che l'URL del repository dei pacchetti sia raggiungibile dal cluster.
UNKNOWN o UNAUTHORIZED Questo errore può verificarsi quando si tenta di connettersi al repository.
Ownership Un repository con lo stesso URL del repository dei pacchetti è già installato nel cluster. Eseguire una delle operazioni seguenti:
  • Eseguire tanzu package available list -n NAMESPACE per verificare se il pacchetto che si desidera installare è già disponibile per l'installazione. Per ripristinare il tentativo di aggiunta del repository non riuscito, eseguire tanzu package repository delete REPOSITORY-NAME -n NAMESPACE.
  • Eseguire tanzu package repository list -A per recuperare un repository dei pacchetti esistente con lo stesso URL. Se si recupera il repository dei pacchetti, è possibile procedere con l'eliminazione a proprio rischio.

Errore durante l'esecuzione di tanzu package installed

Problema

Il comando tanzu package installed non riesce e si verifica un errore.

Soluzione

Eseguire kubectl get pkgi INSTALLED-PACKAGE-NAME -n NAMESPACE -o yaml​ per visualizzare i dettagli dell'errore.

In cui:

  • INSTALLED-PACKAGE-NAME è il nome del pacchetto installato.
  • NAMESPACE è lo spazio dei nomi del pacchetto installato.

È possibile che il comando tanzu package installed non riesca con un errore simile al seguente:

Errore Descrizione Soluzione
Ownership Un pacchetto con lo stesso nome è già installato nel cluster. Eseguire tanzu package installed list -A per verificare se il pacchetto che si desidera installare è già installato. In tal caso, è consigliabile utilizzare il pacchetto già installato, aggiornarne la versione o eliminare il pacchetto per poter procedere con l'installazione.
Evaluating starlark template Questo errore può verificarsi quando il valore di configurazione indicato non è presente. Eseguire tanzu package available get AVAILABLE-PACKAGE-NAME/VERSION -n NAMESPACE –values-schema per visualizzare tutti i valori di configurazione disponibili e specificare i valori di configurazione richiesti per il comando tanzu package install.
Failed to find a package with name PACKAGE-NAME in namespace NAMESPACE Il pacchetto specificato e i metadati del pacchetto non sono disponibili nello spazio dei nomi di destinazione. Assicurarsi che il pacchetto specificato sia presente nell'output di tanzu package available list AVAILABLE-PACKAGE-NAME -n NAMESPACE​. Se non lo è, aggiungere il repository dei pacchetti che contiene il pacchetto nello spazio dei nomi di destinazione.
Namespace NAMESPACE not found Lo spazio dei nomi in cui si desidera installare il pacchetto non esiste. In TKG v2.1, i comandi tanzu package si basano su kctrl e non supportano più il flag —create-namespace. Prima di installare un pacchetto o un repository del pacchetto, lo spazio dei nomi di destinazione deve già esistere.
Provided service account SERVICE-ACCOUNT-NAME is already used by another package in namespace NAMESPACE​ L'account del servizio specificato con il flag service-account-name è già utilizzato da un altro pacchetto installato. Consentire al plug-in del pacchetto di creare l'account del servizio o scegliere il nome di un altro account di servizio.

Pod

I pod sono bloccati in sospeso nel cluster a causa della connettività di vCenter

Problema

Quando si esegue kubectl get pods -A nel cluster creato, alcuni pod restano nello stato in sospeso.

Eseguire kubectl describe pod -n pod-namespace pod-name in un pod interessato. Viene visualizzato l'evento seguente:

n node(s) had taint {node.cloudprovider.kubernetes.io/uninitialized: true}, that the pod didn't tolerate

Soluzione

Verificare che siano presenti regole di connettività e firewall per garantire la comunicazione tra il cluster e vCenter. Per i requisiti delle porte e dei protocolli del firewall, vedere gli elenchi di vSphere 8 in VMware Ports and Protocols.

Cluster del carico di lavoro

Si verifica il timeout della distribuzione di un cluster, ma il cluster viene creato

Problema

L'esecuzione di tanzu cluster create non riesce e si verifica un errore di timeout simile al seguente:

I0317 11:11:16.658433 clusterclient.go:341] Waiting for resource my-cluster of type *v1beta1.Cluster to be up and running
E0317 11:26:16.932833 common.go:29]
Error: unable to wait for cluster and get the cluster kubeconfig: error waiting for cluster to be created (this may take a few minutes): cluster control plane is still being initialized
E0317 11:26:16.933251 common.go:33]

Soluzione

Utilizzare il flag --timeout per specificare il tempo di attesa del completamento della creazione del cluster. Il tempo di attesa predefinito è 30 minuti.

tanzu cluster create --timeout TIME

In cui TIME è l'intervallo di tempo, in minuti, di attesa del completamento della creazione del cluster. Ad esempio, 60m.

Il cluster del carico di lavoro è bloccato durante l'eliminazione

Problema

tanzu cluster delete non riesce a eliminare il cluster del carico di lavoro.

Per eliminare il cluster manualmente, vedere le due soluzioni seguenti.

Soluzione 1

  1. Nel cluster di destinazione, eliminare l'oggetto StatefulSet per AKO, che viene eseguito nello spazio dei nomi avi-system:

    kubectl delete sts ako -n avi-system
    

Soluzione 2

  1. Accedere al cluster ed eliminare le macchine worker:

    kubectl delete machine worker1 worker2
    
  2. Da vCenter, spegnere ed eliminare le macchine virtuali del nodo worker.

  3. Modificare le macchine del piano di controllo e rimuovere il collegamento del finalizzatore:

    finalizers:
     - machine.cluster.x-k8s.io
    
  4. Eliminare le macchine del piano di controllo:

    kubectl delete machine controlplane1 controlplane2
    
  5. Da vCenter, spegnere ed eliminare le macchine virtuali del piano di controllo

Nodi worker del cluster in stato NotReady a causa di MTU non corrispondenti

Problema

Impostazioni MTU (unità massima di trasmissione) diverse nei nodi worker in un cluster determinano il timeout dell'handshake TLS.

I registri di journalctl -u kubelet in un nodo mostrano un errore di comunicazione con il server API. L'esecuzione di nodi kubectl get nodes indica che i nodi worker sono stati spostati nello stato NotReady.

È possibile riconfermare il problema eseguendo le operazioni seguenti:

  1. Nel nodo del piano di controllo e nelle macchine del nodo worker, eseguire ip link e confrontare i valori MTU dell'interfaccia eth0. Se non corrispondono, è presente questo problema.
  2. Eseguire la diagnostica arresti anomali (Crashd) e rivedere i registri kubelet per determinare che si è verificato il timeout delle connessioni o che i nodi worker si trovano nello stato NotReady. Per ulteriori informazioni sull'esecuzione di Crashd, vedere Risoluzione dei problemi dei cluster del carico di lavoro con la diagnostica arresti anomali
  3. Verificare che i seguenti comandi non vengano eseguiti correttamente quando vengono eseguiti su una macchina che si trova nello stato di nodo NotReady:

    • openssl s_client -connect IP:PORT

    • curl IP:PORT -k /healthz

    Dove IP e PORT sono indirizzo IP e numero di porta dell'endpoint del piano di controllo del server dell'API Kubernetes. Per impostazione predefinita, PORT è impostata su 6443.

Soluzione

  1. Esaminare i daemonset privilegiati distribuiti nel cluster e tutti i daemonset di fornitori di terze parti che potrebbero modificare le configurazioni di rete del sistema operativo host. Potrebbe essere necessario consultare il fornitore del software per scoprirlo. I daemonset che possono modificare il sistema operativo host avranno .spec.template.spec.hostNetwork: true oppure avranno privileged: true o NET_ADMIN nel campo di funzionalità di qualsiasi contesto di sicurezza del container.

  2. Se si desidera configurare impostazioni MTU di grandi dimensioni, eseguire il provisioning del cluster con il piano di controllo con un valore MTU più elevato.

  3. Assicurarsi che la rete del cluster consenta il rilevamento dell'MTU del percorso o abbia il clamping TCP MSS attivo per consentire il corretto dimensionamento dell'MTU per i servizi esterni, ad esempio vCenter o i registri dei container.

  4. Assicurarsi di configurare le stesse impostazioni MTU per tutti i nodi di un cluster.

  5. Le impostazioni del firewall di rete devono consentire l'uso di pacchetti delle dimensioni di MTU configurate.

check-circle-line exclamation-circle-line close-line
Scroll to top icon