Creazione e configurazione delle istanze

Esistono due modi per creare e configurare istanze di Compute Engine in esecuzione Container-Optimized OS di Google.

Per scenari semplici in cui vuoi eseguire un singolo contenitore su una VM o su ogni VM in un gruppo di istanze gestite, puoi specificare un'immagine del contenitore 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 contenitore specificato all'avvio della VM.

Per scenari avanzati in cui puoi eseguire il deployment di più container e configurare Docker utilizzando cloud-init, puoi creare un'istanza Compute Engine l'immagine di Container-Optimized OS da te scelta, quindi procedi con la sua configurazione necessaria.

Creazione di un'istanza semplice

Utilizza questo metodo per eseguire il deployment di un singolo container su una VM con l'ultima versione di Container-Optimized OS. Puoi eseguire questa attività utilizzando la console Google Cloud con gcloud CLI.

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 Contenitore, seleziona Esegui il deployment di un'immagine container per. casella di controllo per 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 di Docker Hub, specifica sempre il nome completo dell'immagine Docker. Ad esempio, specifica il seguente nome immagine per eseguire il deployment di un'immagine container Apache: docker.io/httpd:2.4.
  6. Facoltativamente, fai clic su Opzioni contenitore avanzate. Per ulteriori informazioni, consulta Configurare le opzioni per eseguire il contenitore.

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

gcloud

Per creare un'istanza VM semplice, esegui il seguente comando:

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à gcr.io/cloud-marketplace/google/nginx1:1.15 immagine container:

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

Analogamente, puoi creare una nuova istanza VM denominata hello-app che avvia ed esegue un contenitore 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. Ad esempio, specifica il seguente nome dell'immagine di cui eseguire il deployment 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 durante la definizione del modello di istanza. Consulta Creazione di un modello di istanza con un'immagine container per ulteriori informazioni.

Creazione di un'istanza per scenari avanzati

Utilizza questo metodo per selezionare un'immagine di Container-Optimized OS specifica di cui eseguire il deployment più container e di utilizzare cloud-init per la configurazione avanzata.

Visualizzazione delle immagini disponibili

Le immagini Container-Optimized OS sono disponibili nella console Google Cloud elenco di immagini con il prefisso cos. Questi sono ospitati nel progetto cos-cloud. Puoi anche visualizzare tutte le release attualmente disponibili sulla riga di comando eseguendo il seguente 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, gcloud CLI l'API.

Console

Per eseguire un'istanza Compute Engine con un sistema operativo ottimizzato per i container e Docker installati, svolgi i seguenti passaggi:

  1. Apri la pagina di creazione dell'istanza Compute Engine nella console Google Cloud.

    Crea una nuova istanza Compute Engine

  2. Specifica un nome per l'istanza.

  3. Nella sezione Container, cancella il valore 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 di Container-Optimized OS.

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

gcloud

Esamina le immagini attualmente disponibili, quindi utilizza questo comando per creare un'istanza dell'immagine del 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 della tua istanza VM.
  • image-name: il nome dell'immagine di Container-Optimized OS per ottenuta dall'elenco di immagini disponibili. Nell'esempio precedente, possiamo utilizzare cos-beta-81-12871-44-0.
  • compute-zone: la zona di calcolo per l'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

Puoi aggiungere il flag --preemptible per istanze sperimentali una tantum.

API

Nell'API, costruisci una normale richiesta crea un'istanza, ma includi un'immagine di origine di Container-Optimized OS. 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/image-name'
      }
    }
  ]
}

Configurazione di un'istanza

In alcuni casi, potresti voler eseguire una configurazione aggiuntiva al momento dell'avvio dell'istanza. Puoi utilizzare lo strumento cloud-init con Container-Optimized OS per applicarlo di configurazione da te fornite in un formato cloud-config.

Utilizzo di cloud-init con il formato di configurazione Cloud

Le immagini di Container-Optimized OS includono cloud-init per configurare l'istanza all'avvio. Lo strumento cloud-init prevede la sua configurazione nel valore della chiave user-data del metadati dell'istanza. cloud-init comprende più formati.

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

