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.