Crea un cluster di amministrazione utilizzando Terraform

Utilizza Terraform per creare un cluster di amministrazione per il software Google Distributed Cloud solo per VMware se utilizzi già Terraform per gestire le risorse VMware on-premise . Google Cloud Puoi anche creare un cluster di amministrazione utilizzando gkectl o Google Cloud console.

Prima di iniziare

  • Assicurati di aver configurato la workstation di amministrazione e di poter accedere come descritto in Creare una workstation di amministrazione.

  • Assicurati che i file della chiave JSON per gli account di servizio si trovino sulla workstation di amministrazione.

  • Consulta il documento di pianificazione degli indirizzi IP. Assicurati di avere a disposizione un numero sufficiente di indirizzi IP per i tre nodi del control plane e un VIP del control plane. Se prevedi di creare cluster utente kubeception, devi avere a disposizione un numero sufficiente di indirizzi IP per i nodi del control plane di questi cluster utente.

  • Consulta la panoramica del bilanciamento del carico e rivedi la tua decisione sul tipo di bilanciatore del carico che vuoi utilizzare. Per i bilanciatori del carico manuali, devi configurare il bilanciatore del carico prima di creare il cluster di amministrazione.

  • Se utilizzi gkectl per creare il cluster di amministrazione, decidi se vuoi utilizzare un registro pubblico o privato per i componenti di Google Distributed Cloud. Per informazioni sull'utilizzo di un registro Docker privato, consulta privateRegistry. Né Terraform né la Google Cloud console supportano l'utilizzo di un registro Docker privato per i componenti di sistema.

  • Decidi il tipo di sistema operativo che vuoi eseguire sui nodi del cluster di amministrazione.

  • Se la tua organizzazione richiede che il traffico in uscita passi attraverso un proxy server, assicurati di inserire nella lista consentita le API richieste e l'indirizzo di Artifact Registry.

  • Nella versione 1.29 e successive, i controlli preflight lato server sono abilitati per impostazione predefinita. I controlli preflight lato server richiedono regole firewall aggiuntive. In Regole firewall per i cluster di amministrazione, cerca "Controlli preflight" e assicurati che tutte le regole firewall richieste siano configurate. I controlli preflight lato server vengono eseguiti sul cluster di bootstrap anziché localmente sulla workstation di amministrazione.

Panoramica della procedura

Prima di creare il cluster di amministrazione, devi eseguire il comando gkectl register bootstrap sulla workstation di amministrazione. Questo comando esegue il deployment di un cluster Kubernetes in Docker (kind) sulla workstation di amministrazione. Questo cluster di bootstrap ospita i controller Kubernetes necessari per creare il cluster di amministrazione. Quando crei il cluster di amministrazione, i controller sul cluster di bootstrap eseguono il provisioning dei nodi, eseguono i controlli preflight e registrano il cluster di amministrazione nel parco dispositivi. Il cluster di bootstrap viene eliminato automaticamente dopo la creazione del cluster di amministrazione.

Di seguito sono riportati i passaggi di alto livello per la creazione di un cluster di amministrazione utilizzando Terraform:

  1. Compila il file di configurazione. Utilizza la google_gkeonprem_vmware_admin_cluster e l'esempio seguente per creare il file di configurazione main.tf.

  2. Crea un cluster di bootstrap. Esegui gkectl register bootstrap per creare il cluster di bootstrap. Al termine della creazione del cluster di bootstrap, l'output ti informa che devi completare la configurazione del cluster di amministrazione. Il processo continua fino alla creazione del cluster di amministrazione.

  3. Crea un cluster di amministrazione. In un'altra finestra del terminale o su un altro computer che ha accesso all'API GKE On-Prem, esegui i comandi terraform per creare un nuovo cluster di amministrazione come specificato nel file di configurazione main.tf completato.

Compila il file di configurazione

L'esempio seguente mostra la creazione di un cluster di amministrazione ad alta disponibilità (HA) con tre nodi del control plane con MetalLB. Nella versione 1.28 e successive, i nuovi cluster di amministrazione devono essere ad alta disponibilità. A causa di questo requisito, devi impostare control_plane_node.replicas su 3.

Per ulteriori informazioni e altri esempi, consulta la google_gkeonprem_vmware_admin_cluster documentazione di riferimento. Per informazioni sull'utilizzo di un registro privato per le immagini di sistema, consulta Configurare un registro container privato.

