Creazione e configurazione delle istanze

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Esistono due modi per creare e configurare le istanze di Compute Engine che eseguono Container-Optimized OS da Google.

Per scenari semplici in cui vuoi eseguire un singolo container su una VM o su ciascuna VM in un gruppo di istanze gestite, puoi specificare un'immagine container e parametri di configurazione facoltativi quando definisci l'istanza o il modello di istanza. Compute Engine crea l'istanza con la versione più recente di Container-Optimized OS e avvia il container specificato all'avvio della VM.

Per gli scenari avanzati in cui puoi eseguire il deployment di più container e configurare le opzioni Docker utilizzando cloud-init, puoi creare un'istanza Compute Engine con l'immagine del sistema operativo ottimizzata per i container che preferisci e quindi procedere con la configurazione necessaria.

Creare un'istanza semplice

Utilizza questo metodo per eseguire il deployment di un singolo container su una VM utilizzando la versione più recente di Container-Optimized OS. Puoi eseguire questa attività utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.

console

  1. Vai alla pagina Istanze VM.

    Vai alla pagina Istanze VM

  2. Fai clic su Crea istanza.

  3. Specifica un nome per l'istanza.

  4. Nella sezione Container, seleziona la casella di controllo Esegui il deployment di un'immagine container in questa istanza VM.

  5. Specifica l'immagine container da utilizzare.

    • Puoi specificare un'immagine da Container Registry o Artifact Registry. Ad esempio:
      • gcr.io/cloud-marketplace/google/nginx1:1.15 seleziona un'immagine container NGINX 1.15 da Google Cloud Marketplace.
      • us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 seleziona un'immagine hello-app di esempio da Artifact Registry.
    • Se utilizzi un'immagine container da Docker Hub, specifica sempre il nome completo dell'immagine Docker. Ad esempio, specifica il nome dell'immagine seguente per eseguire il deployment di un'immagine container Apache: docker.io/httpd:2.4.
  6. Facoltativamente, fai clic su Opzioni avanzate del contenitore. Per ulteriori informazioni, consulta Configurazione delle opzioni per eseguire il container.

  7. Fai clic su Crea per creare l'istanza, avviarla e avviare il container.

gcloud

Per creare una semplice istanza VM, esegui il comando seguente:

gcloud compute instances create-with-container instance-name \
    --container-image image-name

Sostituisci quanto segue:

  • instance-name: il nome della nuova istanza.
  • image-name: il nome dell'immagine container.

Ad esempio, il comando seguente crea una nuova istanza VM denominata nginx-vm, che lancerà ed eseguirà l'immagine container gcr.io/cloud-marketplace/google/nginx1:1.15:

gcloud compute instances create-with-container nginx-vm \
    --container-image gcr.io/cloud-marketplace/google/nginx1:1.15

Allo stesso modo, puoi creare una nuova istanza VM denominata hello-app che lancerà ed eseguirà un container di esempio in Artifact Registry:

gcloud compute instances create-with-container hello-app \
--container-image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Quando utilizzi un'immagine container da Docker Hub, devi sempre specificare un nome immagine Docker completo. Ad esempio, specifica il nome immagine seguente per eseguire il deployment di un'immagine container Apache:

docker.io/httpd:2.4

Per eseguire un singolo container su ogni VM in un gruppo di istanze gestite, specifica il nome dell'immagine container quando definisci il modello di istanza. Per ulteriori informazioni, consulta Creazione di un modello di istanza con un'immagine container.

Creazione di un'istanza per scenari avanzati

Utilizza questo metodo per selezionare un'immagine del sistema operativo ottimizzata per i container, per eseguire il deployment di più container e per utilizzare cloud-init per la configurazione avanzata.

Visualizzazione delle immagini disponibili

Le immagini Container-Optimized OS sono disponibili nell'elenco di immagini di Google Cloud Console con il prefisso cos. Sono ospitate nel progetto cos-cloud. Puoi anche visualizzare tutte le release attualmente disponibili sulla riga di comando eseguendo questo comando:

gcloud compute images list --project cos-cloud --no-standard-images

L'output è simile al seguente:

NAME                       PROJECT    FAMILY      DEPRECATED  STATUS
cos-69-10895-385-0         cos-cloud  cos-69-lts              READY
cos-73-11647-534-0         cos-cloud  cos-73-lts              READY
cos-77-12371-251-0         cos-cloud  cos-77-lts              READY
cos-81-12871-103-0         cos-cloud  cos-81-lts              READY
cos-beta-81-12871-44-0     cos-cloud  cos-beta                READY
cos-dev-84-13078-0-0       cos-cloud  cos-dev                 READY
cos-stable-81-12871-103-0  cos-cloud  cos-stable              READY

Creazione di un'istanza

Puoi creare un'istanza utilizzando la console Google Cloud, l'interfaccia a riga di comando gcloud o l'API.

console

