Pod の起動ごとにレジストリから大規模なコンテナイメージをプルすると、ワークフローの実行が遅くなります。このドキュメントでは、Container Registry Enterprise Edition (ACR EE) インスタンスからのパスワードレスプルを設定する方法と、イメージキャッシュを使用して冗長なプルをスキップし、Pod の作成を高速化する方法について説明します。
前提条件
開始する前に、以下をご確認ください。
ACR EE インスタンスを作成し、イメージリポジトリを設定済みであること。詳細については、「Container Registry Enterprise Edition インスタンスを使用したイメージのプッシュとプル」をご参照ください。
ご利用の ACR EE インスタンスの ID、リージョン、ドメイン名
パスワードレスでのイメージプルの設定
ご利用の workflow.yaml ファイルの spec.podMetadata.annotations に k8s.aliyun.com/acr-instance-id アノテーションを追加します。値は リージョン ID:インスタンス ID のフォーマットで設定します。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-
spec:
entrypoint: whalesay
podMetadata:
annotations:
k8s.aliyun.com/acr-instance-id: "cn-hangzhou:cri-f34lmbk2rxqx41u8" # ACR EE インスタンスのリージョン ID とインスタンス ID
templates:
- name: whalesay
container:
image: acr-en-hangzhou-registry.cn-hangzhou.cr.aliyuncs.com/workflow/whalesay # ACR EE インスタンスからプルするイメージ
command: [ cowsay ]
args: [ "hello world" ]ワークフローと ACR EE インスタンスが同じリージョンにある場合は、リージョン ID を省略し、値をインスタンス ID のみに設定します。
イメージキャッシュを使用したワークフロー Pod の作成
イメージキャッシュはプルされたイメージを保存するため、後続の Pod 起動ではプルが完全にスキップされます。ニーズに応じて、自動作成と手動作成のいずれかを選択してください。
イメージキャッシュの自動作成
spec.podMetadata.annotations に k8s.aliyun.com/eci-image-cache: "true" アノテーションを追加します。指定されたイメージのイメージキャッシュがすでに存在する場合、ワークフローは既存のイメージキャッシュを自動的に使用して Pod を作成します。これにより、Pod の作成が高速化されます。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-
spec:
podMetadata:
annotations:
k8s.aliyun.com/eci-image-cache: "true" # イメージキャッシュの自動作成を有効化
entrypoint: whalesay
templates:
- name: whalesay
container:
image: docker/whalesay
command: [ cowsay ]
args: [ "hello world" ]イメージキャッシュの手動作成
特定のキャッシュサイズを設定したり、保持期間を設定したりする必要がある場合は、このメソッドを使用します。
ステップ 1: イメージキャッシュの作成
次の内容で imagecache.yaml という名前のファイルを作成します。
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-helloworld
annotations:
k8s.aliyun.com/imc-enable-reuse: "true" # キャッシュの再利用を許可
spec:
images: # キャッシュするイメージ
- docker/whalesay
imagePullSecrets: # 非公開イメージ用のシークレット。パブリックイメージには不要
- default:secret1
imageCacheSize: # キャッシュサイズ (GiB)。デフォルト: 20。有効範囲: 20~32768
20
retentionDays: # キャッシュが期限切れになるまでの日数。無期限にする場合は空白のままにする
7ファイルを適用します。
kubectl apply -f imagecache.yamlステップ 2: イメージキャッシュの準備完了の確認
kubectl get imagecachesPHASE が Ready と表示され、PROGRESS が 100% に達するまで待ちます。
NAME AGE CACHEID PHASE PROGRESS
imagecache-helloworld 3m36s imc-f8zfxxxx Ready 100%ステップ 3: ワークフローでのイメージキャッシュの参照
上記の出力から CACHEID をコピーし、k8s.aliyun.com/eci-image-snapshot-id アノテーションの値として設定します。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: hello-world-
spec:
podMetadata:
annotations:
k8s.aliyun.com/eci-image-snapshot-id: "imc-f8zf****" # kubectl get imagecaches から取得したイメージキャッシュ ID
entrypoint: whalesay
templates:
- name: whalesay
container:
image: docker/whalesay
command: [ cowsay ]
args: [ "hello world" ]