コンテナエコシステムがどのように機能するかを理解することの大きな利点の1つは、複数の仕様に同じパターンを使用できることです。
ヘルムは、アーティファクトと呼ばれるコンテナイメージやその他のタイプのデータを配布するためのOCIオープン仕様にすぎないOCIアーティファクトをサポートすることを発表してから間もなくです。
この仕様は、他のすべてのOCI仕様と同様に、クラウドに依存しないため、操作するのに最適なツールになります。
コンテナレコード(CR)、つまりレジストリは、これまでコンテナに関与しなければならなかったすべての人が使用しなければならなかったものです。 CRはコンテナ画像を保存する場所であるため、いつでもどこからでも画像を取得できます。
本質的に、画像は基本的に次のような構造に従うファイルのセットです:
├── blobs
│ └── sha256
│ ├── 1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db3...
│ ├── 31fb454efb3c69fafe53672598006790122269a1b3b458607dbe106...
│ └── 8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690f...
├── index.json
└── oci-layout
ファイルindex.json
は利用可能なすべてのマニフェストのリストです。つまり、ある場所で利用可能なすべての画像のリストです。私たちの場合、それはすべてのヘルムチャートのリストです。
blobs/sha256
内の各ファイル 画像であれチャートであれ、アーティファクトを識別するJSONです。このJSONは、SHAファイルのOCI仕様に準拠しています。
つまり、blobの特性、その設定、プロパティ、ファイルシステムレイヤー、および初期コマンドを説明する設定のリストです。
ヘルムチャートの場合、次のファイルがあります:
{
"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
}
]
}
mediaType
が差別化されていることに注意してください 、一般的なDockerイメージのタイプはapplication/vnd.oci.image.config.v1+json
ですが、 。
ここでは、タイプがapplication/vnd.cncf.helm.config
です。 、同じことがレイヤーにも当てはまります。OCIイメージの各レイヤーのタイプはapplication/vnd.oci.image.layer.v1.tar+gzip
です。 、ここでは.tar.gz
の形式しかありません 。
Azureコンテナレジストリでのグラフのホスティング
Azure CRでHelmグラフをホストすることは、それらをローカルに保存することとほとんど同じです。 AzureCLIを介してazureにアクセスできる必要があります。既にAzureCLIを使用していると想定しているので、ACRを作成しましょう。
最初にリソースグループを作成し、次にコマンドを使用してACRを作成する必要があります:
az group create -n helm-reg -l eastus
az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer
ヒントは、リポジトリ名を変数に格納することです:
export ACR=$(az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer)
次に、Azure管理対象キーを使用してレジストリにログインしますが、az acr update -n $ACR --admin-enabled true
を使用して管理制御を有効にする必要があります。 。
次に、次の2つのコマンドを実行して、ログインクレデンシャルを取得し、シェルに保存します。
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)
これで、helm registry login $ACR --username $ACRUSER --password $ACRPASS
を使用してHelmでレジストリにログインできます。 、そしてここから、レジストリがすでに構成されています。
helm chart save hrepo $ACR/hrepo:2.1.3
を使用して別のアーティファクトを作成しましょう (例として、hrepoという名前のダンプリポジトリのグラフを使用します)。次に、helm chart push $ACR/hrepo:3.8.0
を使用してプッシュします。 。
そこに到達すると、AzureCLIコマンドを使用してリポジトリ内のすべてを一覧表示できるようになります。
az acr repository show -n $ACR --repository hrepo
送信したものとまったく同じ出力が得られることに注意してください:
{
"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
}
コマンドshow-manifests
を使用して詳細を取得することもできます --detail
を追加する :
az acr repository show-manifests -n $ACR --repository hrepo --detail
これにより、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"
]
}
]
保存するには、次のようにする必要があります。
helm chart pull $ACR/hrepo:3.8.0
helm chart export $ACR/hrepo:3.8.0 -d ./destination
helm install hrepo-acr ./destination
Helmの使用は簡単ですが、Helmチャートをある種のプライベートレコードとしてホストする「簡単な」方法はありません。
HelmにはChartMuseumのような優れたツールがありますが、それらはまだ完全に標準ではなく、分散開発を容易にするためには、誰もが全体として従うことができるオープンスタンダードが不可欠です。
Helmは最近、OCIレジストリのサポートを実験的な機能から一般的な機能に移行しました。これは、コンテナのエコシステムがますます良くなっていることを強く示しています。
著者情報:Talha Khalidは、フリーランスのWeb開発者およびテクニカルライターです。