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. Ulteriori soluzioni per i problemi noti di questa versione sono disponibili nelle Note di rilascio o negli articoli della Knowledge Base di VMware.
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 o versioni successive 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.
StorageClass
predefinito causa un errore di riconciliazione nei cluster del carico di lavoroProblema
La modifica delle proprietà di un oggetto StorageClass
predefinito incluso in TKG causa un errore di riconciliazione dei pacchetti nei cluster del carico di lavoro che utilizzano la classe di storage.
Soluzione:
per personalizzare una classe di storage, creare una nuova definizione di StorageClass
con un name
diverso anziché modificare la definizione dell'oggetto predefinita e riconfigurare il cluster in modo che utilizzi la nuova classe di storage.
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.
Problema
Se si utilizza NSX Advanced Load Balancer per i carichi di lavoro (AVI_ENABLE
) o il piano di controllo (AVI_CONTROL_PLANE_HA_PROVIDER
), è possibile che il controller Avi non riesca a distinguere i cluster con nome identico.
Soluzione:
impostare un valore CLUSTER_NAME
univoco per ogni cluster. non creare più cluster del carico di lavoro che hanno lo stesso CLUSTER_NAME
e si trovano anche nello stesso spazio dei nomi del cluster di gestione, come specificato dal valore NAMESPACE
.
Problema
In Azure vSphere Solution (AVS), è possibile che l'eliminazione dei volumi persistenti di vSphere CSI non riesca. L'eliminazione di un volume persistente richiede l'autorizzazione cns.searchable
. L'account amministratore predefinito per AVS, <[email protected]>
, non viene creato con questa autorizzazione. Per ulteriori informazioni, vedere Ruoli e privilegi di vSphere.
Soluzione
per eliminare un volume persistente di vSphere CSI in AVS, contattare l'assistenza di Azure.
Problema
I comandi tanzu cluster delete
e tanzu management-cluster delete
possono bloccarsi nei cluster che utilizzano risorse di rete create da AWS Cloud Controller Manager indipendentemente dal processo di distribuzione di Tanzu Kubernetes Grid. Tali risorse possono includere bilanciamenti del carico e altri servizi di rete, come indicato in Controller del servizio nella documentazione del provider di cloud AWS Kubernetes.
Per ulteriori informazioni, vedere il problema di Cluster API Drain workload clusters of service Type=Loadbalancer on teardown.
Soluzione
utilizzare kubectl delete
per eliminare i servizi di tipo LoadBalancer
dal cluster. Se questa soluzione non funziona, utilizzare la console AWS per eliminare manualmente LoadBalancer
e SecurityGroup
creati per questo servizio da Cloud Controller Manager.
AttenzioneNon eliminare i bilanciamenti del carico o i gruppi di sicurezza gestiti da Tanzu in cui sono presenti i tag
key: sigs.k8s.io/cluster-api-proider-aws/cluster/CLUSTER-NAME
,value: owned
.
Problema
Con un cluster del carico di lavoro di Azure in un gruppo di risorse non gestito, quando il driver CSI di Azure crea un volume persistente che utilizza un account di storage con un endpoint privato, crea risorse privateEndpoint
e vNet
che non vengono eliminate quando il volume persistente viene eliminato. Di conseguenza, l'eliminazione del cluster non riesce e viene visualizzato un messaggio di errore simile a subnets failed to delete. err: failed to delete resource ... Subnet management-cluster-node-subnet is in use
.
Soluzione:
prima di eliminare il cluster di Azure, eliminare manualmente l'interfaccia di rete per l'endpoint privato dell'account di storage:
networkinterfaces
, selezionare la risorsa NIC che non viene eliminata correttamente.