Compila le variabili segnaposto nell'esempio seguente, quindi copialo e incollalo in main.tf. Se hai utilizzato gkeadm per creare la workstation di amministrazione, apri il file di configurazione della workstation di amministrazione in modo da poter copiare i valori dalla sezione vCenter nelle variabili segnaposto corrispondenti.

resource "google_gkeonprem_vmware_admin_cluster" "admin-cluster-metallb" {
  provider = google-beta
  name = "ADMIN_CLUSTER_NAME"
  project = "PROJECT_ID"
  location = "REGION"
  description = "DESCRIPTION"
  bootstrap_cluster_membership = "projects/PROJECT_ID/locations/REGION/memberships/bootstrap-ADMIN_CLUSTER_NAME"
  on_prem_version = "VERSION"
  image_type = "IMAGE_TYPE"
  vcenter {
    address = "VCENTER_ADDRESS"
    datacenter = "DATA_CENTER"
    cluster = "VCENTER_CLUSTER"
    resource_pool = "RESOURCE_POOL"
    datastore = "DATASTORE"
    ca_cert_data = "CA_CERT_DATA"
  }
  network_config {
    service_address_cidr_blocks = ["10.96.232.0/24"]
    pod_address_cidr_blocks = ["192.168.0.0/16"]
    vcenter_network = "NETWORK"
    dhcp_ip_config {
      enabled = true
    }
    host_config {
      dns_servers = ["DNS_SERVERS"]
      ntp_servers = ["NTP_SERVERS"]
    }
    ha_control_plane_config {
      control_plane_ip_block {
        gateway = "GATEWAY"
        netmask = "NETMASK"
        ips {
          hostname = "CONTROL_PLANE_HOST_1"
          ip       = "CONTROL_PLANE_NODE_IP_1"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_2"
          ip       = "CONTROL_PLANE_NODE_IP_2"
        }
        ips {
          hostname = "CONTROL_PLANE_HOST_3"
          ip       = "CONTROL_PLANE_NODE_IP_3"
        }
      }
    }
  }
  control_plane_node {
     cpus = NUM_CPUS
     memory = MEMORY
     replicas = 3
  }
  load_balancer {
    vip_config {
      control_plane_vip = "CONTROL_PLANE_VIP"
    }
    metal_lb_config {
      enabled = true
    }
  }
}

