Implementa en Google Kubernetes Engine

En esta guía, se describe cómo extraer imágenes de Artifact Registry para implementarlas en Google Kubernetes Engine. Si quieres realizar implementaciones en Kubernetes autoalojado o de terceros debes configurar la autenticación en Google Cloud antes de imágenes de Artifact Registry. Para autenticarte en Google Cloud desde Kubernetes de trabajo fuera de Google Cloud, consulta Configura la federación de identidades para cargas de trabajo con Kubernetes.

Google Kubernetes Engine puede extraer imágenes directamente de los repositorios de Docker. Algunas versiones incluyen compatibilidad preconfigurada para extraer imágenes de Artifact Registry con los repositorios de Docker.

Requisitos

En esta sección, se describen los requisitos para la integración con GKE.

Permisos

GKE usa los siguientes parámetros predeterminados cuando creas grupos de nodos o clústeres:

Si usas estos valores predeterminados, GKE puede extraer imágenes de los repositorios de Artifact Registry en el mismo proyecto de Google Cloud. Si necesitas enviar imágenes desde nodos, extraer o enviar imágenes entre proyectos, usar una cuenta de servicio proporcionada por el usuario o tienes otras necesidades que la configuración predeterminada no admite, consulta la documentación de control de acceso para obtener información sobre cómo configurar el acceso.

Qué hacer si aparece el mensaje "permiso denegado" errores, consulta Error de permiso denegado.

Versión de GKE

En la siguiente tabla, se enumeran las versiones de GKE mínimas requeridas crear clústeres que tengan permisos predeterminados para extraer contenedores de Docker repositorios en el mismo proyecto.

Versión Parche mínimo requerido
1.14 1.14.10-gke.22
1.15 1.15.9-gke.8

Si tu versión de GKE es anterior a la versión mínima, debes configurar imagePullSecrets de Kubernetes para permitir que GKE extraiga imágenes.

Si GKE se encuentra en un proyecto distinto de Artifact Registry, otorga permisos de Artifact Registry a la cuenta de servicio que usa tu nodo de GKE. De forma predeterminada, los nodos usan la cuenta de servicio predeterminada de Compute Engine.

Ejecuta una imagen

Puedes ejecutar una imagen de Artifact Registry en un clúster de Google Kubernetes Engine con el siguiente comando:

kubectl run [NAME] --image=LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG

Donde:

  • LOCATION es la ubicación regional o multirregional del repositorio.
  • PROJECT es tu consola de Google Cloud ID del proyecto: Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio.
  • REPOSITORY es el nombre del repositorio en el que se almacena la imagen.
  • IMAGE es el nombre de la imagen en el repositorio.
  • TAG es la etiqueta de la versión de la imagen que deseas extraer.

Para obtener más información sobre los comandos de Kubernetes, consulta la página de descripción general de kubectl.

Soluciona problemas de imágenes de nodos containerd

A partir de la versión 1.19 del nodo de GKE, la imagen de nodo predeterminada para nodos de Linux es Container-Optimized OS con la imagen de (cos_containerd) en lugar de Container-Optimized OS con Variante de Docker (cos).

El objeto binario de Docker está disponible en los nodos de Linux que usan containerd como entorno de ejecución, no recomendamos usarlo. Docker no administra los contenedores que Kubernetes se ejecuta en nodos containerd, por lo que no se puede usar para ver o interactuar con contenedores de Kubernetes en ejecución mediante comandos de Docker o la API de Docker.

Para depurar o solucionar problemas en el nodo de Linux, puedes interactuar con containerd mediante la herramienta de línea de comandos portátil creada para entornos de ejecución de contenedor de Kubernetes: crictl. crictl admite funcionalidades comunes para ver imágenes y contenedores, leer registros y ejecutar comandos en los contenedores.

Para obtener más información, consulta la guía del usuario de crictl y la documentación de GKE sobre containerd.

Para los nodos de Windows Server, el daemon Containerd se ejecuta como un servicio de Windows llamado containerd. Los registros están disponibles en el siguiente directorio de registros: C:\etc\kubernetes\logs\containerd.log y se muestran en el Explorador de registros en LOG NAME: "container-runtime".

Extrae desde un repositorio público de Artifact Registry

Una vez que hayas implementado una imagen en un clúster de GKE con nodos de contenedor, puedes conectarte a una instancia de VM con SSH y ejecutar comandos crictl para solucionar problemas.

Los repositorios públicos de Artifact Registry no requieren autenticación. crictl también se puede usar para extraer imágenes en repositorios privados de Artifact Registry.

