Implementación 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 implementar en servicios de Kubernetes autoalojados o de terceros, debes configurar la autenticación en Google Cloud antes de extraer imágenes de Artifact Registry. Para autenticarte en Google Cloud desde cargas de trabajo de Kubernetes 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 repositorios de Docker de Artifact Registry.

Requisitos

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

Permisos

GKE usa los siguientes valores predeterminados cuando creas clústeres o grupos de nodos:

Si usas estos valores predeterminados, GKE puede extraer imágenes de 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 la configuración del acceso.

Versión de GKE

En la siguiente tabla, se enumeran las versiones mínimas de GKE necesarias para crear clústeres que tengan permisos predeterminados a fin de extraer contenedores de repositorios de Docker 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 Kubernetes imagePullSecrets para permitir que GKE extraiga imágenes.

Si GKE está en un proyecto diferente que 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 el ID del proyecto de la consola de Google Cloud. 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 nodo containerd

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

Si bien el objeto binario de Docker está disponible en nodos de Linux que usan containerd como entorno de ejecución, no recomendamos su uso. Docker no administra los contenedores que Kubernetes ejecuta en nodos containerd, por lo que no puedes usarlo para ver contenedores de Kubernetes en ejecución ni interactuar con ellos mediante los 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 portátil de línea de comandos 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 en 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 containerd, puedes conectarte a una instancia de VM mediante SSH y ejecutar comandos de 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áquina virtual, 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 prefieras 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, Keygen SSH generará una para ti. Ingresa una frase de contraseña o déjala vacía 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.

Extrae 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 junto a SSH en la fila de la instancia a la que deseas conectarte.

    Botón SSH junto al nombre de la instancia.

  3. En las opciones del menú desplegable, selecciona "Abrir en la ventana del navegador".

  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 mediante 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 las comillas.

  6. Extrae la imagen con crictl pull --creds y el valor access_token copiado 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, Keygen SSH generará una para ti. Ingresa una frase de contraseña o déjala vacía cuando se te solicite.

  4. Genera un token de acceso de 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 las comillas.

  6. Extrae la imagen con crictl pull --creds y el valor access_token copiado 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 a los desarrolladores depurar 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.