Esegui il provisioning delle VM su nodi single-tenant

Questa pagina descrive come eseguire il provisioning delle VM su nodi single-tenant, ovvero server fisici che eseguono VM solo da un singolo progetto. Prima di eseguire il provisioning delle VM su nodi single-tenant, leggi la relativa panoramica.

Prima di iniziare

Crea un template di nodo single-tenant

Prima di creare un gruppo di nodi ed eseguire il provisioning di VM single-tenant, devi creare un template di nodo single-tenant. Un template di nodo è una risorsa di regione che definisce le proprietà (come tipo di nodo, etichette di affinità, SSD locali, acceleratori e overcommit della CPU) per ciascun nodo in un gruppo di nodi.

Per configurare e creare un template di nodo utilizzando la console Google Cloud , Google Cloud CLI o l'API REST di Compute Engine, consulta Crea un template di nodo single-tenant.

Crea un gruppo di nodi single-tenant

Dopo aver creato un template di nodo, devi creare un gruppo di nodi single-tenant. Un gruppo di nodi è un cluster omogeneo di nodi single-tenant in una zona specifica che eredita le proprietà dal relativo template. Puoi configurare le policy di manutenzione dell'host, la scalabilità automatica e le impostazioni di condivisione tra progetti nel gruppo di nodi.

Per configurare e creare un gruppo di nodi utilizzando la console Google Cloud , Google Cloud CLI o l'API REST di Compute Engine, consulta Crea un gruppo di nodi single-tenant.

Esegui il provisioning di una VM single-tenant

Dopo aver ottenuto un gruppo di nodi in base a un template di nodo creato in precedenza, puoi eseguire il provisioning di singole VM in un gruppo di nodi single-tenant.

Per eseguire il provisioning di una VM in un nodo o un gruppo di nodi specifico con etichette di affinità corrispondenti a quelle assegnate in precedenza al template di nodo, segui la procedura standard per la creazione di un'istanza VM e assegna le etichette di affinità alla VM.

In alternativa, per eseguire il provisioning di una VM in un nodo single-tenant, puoi utilizzare la procedura riportata di seguito descritta nella pagina dei dettagli del gruppo di nodi. In base al gruppo di nodi in cui esegui il provisioning delle VM, Compute Engine assegna etichette di affinità.

Console

  1. Nella console Google Cloud , vai alla pagina Nodi single-tenant.

    Vai a Nodi single-tenant

  2. Fai clic su Gruppi di nodi.

  3. Fai clic sul nome del gruppo di nodi in cui eseguire il provisioning di un'istanza VM; facoltativamente, per eseguire il provisioning di una VM in un nodo single-tenant specifico, puoi fare clic direttamente sul nome del nodo.

  4. Fai clic su Crea istanza per eseguire il provisioning di un'istanza VM in questo gruppo di nodi, appuntati i valori applicati automaticamente per nome, regione e zona e modificali in base alle necessità.

  5. Seleziona una configurazione macchina specificando la famiglia di macchine, la serie e il tipo di macchina. Scegli la serie corrispondente al tipo di nodo single-tenant.

  6. Modifica il disco di avvio, il firewall e altre impostazioni, se necessario.

  7. Fai clic su Sole Tenancy, prendi nota delle etichette di affinità dei nodi assegnate automaticamente e utilizza Sfoglia per apportare le modifiche necessarie.

  8. Fai clic su Gestione e per eseguire la manutenzione sull'host, scegli una delle seguenti opzioni:

    • Esegui la migrazione di un'istanza VM (consigliato): durante gli eventi di manutenzione la VM è stata migrata a un altro nodo nel gruppo di nodi.

    • Termina: la VM è stata interrotta durante gli eventi di manutenzione.

  9. Per eseguire il riavvio automatico, scegli una delle seguenti azioni:

    • On (consigliato): riavvia automaticamente le VM se queste vengono messe in pausa per eventi di manutenzione.

    • Off: le VM non vengono riavviate automaticamente dopo un evento di manutenzione.

  10. Fai clic su Crea per completare la creazione di una VM single-tenant.

gcloud

Utilizza il comando gcloud compute instances create per eseguire il provisioning di una VM in un gruppo di nodi single-tenant:

