GNU/Linux >> Linux Esercitazione >  >> Linux

Come archiviare i grafici Helm nel registro Azure Container

Uno dei grandi vantaggi di comprendere come funziona l'ecosistema dei container è che puoi utilizzare lo stesso schema per diverse specifiche.

Non è passato molto tempo da quando Helm ha annunciato che avrebbe supportato gli OCI Artifacts, che non sono altro che una specifica aperta OCI per la distribuzione di immagini di container e altri tipi di dati, chiamati artefatti.

Questa specifica, come tutte le altre specifiche OCI, è indipendente dal cloud, il che la rende uno strumento fantastico con cui lavorare.

Registri contenitore

Un record di container (CR), o un registro, è qualcosa che tutti coloro che hanno mai dovuto essere coinvolti con i container hanno dovuto utilizzare. Il CR è il luogo in cui memorizziamo le nostre immagini del contenitore, così possiamo recuperarle da qualsiasi luogo e quando vogliamo.

In sostanza, un'immagine è fondamentalmente un insieme di file che segue una struttura più o meno simile a questa:

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

Il file index.json è l'elenco di tutti i manifest disponibili, ovvero è l'elenco di tutte le immagini disponibili in una posizione. Nel nostro caso, è un elenco di tutte le carte dei timoni.

Ogni file all'interno di blobs/sha256 è un JSON che identifica un artefatto, sia esso un'immagine o un grafico. Questo JSON è conforme alla specifica OCI per i file SHA.

In breve, sono un elenco di impostazioni che descrivono le caratteristiche del BLOB, le sue impostazioni, le proprietà, i livelli del file system e anche i comandi iniziali.

Nel caso di un Grafico Helm, abbiamo il seguente file:

{
  "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
    }
  ]
}

Nota che abbiamo una differenziazione di mediaType , mentre un'immagine Docker comune ha un tipo application/vnd.oci.image.config.v1+json .

Qui abbiamo un tipo  application/vnd.cncf.helm.config , lo stesso vale per i livelli, ogni livello di un'immagine OCI è di tipo application/vnd.oci.image.layer.v1.tar+gzip , mentre qui abbiamo solo il formato .tar.gz .

Ospitare i grafici in Registro Azure Container

L'hosting di grafici Helm in Azure CR è praticamente simile all'archiviazione locale. È necessario avere accesso ad Azure tramite l'interfaccia della riga di comando di Azure. Presumo che tu abbia già l'interfaccia della riga di comando di Azure, quindi creiamo il nostro ACR.

Per prima cosa dobbiamo creare il nostro gruppo di risorse e poi l'ACR con i comandi:

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

Un consiglio è di memorizzare il nome del repository in una variabile:

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

Ora accediamo al nostro registro utilizzando le chiavi gestite di Azure, ma dobbiamo abilitare il controllo amministrativo con az acr update -n $ACR --admin-enabled true .

Quindi, esegui i due comandi seguenti per recuperare le credenziali di accesso e salvarle nella 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)

Ora possiamo accedere al nostro registro con Helm usando helm registry login $ACR --username $ACRUSER --password $ACRPASS , e da qui abbiamo già configurato il nostro registro.

Creiamo un altro artefatto con helm chart save hrepo $ACR/hrepo:2.1.3 (ad esempio, userò un grafico da un repository dumpy chiamato hrepo). Quindi lo spingeremo con helm chart push $ACR/hrepo:3.8.0 .

Una volta lì, saremo in grado di elencare tutto nel repository con un comando dell'interfaccia della riga di comando di Azure:

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

Nota che avremo un output che è esattamente quello che abbiamo inviato:

{
  "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
}

Possiamo anche ottenere maggiori dettagli con il comando show-manifests aggiungendo un --detail :

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

Questo ci darà esattamente la definizione di un artefatto 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"
    ]
  }
]

Per memorizzarlo, dobbiamo semplicemente:

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

Conclusione

Sebbene l'utilizzo di Helm sia facile, tuttavia non esiste un modo "semplice" per ospitare un grafico Helm come una sorta di record privato.

Sebbene Helm disponga di strumenti eccellenti come il Museo dei grafici, non sono ancora completamente standard e per un facile sviluppo distribuito è essenziale disporre di standard aperti che tutti possono seguire nel loro insieme.

Helm ha recentemente spostato il supporto del registro OCI da sperimentale a funzionalità generale, il che è una forte indicazione del fatto che l'ecosistema dei container sta migliorando sempre più.

Informazioni sull'autore:Talha Khalid è uno sviluppatore web freelance e scrittore tecnico.


Linux
  1. Come alleggerire il carico sul registro dei container utilizzando Quay.io

  2. Come gestire i registri dei container Linux

  3. Come usare Podman all'interno di un contenitore

  4. Mutt:come archiviare in modo sicuro la password?

  5. Come uscire da un container Docker

Un'introduzione al registro dei container Quay

Come installare Helm su Linux

Come installare Snap Store in Linux Mint 20 / Linux Mint 20.1

Come spingere e tirare le immagini Docker con il registro dei contenitori di DigitalOcean

Come SSH in un Docker Container

Come gestire i container Docker