Questa pagina mostra come risolvere i problemi relativi all'installazione o all'upgrade dei cluster Google Distributed Cloud.
Se hai bisogno di ulteriore aiuto, contatta l'assistenza clienti Google Cloud.Problemi di installazione
Le sezioni seguenti potrebbero aiutarti a risolvere i problemi di installazione di Google Distributed Cloud.
Messaggi di errore temporanei
Il processo di installazione per Google Distributed Cloud è un loop di riconciliazione continua. Di conseguenza, durante l'installazione potrebbero essere visualizzati messaggi di errore temporanei nel log.
Se l'installazione viene completata correttamente, questi errori possono essere ignorati senza problemi. Di seguito è riportato un elenco dei tipici messaggi di log degli errori temporanei:
Internal error occurred: failed calling webhook "webhook.cert-manager.io": Post
https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s:
dial tcp IP_ADDRESS:443: connect: connection refused
Internal error occurred: failed calling webhook "vcluster.kb.io": Post
https://webhook-service.kube-system.svc:443/validate-baremetal-cluster-gke-io-v1-cluster?timeout=30s:
dial tcp IP_ADDRESS:443: connect: connection refused
Failed to register cluster with GKE Hub; gcloud output: error running command
'gcloud container fleet memberships register CLUSTER_NAME --verbosity=error --quiet':
error: exit status 1, stderr: 'ERROR: (gcloud.container.hub.memberships.register)
Failed to check if the user is a cluster-admin: Unable to connect to the server: EOF
Get
https://127.0.0.1:34483/apis/infrastructure.baremetal.cluster.gke.io/v1/namespaces/cluster-
cluster1/baremetalmachines: dial tcp 127.0.0.1:34483: connect: connection refused"
Create Kind Cluster "msg"="apply run failed" "error"="unable to recognize \"/tmp/kout088683152\": no matches for kind \"NetworkLogging\" in version \"networking.gke.io/v1alpha1\""
Create Kind Cluster "msg"="apply run failed" "error"="unable to recognize \"/tmp/kout869681888\": no matches for kind \"Provider\" in version \"clusterctl.cluster.x-k8s.io/v1alpha3\""
Se la chiave dell'account di servizio Google Cloud è scaduta, vengono visualizzati i seguenti
messaggi di errore da bmctl
:
Error validating cluster config: 3 errors occurred:
* GKEConnect check failed: Get https://gkehub.googleapis.com/v1beta1/projects/project/locations/global/memberships/admin: oauth2: cannot fetch token: 400 Bad Request
Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
* ClusterOperations check failed: Post https://cloudresourcemanager.googleapis.com/v1/projects/project:testIamPermissions?alt=json&prettyPrint=false: oauth2: cannot fetch token: 400 Bad Request
Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
* GCR pull permission for bucket: artifacts.anthos-baremetal-release.appspot.com failed: Get https://storage.googleapis.com/storage/v1/b/artifacts.anthos-baremetal-release.appspot.com/iam/testPermissions?alt=json&permissions=storage.objects.get&permissions=storage.objects.list&prettyPrint=false: oauth2: cannot fetch token: 400 Bad Request
Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
Devi generare una nuova chiave dell'account di servizio.
Usa il cluster di bootstrap per eseguire il debug dei problemi
Quando Google Distributed Cloud crea cluster autogestiti (admin, ibridi o autonomi), esegue il deployment di un cluster Kubernetes in Docker (kind) per ospitare temporaneamente i controller Kubernetes necessari per creare i cluster. Questo cluster temporaneo è chiamato cluster di bootstrap. La creazione e l'upgrade dei cluster utente vengono eseguiti dal gestore del cluster di amministrazione o ibrido senza utilizzare un cluster di bootstrap.
Se nel deployment esiste già un cluster di tipo esistente quando tenti di installarlo, Google Distributed Cloud elimina il cluster di tipo esistente. L'eliminazione avviene solo dopo che l'installazione o l'upgrade sono riusciti.
Per conservare il cluster di tipo esistente anche dopo l'esito positivo, utilizza il flag --keep-bootstrap-cluster
di bmctl
.
Google Distributed Cloud crea un file di configurazione per il cluster di bootstrap in WORKSPACE_DIR/.kindkubeconfig
. Puoi connetterti al cluster di bootstrap solo durante la creazione e l'upgrade del cluster.
Il cluster di bootstrap deve accedere a un repository Docker per eseguire il pull delle immagini. Il registro è impostato in modo predefinito su Container Registry, a meno che tu non stia utilizzando un registro privato. Durante la creazione del cluster,bmctl
crea i seguenti file:
bmctl-workspace/config.json
: contiene le credenziali dell'account di servizio Google Cloud per l'accesso al registro. Le credenziali vengono ottenute dal campogcrKeyPath
nel file di configurazione del cluster.bmctl-workspace/config.toml
: contiene la configurazione containerd nel cluster type.
Esamina i log del cluster di bootstrap
Per eseguire il debug del cluster di bootstrap puoi seguire questi passaggi:
- Connettiti al cluster di bootstrap durante la creazione e l'upgrade del cluster.
- Recupera i log del cluster di bootstrap.
Puoi trovare i log della macchina che utilizzi per eseguire bmctl
nelle seguenti cartelle:
bmctl-workspace/CLUSTER_NAME/log/create-cluster-TIMESTAMP/bootstrap-cluster/
bmctl-workspace/CLUSTER_NAME/log/upgrade-cluster-TIMESTAMP/bootstrap-cluster/
Sostituisci CLUSTER_NAME
e TIMESTAMP
con il nome del cluster e l'ora del sistema corrispondente.
Per ottenere i log direttamente dal cluster di bootstrap, puoi eseguire questo comando durante la creazione e l'upgrade del cluster:
docker exec -it bmctl-control-plane bash
Il comando apre un terminale all'interno del container del piano di controllo bmctl che viene eseguito nel cluster di bootstrap.
Per esaminare i log kubelet
e containerd
, utilizza i comandi seguenti e cerca errori o avvisi nell'output:
journalctl -u kubelet
journalctl -u containerd
Problemi di upgrade del cluster
Quando esegui l'upgrade dei cluster Google Distributed Cloud, puoi monitorare l'avanzamento e controllare lo stato di cluster e nodi.
- Se riscontri problemi durante un upgrade, prova a determinare in quale fase si verifica l'errore. Per saperne di più su cosa succede a un cluster durante il processo di upgrade, consulta Ciclo di vita e fasi degli upgrade dei cluster.
- Per ulteriori informazioni sull'impatto di un problema durante gli upgrade del cluster, vedi Comprendere l'impatto degli errori in Google Distributed Cloud.
Le indicazioni riportate di seguito possono aiutarti a determinare se l'upgrade continua come di consueto o se si sono verificati problemi.
Monitorare l'avanzamento dell'upgrade
Utilizza il comando kubectl describe cluster
per visualizzare lo stato di un cluster durante il processo di upgrade:
kubectl describe cluster CLUSTER_NAME \
--namespace CLUSTER_NAMESPACE \
--kubeconfig ADMIN_KUBECONFIG
Sostituisci i seguenti valori:
CLUSTER_NAME
: il nome del cluster.CLUSTER_NAMESPACE
: lo spazio dei nomi del cluster.ADMIN_KUBECONFIG
: il file kubeconfig dell'amministratore.- Per impostazione predefinita, i cluster di amministrazione, ibridi e autonomi utilizzano un upgrade in loco.
Se utilizzi il flag
--use-bootstrap=true
con il comandobmctl upgrade
, l'operazione di upgrade utilizza un cluster di bootstrap. Per monitorare l'avanzamento dell'upgrade quando viene utilizzato un cluster di bootstrap, specifica il percorso del file kubeconfig del cluster di bootstrap,.kindkubeconfig
. Questo file si trova nella directory dell'area di lavoro.
- Per impostazione predefinita, i cluster di amministrazione, ibridi e autonomi utilizzano un upgrade in loco.
Se utilizzi il flag
Osserva la sezione Status
dell'output, che mostra un'aggregazione dello stato di upgrade del cluster. Se il cluster segnala un errore, utilizza le seguenti
sezioni per individuare dove si trova il problema.
Controlla se i nodi sono pronti
Utilizza il comando kubectl get nodes
per visualizzare lo stato dei nodi in un cluster durante il processo di upgrade:
kubectl get nodes --kubeconfig KUBECONFIG
Per verificare se un nodo ha completato correttamente il processo di upgrade, controlla le colonne VERSION
e AGE
nella risposta al comando. VERSION
è la versione Kubernetes per il cluster. Per visualizzare la versione di Kubernetes per una determinata
versione di Google Distributed Cloud, consulta Cronologia delle versioni.
Se il nodo mostra NOT READY
, prova a connetterlo e controlla lo stato del kubelet:
systemctl status kubelet
Puoi anche esaminare i log kubelet:
journalctl -u kubelet
Esamina l'output dello stato del kubelet e i log dei messaggi che indicano il motivo per cui il nodo ha un problema.
Controlla quale nodo è in fase di upgrade
Per verificare quale nodo nel cluster è in fase di upgrade, utilizza il comando kubectl get baremetalmachines
:
kubectl get baremetalmachines --namespace CLUSTER_NAMESPACE \
--kubeconfig ADMIN_KUBECONFIG
Sostituisci i seguenti valori:
CLUSTER_NAMESPACE
: lo spazio dei nomi del cluster.ADMIN_KUBECONFIG
: il file kubeconfig dell'amministratore.- Se viene utilizzato un cluster di bootstrap per un upgrade amministrativo, ibrido o autonomo,
specifica il file kubeconfig del cluster di bootstrap
(
bmctl-workspace/.kindkubeconfig
).
- Se viene utilizzato un cluster di bootstrap per un upgrade amministrativo, ibrido o autonomo,
specifica il file kubeconfig del cluster di bootstrap
(
L'output di esempio seguente mostra che il nodo di cui è in corso l'upgrade ha un
ABM VERSION
diverso da DESIRED ABM VERSION
:
NAME CLUSTER READY INSTANCEID MACHINE ABM VERSION DESIRED ABM VERSION
10.200.0.2 cluster1 true baremetal://10.200.0.2 10.200.0.2 1.13.0 1.14.0
10.200.0.3 cluster1 true baremetal://10.200.0.3 10.200.0.3 1.13.0 1.13.0
Controlla quali nodi sono in fase di svuotamento
Durante il processo di upgrade, i nodi vengono svuotati dai pod e la pianificazione viene disabilitata fino a quando l'upgrade del nodo non viene completato. Per vedere quali nodi vengono
svuotati, utilizza il comando kubectl get nodes
:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG | grep "SchedulingDisabled"
Sostituisci USER_CLUSTER_KUBECONFIG
con il percorso del file kubeconfig del cluster utente.
La colonna STATUS
viene filtrata utilizzando grep
per mostrare solo i nodi che segnalano
SchedulingDisabled
. Questo stato indica che i nodi sono in fase di svuotamento.
Puoi anche controllare lo stato del nodo dal cluster di amministrazione:
kubectl get baremetalmachines -n CLUSTER_NAMESPACE \
--kubeconfig ADMIN_KUBECONFIG
Sostituisci i seguenti valori:
CLUSTER_NAMESPACE
: lo spazio dei nomi del cluster.ADMIN_KUBECONFIG
: il file kubeconfig dell'amministratore.- Se viene utilizzato un cluster di bootstrap per un upgrade amministrativo, ibrido o autonomo,
specifica il file kubeconfig del cluster di bootstrap
(
bmctl-workspace/.kindkubeconfig
).
- Se viene utilizzato un cluster di bootstrap per un upgrade amministrativo, ibrido o autonomo,
specifica il file kubeconfig del cluster di bootstrap
(
Il nodo che viene svuotato mostra lo stato nella colonna MAINTENANCE
.
Controlla perché un nodo è in stato di svuotamento per molto tempo
Utilizza uno dei metodi nella sezione precedente per identificare il nodo che viene
svuotato mediante il comando kubectl get nodes
. Utilizza il comando kubectl get
pods
e filtra in base a questo nome del nodo per visualizzare ulteriori dettagli:
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=NODE_NAME
Sostituisci NODE_NAME
con il nome del nodo da svuotare. L'output restituisce un elenco di pod bloccati o lenti a svuotarsi. L'upgrade continua, anche con i pod bloccati, quando il processo di svuotamento su un nodo richiede più di 20 minuti.
A partire dalla release 1.29, il processo di svuotamento dei nodi utilizza l'API di rimozione, che rispetta i PodDisruptionBudgets
(PDB).
Le seguenti impostazioni PDB possono causare problemi di svuotamento dei nodi:
Pod gestiti da più PDB
Configurazioni statiche PDB come le seguenti:
maxUnavailable
==0
minUnavailable
>= repliche totali
Il conteggio totale delle repliche è difficile da determinare dalla risorsa PDB, perché è definito in una risorsa di livello superiore, ad esempio
Deployment
,ReplicaSet
oStatefulSet
. I PDB corrispondono ai pod solo in base al selettore nella loro configurazione. Un approccio efficace per diagnosticare se una configurazione PDB statica sta causando un problema è verificare sepdb.Status.ExpectPods
<=pdb.Status.DesiredHealthy
per prima cosa e verificare se una delle configurazioni statiche menzionate lo consente.
Anche le violazioni del runtime, ad esempio il valore DisruptionsAllowed
calcolato per una risorsa PDB che è 0
, possono bloccare lo svuotamento dei nodi. Se hai configurato PodDisruptionBudget
oggetti che non sono in grado di consentire ulteriori interruzioni, gli upgrade dei nodi potrebbero non riuscire a eseguire l'upgrade alla versione del piano di controllo dopo ripetuti tentativi. Per evitare questo errore, ti consigliamo di fare lo scale up di Deployment
o HorizontalPodAutoscaler
per consentire lo svuotamento del nodo pur rispettando la configurazione di PodDisruptionBudget
.
Per visualizzare tutti gli oggetti PodDisruptionBudget
che non consentono interruzioni, utilizza
il seguente comando:
kubectl get poddisruptionbudget --all-namespaces \
-o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}'
Verifica perché i pod sono in stato non integro
Gli upgrade possono non riuscire se un pod contiene indirizzi IP del piano di controllo upgrade-first-node
o upgrade-node
. In genere questo comportamento è dovuto al fatto
che i pod statici non sono integri.
Controlla i pod statici con il comando
crictl ps -a
e cerca eventuali pod Kubernetes oetcd
con arresto anomalo. Se sono presenti pod con errori, esamina i log dei pod per capire perché si arrestano in modo anomalo.Ecco alcune possibilità per il comportamento di CrashLoop:
- Le autorizzazioni o il proprietario dei file montati nei pod statici non sono corretti.
- La connettività all'indirizzo IP virtuale non funziona.
- Problemi con
etcd
.
Se il comando
crictl ps
non funziona o non restituisce nulla, controlla gli statikubelet
econtainerd
. Utilizza i comandisystemctl status SERVICE
ejournalctl -u SERVICE
per esaminare i log.
Passaggi successivi
- Se hai bisogno di ulteriore aiuto, contatta l'assistenza clienti Google Cloud.