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:
- La cuenta de servicio predeterminada de Compute Engine es la identidad para los nodos. Esta cuenta de servicio predeterminada tiene el rol básico de editor de IAM, si aún no has inhabilitado este comportamiento.
- Los nodos que creas con la cuenta de servicio predeterminada tienen los permisos de acceso predeterminados de Compute Engine, incluido el acceso de solo lectura al almacenamiento. No puedes cambiar los permisos de acceso en los nodos existentes.
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
En la consola de Google Cloud, ve a la página Instancias de VM.
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.
Selecciona "Abrir en la ventana del navegador" o el método de conexión que prefieras en las opciones del menú desplegable.
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
Asegúrate de tener la versión más reciente de Google Cloud CLI
gcloud components update
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 VMZONE
: El nombre de la zona en la que se encuentra la VMVM_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
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.
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.
Extrae desde un repositorio privado de Artifact Registry
Console
En la consola de Google Cloud, ve a la página Instancias de VM.
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.
En las opciones del menú desplegable, selecciona "Abrir en la ventana del navegador".
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"}
Copia el valor de
access_token
del resultado que se muestra sin las comillas.Extrae la imagen con
crictl pull --creds
y el valoraccess_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
Asegúrate de tener la versión más reciente de Google Cloud CLI
gcloud components update
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 VMZONE
: El nombre de la zona en la que se encuentra la VMVM_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
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.
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"}
Copia el valor de
access_token
del resultado que se muestra sin las comillas.Extrae la imagen con
crictl pull --creds
y el valoraccess_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.