Esistono due modi per creare e configurare le istanze Compute Engine che eseguono Container-Optimized OS di Google.
Per scenari semplici in cui vuoi eseguire un singolo container su una VM o su ogni VM in un gruppo di istanze gestite, puoi specificare un'immagine container e parametri di configurazione facoltativi quando definisci l'istanza o il template di istanza. Compute Engine crea l'istanza con l'ultima versione di Container-Optimized OS e avvia il container specificato all'avvio della VM.
Per 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 Container-Optimized OS che preferisci, quindi procedere alla configurazione del container in base alle
esigenze.
Creare un'istanza semplice
Utilizza questo metodo per eseguire il deployment di un singolo container su una VM utilizzando l'ultima versione di Container-Optimized OS. Puoi eseguire questa attività utilizzando la Google Cloud console o gcloud CLI.
Console
Vai alla pagina Istanze VM.
Fai clic su Crea istanza.
Specifica un Nome per l'istanza.
Nella sezione Container, seleziona la casella di controllo Esegui il deployment di un'immagine container su 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.15seleziona un'immagine container NGINX 1.15 da Google Cloud Marketplace.us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0seleziona un'immagine di esempiohello-appda Artifact Registry.
- Se utilizzi un'immagine container di Docker Hub, specifica sempre il nome completo dell'immagine Docker. Ad esempio, specifica il seguente nome dell'immagine
per eseguire il deployment di un'immagine container di Apache:
docker.io/httpd:2.4.
- Puoi specificare un'immagine da Container Registry o Artifact Registry.
Ad esempio:
Facoltativamente, fai clic su Opzioni container avanzate. Per saperne di più, consulta Configurare le opzioni per eseguire il container.
Fai clic su Crea per creare l'istanza, avviare l'istanza e avviare il container.
gcloud
Per creare un'istanza VM di base, 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 seguente comando crea una nuova istanza VM denominata nginx-vm, che avvierà 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 avvierà 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 di Docker Hub, devi sempre specificare il nome completo dell'immagine Docker. Ad esempio, specifica il seguente nome dell'immagine per eseguire il deployment di un'immagine container di 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 template di istanza. Per saperne di più, consulta Creare un template di istanza con un'immagine container.
Creare un'istanza per scenari avanzati
Utilizza questo metodo per selezionare un'immagine Container-Optimized OS specifica, eseguire il deployment di più container e utilizzare cloud-init per la configurazione avanzata.
Visualizzare le immagini disponibili
Le immagini Container-Optimized OS sono disponibili nell' Google Cloud elenco delle immagini della console
con il prefisso cos.
Queste sono ospitate nel progetto cos-cloud. Puoi anche visualizzare tutte le release attualmente disponibili nella 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
Creare un'istanza
Puoi creare un'istanza utilizzando la Google Cloud console, gcloud CLI o l'API.
Console
Per eseguire un'istanza Compute Engine con Container-Optimized OS e Docker installati, procedi nel seguente modo:
Apri la pagina di creazione dell'istanza Compute Engine nella console Google Cloud .
Specifica un Nome per l'istanza.
Nella sezione Container, deseleziona la casella di controllo Esegui il deployment di un'immagine container su 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 Container-Optimized OS.
Fai clic su Crea per creare e avviare l'istanza.
gcloud
Esamina le immagini disponibili, quindi utilizza
il seguente 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 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 computing 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 seguente comando 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 le istanze sperimentali una tantum.
API
Nell'API, crea una normale richiesta per creare un'istanza, ma includi un'immagine di origine Container-Optimized OS image. 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'
}
}
]
}
Configurare 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 formato cloud-config.
Utilizzare cloud-init con il formato di configurazione cloud
Le immagini Container-Optimized OS includono
cloud-init
come metodo per configurare l'istanza all'avvio. Lo strumento cloud-init
prevede che la configurazione sia nel valore della chiave user-data dei
metadati dell'istanza. Lo cloud-init
strumento supporta più formati.
Di seguito è riportato un esempio di file cloud-init che mostra come creare un account utente e un servizio systemd di proprietà di questo utente che controlla la gestione di un container Docker busybox:
#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 Container-Optimized OS 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 denominato filename nella directory corrente, il seguente comando crea un'istanza 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 image-name \
--image-project cos-cloud \
--metadata-from-file user-data=filename
Sostituisci quanto segue:
- instance-name: il nome dell'istanza VM.
- image-name: il nome dell'immagine Container-Optimized OS per
l'istanza. Ad esempio,
--image=cos-113-18244-85-29. - filename: il nome del file di metadati.
È possibile impostare altri flag di metadati durante la creazione di istanze Container-Optimized OS. 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 dalla milestone 97,
puoi impostare i flag di metadati nei metadati del 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 dump di 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 di aggiornamento automatico. Il valore può essere update_enabled, update_disabled o non impostato.Se non è impostato, verrà utilizzato il comportamento di aggiornamento automatico predefinito per la milestone. Se abilitato, il comportamento dipende dal canale di rilascio:
|
|
cos-metrics-enabled |
Abilita la raccolta dei dump di arresto anomalo. I valori possono essere:truefalse (impostazione predefinita). |
Disabilitato per impostazione predefinita |
Connettersi a un'istanza
Puoi accedere tramite SSH all'istanza VM che esegue l'immagine del nodo cos nello stesso modo
in cui accedi tramite SSH ad 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 startup-script chiave dei metadati. Puoi utilizzare il
Google Cloud CLI, l'API o la Google Cloud console per fornire uno
script di avvio. Per maggiori dettagli, consulta Esecuzione di script di avvio.
Sincronizzazione dell'ora
Prima della milestone 85, Container-Optimized OS utilizza il servizio systemd's systemd-timesyncd per sincronizzare
l'orologio di sistema locale con un server NTP (Network Time Protocol) remoto tramite il
protocollo SNTP. 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 root massima accettabile è di 5 secondi e gli intervalli di polling minimo e massimo per i messaggi NTP sono rispettivamente di 32 e 2048 secondi.
A partire dalla milestone 85, Container-Optimized OS utilizza il servizio chronyd per sincronizzare l'orologio di sistema locale con un server NTP (Network 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 dei 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 di 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 è senza stato, quindi il fuso orario verrà reimpostato sul valore predefinito (UTC0) a ogni riavvio.
Attivare o disattivare gli aggiornamenti automatici
Esistono due modi per attivare o disattivare gli aggiornamenti automatici. Il metodo preferito è impostare la chiave dei metadati dell'istanza cos-update-strategy su update_enabled o update_disabled, rispettivamente. Ad esempio:
gcloud compute instances create instance-name \
--image image-name \
--image-project cos-cloud \
--metadata cos-update-strategy=update_disabled
A partire dalla milestone 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 disattivare gli aggiornamenti automatici su un'istanza in esecuzione con systemctl:
sudo systemctl stop update-engine sudo systemctl mask update-engine