Controlli preflight

I controlli preflight sono una misura preventiva per identificare i problemi prima di avviare un'operazione importante del cluster, come la creazione o l'upgrade dei cluster. Quando questi controlli vengono eseguiti automaticamente prima di un'operazione, non vengono apportate modifiche ai cluster, a meno che non vengano superati tutti i controlli preflight. Puoi anche eseguire controlli preflight on demand.

Questo documento descrive ogni controllo, in quali circostanze viene eseguito automaticamente, come e quando eseguirlo manualmente e come interpretare i risultati.

In GDCV per Bare Metal puoi eseguire controlli preflight per diverse situazioni:

  • GDCV per Bare Metal esegue controlli preflight quando crei o esegui l'upgrade di cluster e risorse del pool di nodi con bmctl. Se i controlli non vanno a buon fine, non vengono apportate modifiche. È anche possibile bypassare questi controlli o eseguirli esplicitamente.

  • GDCV per Bare Metal esegue anche controlli preflight interni quando un cluster di amministrazione o ibrido crea o aggiorna risorse Kubernetes sui cluster utente. I controlli vengono eseguiti prima che le modifiche vengano applicate ai cluster utente interessati. Se i controlli non vanno a buon fine, non vengono apportate modifiche.

PreflightCheck risorse personalizzate

Quando viene eseguito un controllo preflight, GDCV per Bare Metal crea una risorsa personalizzata PreflightCheck. Le risorse personalizzate PreflightCheck sono permanenti e forniscono un record delle attività e dei risultati dei controlli preflight.

