Transférer une image de conteneur d'un cluster à un autre

Les artefacts système existent dans Artifact Registry du cluster d'administrateur. Transférez de nouveaux artefacts système lorsque le système présente des bugs ou des pannes que vous pouvez corriger en appliquant des correctifs à de nouveaux artefacts.

Ce document explique comment transférer des artefacts individuels d'un cluster à un autre.

Avant de commencer

Pour obtenir les autorisations nécessaires pour accéder aux ressources dans les projets Artifact Registry système en tant qu'administrateur, demandez à votre Administrateur de sécurité de vous accorder les rôles suivants en fonction du cluster dans lequel vous souhaitez transférer l'image de conteneur :

  • Cluster d'administrateur de l'organisation : pour transférer l'image de conteneur vers le registre Artifact Registry du système du cluster d'administrateur de l'organisation, vous avez besoin du rôle Administrateur de la gestion des artefacts système de l'organisation (organization-system-artifact-management-admin).
  • Cluster d'administrateur racine : pour transférer l'image de conteneur vers le système Artifact Registry du cluster d'administrateur racine, vous avez besoin du rôle Administrateur de la gestion des artefacts système (system-artifact-management-admin).

Après avoir obtenu les autorisations nécessaires, suivez les étapes ci-dessous avant d'envoyer une image à Artifact Registry système du cluster d'administrateur racine ou du cluster d'administrateur de l'organisation :

  1. Téléchargez et installez Distributed Cloud CLI en suivant les instructions de l'interface de ligne de commande (CLI) gdcloud.

  2. Installez le composant docker-credential-gdcloud en suivant les instructions de la section Installer des composants.

    gdcloud components install docker-credential-gdcloud
    
  3. Connectez-vous avec le fournisseur d'identité configuré.

    gdcloud auth login
    
  4. Exportez le fichier kubeconfig.

    gdcloud clusters get-credentials CLUSTER_NAME
    

    Remplacez CLUSTER_NAME par le nom du cluster.

  5. Configurez Docker.

    gdcloud auth configure-docker
    

Télécharger une image de conteneur à partir d'un bucket S3

Pour obtenir les autorisations nécessaires pour télécharger l'image de conteneur depuis le bucket S3, demandez à votre Administrateur de sécurité de vous attribuer le rôle Lecteur d'objets du bucket de projet (project-bucket-object-viewer) dans l'espace de noms du projet.

L'administrateur de sécurité vous accorde l'accès en créant une liaison de rôle :

kubectl create rolebinding IO_USER-bor-rb \
  --role=project-bucket-object-viewer \
  --user=USER \
  -n PROJECT_NAMESPACE

Remplacez les éléments suivants :

  • USER : nom du compte de l'utilisateur qui a besoin de l'association de rôle.
  • PROJECT_NAMESPACE : espace de noms du projet avec le bucket S3.

Vous bénéficiez d'un accès en lecture seule au bucket du projet et aux objets qu'il contient.

Après avoir obtenu les autorisations nécessaires, suivez les étapes ci-dessous pour télécharger l'image de conteneur à partir du bucket S3 de l'espace de noms du projet :

  1. Obtenez le nom secret du bucket. Le nom du secret ressemble à l'exemple suivant :

    object-storage-key-std-user-ID
    

    Le nom du secret inclut une valeur ID unique pour accéder au bucket.

  2. Copiez le nom secret du bucket.

  3. Obtenez les identifiants d'accès au bucket et configurez l'outil de CLI s3cmd.

    SECRET_NAME=SECRET_NAME
    ACCESS_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.access-key-id}' | base64 -d)
    SECRET_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.secret-access-key}' | base64 -d)
    S3_ENDPOINT=objectstorage.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
    echo "Access Key: ${ACCESS_KEY}" \
    && echo "Secret Key: ${SECRET_KEY}" \
    && echo "S3 Endpoint: ${S3_ENDPOINT}"
    
    s3cmd --configure
    

    Remplacez SECRET_NAME par la valeur que vous avez copiée à l'étape précédente.

  4. Téléchargez l'image de conteneur depuis le bucket S3 vers votre poste de travail.

    s3cmd get s3://BUCKET_NAME /g/CONTAINER_IMAGE_NAME
    

    Remplacez les éléments suivants :

    • BUCKET_NAME : nom du bucket S3 contenant l'image de conteneur.
    • CONTAINER_IMAGE_NAME : nom du fichier image de conteneur que vous souhaitez télécharger depuis le bucket S3.

Transférer l'image vers Artifact Registry du système

Pour transférer le fichier de l'image de conteneur qui se trouve sur votre poste de travail vers le système Artifact Registry du cluster d'administrateur, procédez comme suit :

  1. Ouvrez la console.

  2. Obtenez le chemin d'accès au point de terminaison Artifact Registry du système du cluster dans lequel vous souhaitez transférer l'image de conteneur.

    export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
  3. Chargez, taguez et transférez l'image de conteneur vers le point de terminaison Artifact Registry du système du cluster.

    docker load --input CONTAINER_IMAGE_PATH
    
    docker tag CONTAINER_IMAGE_PATH ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
    
    docker push ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
    

    Remplacez CONTAINER_IMAGE_PATH par le chemin d'accès au fichier image du conteneur dans votre système de fichiers local. Une valeur valide pour ce chemin d'accès est, par exemple, oracle_db.tar.