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 già utilizzi Terraform per gestire le risorse VMware Google Cloud e on-premise. Puoi anche creare un cluster di amministrazione utilizzando gkectl o la consoleGoogle Cloud .

Prima di iniziare

  • Assicurati di aver configurato la workstation amministrativa e di poter accedere come descritto in Creazione di una workstation amministrativa.

  • Assicurati che i file della chiave JSON per i service account si trovino nella workstation amministrativa.

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

  • Rivedi la panoramica del bilanciamento del carico e 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 console Google Cloud 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 server proxy, 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 preliminari lato server richiedono regole firewall aggiuntive. In Regole firewall per i cluster di amministrazione, cerca "Controlli preliminari" e assicurati che tutte le regole firewall richieste siano configurate. I controlli preliminari 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 bootstrap ospita i controller Kubernetes necessari per creare il cluster di amministrazione. Quando crei il cluster di amministrazione, i controller del cluster di bootstrap eseguono il provisioning dei nodi, eseguono controlli preflight e registrano il cluster di amministrazione nel parco risorse. Il cluster di bootstrap viene eliminato automaticamente dopo la creazione del cluster di amministrazione.

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

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

  2. Crea un cluster bootstrap. Esegui gkectl register bootstrap per creare il cluster di bootstrap. Al termine della creazione del cluster di bootstrap, l'output ti informa di completare la configurazione del cluster di amministrazione. Il processo continua a essere eseguito finché non viene creato il 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à con tre nodi del control plane con MetalLB. Nelle versioni 1.28 e successive, i nuovi cluster di amministrazione devono essere a disponibilità elevata. A causa di questo requisito, devi impostare control_plane_node.replicas su 3.

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

Compila le variabili segnaposto nel seguente esempio, poi copia e incolla il codice in main.tf. Se hai utilizzato gkeadm per creare la workstation amministrativa, apri il file di configurazione della workstation amministrativa per 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. Il nome ha una lunghezza massima di 20 caratteri.

  • PROJECT_ID: l'ID progetto Google Cloud .

  • REGION: la Google Cloud regione in cui vengono eseguiti l'API GKE On-Prem (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 del comando gkectl register bootstrap. Per un elenco delle versioni, vedi 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 amministrativa: utilizza il valore del campo vCenter.credentials.address.

    • 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 amministrativa: 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 amministrativa: 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 tuo pool di risorse vCenter.

    • File di configurazione della workstation amministrativa: 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 tuo 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 amministrativa: 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 in alternativa. 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 amministrativa: 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 nuovi caratteri di fine riga sostituiti dalla stringa \n.

    1. Esegui questo comando per sostituire i caratteri di nuova riga 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 vCenter Server. Se hai utilizzato gkeadm per creare la workstation amministrativa, puoi utilizzare il valore del campo caCertPath nel file di configurazione della workstation amministrativa, ovvero il percorso sul computer locale. gkeadm ha copiato il file del certificato CA nella workstation amministrativa. Devi specificare il percorso della workstation di amministrazione nel flag --vcenter-ca-cert-path del comando gkectl register bootstrap.

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

  • NETWORK: il nome della tua rete vCenter.

    • File di configurazione della workstation amministrativa: 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 dell'ora (NTP).

  • 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. Deve essere almeno 4.

  • MEMORY: numero di mebibyte di memoria per ciascun nodo del control plane nel cluster di amministrazione. Deve essere almeno 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. Se vuoi, puoi fornire il tuo server di registro dei 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 caratteri di nuova riga sostituiti dalla stringa \n.

    1. Esegui questo comando per sostituire i caratteri di nuova riga 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 tuo 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 saperne di più sull'utilizzo di un registro privato, incluse le differenze tra cluster normali e avanzati, consulta Configurare un registro dei 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, ad esempio il provider Google Cloud . Correggi eventuali errori in maint.tf, se necessario.

  2. Crea il piano Terraform:

    terraform plan -out tfplan
    

    Esamina la configurazione e apporta modifiche, se necessario.

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 a disposizione le credenziali. 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 amministrativa utilizzando SSH.

  2. Esegui l'autenticazione con Google Cloud CLI:

    gcloud auth login
    
  3. Esegui questo comando per creare il cluster di bootstrap. Molti valori dei flag sono uguali a quelli 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 tuo vCenter Server.
    • BUNDLE_PATH: il percorso del file bundle. Se hai utilizzato gkeadm per creare la workstation di amministrazione, il file del pacchetto 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 il account di servizio di accesso ai componenti.
    • CONNECT_REGISTER_SA_PATH: il percorso del file della chiave per il 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 del 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 il service account di logging e monitoraggio.
    • KUBECONFIG_NAME: il nome del file kubeconfig che viene 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 un file chiamato 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 amministrativa si trova 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 richiesto, inserisci (o copia e incolla) il nome utente vCenter. Il nome utente non viene visualizzato sullo schermo.

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

Il comando esegue numerose convalide. Dopo che gkectl ha creato correttamente il cluster di bootstrap, viene visualizzato un output simile al seguente, troncato per facilitarne la 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 a essere eseguito finché non viene creato il cluster di amministrazione.

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

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 console Google Cloud nella pagina 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 flag --admin-kubeconfig-out 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 Connect Gateway.

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

    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 Connect Gateway, ad esempio:

    kubectl get pods -A
    

    Se hai bisogno di privilegi amministrativi completi per il cluster amministrativo, consulta Configurare il gateway di connessione.