Il existe deux manières de créer et configurer des instances Compute Engine en exécutant Container-Optimized OS de Google.
Pour les scénarios simples dans lesquels vous souhaitez exécuter un seul conteneur sur une VM ou sur chaque VM d'un groupe d'instances géré, vous pouvez spécifier une image de conteneur et des paramètres de configuration facultatifs lorsque vous définissez l'instance ou le modèle d'instance. Compute Engine crée l'instance avec la dernière version de Container-Optimized OS et lance le conteneur spécifié au démarrage de la VM.
Pour les scénarios avancés dans lesquels vous pouvez déployer plusieurs conteneurs et configurer les options Docker à l'aide de cloud-init
, vous pouvez créer une instance Compute Engine avec votre choix d'image de Container-Optimized OS, puis procéder à la configuration selon les besoins.
Créer une instance simple
Utilisez cette méthode pour déployer un seul conteneur sur une VM à l'aide de la dernière version de Container-Optimized OS. Vous pouvez effectuer cette tâche à l'aide de la console Google Cloud ou gcloud CLI.
Console
Accédez à la page "Instances de VM".
Cliquez sur Créer une instance.
Indiquez un Nom pour votre instance.
Dans la section Conteneur, cochez la case Déployer une image de conteneur dans cette instance de VM.
Spécifiez l'Image de conteneur à utiliser.
- Vous pouvez spécifier une image provenant de Container Registry ou d'Artifact Registry.
Exemple :
gcr.io/cloud-marketplace/google/nginx1:1.15
sélectionne une image de conteneur NGINX 1.15 à partir de Google Cloud Marketplace.us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
sélectionne un exemple d'imagehello-app
dans Artifact Registry.
- Si vous utilisez une image de conteneur de Docker Hub, spécifiez toujours le nom complet de l'image Docker. Par exemple, indiquez le nom d'image suivant pour déployer une image de conteneur Apache :
docker.io/httpd:2.4
.
- Vous pouvez spécifier une image provenant de Container Registry ou d'Artifact Registry.
Exemple :
Vous pouvez également cliquer sur Options avancées des conteneurs. Pour plus d'informations, consultez la page Configurer des options pour exécuter votre conteneur.
Cliquez sur Créer pour créer et démarrer l'instance, puis lancez le conteneur.
gcloud
Pour créer une instance de VM simple, exécutez la commande suivante :
gcloud compute instances create-with-container instance-name \ --container-image image-name
Remplacez l'élément suivant :
- instance-name : nom de la nouvelle instance.
- image-name : nom de l'image du conteneur.
Par exemple, la commande suivante crée une nouvelle instance de VM nommée nginx-vm
, qui lancera et exécutera l'image de conteneur 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
De même, vous pouvez créer une instance de VM nommée hello-app
, qui lancera et exécutera un exemple de conteneur dans Artifact Registry :
gcloud compute instances create-with-container hello-app \
--container-image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Lorsque vous utilisez une image de conteneur de Docker Hub, vous devez toujours spécifier le nom complet de l'image Docker. Par exemple, indiquez le nom d'image suivant pour déployer une image de conteneur Apache :
docker.io/httpd:2.4
Pour exécuter un seul conteneur sur chaque VM d'un groupe d'instances géré, spécifiez le nom de l'image du conteneur lors de la définition du modèle d'instance. Pour en savoir plus, consultez la section Créer un modèle d'instance avec une image de conteneur.
Créer une instance pour des scénarios avancés
Utilisez cette méthode pour sélectionner une image Container-Optimized OS spécifique, déployer plusieurs conteneurs et utiliser cloud-init
pour la configuration avancée.
Afficher les images disponibles
Les images Container-Optimized OS sont disponibles dans la liste des images de la console Google Cloud (leur nom commence par cos
).
Elles sont hébergées dans le projet cos-cloud
. Vous pouvez également voir toutes les versions actuellement disponibles sur la ligne de commande en exécutant la commande suivante :
gcloud compute images list --project cos-cloud --no-standard-images
Le résultat ressemble à ce qui suit :
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
Créer une instance
Vous pouvez créer une instance à l'aide de la console Google Cloud, de gcloud CLI ou de l'API.
Console
Pour exécuter une instance Compute Engine avec Container-Optimized OS et Docker installés, procédez comme suit :
Ouvrez la page de création d'instance Compute Engine dans la console Google Cloud.
Indiquez un Nom pour votre instance.
Dans la section Conteneurs, décochez la case Déployer une image de conteneur dans cette instance de VM. Cette option est utile si vous souhaitez déployer un conteneur unique sur la VM.
Dans la section Disque de démarrage, sélectionnez une image Container-Optimized OS.
Cliquez sur Créer pour créer et démarrer l'instance.
gcloud
Vérifiez les images actuellement disponibles, puis utilisez la commande suivante pour créer une instance d'image de nœud cos
:
gcloud compute instances create instance-name \ --image image-name \ --image-project cos-cloud \ --zone compute-zone \ --machine-type machine-type-name
Remplacez l'élément suivant :
- instance-name : nom de votre instance de VM.
- image-name : nom de l'image Container-Optimized OS de l'instance, obtenu à partir de la liste des images disponibles.
Nous pouvons utiliser
cos-beta-81-12871-44-0
, spécifié dans notre exemple précédent. - compute-zone : zone de calcul de votre instance.
- machine-type-name : type de machine à utiliser pour cette nouvelle instance.
Le type par défaut est
n1-standard-1
.
Par exemple, la commande suivante crée une instance nommée cos-test
en utilisant l'image 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
Vous pouvez ajouter l'option --preemptible
pour les instances expérimentales ponctuelles.
API
Dans l'API, créez une requête normale pour créer une instance, mais incluez une image source Container-Optimized OS. Exemple :
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' } } ] }
Configurer une instance
Dans certains cas, vous souhaiterez peut-être effectuer une configuration supplémentaire au démarrage de l'instance. Vous pouvez utiliser l'outil cloud-init
avec Container-Optimized OS pour appliquer les informations de configuration que vous fournissez au format cloud-config
.
Utiliser cloud-init avec le format de configuration Cloud
Les images Container-Optimized OS incluent cloud-init
afin de configurer votre instance au démarrage. L'outil cloud-init
attend sa configuration dans la valeur de la clé user-data
des métadonnées de l'instance. L'outil cloud-init
accepte plusieurs formats.
Voici un exemple de fichier cloud-init
montrant comment créer un compte utilisateur et créer un service système appartenant à cet utilisateur qui contrôle la gestion d'un conteneur busybox 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]
Pour créer une instance de VM Container-Optimized OS qui fait référence à ce fichier cloud-init
, utilisez l'option de ligne de commande --metadata-from-file
.
En supposant que le fichier cloud-init
s'appelle filename dans le répertoire actuel, la commande suivante crée une instance Container-Optimized OS et déclenche cloud-init
en attribuant le contenu du fichier à la clé user-data
dans les métadonnées d'instance :
gcloud compute instances create instance-name \ --image image-name \ --image-project cos-cloud \ --metadata-from-file user-data=filename
Remplacez les éléments suivants :
- instance-name : nom de votre instance de VM.
- image-name : nom de l'image Container-Optimized OS de l'instance. Exemple :
--image=cos-113-18244-85-29
- filename : nom du fichier de métadonnées.
Il est possible de définir d'autres options de métadonnées lors de la création d'instances Container-Optimized OS. Ces propriétés étant de simples paires clé/valeur, vous pouvez utiliser l'option --metadata
dans la commande gcloud compute instances create
pour les créer. De plus, à partir du jalon 97,
vous pouvez définir des indicateurs de métadonnées dans le projet
métadonnées à l'aide de l'option --metadata
dans la commande gcloud compute project-info add-metadata
. Indicateurs
définies au niveau de l'instance prévalent sur les options définies au niveau
au niveau du projet.
L'exemple précédent peut être étendu pour collecter des statistiques d'utilisation et la collection de vidages sur incident en exécutant la commande suivante:
gcloud compute instances create instance-name \ --image image-name \ --image-project cos-cloud \ --metadata-from-file user-data=filename \ --metadata=cos-metrics-enabled=true
Autres indicateurs de métadonnées
Clé de métadonnée | Description | Comportement par défaut |
---|---|---|
cos-update-strategy |
Spécifie le comportement des mises à jour automatiques. La valeur peut être update_enabled , update_disabled ou non définie.Si elle n'est pas définie, le comportement de mise à jour automatique par défaut du jalon est utilisé. Si elle est activée, le comportement dépend du canal de publication :
|
|
cos-metrics-enabled |
Active la collecte des vidages sur plantage. Les valeurs peuvent être les suivantes :true false (par défaut). |
Désactivé par défaut |
Se connecter à une instance
Vous pouvez vous connecter en SSH à votre instance de VM en exécutant l'image de nœud cos
de la même manière que lorsque vous vous connectez en SSH à d'autres instances Google Compute Engine.
Exemple :
gcloud compute ssh instance-name \ --project project-id \ --zone compute-zone
Exécuter des scripts de démarrage
Vous pouvez spécifier un script de démarrage via le serveur de métadonnées à l'aide de la clé de métadonnées startup-script
. Vous pouvez utiliser la Google Cloud CLI, l'API ou la console Google Cloud pour fournir un script de démarrage. Pour en savoir plus, consultez la page Exécuter des scripts de démarrage.
Synchronisation horaire
Avant le jalon 85, Container-Optimized OS utilise le service systemd-timesyncd
de systemd
pour synchroniser l'horloge système locale avec un serveur NTP (Network Time Protocol) distant via le protocole SNTP. Les entrées suivantes du fichier de configuration /etc/systemd/timesyncd.conf
indiquent les valeurs de configuration par défaut en commentaire pour aider l'administrateur à apporter les modifications souhaitées :
cat /etc/systemd/timesyncd.conf # comments omitted for brevity [Time] #NTP= #FallbackNTP=metadata.google.internal #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048
Ainsi, la distance racine acceptable est de 5 secondes, et les intervalles d'interrogation minimum et maximum pour les messages NTP sont de 32 et 2 048 secondes respectivement.
À partir du jalon 85, Container-Optimized OS utilise le service chronyd
pour synchroniser l'horloge système locale avec un serveur NTP (Network Time Protocol) via le protocole NTP. Les entrées suivantes du fichier de configuration /etc/chrony/chrony.conf
indiquent les valeurs de configuration par défaut en commentaire pour aider l'administrateur à apporter les modifications souhaitées :
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
Le serveur NTP est défini à partir de la réponse DHCP de eth0
, qui est généralement le serveur de métadonnées de Compute Engine :
networkctl status eth0 | grep NTP NTP: 169.254.169.254
Changer le fuseau horaire
Le fuseau horaire par défaut de Container-Optimized OS par Google est UTC0. Créez un lien symbolique vers le fuseau horaire de votre choix, comme dans l'exemple suivant :
sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/US/Pacific /etc/localtime
Notez que /etc
étant sans état, le fuseau horaire est réinitialisé sur la valeur par défaut (UTC0) à chaque redémarrage.
Activer ou désactiver les mises à jour automatiques
Il existe deux façons d'activer ou de désactiver les mises à jour automatiques. La méthode privilégiée consiste à définir la clé de métadonnées d'instance cos-update-strategy
sur update_enabled
ou update_disabled
, respectivement. Exemple :
gcloud compute instances create instance-name \ --image image-name \ --image-project cos-cloud \ --metadata cos-update-strategy=update_disabled
À partir du jalon 97, vous pouvez également désactiver ou activer les mises à jour automatiques dans les métadonnées du projet:
gcloud compute project-info add-metadata \ --metadata cos-update-strategy=update_disabled
Vous pouvez également désactiver les mises à jour automatiques sur une instance en cours d'exécution avec systemctl
:
sudo systemctl stop update-engine sudo systemctl mask update-engine