#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 di Container-Optimized OS che fa riferimento a questo cloud-init, usa il flag della riga di comando --metadata-from-file. Supponendo che il file cloud-init sia denominato filename nell'attuale il comando seguente crea un'istanza di Container-Optimized OS attiva cloud-init assegnando i contenuti del file all'elemento user-data nei metadati dell'istanza:

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

Sostituisci quanto segue:

  • instance-name: il nome della tua istanza VM.
  • image-name: il nome dell'immagine di Container-Optimized OS per l'istanza. Ad esempio, --image=cos-113-18244-85-29.
  • filename: il nome del file dei metadati.

È possibile impostare altri flag di metadati durante la creazione di Container-Optimized OS di Compute Engine. Poiché queste proprietà sono semplici coppie chiave-valore, puoi utilizzare il metodo --metadata nel comando gcloud compute instances create per creare proprietà. Inoltre, a partire dal traguardo 97, puoi impostare i flag dei metadati nei metadati del progetto utilizzando il flag --metadata nel comando gcloud compute project-info add-metadata. I flag definiti a livello di istanza avranno la precedenza su quelli definiti a livello di progetto.

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

gcloud compute instances create instance-name \
    --image image-name \
    --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 degli aggiornamenti automatici. Il valore può essere update_enabled, update_disabled o non impostato.
Se non impostato, verrà utilizzato il comportamento predefinito di aggiornamento automatico per il traguardo.
Se abilitato, il comportamento dipende dal canale di rilascio:
  • cos-dev e cos-beta: aggiornamenti dall'ultima versione del sistema operativo nella famiglia di immagini corrispondente
  • Traguardo LTS e cos-stable: aggiornamenti della versione più recente del sistema operativo dallo stesso traguardo
  • Traguardi < 117: Attivazione per impostazione predefinita
  • Traguardi >= 117: disattivati per impostazione predefinita
cos-metrics-enabled Abilita la raccolta di dump di arresto anomalo. I valori possono essere:
true
false (valore predefinito).
Disabilitato per impostazione predefinita

Connessione a un'istanza

Puoi accedere tramite SSH all'istanza VM che esegue l'immagine del nodo cos allo stesso modo per connetterti ad altre istanze di Compute Engine mediante SSH.

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 la utilizzando la chiave di metadati startup-script. Puoi utilizzare lo Google Cloud CLI, l'API o la console Google Cloud per fornire script di avvio. Consulta l'articolo Esecuzione degli script di avvio. per maggiori dettagli.

Sincronizzazione dell'ora

Prima del milestone 85, Container-Optimized OS utilizza il servizio systemd-timesyncd di systemd per la sincronizzazione l'orologio del sistema locale con un server NTP (Network Time Protocol) remoto tramite protocollo SNTP, Le seguenti voci in /etc/systemd/timesyncd.conf di configurazione del file di configurazione mostra i valori di configurazione predefiniti con commenti per aiutare amministratore apporta le modifiche desiderate:

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

Quindi, la distanza massima accettabile per la radice è 5 secondi, mentre il valore gli intervalli di polling massimi per i messaggi NTP sono rispettivamente di 32 e 2048 secondi.

A partire dal traguardo 85, Container-Optimized OS utilizza il servizio chronyd per la sincronizzazione l'orologio del sistema locale con un server NTP (Network Time Protocol) remoto tramite protocollo NTP. Le seguenti voci in /etc/chrony/chrony.conf di configurazione del file di configurazione mostra i valori di configurazione predefiniti con commenti per aiutare amministratore apporta 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 viene impostato in base alla risposta DHCP di eth0, che di solito è Server di metadati di Compute Engine:

networkctl status eth0 | grep NTP
             NTP: 169.254.169.254

Modifica del fuso orario

Il fuso orario predefinito di Container-Optimized OS da Google è UTC0. Crea un link simbolico al fuso orario che preferisci, 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 verrà reimpostato al valore predefinito (UTC0) a ogni riavvio.

Attivazione o disattivazione degli aggiornamenti automatici

Esistono due modi per attivare o disattivare gli aggiornamenti automatici. Il metodo preferito è impostare la chiave di metadati dell'istanza cos-update-strategy su update_enabled oppure rispettivamente update_disabled. Ad esempio:

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

A partire dal traguardo 97, puoi anche disattivare o attivare 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