GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So speichern Sie Helm-Diagramme in Azure Container Registry

Einer der großen Vorteile des Verständnisses der Funktionsweise des Container-Ökosystems besteht darin, dass Sie dasselbe Muster für mehrere Spezifikationen verwenden können.

Es ist nicht lange her, dass Helm angekündigt hat, OCI Artifacts zu unterstützen, die nichts anderes sind als eine offene OCI-Spezifikation für die Verteilung von Container-Images und anderen Arten von Daten, die als Artefakte bezeichnet werden.

Diese Spezifikation ist wie alle anderen OCI-Spezifikationen Cloud-agnostisch, was sie zu einem fantastischen Werkzeug für die Arbeit macht.

Container-Datensätze

Ein Container-Datensatz (CR) oder eine Registrierung ist etwas, das jeder verwenden musste, der jemals mit Containern zu tun hatte. Im CR speichern wir unsere Container-Images, sodass wir sie von überall und jederzeit abrufen können.

Im Wesentlichen ist ein Bild im Grunde eine Reihe von Dateien, die mehr oder weniger dieser Struktur folgen:

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

Die Datei index.json ist die Liste aller verfügbaren Manifeste, d. h. es ist die Liste aller an einem Ort verfügbaren Bilder. In unserem Fall ist es eine Liste aller Steuerkarten.

Jede Datei in blobs/sha256 ist ein JSON, das ein Artefakt identifiziert, sei es ein Bild oder ein Diagramm. Dieser JSON entspricht der OCI-Spezifikation für SHA-Dateien.

Kurz gesagt handelt es sich um eine Liste von Einstellungen, die die Merkmale des Blobs, seine Einstellungen, Eigenschaften, Dateisystemschichten und auch die anfänglichen Befehle beschreiben.

Im Falle eines Helm-Diagramms haben wir die folgende Datei:

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

Beachten Sie, dass wir eine Differenzierung von mediaType haben , während ein gängiges Docker-Image den Typ application/vnd.oci.image.config.v1+json hat .

Hier haben wir einen Typ application/vnd.cncf.helm.config , dasselbe gilt für Layer, jeder Layer eines OCI-Images ist vom Typ application/vnd.oci.image.layer.v1.tar+gzip , während wir hier nur das Format .tar.gz haben .

Hosting-Diagramme in Azure Container Registry

Das Hosten von Helm-Diagrammen in Azure CR ist dem lokalen Speichern ziemlich ähnlich. Sie müssen über Azure CLI Zugriff auf Azure haben. Ich gehe davon aus, dass Sie bereits über die Azure-Befehlszeilenschnittstelle verfügen, also erstellen wir unsere ACR.

Zuerst müssen wir unsere Ressourcengruppe erstellen und dann das ACR mit den Befehlen:

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

Ein Tipp ist, den Repository-Namen in einer Variablen zu speichern:

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

Jetzt melden wir uns mit von Azure verwalteten Schlüsseln bei unserer Registrierung an, aber wir müssen die administrative Kontrolle mit az acr update -n $ACR --admin-enabled true aktivieren .

Führen Sie als Nächstes die folgenden beiden Befehle aus, um die Anmeldedaten abzurufen und in der Shell zu speichern:

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)

Jetzt können wir uns mit Helm bei unserer Registrierung anmelden, indem wir helm registry login $ACR --username $ACRUSER --password $ACRPASS verwenden , und von hier aus haben wir bereits unsere Registrierung konfiguriert.

Lassen Sie uns ein weiteres Artefakt mit helm chart save hrepo $ACR/hrepo:2.1.3 erstellen (Als Beispiel verwende ich ein Diagramm aus einem Dumpy-Repository namens hrepo). Dann pushen wir es mit helm chart push $ACR/hrepo:3.8.0 .

Sobald es dort ist, können wir alles im Repository mit einem Azure CLI-Befehl auflisten:

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

Beachten Sie, dass wir eine Ausgabe haben werden, die genau das ist, was wir gesendet haben:

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

Weitere Details können wir auch mit dem Befehl show-manifests abrufen durch Hinzufügen eines --detail :

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

Dies gibt uns genau die Definition eines OCI-Artefakts:

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

Um es zu speichern, müssen wir einfach:

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

Schlussfolgerung

Obwohl die Verwendung von Helm einfach ist, gibt es keine "einfache" Möglichkeit, ein Helm-Diagramm als eine Art privaten Datensatz zu hosten.

Während Helm über hervorragende Tools wie das Chart Museum verfügt, sind sie immer noch nicht vollständig standardisiert, und für eine einfache verteilte Entwicklung ist es unerlässlich, dass wir offene Standards haben, denen jeder als Ganzes folgen kann.

Helm hat kürzlich die OCI Registry-Unterstützung von einer experimentellen auf eine allgemeine Funktion umgestellt, was ein starker Hinweis darauf ist, dass das Container-Ökosystem immer besser wird.

Informationen zum Autor:Talha Khalid ist freiberufliche Webentwicklerin und technische Redakteurin.


Linux
  1. So entlasten Sie Ihre Container Registry mit Quay.io

  2. So verwalten Sie Linux-Containerregistrierungen

  3. So verwenden Sie Podman in einem Container

  4. Mutt:Wie speichert man ein Passwort sicher?

  5. So beenden Sie einen Docker-Container

Eine Einführung in die Containerregistrierung von Quay

So installieren Sie Helm unter Linux

So installieren Sie Snap Store in Linux Mint 20 / Linux Mint 20.1

So pushen und ziehen Sie Docker-Images mit der Container Registry von DigitalOcean

So führen Sie SSH in einen Docker-Container ein

So verwalten Sie Docker-Container