Ce guide explique comment extraire des images d'Artifact Registry pour les déployer sur Google Kubernetes Engine. Si vous souhaitez déployer sur des services Kubernetes auto-hébergés ou tiers, vous devez configurer l'authentification auprès de Google Cloud avant d'extraire des images depuis Artifact Registry. Pour vous authentifier auprès de Google Cloud à partir de charges de travail Kubernetes en dehors de Google Cloud, consultez la section Configurer la fédération d'identité de charge de travail avec Kubernetes.
Google Kubernetes Engine peut extraire des images directement à partir de dépôts Docker. Certaines versions incluent la compatibilité préconfigurée pour l'extraction d'images à partir de dépôts Docker Artifact Registry.
Conditions requises
Cette section décrit les conditions requises pour l'intégration à GKE.
Autorisations
GKE utilise les valeurs par défaut suivantes lorsque vous créez des pools de nœuds ou des clusters:
- Le compte de service Compute Engine par défaut est l'identité des nœuds.
-
Selon la configuration de vos règles d'administration, le compte de service par défaut peut se voir attribuer automatiquement le rôle Éditeur sur votre projet. Nous vous recommandons vivement de désactiver l'attribution automatique des rôles en appliquant la contrainte de règle d'administration
iam.automaticIamGrantsForDefaultServiceAccounts
. Si vous avez créé votre organisation après le 3 mai 2024, cette contrainte est appliquée par défaut.Si vous désactivez l'attribution automatique de rôles, vous devez choisir les rôles à attribuer aux comptes de service par défaut, puis attribuer ces rôles vous-même.
Si le compte de service par défaut dispose déjà du rôle Éditeur, nous vous recommandons de le remplacer par des rôles moins permissifs.Pour modifier les rôles du compte de service en toute sécurité, utilisez Policy Simulator pour voir l'impact de la modification, puis attribuez et révoquez les rôles appropriés.
- Les nœuds que vous créez avec le compte de service par défaut disposent des champs d'application par défaut Compute Engine, y compris d'un accès en lecture seule à l'espace de stockage. Vous ne pouvez pas modifier les niveaux d'accès sur des nœuds existants.
Si vous avez désactivé l'attribution du rôle Éditeur de base, attribuez au compte de service Compute Engine par défaut le rôle Lecteur Artifact Registry (roles/artifactregistry.reader
).
Si vous utilisez ces valeurs par défaut et attribuez au compte de service Compute Engine par défaut le rôle Lecteur Artifact Registry (roles/artifactregistry.reader
), GKE peut extraire des images à partir des dépôts Artifact Registry du même projet. Google Cloud Si vous devez transférer des images à partir de nœuds, extraire ou transférer des images entre des projets, utiliser un compte de service fourni par l'utilisateur ou avoir d'autres besoins que les paramètres par défaut ne prennent pas en charge, consultez la documentation sur le contrôle des accès pour en savoir plus sur la configuration des accès.
Si des erreurs "permission denied" (autorisation refusée) s'affichent, consultez la section Erreurs 4xx.
Version de GKE
Le tableau suivant répertorie les versions minimales requises de GKE pour créer des clusters disposant des autorisations par défaut pour extraire des conteneurs de dépôts Docker dans le même projet.
Version | Correctif minimal requis |
---|---|
1,14 | 1.14.10-gke.22 |
1.15 | 1.15.9-gke.8 |
Si votre version de GKE est antérieure à la version minimale, vous devez configurer Kubernetes imagePullSecrets pour permettre à GKE d'extraire des images.
Si GKE se trouve dans un projet différent de celui qui contient Artifact Registry, accordez des autorisations Artifact Registry au compte de service utilisé par votre nœud GKE. Par défaut, les nœuds utilisent le compte de service par défaut Compute Engine.
Exécuter une image
Vous pouvez exécuter une image Artifact Registry sur un cluster Google Kubernetes Engine à l'aide de la commande suivante :
kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
où :
-
LOCATION
est l'emplacement régional ou multirégional du dépôt. PROJECT
est l'ID de projet dans la console Google Cloud. Si l'ID de votre projet contient un deux-points (:
), consultez la section Projets à l'échelle du domaine.REPOSITORY
est le nom du dépôt où l'image est stockée.IMAGE
est le nom de l'image dans le dépôt.TAG
est le tag de la version de l'image que vous souhaitez extraire.
Pour en savoir plus sur les commandes Kubernetes, consultez la présentation de kubectl.
Résoudre les problèmes liés aux images de nœuds containerd
À partir de la version 1.19 du nœud GKE, l'image de nœud par défaut pour les nœuds Linux est la variante Container-Optimized OS avec containerd (cos_containerd
), au lieu de la variante Container-Optimized OS avec Docker (cos
).
Bien que le binaire Docker soit disponible sur les nœuds Linux qui utilisent containerd en tant qu'environnement d'exécution, nous ne vous recommandons pas de l'utiliser. Docker ne gère pas les conteneurs exécutés par Kubernetes sur les nœuds containerd. Par conséquent, vous ne pouvez pas l'utiliser pour afficher des conteneurs Kubernetes ni pour interagir avec eux à l'aide des commandes Docker ou de l'API Docker.
Pour déboguer les nœuds Linux ou résoudre les problèmes associés, vous pouvez interagir avec containerd à l'aide de l'outil de ligne de commande portable crictl
conçu pour les environnements d'exécution de conteneurs Kubernetes. crictl
offre des fonctionnalités courantes telles que l'affichage des conteneurs et des images, la consultation des journaux et l'exécution de commandes dans les conteneurs.
Pour en savoir plus, consultez le guide de l'utilisateur crictl et la documentation GKE sur containerd.
Pour les nœuds Windows Server, le daemon containerd s'exécute en tant que service Windows nommé containerd
. Les journaux sont disponibles dans le répertoire des journaux suivant : C:\etc\kubernetes\logs\containerd.log
. Ils s'affichent dans l'explorateur de journaux sous LOG NAME: "container-runtime"
.
Extraire à partir d'un dépôt public Artifact Registry
Une fois que vous avez déployé une image dans un cluster GKE avec des nœuds containerisés, vous pouvez vous connecter à une instance de VM à l'aide de SSH et exécuter des commandes crictl
pour le dépannage.
Les dépôts publics Artifact Registry ne nécessitent aucune authentification. crictl
peut également être utilisé pour extraire des images dans des dépôts Artifact Registry privés.
Console
Dans Google Cloud Console, accédez à la page Instances de VM.
Dans la liste des instances de machine virtuelle, cliquez sur la flèche à côté de SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.
Sélectionnez "Ouvrir dans la fenêtre du navigateur" ou la méthode de connexion de votre choix dans le menu déroulant.
La console Google Cloud ouvre une nouvelle fenêtre de terminal. Utilisez
crictl
pour extraire une image d'Artifact Registry:crictl pull IMAGE_LOCATION:TAG
La sortie ressemble à ceci :
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Lorsque vous extrayez une image à partir d'un dépôt privé Artifact Registry, vous devez vous y authentifier. Vous pouvez utiliser un jeton d'accès pour fournir vos identifiants.
gcloud
Assurez-vous de disposer de la dernière version de la CLI Google Cloud.
gcloud components update
Connectez-vous à la VM :
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Remplacez l'élément suivant :
PROJECT_ID
: ID du projet contenant la VMZONE
: nom de la zone dans laquelle se trouve la VM.VM_NAME
: nom de la VM
Si vous avez défini les propriétés par défaut de la CLI Google Cloud, vous pouvez omettre les options
--project
et--zone
de cette commande. Exemple :gcloud compute ssh VM_NAME
Si vous n'avez pas encore créé de clé SSH, SSH keygen en génère une pour vous. Saisissez une phrase secrète ou laissez le champ vide lorsque vous y êtes invité.
Utilisez
crictl
pour extraire une image d'Artifact Registry:crictl pull IMAGE_LOCATION:TAG
La sortie ressemble à ceci :
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Lorsque vous extrayez une image à partir d'un dépôt privé Artifact Registry, vous devez vous y authentifier. Vous pouvez utiliser un jeton d'accès pour fournir vos identifiants.
Extraire à partir d'un dépôt Artifact Registry privé
Console
Dans Google Cloud Console, accédez à la page Instances de VM.
Dans la liste des instances de machine virtuelle, cliquez sur la flèche à côté de SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.
Sélectionnez "Ouvrir dans la fenêtre du navigateur" dans le menu déroulant.
La console Google Cloud ouvre une nouvelle fenêtre de terminal. Générez un jeton d'accès de compte de service Compute Engine à l'aide de
curl
.curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
Le résultat ressemble à l'exemple suivant :
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Copiez la valeur de
access_token
à partir de la sortie renvoyée, sans guillemets.Extrayez l'image à l'aide de
crictl pull --creds
et de la valeuraccess_token
copiée à l'étape précédente.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
La sortie ressemble à ceci :
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
gcloud
Assurez-vous de disposer de la dernière version de la CLI Google Cloud.
gcloud components update
Connectez-vous à la VM :
gcloud compute ssh --project=PROJECT_ID \ --zone=ZONE \ VM_NAME
Remplacez les variables suivantes :
PROJECT_ID
: ID du projet contenant la VMZONE
: nom de la zone dans laquelle se trouve la VM.VM_NAME
: nom de la VM
Si vous avez défini les propriétés par défaut de la CLI Google Cloud, vous pouvez omettre les options
--project
et--zone
de cette commande. Exemple :gcloud compute ssh VM_NAME
Si vous n'avez pas encore créé de clé SSH, SSH keygen en génère une pour vous. Saisissez une phrase secrète ou laissez le champ vide lorsque vous y êtes invité.
Générez un jeton d'accès de compte de service Compute Engine à l'aide de
curl
.curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
La sortie ressemble à ceci :
"access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T sh","expires_in":3526,"token_type":"Bearer"}
Copiez la valeur de
access_token
à partir de la sortie renvoyée, sans guillemets.Extrayez l'image à l'aide de
crictl pull --creds
et de la valeuraccess_token
copiée à l'étape précédente.crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG
La sortie ressemble à ceci :
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
crictl
permet aux développeurs de déboguer leur environnement d'exécution sans avoir à configurer les composants Kubernetes. Pour obtenir la liste complète des commandes, consultez la documentation crictl
et la documentation de débogage Kubernetes.