Sostituisci quanto segue:

  • ADMIN_CLUSTER_NAME: il nome del cluster di amministrazione. La lunghezza massima del nome è di 20 caratteri.

  • PROJECT_ID: l' Google Cloud ID progetto.

  • REGION: la Google Cloud regione in cui vengono eseguite la GKE On-Prem API (gkeonprem.googleapis.com), il servizio Fleet (gkehub.googleapis.com) e il servizio Connect (gkeconnect.googleapis.com). Specifica us-west1 o un'altra regione supportata.

    Il campo location corrisponde al flag --location nel comando gkectl register bootstrap.

  • DESCRIPTION: una descrizione del cluster di amministrazione.

  • VERSION: la versione di Google Distributed Cloud per il cluster. La creazione di un cluster utilizzando Terraform è supportata solo nelle versioni 1.28 e successive. La versione specificata qui deve corrispondere alla versione del bundle specificata nel flag --bundle-path nel comando gkectl register bootstrap. Per un elenco delle versioni, consulta Versioni di Google Distributed Cloud.

  • IMAGE_TYPE: il tipo di immagine del sistema operativo da eseguire sui nodi del cluster di amministrazione. Specifica uno dei seguenti valori: "ubuntu_containerd", "cos", "ubuntu_cgv2" o "cos_cgv2".

  • VCENTER_ADDRESS: l' indirizzo del server vCenter.

    • File di configurazione della workstation di amministrazione: utilizza il valore del vCenter.credentials.address campo.

    • Il campo vcenter.address corrisponde al flag --vcenter-address nel comando gkectl register bootstrap.

  • DATA_CENTER: il nome del tuo data center vCenter.

    • File di configurazione della workstation di amministrazione: utilizza il valore del campo vCenter.datacenter.

    • Il campo vcenter.datacenter corrisponde al flag --vcenter-datacenter nel comando gkectl register bootstrap.

  • VCENTER_CLUSTER: il nome del tuo cluster vCenter.

    • File di configurazione della workstation di amministrazione: utilizza il valore del campo vCenter.cluster.

    • Il campo vcenter.cluster corrisponde al flag --vcenter-cluster nel comando gkectl register bootstrap.

  • RESOURCE_POOL: il nome o il percorso del pool di risorse vCenter .

    • File di configurazione della workstation di amministrazione: utilizza il valore del campo vCenter.resourcePool.

    • Il campo vcenter.resource_pool corrisponde al flag --vcenter-resource-pool nel comando gkectl register bootstrap.

  • DATASTORE: il nome del datastore vCenter. Il valore specificato deve essere un nome, non un percorso. Se devi inserire un percorso, aggiungi il seguente campo: folder = "FOLDER"

    • File di configurazione della workstation di amministrazione: utilizza il valore del campo vCenter.datastore.

    • Il campo vcenter.datastore corrisponde al flag --vcenter-datastore nel comando gkectl register bootstrap.

    Se vuoi utilizzare una policy di archiviazione VM per i nodi del cluster, rimuovi il campo vcenter.datastore e aggiungi vcenter.storage_policy_name invece. Inoltre, aggiungi il flag --vcenter-storage-policy al comando gkectl register bootstrap. Devi specificare un valore per vcenter.datastore o vcenter.storage_policy_name, ma non per entrambi.

  • FOLDER: il nome della cartella vCenter in cui si troveranno le VM del cluster. Se non utilizzi una cartella, rimuovi questo campo.

    • File di configurazione della workstation di amministrazione: utilizza il valore del campo vCenter.folder.

    • Il campo vcenter.folder corrisponde al flag --vcenter-folder nel comando gkectl register bootstrap.

  • CA_CERT_DATA: il certificato CA vCenter in formato PEM, ma con tutti i ritorni a capo sostituiti dalla stringa \n.

    1. Esegui il comando seguente per sostituire i ritorni a capo con \n:

      awk 'ORS="\\n" {print}' CA_CERT_PATH_LOCAL
      

      Sostituisci CA_CERT_PATH_LOCAL con il percorso del certificato CA radice per il tuo server vCenter. Se hai utilizzato gkeadm per creare la workstation di amministrazione, puoi utilizzare il valore del campo caCertPath nel file di configurazione della workstation di amministrazione, ovvero il percorso sul computer locale. gkeadm ha copiato il file del certificato CA nella workstation di amministrazione. Devi specificare il percorso della workstation di amministrazione nel flag --vcenter-ca-cert-path nel comando gkectl register bootstrap.

    2. Copia l'output del comando precedente e incollalo nella variabile segnaposto CA_CERT_DATA.

  • NETWORK: il nome della rete vCenter.

    • File di configurazione della workstation di amministrazione: utilizza il valore del campo vCenter.network.

    • Il campo network_config.vcenter_network corrisponde al flag --vcenter-network nel comando gkectl register bootstrap.

  • GATEWAY: l'indirizzo IP del gateway predefinito per la subnet che contiene i nodi del cluster del control plane.

  • NETMASK: la maschera di rete per la subnet che contiene i nodi del cluster del control plane.

  • DNS_SERVERS: l'indirizzo IP del server DNS.

  • NTP_SERVERS: l'indirizzo IP del server NTP (Network Time Protocol).

  • Inserisci gli indirizzi IP e, facoltativamente, il nome host per i tre nodi del control plane nella sezione control_plane_ip_block.ips. Se non inserisci un nome host, rimuovi i campi hostname dalla configurazione.

  • NUM_CPUS : il numero di vCPU per ogni nodo del control plane nel cluster di amministrazione. Il valore minimo è 4.

  • MEMORY: il numero di mebibyte di memoria per ogni nodo del control plane nel cluster di amministrazione. Il valore minimo è 8192, ma consigliamo 16384.

  • CONTROL_PLANE_VIP: l'indirizzo IP che hai scelto di configurare sul bilanciatore del carico per il server API Kubernetes del cluster di amministrazione.

(Facoltativo) Configura un registro privato

Per impostazione predefinita, durante la creazione o l'upgrade del cluster, Google Distributed Cloud estrae le immagini di sistema da gcr.io/gke-on-prem-release utilizzando l' account di servizio di accesso ai componenti. Facoltativamente, puoi fornire il tuo server di registro container in modo che le immagini di sistema vengano estratte dal tuo server di registro privato.