gcloud compute instances create VM_NAME \
  [--zone=ZONE \]
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT \
  --node-group=GROUP_NAME \
  --machine-type=MACHINE_TYPE \
  [--maintenance-policy=MAINTENANCE_POLICY \]
  [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
  [--local-ssd interface=SSD_INTERFACE \]
  [--restart-on-failure]

Il flag --restart-on-failure indica se le VM single-tenant sono in grado di riavviarsi dopo l'arresto. Questo flag è attivo per impostazione predefinita. Usa --no-restart-on-failure per disattivarlo.

Sostituisci quanto segue:

  • VM_NAME: il nome della nuova VM single-tenant

  • ZONE: la zona in cui eseguire il provisioning della VM single-tenant

  • IMAGE_FAMILY: la famiglia di immagini da utilizzare per creare la VM

  • IMAGE_PROJECT: il progetto della famiglia di immagini

  • GROUP_NAME: il nome del gruppo di nodi in cui eseguire il provisioning della VM.

  • MACHINE_TYPE: il tipo di macchina della VM single-tenant. Utilizza il comando gcloud compute machine-types list per ottenere un elenco dei tipi di macchine disponibili per il progetto.

  • MAINTENANCE_POLICY: specifica il comportamento di riavvio delle VM single-tenant durante gli eventi di manutenzione. Imposta uno dei seguenti valori:

    • MIGRATE: VM Migration a un altro nodo nel gruppo di nodi durante gli eventi di manutenzione.

    • TERMINATE: la VM è stata arrestata durante gli eventi di manutenzione.

  • GPU_TYPE: tipo di GPU. Eseguine l'impostazione su uno dei tipi di acceleratore specificati al momento della creazione del template di nodo.

  • GPU_COUNT: numero di GPU del totale specificato dal template di nodo da collegare a questa VM. Il valore predefinito è 1.

  • SSD_INTERFACE: tipo di interfaccia SSD locale. Puoi impostarlo solo per le istanze create da un template di nodo con supporto SSD locale. Se lo imposti durante la creazione dell'istanza e il template di nodo non supporta l'SSD locale, l'operazione non va a buon fine. Esegui l'impostazione su nvme se i driver dell'immagine disco di avvio sono ottimizzati per NVMe, altrimenti su scsi. Specifica questo flag e un valore corrispondente una volta per ogni partizione dell'SSD locale.

REST

Utilizza il metodo instances.insert per eseguire il provisioning di una VM in un gruppo di nodi single-tenant:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/VM_ZONE/instances
{ "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "scheduling": { "onHostMaintenance": MAINTENANCE_POLICY, "automaticRestart": RESTART_ON_FAILURE, "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] }

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto

  • VM_ZONE: la zona in cui eseguire il provisioning della VM single-tenant

  • MACHINE_TYPE_ZONE: la zona del tipo di macchina

  • MACHINE_TYPE: il tipo di macchina della VM single-tenant. Utilizza il metodo machineTypes.list per ottenere un elenco dei tipi di macchine disponibili per il progetto.

  • VM_NAME: il nome della nuova VM single-tenant

  • MAINTENANCE_POLICY: specifica il comportamento di riavvio delle VM single-tenant durante gli eventi di manutenzione. Imposta uno dei seguenti valori:

    • MIGRATE: VM Migration a un altro nodo nel gruppo di nodi durante gli eventi di manutenzione.

    • TERMINATE: la VM è stata arrestata durante gli eventi di manutenzione.

  • RESTART_ON_FAILURE: indica se le VM single-tenant sono in grado di riavviarsi dopo l'arresto. Il valore predefinito è true.

  • GROUP_NAME: il nome del gruppo di nodi in cui eseguire il provisioning della VM.

  • NETWORK: l'URL della risorsa di rete per questa VM

  • REGION: la regione contenente la subnet per questa VM

  • SUBNETWORK: l'URL della risorsa della subnet per questa VM

  • GPU_TYPE: il tipo di GPU. Eseguine l'impostazione su uno dei tipi di acceleratore specificati al momento della creazione del template di nodo.

  • GPU_COUNT: il numero di GPU del totale specificato dal template di nodo da collegare a questa VM. Il valore predefinito è 1.

  • IMAGE_PROJECT: il progetto della famiglia di immagini

  • IMAGE_FAMILY: la famiglia di immagini da utilizzare per creare la VM

  • LOCAL_SSD_ZONE: la zona dell'SSD locale

  • SSD_INTERFACE: il tipo di interfaccia SSD locale. Esegui l'impostazione su NVME se i driver dell'immagine del disco di avvio sono ottimizzati per NVMe, altrimenti su SCSI.

