6.8. イメージとイメージストリームのインポートと操作
次のセクションでは、イメージストリームをインポートして操作する方法を説明します。
6.8.1. プライベートレジストリーからのイメージおよびイメージストリームのインポート
イメージストリームは、プライベートレジストリーからタグおよびイメージメタデータをインポートするように設定できます。 これには認証が必要です。この手順は、Cluster Samples Operator が registry.redhat.io 以外からコンテンツをプルするために使用するレジストリーを変更する場合に適用されます。
セキュアでないレジストリーからインポートする場合には、シークレットに定義されたレジストリーの URL に :80
ポートの接尾辞を追加するようにしてください。 追加していない場合にレジストリーからインポートしようとすると、このシークレットは使用されません。
手順
以下のコマンドを入力して、認証情報を保存するために使用する
secret
オブジェクトを作成する必要があります。$ oc create secret generic <secret_name> --from-file=.dockerconfigjson=<file_absolute_path> --type=kubernetes.io/dockerconfigjson
シークレットが設定されたら、新規イメージストリームを作成するか、
oc import-image
コマンドを入力します。$ oc import-image <imagestreamtag> --from=<image> --confirm
インポートプロセスで OpenShift Container Platform はシークレットを取得してリモートパーティーに提供します。
6.8.1.1. Pod が他のセキュリティー保護されたレジストリーからイメージを参照できるようにする設定
他のプライベートレジストリーレジストリーまたは保護されたレジストリーから保護されたコンテナーをプルするには、Docker や Podman などのコンテナークライアント認証情報からプルシークレットを作成し、それをサービスアカウントに追加する必要があります。
Docker と Podman は設定ファイルを使用して、保護されたレジストリーまたは保護されていないレジストリーへのログインに使用する認証の詳細を保存します。
-
Docker: Docker は、デフォルトで
$HOME/.docker/config.json
を使用します。 -
Podman: Podman は、デフォルトで
$HOME/.config/containers/auth.json
を使用します。
以前に保護されたレジストリーまたは保護されていないレジストリーにログインしたことがある場合、これらのファイルには認証情報が保存されます。
quay.io
や quay.io/<example_repository>
のような一意のパスがある場合、Docker と Podman の認証情報ファイルおよび関連するプルシークレットには、同一レジストリーへの複数の参照を含めることができます。ただし、Docker および Podman のいずれも、まったく同じレジストリーパスの複数エントリーはサポートしていません。
config.json
ファイルのサンプル
{ "auths":{ "cloud.openshift.com":{ "auth":"b3Blb=", "email":"you@example.com" }, "quay.io":{ "auth":"b3Blb=", "email":"you@example.com" }, "quay.io/repository-main":{ "auth":"b3Blb=", "email":"you@example.com" } } }
プルシークレットの例
apiVersion: v1 data: .dockerconfigjson: ewogICAiYXV0aHMiOnsKICAgICAgIm0iOnsKICAgICAgIsKICAgICAgICAgImF1dGgiOiJiM0JsYj0iLAogICAgICAgICAiZW1haWwiOiJ5b3VAZXhhbXBsZS5jb20iCiAgICAgIH0KICAgfQp9Cg== kind: Secret metadata: creationTimestamp: "2021-09-09T19:10:11Z" name: pull-secret namespace: default resourceVersion: "37676" uid: e2851531-01bc-48ba-878c-de96cfe31020 type: Opaque
手順
既存の認証ファイルからシークレットを作成します。
.docker/config.json
を使用する Docker クライアントの場合は、次のコマンドを入力します。$ oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjson
.config/containers/auth.json
を使用する Podman クライアントの場合は、次のコマンドを入力します。$ oc create secret generic <pull_secret_name> \ --from-file=<path/to/.config/containers/auth.json> \ --type=kubernetes.io/podmanconfigjson
セキュアなレジストリーに関する Docker 認証情報ファイルがまだない場合には、以下のコマンドを実行してシークレットを作成することができます。
$ oc create secret docker-registry <pull_secret_name> \ --docker-server=<registry_server> \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
Pod のイメージをプルするためのシークレットを使用するには、そのシークレットをサービスアカウントに追加する必要があります。この例では、サービスアカウントの名前は、Pod が使用するサービスアカウントの名前に一致している必要があります。デフォルトのサービスアカウントは
default
です。$ oc secrets link default <pull_secret_name> --for=pull
6.8.2. マニフェストリストの操作
--import-mode
フラグを追加することにより、oc import-image
または oc tag
CLI コマンドを使用するときに、マニフェストリストの 1 つのサブマニフェストまたはすべてのマニフェストをインポートできます。
単一のサブマニフェストまたはマルチアーキテクチャーイメージを含むイメージストリームを作成するには、以下のコマンドを参照してください。
手順
次のコマンドを入力して、マルチアーキテクチャーイメージを含むイメージストリームを作成し、インポートモードを
PreserveOriginal
に設定します。$ oc import-image <multiarch-image-stream-tag> --from=<registry>/<project_name>/<image-name> \ --import-mode='PreserveOriginal' --reference-policy=local --confirm
出力例
--- Arch: <none> Manifests: linux/amd64 sha256:6e325b86566fafd3c4683a05a219c30c421fbccbf8d87ab9d20d4ec1131c3451 linux/arm64 sha256:d8fad562ffa75b96212c4a6dc81faf327d67714ed85475bf642729703a2b5bf6 linux/ppc64le sha256:7b7e25338e40d8bdeb1b28e37fef5e64f0afd412530b257f5b02b30851f416e1 ---
または、次のコマンドを入力して、マニフェストリストを破棄し、単一のサブマニフェストをインポートする
Legacy
インポートモードでイメージをインポートします。$ oc import-image <multiarch-image-stream-tag> --from=<registry>/<project_name>/<image-name> \ --import-mode='Legacy' --confirm
注記--import-mode=
のデフォルト値はLegacy
です。この値を除外するか、Legacy
またはPreserveOriginal
のいずれかを指定しないと、単一のサブマニフェストがインポートされます。無効なインポートモードは次のエラーを返します:error: valid ImportMode values are Legacy or PreserveOriginal
。
制限
マニフェストリストの操作には、次の制限があります。
場合によっては、ユーザーがサブマニフェストを直接使用したい場合があります。
oc adm prune images
が実行されている場合、またはCronJob
プルーナーが実行されている場合、サブマニフェストリストが使用されていることを検出できません。その結果、oc adm prune images
またはCronJob
プルーナーを使用する管理者は、サブマニフェストを含むマニフェストリスト全体を削除する可能性があります。この制限を回避するには、代わりにタグ別またはダイジェスト別のマニフェストリストを使用できます。
6.8.2.1. マニフェストリストの定期的なインポートの設定
マニフェストリストを定期的に再インポートするには、--scheduled
フラグを使用できます。
手順
次のコマンドを入力して、マニフェストリストを定期的に更新するようにイメージストリームを設定します。
$ oc import-image <multiarch-image-stream-tag> --from=<registry>/<project_name>/<image-name> \ --import-mode='PreserveOriginal' --scheduled=true
6.8.2.2. マニフェストリストのインポート時の SSL/TSL の設定
マニフェストリストをインポートするときに SSL/TSL を設定するには、--insecure
フラグを使用できます。
手順
--insecure=true
を設定すると、マニフェストリストのインポートで SSL/TSL 検証がスキップされます。以下に例を示します。$ oc import-image <multiarch-image-stream-tag> --from=<registry>/<project_name>/<image-name> \ --import-mode='PreserveOriginal' --insecure=true
6.8.3. --import-mode のアーキテクチャーの指定
--import-mode=
フラグを除外または含めることで、インポートしたイメージストリームをマルチアーキテクチャーとシングルアーキテクチャーの間で入れ替えることができます。
手順
次のコマンドを実行して、
--import-mode=
フラグを除外して、イメージストリームをマルチアーキテクチャーからシングルアーキテクチャーに更新します。$ oc import-image <multiarch-image-stream-tag> --from=<registry>/<project_name>/<image-name>
次のコマンドを実行して、イメージストリームをシングルアーキテクチャーからマルチアーキテクチャーに更新します。
$ oc import-image <multiarch-image-stream-tag> --from=<registry>/<project_name>/<image-name> \ --import-mode='PreserveOriginal'
6.8.4. --import-mode の設定フィールド
次の表に、--import-mode=
フラグで使用できるオプションを示します。
パラメーター | 説明 |
---|---|
レガシー |
|
PreserveOriginal | 指定すると、元のマニフェストが保持されます。マニフェスト一覧の場合は、マニフェストの一覧とそのすべてのサブマニフェストがインポートされます。 |