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
Vai alla pagina Istanze VM.
Fai clic su Crea istanza.
Specifica un nome per l'istanza.
Nella sezione Contenitore, seleziona Esegui il deployment di un'immagine container per. casella di controllo per questa istanza VM.
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'immaginehello-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
.
- Puoi specificare un'immagine da Container Registry o Artifact Registry.
Ad esempio:
Facoltativamente, fai clic su Opzioni contenitore avanzate. Per ulteriori informazioni, consulta Configurare le opzioni per eseguire il contenitore.
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:
Apri la pagina di creazione dell'istanza Compute Engine nella console Google Cloud.
Specifica un nome per l'istanza.
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.
Nella sezione Disco di avvio, seleziona un'immagine di Container-Optimized OS.
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-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