Esegui il provisioning di un gruppo di VM single-tenant

I gruppi di istanze gestite (MIG) ti consentono di eseguire il provisioning di un gruppo di VM single-tenant identiche. Le etichette di affinità ti consentono di specificare il nodo o il gruppo di nodi single-tenant in cui eseguire il provisioning del gruppo di VM single-tenant.

Per i MIG a livello di regione, devi creare gruppi di nodi in ciascuna delle zone in cui si trovano queste istanze e specificare le affinità dei nodi per questi gruppi nel template di istanza di questi MIG.

gcloud

  1. Utilizza il comando gcloud compute instance-templates create per generare un template di gruppo di istanze gestite per un gruppo di VM da creare in un gruppo di nodi single-tenant:

    gcloud compute instance-templates create INSTANCE_TEMPLATE \
      --machine-type=MACHINE_TYPE \
      --image-project=IMAGE_PROJECT \
      --image-family=IMAGE_FAMILY \
      --node-group=GROUP_NAME \
      [--accelerator type=GPU_TYPE,count=GPU_COUNT \]
      [--local-ssd interface=SSD_INTERFACE]
    

    Sostituisci quanto segue:

    • INSTANCE_TEMPLATE: il nome del nuovo template di istanza

    • MACHINE_TYPE: il tipo di macchina della VM single-tenant. Utilizza il gcloud compute machine-types list comando per ottenere un elenco di tipi di macchine disponibili per il progetto.

    • IMAGE_PROJECT: il progetto della famiglia di immagini

    • IMAGE_FAMILY: la famiglia di immagini da utilizzare per creare la VM

    • GROUP_NAME: il nome del gruppo di nodi in cui eseguire il provisioning della VM. In alternativa, se vuoi utilizzare questo template di istanza per creare un gruppo di istanze gestite a livello di regione esistente in più di una zona, utilizza il flag --node-affinity-file per specificare un elenco di valori per i gruppi di nodi per quel gruppo di istanze gestite.

    • GPU_TYPE: tipo di GPU. Eseguine l'impostazione su uno dei tipi di acceleratore specificati al momento della creazione del template di nodo.

    • GPU_COUNT: numero di GPU del totale specificato dal template di nodo da collegare a questa VM. Il valore predefinito è 1.

    • SSD_INTERFACE: tipo di interfaccia SSD locale. Esegui l'impostazione su nvme se i driver dell'immagine disco di avvio sono ottimizzati per NVMe, altrimenti su scsi. Specifica questo flag e un valore corrispondente una volta per ogni partizione SSD locale.

  2. Utilizza il comando gcloud compute instance-groups managed create per creare un gruppo di istanze gestite all'interno del gruppo di nodi single-tenant:

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
      --size=SIZE \
      --template=INSTANCE_TEMPLATE \
      --zone=ZONE
    

    Sostituisci quanto segue:

    • INSTANCE_GROUP_NAME: il nome di questo gruppo di istanze

    • SIZE: il numero di VM da includere in questo gruppo di istanze. Il gruppo di nodi deve disporre di risorse sufficienti per ospitare le istanze in questo gruppo di istanze gestite. Utilizza il gestore della scalabilità automatica dei gruppi di istanze gestite per gestire automaticamente le dimensioni di questi gruppi.

    • INSTANCE_TEMPLATE: il nome del template di istanza da utilizzare per creare questo gruppo di istanze gestite. Il template deve avere una o più etichette di affinità dei nodi che rimandano ai gruppi di nodi appropriati.

    • ZONE: la zona in cui creare il gruppo di istanze gestite Per un gruppo di istanze gestite a livello di regione, sostituisci il flag --zone con --region e specifica una regione. Aggiungi inoltre il flag --zones per determinare tutte le zone in cui esistono gruppi di nodi.

