GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo almacenar gráficos de Helm en Azure Container Registry

Una de las grandes ventajas de entender cómo funciona el ecosistema de contenedores es que puedes usar el mismo patrón para varias especificaciones.

No ha pasado mucho tiempo desde que Helm anunció que admitiría OCI Artifacts, que no son más que una especificación abierta de OCI para distribuir imágenes de contenedores y otros tipos de datos, llamados artefactos.

Esta especificación, como todas las demás especificaciones de OCI, es independiente de la nube, lo que la convierte en una herramienta fantástica para trabajar.

Registros de contenedores

Un registro de contenedor (CR), o un registro, es algo que todos los que alguna vez han tenido que estar involucrados con contenedores han tenido que usar. El CR es donde almacenamos las imágenes de nuestro contenedor, por lo que podemos obtenerlas desde cualquier lugar y cuando queramos.

En esencia, una imagen es básicamente un conjunto de archivos que sigue una estructura más o menos como esta:

 ├── blobs
       │   └── sha256
       │       ├── 1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db3...
       │       ├── 31fb454efb3c69fafe53672598006790122269a1b3b458607dbe106...
       │       └── 8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690f...
       ├── index.json
       └── oci-layout

El archivo index.json es la lista de todos los manifiestos disponibles, es decir, es la lista de todas las imágenes disponibles en una ubicación. En nuestro caso, es una lista de todos los gráficos de timón.

Cada archivo dentro de blobs/sha256 es un JSON que identifica un artefacto, ya sea una imagen o un gráfico. Este JSON cumple con la especificación OCI para archivos SHA.

En resumen, son una lista de configuraciones que describen las características del blob, su configuración, propiedades, capas del sistema de archivos y también los comandos iniciales.

En el caso de un Helm Chart, tenemos el siguiente archivo:

{
  "schemaVersion": 2,
  "config": {
    "mediaType": "application/vnd.cncf.helm.config.v1+json",
    "digest": "sha256:8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690fdb68c2111",
    "size": 117
  },
  "layers": [
    {
      "mediaType": "application/tar+gzip",
      "digest": "sha256:1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617",
      "size": 2487
    }
  ]
}

Observe que tenemos una diferenciación de mediaType , mientras que una imagen común de Docker tiene un tipo application/vnd.oci.image.config.v1+json .

Aquí, tenemos un tipo  application/vnd.cncf.helm.config , lo mismo ocurre con las capas, cada capa de una imagen OCI es de tipo application/vnd.oci.image.layer.v1.tar+gzip , mientras que aquí solo tenemos el formato .tar.gz .

Hospedaje de gráficos en Azure Container Registry

Hospedar gráficos de Helm en Azure CR es bastante similar a almacenarlos localmente. Debe tener acceso a Azure a través de la CLI de Azure. Asumiré que ya tiene la CLI de Azure, así que creemos nuestro ACR.

Primero tenemos que crear nuestro grupo de recursos y luego el ACR con los comandos:

az group create -n helm-reg -l eastus
az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer

Un consejo es almacenar el nombre del repositorio en una variable:

export ACR=$(az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer)

Ahora vamos a iniciar sesión en nuestro registro con claves administradas de Azure, pero debemos habilitar el control administrativo con az acr update -n $ACR --admin-enabled true .

A continuación, ejecute los siguientes dos comandos para obtener las credenciales de inicio de sesión y guardarlas en el shell:

export ACRUSER=$(az acr credential show -n $ACR --query username -o tsv)
export ACRPASS=$(az acr credential show -n $ACR --query 'passwords[0].value' -o tsv)

Ahora podemos iniciar sesión en nuestro registro con Helm usando helm registry login $ACR --username $ACRUSER --password $ACRPASS , y a partir de aquí ya tenemos nuestro registro configurado.

Vamos a crear otro artefacto con helm chart save hrepo $ACR/hrepo:2.1.3 (como ejemplo, usaré un gráfico de un depósito voluminoso llamado hrepo). Luego lo empujaremos con helm chart push $ACR/hrepo:3.8.0 .

Una vez que esté allí, podremos enumerar todo en el repositorio con un comando de la CLI de Azure:

az acr repository show -n $ACR --repository hrepo

Note que vamos a tener una salida que es exactamente lo que enviamos:

{
  "changeableAttributes": {
    "deleteEnabled": true,
    "listEnabled": true,
    "readEnabled": true,
    "writeEnabled": true
  },
  "createdTime": "2022-03-05T20:56:49.6118202Z",
  "imageName": "hrepo",
  "lastUpdateTime": "2022-03-05T20:56:49.7812323Z",
  "manifestCount": 1,
  "registry": "chartregistry23657.azurecr.io",
  "tagCount": 1
}

También podemos obtener más detalles con el comando show-manifests agregando un --detail :

az acr repository show-manifests -n $ACR --repository hrepo --detail

Esto nos dará exactamente la definición de un artefacto OCI:

[
  {
    "changeableAttributes": {
      "deleteEnabled": true,
      "listEnabled": true,
      "quarantineState": "Passed",
      "readEnabled": true,
      "writeEnabled": true
    },
    "configMediaType": "application/vnd.cncf.helm.config.v1+json",
    "createdTime": "2022-03-05T20:56:49.7213057Z",
    "digest": "sha256:4780713fa23d7144d356c353795b5b84e66ad2b8bbd47c7118b4b85435d50bbc",
    "imageSize": 1378,
    "lastUpdateTime": "2022-03-05T20:56:49.7213057Z",
    "mediaType": "application/vnd.oci.image.manifest.v1+json",
    "tags": [
      "2.1.3"
    ]
  }
]

Para almacenarlo, simplemente tenemos que:

helm chart pull $ACR/hrepo:3.8.0
helm chart export $ACR/hrepo:3.8.0 -d ./destination
helm install hrepo-acr ./destination

Conclusión

Aunque usar Helm es fácil, no existe una forma "simple" de alojar un gráfico de Helm como una especie de registro privado.

Si bien Helm tiene excelentes herramientas como Chart Museum, todavía no son completamente estándar y para un desarrollo distribuido fácil es esencial que tengamos estándares abiertos que todos puedan seguir.

Helm ha cambiado recientemente la compatibilidad con OCI Registry de una característica experimental a una característica general, lo que es un fuerte indicio de que el ecosistema de contenedores está mejorando cada vez más.

Información del autor:Talha Khalid es desarrolladora web independiente y escritora técnica.


Linux
  1. Cómo aligerar la carga en su registro de contenedores usando Quay.io

  2. Cómo administrar los registros de contenedores de Linux

  3. Cómo usar Podman dentro de un contenedor

  4. Mutt:¿Cómo almacenar la contraseña de forma segura?

  5. Cómo salir de un contenedor Docker

Una introducción al registro de contenedores de Quay

Cómo instalar Helm en Linux

Cómo instalar Snap Store en Linux Mint 20 / Linux Mint 20.1

Cómo insertar y extraer imágenes de Docker con el registro de contenedores de DigitalOcean

Cómo usar SSH en un contenedor Docker

Cómo gestionar contenedores Docker