Per recuperare PreflightCheck risorse personalizzate:

  1. Recupera un elenco dei controlli preflight eseguiti per un determinato cluster:

    kubectl get preflightchecks --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    Sostituisci quanto segue:

    • ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.
    • CLUSTER_NAMESPACE: lo spazio dei nomi del cluster.

    La risposta elenca le risorse per spazio dei nomi. Puoi eseguire kubectl get preflightchecks in tutti gli spazi dei nomi per un elenco completo. Per ogni risorsa, la risposta mostra l'età della risorsa e se i controlli preflight sono stati superati o meno. La seguente risposta di esempio mostra le risorse PreflightCheck per lo spazio dei nomi cluster-test-admin001.

    NAMESPACE              NAME                                PASS    AGE
    cluster-test-admin001   test-admin001                      true    52d
    cluster-test-admin001   test-admin001jkm4q                 true    52d
    cluster-test-admin001   test-admin001k79t7                 true    6d20h
    cluster-test-admin001   upgrade-cluster-20231106-222746    true    6d20h
    
  2. Recupera i dettagli per una risorsa personalizzata PreflightCheck specifica:

    kubectl describe preflightchecks --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    Sostituisci quanto segue:

    • ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.
    • CLUSTER_NAMESPACE: lo spazio dei nomi del cluster.

    La seguente risposta del comando di esempio mostra una risorsa PreflightCheck per un controllo preflight riuscito che è stato eseguito durante la creazione del cluster:

    Name:         create-cluster-20230922-175006
    Namespace:    cluster-test-user001
    Labels:       <none>
    Annotations:  <none>
    API Version:  baremetal.cluster.gke.io/v1
    Kind:         PreflightCheck
    Metadata:
      Creation Timestamp:  2023-09-22T17:50:11Z
      Generation:          1
      Resource Version:    6502800
      UID:                 917daf64-963d-44b4-a1f9-c54972a39191
    Spec:
      Check Image Version:  latest
      Config YAML:          ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-test-user
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: test-user001
      namespace: cluster-test-user001
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: 1.15.0
      gkeConnect:
        projectID: clusters-project
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 192.0.2.53
      ...
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-test-user001
    spec:
      clusterName: test-user001
      nodes:
      - address: 192.0.2.54
      ...
    Status:
      Checks:
        192.0.2.53:
          Job UID:  d0b5dc1f-9d39-4cc8-b3d2-0841212f7f8c
          Message:
          Pass:     true
        192.0.2.53-gcp:
          Job UID:  b4d96ce5-0d4e-4e3c-97db-6317e0c15fc8
          Message:
          Pass:     true
        192.0.2.54:
          Job UID:  b67cf195-3951-46ad-b91c-0d79025cfc0a
          Message:
          Pass:     true
        192.0.2.54-gcp:
          Job UID:  aed509e2-4bf7-44c4-bfa0-8147ef8ea74e
          Message:
          Pass:     true
        Gcp:
          Job UID:  ac479ac4-e1c4-4681-9f2b-5773069bf6ae
          Message:
          Pass:     true
        Node - Network:
          Job UID:  8a57c4ee-ad17-4560-8809-b117c871ad5d
          Message:
          Pass:     true
        Pod - Cidr:
          Message:
          Pass:     true
      Cluster Spec:
        Anthos Bare Metal Version:  1.15.0
        Bypass Preflight Check:     false
        Cluster Network:
          Bundled Ingress:  true
          Pods:
            Cidr Blocks:
              10.0.0.0/16
          Services:
            Cidr Blocks:
              10.96.0.0/20
      ...
      Completion Time:                 2023-09-22T17:51:22Z
      Conditions:
        Last Transition Time:  2023-10-02T23:59:06Z
        Observed Generation:   1
        Reason:                Reconciling
        Status:                True
        Type:                  Reconciling
      Node Pool Specs:
        node-pool-1:
          Cluster Name:  test-user001
          Nodes:
            Address:         192.0.2.54
        ...
      Pass:                  true
      Start Time:            2023-09-22T17:50:32Z
    Events:                  <none>
    

    Nella risorsa personalizzata PreflightCheck precedente, la sezione Status contiene le seguenti informazioni:

    • La sezione Checks elenca i singoli controlli preflight eseguiti e se sono stati superati o meno. In questo esempio, sono stati eseguiti i seguenti controlli:
      • 192.0.2.53 e 192.0.2.54: controlli dei nodi (configurazione del sistema operativo, risorse e impostazioni software) per le macchine con indirizzi IP 192.0.2.53 e 192.0.2.54.
      • 192.0.2.53-gpc e 192.0.2.54-gcp: controlli della connettività di Google Cloud (a Container Registry e accesso all'API di Google) per le macchine con indirizzi IP 192.0.2.53 e 192.0.2.54.
      • Gcp: controlli di connettività di Google Cloud per il cluster.
      • Node - Network: controlli di rete (connettività, operazione etcd, accesso VIP e associazione di porte) per il cluster.
      • Pod - Cidr: l'indirizzo IP del pod controlla la presenza di indirizzi sovrapposti per il cluster.
    • La sezione Cluster Spec mostra la configurazione del cluster.
    • Il campo Pass mostra true, a indicare che i controlli preflight sono stati superati collettivamente.

Log dei controlli preflight

Quando vengono eseguiti controlli preflight in seguito a un comando bmctl, ad esempio bmctl check preflight, GDCV per Bare Metal crea file di log. Ecco cosa viene generato e dove:

  • I log di controllo preflight vengono generati in una directory con il seguente pattern di denominazione preflight-TIMESTAMP.

  • Questa directory preflight viene creata nella directory log per il cluster nell'area di lavoro bmctl. Per impostazione predefinita, il percorso della directory log è bmctl-workspace/CLUSTER_NAME/log.

  • I log preflight sono costituiti dai seguenti file:

    • File di log per i controlli delle macchine dei nodi, uno per ciascun nodo cluster. Questi file di log vengono denominati utilizzando l'indirizzo IP del nodo. Ad esempio, un nome file potrebbe essere 192.0.2.53.

    • File di log per i controlli di accesso di Google Cloud, uno per ciascun nodo cluster. Questi file di log vengono denominati utilizzando l'indirizzo IP del nodo. Ad esempio, un nome file potrebbe essere 192.0.2.53-gcp.

    • File di log per i controlli di accesso al cluster Google Cloud, denominato gcp.

    • File di log per i controlli di rete dei nodi, denominato node-network.

Se un controllo preflight non va a buon fine, questi file di log possono aiutarti a identificare e risolvere il problema.

Controlli preflight per la creazione del cluster

Quando crei cluster, GDCV per Bare Metal esegue automaticamente i controlli preflight prima di apportare qualsiasi modifica.

Cosa viene controllato?

I controlli preflight per l'installazione controllano quanto segue:

  • Controlli delle macchine dei nodi:

    • Le macchine cluster utilizzano un sistema operativo supportato.

    • La versione del sistema operativo è supportata.

    • Il sistema operativo utilizza una versione del kernel supportata.

    • Per Ubuntu, lo standard UFW (Uncomplicated Firewall) è disabilitato.

    • Per Ubuntu, il gestore di pacchetti apt è utilizzabile e sono disponibili i pacchetti richiesti.

    • Per Red Hat Enterprise Linux, è possibile utilizzare il gestore di pacchetti dnf e sono disponibili i pacchetti richiesti.

    • Per Red Hat Enterprise Linux, Podman non è installato.

    • Le macchine nodo soddisfano i requisiti minimi di CPU.

    • Le macchine nodo soddisfano i requisiti minimi di memoria.

    • Le macchine nodo soddisfano i requisiti minimi di archiviazione su disco.

    • La sincronizzazione dell'ora è configurata sulle macchine nodo.

    • kubelet è attivo e in esecuzione sulle macchine nodo.

    • containerd è attivo e in esecuzione sulle macchine nodo.

    • La route predefinita per il routing dei pacchetti al gateway predefinito è presente in nodi.

    • Il DNS (Domain Name System) funziona correttamente. Se il cluster è configurato per l'esecuzione tramite un proxy, questo controllo viene ignorato.

    • I CIDR dei pod non si sovrappongono agli indirizzi IP delle macchine dei nodi.

    • Se il cluster è configurato per utilizzare un mirroring del registro, il mirroring del registro è raggiungibile.

  • Google Cloud controlla ogni nodo e cluster:

    • Container Registry, gcr.io, la connettività è verificata. Se il cluster è configurato per utilizzare un mirroring del registro, questo controllo viene ignorato.

    • Le API di Google sono raggiungibili.

  • Controlli di networking dei nodi (variano in base alla configurazione del bilanciamento del carico):

    • Il VIP del server API Kubernetes è accessibile.

    • I VIP del bilanciatore del carico sono accessibili.

    • I nodi possono comunicare sulle porte richieste.

    • È stato eseguito il provisioning dell'istanza di eventi etcd e i requisiti delle porte sono soddisfatti.

Una volta superati tutti i controlli, viene creato il cluster tramite GDCV per Bare Metal. Per ulteriori informazioni sui requisiti per la creazione dei cluster, consulta la panoramica dei prerequisiti di installazione.

Esegui controlli preflight on demand per la creazione del cluster

Puoi anche eseguire i controlli preflight in modo indipendente prima di creare un cluster. Questo può essere utile poiché le operazioni principali dei cluster, come la creazione del cluster, richiedono molto tempo. Identificare e risolvere i problemi separatamente prima di iniziare un'operazione importante del cluster può aiutarti con la pianificazione.

Cluster autogestiti

  • Il comando seguente convalida il file di configurazione del cluster specificato, ma non cerca di creare il cluster stesso:

    bmctl check config --cluster CLUSTER_NAME
    

    Sostituisci CLUSTER_NAME con il nome del cluster associato al file di configurazione che stai controllando.

  • Questo comando verifica se le macchine e la rete sono pronte per la creazione del cluster:

    bmctl check preflight --cluster CLUSTER_NAME
    

    Sostituisci CLUSTER_NAME con il nome del cluster che stai controllando.

Cluster utenti

  • Il comando seguente convalida il file di configurazione del cluster specificato, ma non prova a creare il cluster stesso:

    bmctl check config --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster utente che stai controllando.
    • ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione associato.
  • Il comando seguente verifica se le macchine e la rete sono pronte per la creazione del cluster:

    bmctl check preflight --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG
    

bmctl supporta l'utilizzo di --kubeconfig come alias per il flag --admin-kubeconfig.

Controlli preflight per gli upgrade dei cluster

Quando esegui l'upgrade dei cluster, GDCV per Bare Metal esegue automaticamente i controlli preflight prima di apportare eventuali modifiche.

Cosa viene controllato?

I controlli preflight per gli upgrade del cluster controllano quanto segue:

  • Controlli delle macchine dei nodi:

    • Le macchine cluster utilizzano un sistema operativo supportato.

    • La versione del sistema operativo è supportata.

    • Il sistema operativo utilizza una versione del kernel supportata.

    • Per Ubuntu, lo standard UFW (Uncomplicated Firewall) è disabilitato.

    • Le macchine nodo soddisfano i requisiti minimi di CPU.

    • Le macchine nodo hanno più del 20% delle risorse della CPU disponibili.

    • Le macchine nodo soddisfano i requisiti minimi di memoria.

    • Le macchine nodo soddisfano i requisiti minimi di archiviazione su disco.

    • La sincronizzazione dell'ora è configurata sulle macchine nodo.

    • La route predefinita per il routing dei pacchetti al gateway predefinito è presente in nodi.

    • Il DNS (Domain Name System) funziona correttamente. Se il cluster è configurato per l'esecuzione tramite un proxy, questo controllo viene ignorato.

    • Se il cluster è configurato per utilizzare un mirroring del registro, il mirroring del registro è raggiungibile.

    * Nessun nodo del piano di controllo o del bilanciatore del carico è in modalità di manutenzione. (Aggiunto in GDCV per Bare Metal versione 1.15.2.)

  • Google Cloud controlla ogni nodo e cluster:

    • Container Registry, gcr.io, la connettività è verificata. Se il cluster è configurato per utilizzare un mirroring del registro, questo controllo viene ignorato.

    • Le API di Google sono raggiungibili.

  • Controlli automatici:

    • kubelet è attivo e in esecuzione sulle macchine nodo.

    • containerd è attivo e in esecuzione sulle macchine nodo.

    • Lo stato dell'endpoint di integrità Container Network Interface (CNI) è integro.

    • I CIDR dei pod non si sovrappongono agli indirizzi IP delle macchine dei nodi.

  • Controlli di networking dei nodi (variano in base alla configurazione del bilanciamento del carico):

    • Il VIP del server API Kubernetes è accessibile.

    • I VIP del bilanciatore del carico sono accessibili.

    • I nodi possono comunicare sulle porte richieste.

    • È stato eseguito il provisioning dell'istanza di eventi etcd e i requisiti delle porte sono soddisfatti.

Una volta superati tutti i controlli, il GDCV per Bare Metal esegue l'upgrade del cluster. Per ulteriori informazioni sull'upgrade dei cluster, consulta le best practice per gli upgrade di cluster GDCV per Bare Metal e Ciclo di vita e fasi degli upgrade dei cluster.

Esegui controlli preflight on demand per gli upgrade del cluster

Il comando bmctl check preflight consente di eseguire un controllo preflight prima di eseguire l'upgrade del cluster. Puoi verificare se i cluster sono pronti per un upgrade eseguendo il seguente comando di controllo preflight prima di avviare l'upgrade:

  1. Aggiorna la versione del cluster (anthosBareMetalVersion) nel file di configurazione del cluster.

  2. Utilizza il comando seguente per verificare se i cluster sono pronti per un upgrade ed esegui un controllo preflight:

    bmctl check preflight --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster di cui eseguire l'upgrade.
    • ADMIN_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione.

    Quando crei il controllo preflight con questo comando per testare l'upgrade di un cluster, nel cluster di amministrazione viene creata una risorsa personalizzata PreflightCheck.

Controlli preflight interni su cluster esistenti

GDCV per Bare Metal esegue automaticamente controlli preflight interni quando applichi risorse Kubernetes a un cluster esistente. Se un controllo ha esito negativo, GDCV per Bare Metal non modifica nessuno dei nodi correlati, a meno che non aggiri esplicitamente i controlli.

Bypassa i controlli preflight durante l'applicazione delle risorse Kubernetes

Per ignorare i controlli preflight interni quando applichi risorse ai cluster esistenti, devi impostare il campo BypassPreflightCheck su true nel file di configurazione del cluster.

Ecco parte di un file di configurazione del cluster che mostra il campo bypassPreflightCheck impostato su true:

apiVersion: v1
kind: Namespace
metadata:
  name: cluster-user1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: user1
  namespace: cluster-user1
spec:
  type: user
  bypassPreflightCheck: true
  # Anthos cluster version.
  anthosBareMetalVersion: 1.15.11
...

Esegui gli ultimi controlli preflight e di integrità

Quando utilizzi bmctl per eseguire controlli preflight o di integrità, puoi aggiungere il flag --check-image-version latest al comando per eseguire i controlli dell'ultima versione della patch GDCV per Bare Metal. In questo modo puoi identificare i problemi noti senza dover prima creare o eseguire l'upgrade del cluster.

  • Per utilizzare l'elenco più recente dei controlli per determinare se le tue macchine e la tua rete sono pronte per la creazione del cluster:

    bmctl check preflight --cluster CLUSTER_NAME --check-image-version latest
    

    Sostituisci CLUSTER_NAME con il nome del cluster che stai controllando.

Puoi anche eseguire gli ultimi controlli di integrità di un cluster attivo per determinare se il cluster è integro.

  • Per eseguire i controlli di integrità più aggiornati su un cluster attivo:

    bmctl check cluster --cluster CLUSTER_NAME --check-image-version latest
    

    Sostituisci CLUSTER_NAME con il nome del cluster che stai controllando.

Ignorare i risultati dei controlli preflight automatici

Se esegui controlli preflight on demand prima di creare o eseguire l'upgrade dei cluster, puoi bypassare i controlli preflight automatici. Per bypassare i controlli preflight automatici, utilizza il flag --force facoltativo quando esegui bmctl create cluster o bmctl upgrade cluster.

Passaggi successivi