GNU/Linux >> Linux の 問題 >  >> Linux

ヘルムチャートをAzureContainerRegistryに保存する方法

コンテナエコシステムがどのように機能するかを理解することの大きな利点の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開発者およびテクニカルライターです。


Linux
  1. Linuxコンテナレジストリを管理する方法

  2. コンテナ内でのPodmanの使用方法

  3. Mutt:パスワードを安全に保存する方法は?

  1. ヘルムチャートで環境変数を使用する方法

  2. Quay.ioを使用してコンテナレジストリの負荷を軽減する方法

  3. Dockerコンテナを終了する方法

  1. ヘルムチャートを作成する方法

  2. レガシーアプリケーションをコンテナ化する方法

  3. ヘルムチャートをプルおよびプッシュする方法