Per configurare un registro privato:

  1. Aggiungi quanto segue al file di configurazione del cluster di amministrazione:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    Sostituisci quanto segue:

    • ADDRESS: l'indirizzo IP o il nome di dominio completo (FQDN) della macchina che esegue il registro privato.

    • CA_CERT: i dati del certificato CA della chiave pubblica, ma con tutti i ritorni a capo sostituiti dalla stringa \n.

    1. Esegui il comando seguente per sostituire i ritorni a capo con \n:

      awk 'ORS="\\n" {print}' PUBLIC_KEY_PATH
      

      Sostituisci PUBLIC_KEY_PATH con il percorso della chiave pubblica.

    2. Copia l'output del comando precedente e incollalo nella variabile segnaposto CA_CERT.

  2. Se la tua rete si trova dietro un server proxy, aggiungi quanto segue:

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    Sostituisci quanto segue:

    • PROXY_SERVER_ADDRESS: l'indirizzo HTTP del server proxy. Includi il numero di porta anche se è lo stesso della porta predefinita dello schema.

    • BYPASS_LIST: un elenco separato da virgole di indirizzi IP, intervalli di indirizzi IP, nomi host e nomi di dominio che non devono passare attraverso il server proxy.

    Esempio:

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    Quando Google Distributed Cloud invia una richiesta a uno di questi indirizzi, host o domini, la richiesta bypassa il server proxy e viene inviata direttamente alla destinazione.

Per ulteriori informazioni sull'utilizzo di un registro privato, incluse le differenze tra i cluster normali e i cluster avanzati, consulta Configurare un registro container privato.

Verifica il file di configurazione e il piano

Nella directory in cui si trova main.tf, esegui i seguenti comandi:

  1. Inizializza Terraform:

    terraform init
    

    Terraform installa tutte le librerie necessarie, come il Google Cloud provider. Se necessario, correggi eventuali errori in maint.tf.

  2. Crea il piano Terraform:

    terraform plan -out tfplan
    

    Esamina la configurazione e apporta le modifiche necessarie.

Prima di applicare il piano, devi prima creare il cluster di bootstrap come descritto nella sezione successiva.

Crea il cluster di bootstrap

Quando esegui il comando gkectl register bootstrap, ti viene chiesto il nome utente e la password dell'account vCenter. Assicurati di avere le credenziali a portata di mano. Se hai utilizzato gkeadm per creare la workstation di amministrazione, il nome utente e la password si trovano nel file credential.yaml.

  1. Accedi alla workstation di amministrazione tramite SSH.

  2. Esegui l'autenticazione con Google Cloud CLI:

    gcloud auth login
    
  3. Esegui il comando seguente per creare il cluster di bootstrap. Molti dei valori dei flag sono gli stessi dei campi main.tf. Tieni presente, tuttavia, che il comando accetta valori aggiuntivi che devi specificare nelle variabili segnaposto fornite.

    gkectl register bootstrap \
        --target-cluster-name=ADMIN_CLUSTER_NAME \
        --project-id=PROJECT_ID \
        --location=REGION \
        --vcenter-address=VCENTER_ADDRESS \
        --vcenter-datacenter=DATA_CENTER \
        --vcenter-cluster=VCENTER_CLUSTER \
        --vcenter-resource-pool=RESOURCE_POOL \
        --vcenter-datastore=DATASTORE \
        --vcenter-network=NETWORK \
        --vcenter-ca-cert-path=CA_CERT_PATH \
        --bundle-path=BUNDLE_PATH \
        --component-access-service-account-key-path=COMPONENT_ACCESS_SA_PATH \
        --register-service-account-key-path=CONNECT_REGISTER_SA_PATH \
        --stackdriver-service-account-key-path=LOG_MON_SA_PATH \
        --cloud-audit-logging-service-account-key-path=CLOUD_AUDIT_SA_PATH \
        --admin-kubeconfig-out=KUBECONFIG_NAME
    

    Sostituisci quanto segue con i percorsi della workstation di amministrazione:

    • CA_CERT_PATH: il percorso del certificato CA radice per il server vCenter.
    • BUNDLE_PATH: il percorso del file del bundle. Se hai utilizzato gkeadm per creare la workstation di amministrazione, il file del bundle si trova in /var/lib/gke/bundles/. Il nome del file dipende dalla versione di Google Distributed Cloud, ad esempio gke-onprem-vsphere-1.31.0-gke.889-full.tgz.
    • COMPONENT_ACCESS_SA_PATH: il percorso del file della chiave per l'account di servizio di accesso ai componenti.
    • CONNECT_REGISTER_SA_PATH: il percorso del file della chiave per l'account di servizio connect-register.
    • LOG_MON_SA_PATH: il percorso del file della chiave per il account di servizio di logging e monitoraggio.
    • CLOUD_AUDIT_SA_PATH: il percorso dell'account di servizio di audit logging. Se non hai creato un account di servizio di audit logging, specifica il percorso del file della chiave per l'account di servizio di logging e monitoraggio.
    • KUBECONFIG_NAME: il nome del file kubeconfig creato dal comando gkectl register bootstrap. Se non specifichi questo flag, il comando crea il file con il nome kubeconfig nella directory di lavoro corrente. Se esiste già un file denominato kubeconfig, il comando lo sovrascrive.

    Modifica il comando in base alle esigenze per i seguenti flag:

    • Se hai specificato una cartella in main.tf, aggiungi il seguente flag: --vcenter-folder=FOLDER
    • Se hai specificato una policy di archiviazione VM in main.tf, rimuovi --vcenter-datastore e aggiungi il seguente flag: --vcenter-storage-policy-name=STORAGE_POLICY_NAME
    • Se la workstation di amministrazione si troverà su una rete dietro un server proxy, aggiungi i seguenti flag:

      • --proxy-url=PROXY_URL
      • --no-proxy=NO_PROXY

      Sostituisci quanto segue:

      • PROXY_URL: l'URL del server proxy.
      • NO_PROXY: il valore dei domini e degli indirizzi IP esclusi dal proxy, separati da virgole.

    Se aggiungi un flag, assicurati di aggiungere il carattere barra rovesciata di continuazione della riga di comando (\).

  4. Quando ti viene richiesto, inserisci (o copia e incolla) il nome utente vCenter. Il nome utente non viene visualizzato sullo schermo.

  5. Quando ti viene richiesto, inserisci (o copia e incolla) la password vCenter. La password non viene visualizzata sullo schermo.