REST

  1. Utilizza il metodo instanceTemplates.insert per creare un template di gruppo di istanze gestite all'interno del gruppo di nodi single-tenant:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/TEMPLATE_ZONE/instance-templates
    { "name": "INSTANCE_TEMPLATE", "properties": { "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "scheduling": { "nodeAffinities": [ { "key": "compute.googleapis.com/node-group-name", "operator": "IN", "values": [ "GROUP_NAME" ] } ] }, "networkInterfaces": [ { "network": "global/networks/NETWORK", "subnetwork": "regions/REGION/subnetworks/SUBNETWORK" } ], "guestAccelerators": [ { "acceleratorType": GPU_TYPE, "acceleratorCount": GPU_COUNT } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY" } }, { "type":"SCRATCH", "initializeParams":{ "diskType":"zones/LOCAL_SSD_ZONE/diskTypes/local-ssd" }, "autoDelete":true, "interface":"SSD_INTERFACE" } ] } }

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto

    • TEMPLATE_ZONE: la zona in cui creare il template di istanza

    • INSTANCE_TEMPLATE: il nome del nuovo template di istanza

    • MACHINE_TYPE_ZONE: la zona del tipo di macchina

    • MACHINE_TYPE: il tipo di macchina della VM single-tenant. Utilizza il metodo machineTypes.list per ottenere un elenco dei tipi di macchine disponibili per il progetto.

    • GROUP_NAME: il nome del gruppo di nodi in cui eseguire il provisioning della VM. Se vuoi utilizzare questo template di istanza per creare un MIG a livello di regione esistente in più di una zona, specifica un elenco di gruppi di nodi presenti nelle stesse zone del MIG a livello di regione.

    • NETWORK: l'URL della risorsa di rete per questo template di istanza

    • REGION: la regione contenente la subnet per questo template di istanza

    • SUBNETWORK: l'URL della risorsa della subnet per questo template di istanza

    • GPU_TYPE: il tipo di GPU. Eseguine l'impostazione su uno dei tipi di acceleratore specificati al momento della creazione del template di nodo.

    • GPU_COUNT: il numero di GPU del totale specificato dal template di nodo da collegare a questa VM. Il valore predefinito è 1.

    • IMAGE_PROJECT: il progetto della famiglia di immagini

    • IMAGE_FAMILY: la famiglia di immagini da utilizzare per creare la VM

    • LOCAL_SSD_ZONE: la zona dell'SSD locale

    • SSD_INTERFACE: il tipo di interfaccia SSD locale. Esegui l'impostazione su NVME se i driver dell'immagine disco di avvio sono ottimizzati per NVMe, altrimenti su SCSI.

  2. Utilizza il metodo instanceGroupManagers.insert per creare un gruppo di istanze gestite all'interno del gruppo di nodi single-tenant in base al template di istanza creato in precedenza. In alternativa, se vuoi creare un gruppo di istanze gestite a livello di regione, utilizza il metodo regionInstanceGroupManagers.insert e determina la regione e le zone di tutti i gruppi di nodi come specificato nel template di istanza.

    Ad esempio, per creare un gruppo di istanze gestite a livello di zona, utilizza la seguente richiesta:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    {
      "baseInstanceName": "NAME_PREFIX",
      "name": "INSTANCE_GROUP_NAME",
      "targetSize": SIZE,
      "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID progetto

    • ZONE: la zona in cui creare il gruppo di istanze gestite

    • NAME_PREFIX: il nome del prefisso per ciascuna delle istanze nel gruppo di istanze gestite

    • INSTANCE_GROUP_NAME: il nome del gruppo di istanze

    • SIZE: il numero di VM da includere in questo gruppo di istanze. Il gruppo di nodi deve disporre di risorse sufficienti per ospitare le istanze in questo gruppo di istanze gestite. Utilizza il gestore della scalabilità automatica dei gruppi di istanze gestite per gestire automaticamente le dimensioni di questi gruppi.

    • INSTANCE_TEMPLATE: l'URL del template di istanza da utilizzare per creare questo gruppo. Il template deve avere un'etichetta di affinità dei nodi che rimandi al gruppo di nodi appropriato.

Configura le etichette di affinità dei nodi

Le etichette di affinità dei nodi ti consentono di raggruppare logicamente i gruppi di nodi e pianificare le VM su un insieme specifico di gruppi di nodi. Puoi anche utilizzare le etichette di affinità dei nodi per pianificare le VM su gruppi di nodi situati in zone diverse e mantenere comunque questi gruppi all'interno di un raggruppamento logico. La procedura riportata di seguito è un esempio di utilizzo delle etichette di affinità per associare le VM a un gruppo di nodi specifico utilizzato per i workload di produzione. Questo esempio mostra come pianificare una singola VM, ma puoi anche utilizzare i gruppi di istanze gestite per pianificare un gruppo di VM.

gcloud

  1. Utilizza il comando gcloud compute sole-tenancy node-templates create per creare un template di nodo con un insieme di etichette di affinità per un workload di produzione:

    gcloud compute sole-tenancy node-templates create prod-template \
      --node-type=n1-node-96-624 \
      --node-affinity-labels workload=frontend,environment=prod
    
  2. Utilizza il comando gcloud compute sole-tenancy node-templates describe per visualizzare le etichette di affinità dei nodi assegnate al template di nodo.

  3. Utilizza il comando gcloud compute sole-tenancy node-groups create per creare un gruppo di nodi che utilizza il template di produzione:

    gcloud compute sole-tenancy node-groups create prod-group \
      --node-template=prod-template \
      --target-size=1
    
  4. Per le VM di produzione, crea un file node-affinity-prod.json per specificare l'affinità delle VM di produzione. Ad esempio, potresti creare un file che specifica che le VM vengono eseguite solo sui nodi con affinità workload=frontend e environment=prod. Crea il file di affinità dei nodi in una posizione a tua scelta o utilizza Cloud Shell.

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "IN",
        "values" : ["prod"]
      }
    ]
    
  5. Utilizza il file node-affinity-prod.json con il comando gcloud compute instances create per pianificare una VM sul gruppo di nodi con etichette di affinità corrispondenti.

    gcloud compute instances create prod-vm \
      --node-affinity-file node-affinity-prod.json \
      --machine-type=n1-standard-2
    
  6. Utilizza il comando gcloud compute instances describe e controlla il campo scheduling per visualizzare le affinità dei nodi assegnate alla VM.