Per eseguire un'istanza di Compute Engine con un sistema operativo ottimizzato per i container e Docker installato, procedi come segue:

  1. Apri la pagina di creazione delle istanze di Compute Engine su Google Cloud Console.

    Crea una nuova istanza di Compute Engine

  2. Specifica un nome per l'istanza.

  3. Nella sezione Container, deseleziona la casella di controllo Esegui il deployment di un'immagine container in questa istanza VM. Questa opzione è utile se vuoi eseguire il deployment di un singolo container sulla VM.

  4. Nella sezione Disco di avvio, seleziona un'immagine Container-Optimized OS.

  5. Fai clic su Crea per creare e avviare l'istanza.

gcloud

Controlla le immagini attualmente disponibili, quindi usa il seguente comando per creare un'istanza di immagine nodo cos:

gcloud compute instances create instance-name \
    --image image-name \
    --image-project cos-cloud \
    --zone compute-zone \
    --machine-type machine-type-name

Sostituisci quanto segue:

  • instance-name: il nome dell'istanza VM.
  • image-name: il nome dell'immagine Container-Optimized OS per l'istanza, ottenuta dall'elenco delle immagini disponibili. Nell'esempio precedente, possiamo utilizzare cos-beta-81-12871-44-0.
  • compute-zone: la zona di calcolo dell'istanza.
  • machine-type-name: il tipo di macchina da utilizzare per questa nuova istanza. Il tipo predefinito è n1-standard-1.

Ad esempio, il comando seguente crea un'istanza denominata cos-test utilizzando l'immagine cos-beta-67-10575-13-0:

gcloud compute instances create cos-test \
    --image cos-beta-67-10575-13-0 \
    --image-project cos-cloud \
    --zone us-east1-d \
    --machine-type n1-standard-1

Se vuoi l'ultima versione disponibile di dev, beta o stable Container-Optimized OS, utilizza il flag --image-family, come segue:

gcloud compute instances create instance-name \
    --image-family cos-beta \
    --image-project cos-cloud \
    --zone compute-zone \
    --machine-type machine-type-name

Puoi aggiungere il flag --preemptible per le istanze sperimentali singole.

Server

Nell'API, crea una richiesta normale per creare un'istanza, ma includere un'immagine di origine del sistema operativo ottimizzata per i container. Ad esempio:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/compute-zone/instances

{
  'machineType': 'zones/compute-zone/machineTypes/machine-type-name',
  'name': 'instance-name',
  'networkInterfaces': [
    {
      'accessConfigs': [
        {
          'type': 'ONE_TO_ONE_NAT',
          'name': 'External NAT'
        }
      ],
      'network': 'global/networks/default'
    }
  ],
  'disks': [
    {
      'type': 'PERSISTENT',
      'boot': true,
      'autoDelete': true,
      'initializeParams': {
        'sourceImage': 'projects/cos-cloud/global/images/family/cos-stable'
      }
    }
  ]
}

Configurazione di un'istanza

In alcuni casi, potresti voler eseguire una configurazione aggiuntiva all'avvio dell'istanza. Puoi utilizzare lo strumento cloud-init con Container-Optimized OS per applicare le informazioni di configurazione fornite in un formato cloud-config.

Utilizzo di cloud-init con il formato di configurazione Cloud

Le immagini del sistema operativo ottimizzate per i container includono cloud-init come mezzo per configurare l'istanza all'avvio. Lo strumento cloud-init prevede la sua configurazione nel valore della chiave user-data dei metadati dell'istanza. Lo strumento cloud-init comprende più formati.

Ecco un file cloud-init di esempio che mostra come creare un account utente e creare un servizio di sistema di proprietà di questo utente che controlla la gestione di un container Docker occupato:

#cloud-config

users:
- name: cloudservice
  uid: 2000

write_files:
- path: /etc/systemd/system/cloudservice.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Start a simple docker container

    [Service]
    ExecStart=/usr/bin/docker run --rm -u 2000 --name=mycloudservice busybox:latest /bin/sleep 3600
    ExecStop=/usr/bin/docker stop mycloudservice
    ExecStopPost=/usr/bin/docker rm mycloudservice

runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service

# Optional once-per-boot setup. For example: mounting a PD.
bootcmd:
- fsck.ext4 -tvy /dev/[DEVICE_ID]
- mkdir -p /mnt/disks/[MNT_DIR]
- mount -t ext4 -O ... /dev/[DEVICE_ID] /mnt/disks/[MNT_DIR]

Per creare un'istanza VM del sistema operativo ottimizzata per i riferimenti che faccia riferimento a questo file cloud-init, utilizza il flag della riga di comando --metadata-from-file. Supponendo che il file cloud-init sia chiamato filename nella directory attuale, il comando seguente crea un'istanza di Container-Optimized OS e attiva cloud-init assegnando i contenuti del file alla chiave user-data nei metadati dell'istanza:

gcloud compute instances create instance-name \
    --image-family cos-stable \
    --image-project cos-cloud \
    --metadata-from-file user-data=filename

Sostituisci quanto segue:

  • instance-name: il nome dell'istanza VM.
  • filename: il nome del file dei metadati.