Il comando esegue numerose convalide. Una volta creato correttamente il cluster di bootstrap, gkectl visualizza un output simile al seguente, troncato per facilità di lettura:

Running workstation validations
- Validation Category: Workstation
    - [SUCCESS] Workstation OS
    - [SUCCESS] Workstation Hardware
    - [SUCCESS] Workstation Package
    - [SUCCESS] Workstation NTP
    - [SUCCESS] Workstation Docker
...
All validation results were SUCCESS.
Unpacking GKE on-prem bundle: /var/lib/gke/bundles/gke-onprem-vsphere-1.31.0-gke.889-full.tgz
...
Successfully created and registered the bootstrap cluster
...
Waiting for preflight checks to run or OnPremAdminCluster to be applied...... -

Il processo continua fino alla creazione del cluster di amministrazione.

Se esci dal comando gkectl register bootstrap prima della creazione del cluster di amministrazione, la creazione del cluster di amministrazione non riesce e dovrai eliminare il cluster di bootstrap utilizzando il comando seguente:

gkectl delete bootstrap \
    --target-cluster-name=ADMIN_CLUSTER_NAME \
    --project-id=PROJECT_ID \
    --location=REGION \
     --register-service-account-key-path=CONNECT_REGISTER_SA_PATH

Crea il cluster di amministrazione

Applica il piano Terraform per creare il cluster di amministrazione:

terraform apply "tfplan"

La creazione del cluster di amministrazione richiede circa 15 minuti o più. Puoi visualizzare il cluster nella Google Cloud console nella pagina dei cluster GKE.

Connettiti al cluster di amministrazione

Il comando gkectl register bootstrap crea un file kubeconfig per il cluster di amministrazione sulla workstation di amministrazione. Se non hai specificato il --admin-kubeconfig-out flag quando hai eseguito gkectl register bootstrap, il comando crea un file kubeconfig denominato kubeconfig nella directory in cui hai eseguito il comando.

Devi limitare l'accesso a questo kubeconfig perché contiene le credenziali di autenticazione per il cluster.

Inoltre, puoi eseguire comandi kubectl di sola lettura tramite il gateway connect.

  1. Esegui il comando seguente su un computer su cui è installata gcloud CLI per ottenere una voce kubeconfig che può accedere al cluster tramite il gateway connect.

    gcloud container fleet memberships get-credentials ADMIN_CLUSTER_NAME \
        --project=PROJECT_ID
    

    L'output è simile al seguente:

    Starting to build Gateway kubeconfig...
    Current project_id: PROJECT_ID
    A new kubeconfig entry "connectgateway_PROJECT_ID_global_ADMIN_CLUSTER_NAME" has been generated and set as the current context.
    
  2. Ora puoi eseguire comandi kubectl di sola lettura tramite il gateway connect, ad esempio:

    kubectl get pods -A
    

    Se hai bisogno di privilegi amministrativi completi per il cluster di amministrazione, consulta Configurare il gateway connect.