Configura le etichette di anti-affinità dei nodi

Le etichette di affinità dei nodi possono essere configurate come etichette di anti-affinità per impedire l'esecuzione delle VM su nodi specifici. Ad esempio, puoi utilizzare le etichette di anti-affinità per impedire che le VM che utilizzi per scopi di sviluppo vengano pianificate sugli stessi nodi della VM di produzione. L'esempio seguente mostra come utilizzare le etichette di affinità per impedire l'esecuzione delle VM su gruppi di nodi specifici. Questo esempio mostra come pianificare una singola VM, ma puoi anche utilizzare i gruppi di istanze gestite per pianificare un gruppo di VM.

gcloud

  1. Per le VM di sviluppo, specifica la loro affinità creando un node-affinity-dev.json in una posizione a tua scelta o utilizzando Cloud Shell. Ad esempio, crea un file che configuri le VM per l'esecuzione su qualsiasi gruppo di nodi con affinità workload=frontend e non environment=prod:

    [
      {
        "key" : "workload",
        "operator" : "IN",
        "values" : ["frontend"]
      },
      {
        "key" : "environment",
        "operator" : "NOT_IN",
        "values" : ["prod"]
      }
    ]
    
  2. Utilizza il file node-affinity-dev.json con il comando gcloud compute instances create per creare la VM di sviluppo:

    gcloud compute instances create dev-vm \
      --node-affinity-file=node-affinity-dev.json \
      --machine-type=n1-standard-2
    
  3. Utilizza il comando gcloud compute instances describe e controlla il campo scheduling per visualizzare le anti-affinità dei nodi assegnate alla VM.

Passaggi successivi