È possibile impostare altri flag di metadati durante la creazione delle istanze del sistema operativo ottimizzate per i container. Poiché queste proprietà sono semplici coppie chiave-valore, puoi utilizzare il flag --metadata nel comando gcloud compute instances create per creare le proprietà. Inoltre, a partire da miglia 97, puoi impostare i flag di metadati nei metadati di progetto utilizzando il flag --metadata nel comando gcloud compute project-info add-metadata. I flag definiti a livello di istanza hanno la precedenza sui flag definiti a livello di progetto.

L'esempio precedente può essere espanso per raccogliere statistiche sull'utilizzo e raccogliere arresto anomalo con il seguente comando:

gcloud compute instances create instance-name \
    --image-family cos-stable \
    --image-project cos-cloud \
    --metadata-from-file user-data=filename \
    --metadata=cos-metrics-enabled=true

Altri flag di metadati

Chiave dei metadati Descrizione Comportamento predefinito
cos-update-strategy Specifica il comportamento dell'aggiornamento. L'unico valore accettato è: update_disabled. Se non viene impostato:
  • cos-dev e cos-beta: aggiornamenti dalla versione più recente del sistema operativo nella famiglia di immagini corrispondente
  • Traguardo LTS e stabile: aggiornamenti dalla versione più recente del sistema operativo dallo stesso traguardo
cos-metrics-enabled Attiva la raccolta dei dump di arresti anomali. I valori potrebbero essere:
true
false (valore predefinito).
Disabilitato per impostazione predefinita

Connessione a un'istanza

Puoi connetterti tramite SSH alla tua istanza VM eseguendo l'immagine del nodo cos nello stesso mododi tu stesso SSH in altre istanze Compute Engine.

Ad esempio:

gcloud compute ssh instance-name \
    --project project-id \
    --zone compute-zone

Esecuzione degli script di avvio

Puoi specificare uno script di avvio tramite il server dei metadati, utilizzando la chiave di metadati startup-script. Per fornire uno script di avvio puoi utilizzare Google Cloud CLI, l'API o Google Cloud Console. Per maggiori dettagli, consulta la sezione Esecuzione di script di avvio.

Avvio e arresto dei servizi systemd in corso...

Per avviare il servizio specificato nel file hello.service, esegui questo comando:

sudo systemctl start hello.service

Per arrestare il servizio specificato nel file hello.service, esegui questo comando:

sudo systemctl stop hello.service

Sincronizzazione dell'ora

Prima di milestone 85, Container-Optimized OS utilizza il servizio systemd's systemd-timesyncd per sincronizzare l'orologio di sistema locale con un server Network Time Protocol (NTP) remoto tramite il protocollo SSH. Le seguenti voci nel file di configurazione /etc/systemd/timesyncd.conf mostrano i valori di configurazione predefiniti commentati per aiutare l'amministratore ad apportare le modifiche desiderate:

cat /etc/systemd/timesyncd.conf
# comments omitted for brevity
[Time]
#NTP=
#FallbackNTP=metadata.google.internal
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

Pertanto, la distanza massima accettabile è 5 secondi e gli intervalli di sondaggio minimo e massimo per i messaggi NTP sono rispettivamente di 32 e 2048 secondi.

A partire dal traguardo 85, Container-Optimized OS utilizza il servizio chronyd per sincronizzare l'orologio di sistema locale con un server NTP (Remote Time Protocol) remoto tramite il protocollo NTP. Le seguenti voci nel file di configurazione /etc/chrony/chrony.conf mostrano i valori di configurazione predefiniti commentati per aiutare l'amministratore ad apportare le modifiche desiderate:

cat /etc/chrony/chrony.conf
# Use custom NTP servers
server metadata.google.internal prefer iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

Il server NTP è impostato dalla risposta DHCP di eth0, che di solito è il server di metadati di Compute Engine:

networkctl status eth0 | grep NTP
             NTP: 169.254.169.254

Modificare il fuso orario

Il fuso orario predefinito di Container-Optimized OS da Google è UTC0. Crea un link simbolico al fuso orario desiderato come nell'esempio seguente:

sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/US/Pacific /etc/localtime

Tieni presente che /etc è stateless, quindi il fuso orario viene reimpostato sul valore predefinito (UTC0) a ogni riavvio.

Disabilitazione degli aggiornamenti automatici

Esistono due modi per disattivare gli aggiornamenti automatici. Il metodo preferito è utilizzare la chiave dei metadati dell'istanza cos-update-strategy:

gcloud compute instances create instance-name \
    --image-family cos-stable \
    --image-project cos-cloud \
    --metadata cos-update-strategy=update_disabled

A partire da milestone 97, puoi anche disabilitare gli aggiornamenti automatici nei metadati del progetto:

gcloud compute project-info add-metadata \
    --metadata cos-update-strategy=update_disabled

Puoi anche disabilitare gli aggiornamenti automatici su un'istanza in esecuzione con systemctl:

sudo systemctl stop update-engine
sudo systemctl mask update-engine