Déployer sur Google Kubernetes Engine

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.

Exigences

Cette section décrit les exigences relatives à l'intégration à GKE.

Autorisations

Par défaut, GKE utilise le compte de service Compute Engine comme identité pour les nœuds. Ce compte de service par défaut dispose d'un accès en lecture seule aux dépôts Artifact Registry dans le même projet Google Cloud.

Si vos dépôts se trouvent dans un projet différent ou si vous utilisez un compte de service géré par l'utilisateur en tant qu'identité pour vos nœuds, vous devez attribuer le rôle de lecteur Artifact Registry au compte de service. Pour importer des données dans des dépôts à partir de nœuds, attribuez le rôle "Rédacteur Artifact Registry".

Pour en savoir plus, consultez la documentation relative au contrôle des accès.

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.8-gke.37
1.14.9-gke.28
1.14.10-gke.22
1.15 1.15.7-gke.28 1.15.8-gke.6
1.15.9-gke.1
1.16 1.16.4-gke.28
1.16.5-gke.0
1.17 1.17.0-gke.5

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 d'Artifact Registry, accordez les 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 de 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 du projet dans Google Cloud Console. Si l'ID du projet contient le signe 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 de nœud GKE, l'image de nœud par défaut pour les nœuds Linux est Container-Optimized OS avec containerd.cos_containerd ) au lieu de Container-Optimized OS avec Docker (cos )

Bien que le binaire Docker soit actuellement disponible sur les nœuds Linux qui utilisent containerd en tant qu'environnement d'exécution, nous vous ne le recommandons pas. Docker ne gère pas les conteneurs que Kubernetes exécute sur les nœuds containerd. Vous ne pouvez donc pas l'utiliser pour afficher ou interagir avec l'exécution de conteneurs Kubernetes à l'aide des commandes Docker ou de l'API Docker.

Pour effectuer un débogage ou dépanner des nœuds Linux, 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, reportez-vous au guide de l'utilisateur de 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 Artifact Registry public

Une fois que vous avez déployé l'image sur un cluster GKE avec des nœuds en conteneurs, 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 Public Artifact Registry ne nécessitent pas d'authentification. crictl peut également être utilisé pour extraire des images de dépôts Artifact Registry privés.

Console

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

  2. Dans la liste des instances de machine virtuelle, cliquez sur la flèche située à côté de SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

    bouton SSH en regard du nom de l'instance.

  3. Sélectionnez "Ouvrir dans la fenêtre du navigateur" ou la méthode de connexion de votre choix dans les options déroulantes.

  4. Cloud Console 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 d'un dépôt privé Artifact Registry, vous devez vous authentifier auprès du dépôt. Vous pouvez utiliser un jeton d'accès pour fournir vos identifiants.

gcloud

  1. Vérifiez que vous disposez de la dernière version de l'outil de ligne de commande gcloud

    gcloud components update
    
  2. 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 VM
    • ZONE : 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 l'outil de ligne de commande gcloud, vous pouvez omettre les indicateurs --project et --zone de cette commande. Exemple :

    gcloud compute ssh VM_NAME
    
  3. Si vous n'avez pas encore créé de clé SSH, la génération de clé SSH en génère une pour vous. Saisissez une phrase secrète ou laissez ce champ vide lorsque vous y êtes invité.

  4. Utilisez crictl pour extraire une image d'Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    
  5. La sortie ressemble à ceci :

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Lorsque vous extrayez une image d'un dépôt privé Artifact Registry, vous devez vous authentifier auprès du dépôt. Vous pouvez utiliser un jeton d'accès pour fournir vos identifiants.

Extraire un dépôt Artifact Registry privé

Console

  1. Dans Google Cloud Console, accédez à la page Instances de VM.

    Accéder à la page "Instances de VM"

  2. Dans la liste des instances de machine virtuelle, cliquez sur la flèche située à côté de SSH sur la ligne de l'instance à laquelle vous souhaitez vous connecter.

    bouton SSH en regard du nom de l'instance.

  3. Sélectionnez "Ouvrir dans une fenêtre du navigateur" dans les options déroulantes.

  4. Cloud Console ouvre une nouvelle fenêtre de terminal. Générez un jeton d'accès au 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"}
  5. Copiez la valeur de access_token à partir du résultat renvoyé sans les guillemets.

  6. Extrayez l'image à l'aide de crictl pull --creds et de la valeur access_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

  1. Vérifiez que vous disposez de la dernière version de l'outil de ligne de commande gcloud

    gcloud components update
    
  2. 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 VM
    • ZONE : 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 l'outil de ligne de commande gcloud, vous pouvez omettre les indicateurs --project et --zone de cette commande. Exemple :

    gcloud compute ssh VM_NAME
    
  3. Si vous n'avez pas encore créé de clé SSH, la génération de clé SSH en génère une pour vous. Saisissez une phrase secrète ou laissez ce champ vide lorsque vous y êtes invité.

  4. Générez un jeton d'accès au 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"}
  5. Copiez la valeur de access_token à partir du résultat renvoyé sans les guillemets.

  6. Extrayez l'image à l'aide de crictl pull --creds et de la valeur access_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 une liste complète des commandes, consultez la documentation de crictl et la documentation de débogage de Kubernetes.