Console

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. En la lista de instancias de máquinas virtuales, haz clic en la flecha junto a SSH en la fila de la instancia a la que deseas conectarte.

    Botón SSH junto al nombre de la instancia.

  3. Selecciona “Abrir en la ventana del navegador”. o el método de conexión que elijas en las opciones del menú desplegable.

  4. La consola de Google Cloud abre una nueva ventana de terminal. Usa crictl para extraer una imagen de Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    

    El resultado luce de la siguiente manera:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Cuando extraes una imagen de un repositorio privado de Artifact Registry, debes autenticarte en el repositorio. Puedes usar un token de acceso para proporcionar tus credenciales.

gcloud

  1. Asegúrate de tener la versión más reciente de Google Cloud CLI

    gcloud components update
    
  2. Conéctate a la VM.

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto que contiene la VM
    • ZONE: El nombre de la zona en la que se encuentra la VM
    • VM_NAME: El nombre de la VM

    Si estableciste propiedades predeterminadas para Google Cloud CLI, puedes omitir las marcas --project y --zone de este comando. Por ejemplo:

    gcloud compute ssh VM_NAME
    
  3. Si aún no creaste una clave SSH, SSH Keygen generará una por ti. Ingresa una frase de contraseña o déjala en blanco cuando se te solicite.

  4. Usa crictl para extraer una imagen de Artifact Registry:

    crictl pull IMAGE_LOCATION:TAG
    
  5. El resultado luce de la siguiente manera:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

    Cuando extraes una imagen de un repositorio privado de Artifact Registry, debes autenticarte en el repositorio. Puedes usar un token de acceso para proporcionar tus credenciales.

Realiza una extracción desde un repositorio privado de Artifact Registry

Console

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. En la lista de instancias de máquina virtual, haz clic en la flecha que se encuentra junto a SSH en la fila de la instancia que quieres conectar a los que tiene acceso una cuenta.

    Botón SSH junto al nombre de la instancia.

  3. Selecciona "Abrir en otra ventana del navegador" en las opciones del menú desplegable.

  4. La consola de Google Cloud abre una nueva ventana de terminal. Genera un Token de acceso a la cuenta de servicio de Compute Engine con curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    El resultado se ve como en el siguiente ejemplo:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copia el valor de access_token del resultado que se muestra sin el comillas.

  6. Extrae la imagen con crictl pull --creds y el valor access_token que copiaste en el paso anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    El resultado luce de la siguiente manera:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Asegúrate de tener la versión más reciente de Google Cloud CLI

    gcloud components update
    
  2. Conéctate a la VM.

    gcloud compute ssh --project=PROJECT_ID \
     --zone=ZONE \
     VM_NAME
    

    Reemplaza las siguientes variables:

    • PROJECT_ID: El ID del proyecto que contiene la VM
    • ZONE: El nombre de la zona en la que se encuentra la VM
    • VM_NAME: El nombre de la VM

    Si estableciste propiedades predeterminadas para Google Cloud CLI, puedes omitir las marcas --project y --zone de este comando. Por ejemplo:

    gcloud compute ssh VM_NAME
    
  3. Si aún no creaste una clave SSH, SSH keygen te generará una. Ingresa una frase de contraseña o déjala en blanco cuando se te solicite.

  4. Genera un token de acceso de la cuenta de servicio de Compute Engine con curl.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
    

    El resultado luce de la siguiente manera:

    "access_token":"ya29.c.KpkBCQgdwv6LrZ2tjrCpG6snWwPMX29LzMeUmAV_Hq_XaxUurfXcCfGZfASGh_KbdmUYTvkuV3sh-WaSBplEskdP6Tc
    HDsTv4B9hMyvoL4M9HrzKHuKTa1ZGj_3iQ1lwq_dAMxAPGjxEVKexatwN2KP0EAWyb6R55Cuu8ItgLf9f4pm9lC5zH4Qo0fkxPUsnCGRBe4AYxEpN6T
    sh","expires_in":3526,"token_type":"Bearer"}
  5. Copia el valor de access_token del resultado que se muestra sin el comillas.

  6. Extrae la imagen con crictl pull --creds y el valor access_token que copiaste en el paso anterior.

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" IMAGE_LOCATION:TAG

    El resultado luce de la siguiente manera:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

crictl permite que los desarrolladores depuren su entorno de ejecución sin necesidad de configurar componentes de Kubernetes. Para obtener una lista completa de los comandos, consulta los documentos de crictl. y los documentos de depuración de Kubernetes.