Implementa en Google Kubernetes Engine

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

Requisitos

En esta sección, se describen los requisitos para integrar a GKE.

Permisos

De forma predeterminada, GKE usa la cuenta de servicio de Compute Engine como la identidad para los nodos. Esta cuenta de servicio predeterminada tiene acceso de solo lectura a los repositorios de Artifact Registry en el mismo proyecto de Google Cloud.

Si tus repositorios están en un proyecto diferente o si usas una cuenta de servicio administrada por el usuario como identidad para tus nodos, debes otorgar la función de lector de Artifact Registry a la cuenta de servicio. Para subir a repositorios de nodos, otorga la función de escritor de Artifact Registry.

Para obtener más información, consulta la documentación de control de 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 del mismo proyecto.

Versión Parche mínimo requerido
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 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 está en un proyecto diferente que Artifact Registry, otorga permisos de Artifact Registry a la cuenta de servicio que usa el 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 de tu proyecto de Google Cloud Console. 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 Container-Optimized OS con containerd (cos_containerd ) en lugar de Container-Optimized OS con Docker (cos ).

Si bien el objeto binario de Docker está disponible en la actualidad en nodos de Linux que usan containerd como entorno de ejecución, no recomendamos usarlo. Docker no administra los contenedores que Kubernetes ejecuta en nodos containerd, por lo que no puedes usarlo 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 nodos de Linux, puedes interactuar con containerd mediante la herramienta portátil de línea de comandos creada para entornos de ejecución del 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 containerd, puedes conectarte a una instancia de VM mediante 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 Google Cloud Console, 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 otra ventana del navegador” o el método de conexión que elijas en las opciones desplegables.

  4. Cloud Console abrirá una nueva ventana de la 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 la herramienta de línea de comandos de gcloud.

    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 la herramienta de línea de comandos gcloud, puedes omitir las marcas --project y --zone de este comando. Por ejemplo:

    gcloud compute ssh VM_NAME
    
  3. Si todavía no creaste una Llave SSH, SSH Keygen generará una para ti. Ingresa una frase de contraseña o deja el campo vacío 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 Google Cloud Console, 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. Seleccione "Abrir en otra ventana del navegador" en las opciones desplegables.

  4. Cloud Console abrirá una nueva ventana de la 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 mediante 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 la herramienta de línea de comandos de gcloud.

    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 la herramienta de línea de comandos gcloud, puedes omitir las marcas --project y --zone de este comando. Por ejemplo:

    gcloud compute ssh VM_NAME
    
  3. Si todavía no creaste una Llave SSH, SSH Keygen generará una para ti. Ingresa una frase de contraseña o deja el campo vacío cuando se te solicite.

  4. 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 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 mediante 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.