Jednou z velkých výhod pochopení toho, jak kontejnerový ekosystém funguje, je to, že můžete použít stejný vzor pro několik specifikací.
Není to tak dlouho, co Helm oznámil, že bude podporovat OCI Artifacts, což není nic jiného než otevřená specifikace OCI pro distribuci obrázků kontejnerů a dalších typů dat, nazývaných artefakty.
Tato specifikace, stejně jako všechny ostatní specifikace OCI, je cloud-agnostická, což z ní dělá fantastický nástroj pro práci.
Záznamy kontejneru
Kontejnerový záznam (CR) nebo registr je něco, co musel použít každý, kdo se kdy musel zabývat kontejnery. CR je místo, kde ukládáme obrázky kontejnerů, takže je můžeme načítat odkudkoli a kdykoli chceme.
Obrázek je v podstatě sada souborů, které mají strukturu víceméně podobnou této:
├── blobs
│ └── sha256
│ ├── 1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db3...
│ ├── 31fb454efb3c69fafe53672598006790122269a1b3b458607dbe106...
│ └── 8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690f...
├── index.json
└── oci-layout
Soubor index.json
je seznam všech dostupných manifestů, tj. je to seznam všech obrázků dostupných v umístění. V našem případě je to seznam všech žebříčků kormidel.
Každý soubor uvnitř blobs/sha256
je JSON, který identifikuje artefakt, ať už je to obrázek nebo graf. Tento JSON je v souladu se specifikací OCI pro soubory SHA.
Stručně řečeno, jedná se o seznam nastavení popisující vlastnosti objektu BLOB, jeho nastavení, vlastnosti, vrstvy systému souborů a také počáteční příkazy.
V případě Helm Chart máme následující soubor:
{
"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
}
]
}
Všimněte si, že rozlišujeme mediaType
, zatímco běžný obrázek Dockeru má typ application/vnd.oci.image.config.v1+json
.
Zde máme typ application/vnd.cncf.helm.config
, totéž platí pro vrstvy, každá vrstva obrázku OCI je typu application/vnd.oci.image.layer.v1.tar+gzip
, zatímco zde máme pouze formát .tar.gz
.
Hostovací grafy v Azure Container Registry
Hostování grafů Helm v Azure CR je do značné míry podobné jejich místnímu ukládání. Musíte mít přístup k Azure přes Azure CLI. Předpokládám, že již máte Azure CLI, takže pojďme vytvořit naše ACR.
Nejprve musíme vytvořit naši skupinu prostředků a poté ACR pomocí příkazů:
az group create -n helm-reg -l eastus
az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer
Tip je uložit název úložiště do proměnné:
export ACR=$(az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer)
Nyní se přihlásíme do našeho registru pomocí spravovaných klíčů Azure, ale musíme povolit správu pro správu pomocí az acr update -n $ACR --admin-enabled true
.
Dále spusťte následující dva příkazy k načtení přihlašovacích údajů a jejich uložení do prostředí 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)
Nyní se můžeme přihlásit do našeho registru pomocí Helm pomocí helm registry login $ACR --username $ACRUSER --password $ACRPASS
a odtud již máme nakonfigurovaný náš registr.
Pojďme vytvořit další artefakt pomocí helm chart save hrepo $ACR/hrepo:2.1.3
(Jako příklad použiji graf z dumpy repository s názvem hrepo). Pak to posuneme pomocí helm chart push $ACR/hrepo:3.8.0
.
Jakmile to tam bude, budeme moci vypsat vše v úložišti pomocí příkazu Azure CLI:
az acr repository show -n $ACR --repository hrepo
Všimněte si, že budeme mít výstup, který je přesně to, co jsme odeslali:
{
"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
}
Další podrobnosti můžeme získat také příkazem show-manifests
přidáním --detail
:
az acr repository show-manifests -n $ACR --repository hrepo --detail
To nám dá přesnou definici artefaktů 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"
]
}
]
K jeho uložení musíme jednoduše:
helm chart pull $ACR/hrepo:3.8.0
helm chart export $ACR/hrepo:3.8.0 -d ./destination
helm install hrepo-acr ./destination
Závěr
Ačkoli je použití Helm snadné, neexistuje "jednoduchý" způsob, jak hostit Helmův graf jako nějaký druh soukromého záznamu.
I když má Helm vynikající nástroje, jako je Chart Museum, stále nejsou zcela standardní a pro snadný distribuovaný vývoj je nezbytné, abychom měli otevřené standardy, které může každý jako celek sledovat.
Helm nedávno přesunul podporu registru OCI z experimentální na obecnou funkci, což je jasným znamením, že ekosystém kontejnerů je stále lepší.
Informace o autorovi:Talha Khalid je webový vývojář a technický spisovatel na volné noze.