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.
kubectl
Per pulire lo stato di kubectl
eliminando alcuni o tutti i relativi utenti, contesti e cluster:
Aprire il file ~/.kube/config
.
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
.
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
.
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
.
Se nei file config
il contesto corrente è indicato come cluster eliminato, annullare l'impostazione del contesto:
kubectl config unset current-context
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.
grafana.secret.*
dal file di configurazione generato.Creare un segreto manualmente.
kubectl create secret generic grafana -n tanzu-system-dashboards --from-literal=admin=admin
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
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:
|
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. |
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.
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
.
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
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
Accedere al cluster ed eliminare le macchine worker:
kubectl delete machine worker1 worker2
Da vCenter, spegnere ed eliminare le macchine virtuali del nodo worker.
Modificare le macchine del piano di controllo e rimuovere il collegamento del finalizzatore:
finalizers:
- machine.cluster.x-k8s.io
Eliminare le macchine del piano di controllo:
kubectl delete machine controlplane1 controlplane2
Da vCenter, spegnere ed eliminare le macchine virtuali del piano di controllo
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:
ip link
e confrontare i valori MTU dell'interfaccia eth0
. Se non corrispondono, è presente questo problema.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
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.
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.
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.
Assicurarsi di configurare le stesse impostazioni MTU per tutti i nodi di un cluster.
Le impostazioni del firewall di rete devono consentire l'uso di pacchetti delle dimensioni di MTU configurate.