Desplegar en Google Kubernetes Engine

En esta guía se describe cómo extraer imágenes de Artifact Registry para desplegarlas en Google Kubernetes Engine. Si quieres implementar servicios de Kubernetes autohospedados o de terceros, debes configurar la autenticación para Google Cloud antes de extraer imágenes de Artifact Registry. Para autenticarte en Google Cloud desde cargas de trabajo de Kubernetes que no estén en Google Cloud, consulta Configurar la federación de identidades de cargas de trabajo con Kubernetes.

Google Kubernetes Engine puede extraer imágenes directamente de 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 integrar GKE.

Permisos

GKE usa los siguientes valores predeterminados al crear grupos de nodos o clústeres:

Si has inhabilitado la concesión del rol Editor básico, concede a la cuenta de servicio predeterminada de Compute Engine el rol Lector de Artifact Registry (roles/artifactregistry.reader).

Si usas estos valores predeterminados y le asignas a la cuenta de servicio predeterminada de Compute Engine el rol Lector de Artifact Registry (roles/artifactregistry.reader), GKE podrá extraer imágenes de los repositorios de Artifact Registry del mismo proyecto 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 no admiten los ajustes predeterminados, consulta la documentación sobre control de acceso para obtener información sobre cómo configurar el acceso.

Si se producen errores de "permiso denegado", consulta la sección Errores 4xx.

Versión de GKE

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

Versión Parche mínimo necesario
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 que GKE pueda extraer imágenes.

Si GKE está en un proyecto diferente al de Artifact Registry, concede permisos de Artifact Registry a la cuenta de servicio que use tu nodo de GKE. De forma predeterminada, los nodos usan la cuenta de servicio predeterminada de Compute Engine.

Ejecutar 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 Google Cloud ID del proyecto de la consola . Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con ámbito 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 quieres extraer.

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

Solucionar problemas de imágenes de nodo de containerd

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

Aunque el archivo binario de Docker está disponible en los nodos de Linux que usan containerd como tiempo de ejecución, no recomendamos usarlo. Docker no gestiona los contenedores que Kubernetes ejecuta en nodos containerd, por lo que no puedes usarlo para ver o interactuar con los contenedores de Kubernetes en ejecución mediante comandos de Docker o la API de Docker.

Para depurar o solucionar problemas en nodos Linux, puedes interactuar con containerd mediante la herramienta de línea de comandos portátil creada para los tiempos de ejecución de contenedores de Kubernetes: crictl. crictl admite funcionalidades comunes para ver contenedores e imágenes, 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.

En los nodos de Windows Server, el daemon de 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".

Extraer contenido de un repositorio público de Artifact Registry

Una vez que hayas desplegado una imagen en un clúster de GKE con nodos de containerd, podrás conectarte a una instancia de VM mediante SSH y ejecutar crictlcomandos para solucionar problemas.

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

Consola

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

    Botón SSH situado junto al nombre de la instancia.

    .
  3. Selecciona "Abrir en ventana del navegador" o el método de conexión que prefieras en las opciones del menú desplegable.

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

    crictl pull IMAGE_LOCATION:TAG
    

    La salida tiene este aspecto:

    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. Comprueba que tienes la versión más reciente de la CLI de Google Cloud

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

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

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del proyecto que contiene la VM
    • ZONE: el nombre de la zona en la que se encuentra la máquina virtual
    • VM_NAME: el nombre de la VM

    Si has definido 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 has creado una clave SSH, SSH-keygen generará una. Introduce una frase de contraseña o déjalo en blanco cuando se te solicite.

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

    crictl pull IMAGE_LOCATION:TAG
    
  5. La salida tiene este aspecto:

    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.

Extraer contenido de un repositorio privado de Artifact Registry

Consola

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

    Botón SSH situado junto al nombre de la instancia.

    .
  3. Selecciona "Abrir en ventana del navegador" en las opciones desplegables.

  4. Google Cloud se abre una nueva ventana de terminal. 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"
    

    La salida tiene el siguiente aspecto:

    "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 de la salida devuelta sin las comillas.

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

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

    La salida tiene este aspecto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

gcloud

  1. Comprueba que tienes la versión más reciente de la CLI de Google Cloud

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

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

    Sustituye 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 máquina virtual
    • VM_NAME: el nombre de la VM

    Si has definido 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 has creado una clave SSH, SSH-keygen generará una. Introduce una frase de contraseña o déjalo en blanco cuando se te solicite.

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

    La salida tiene este aspecto:

    "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 de la salida devuelta sin las comillas.

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

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

    La salida tiene este aspecto:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

crictl permite a los desarrolladores depurar su tiempo de ejecución sin tener que configurar componentes de Kubernetes. Para ver una lista completa de los comandos, consulta la documentación de crictl y la documentación de depuración de Kubernetes.