Knativeでイメージを介してサービスをデプロイする場合、Container Service for Kubernetes (ACK) クラスターはリモートリポジトリからイメージを取得し、新しいポッドを作成します。 大きな画像は、画像引き出し時間の延長につながり得る。 Elastic Container Instanceが提供するImageCache機能を使用して、使用するイメージのキャッシュされたスナップショットを作成することを推奨します。 次に、これらのスナップショットに基づいてポッド (弾性コンテナインスタンス) を作成し、起動時間を短縮します。
概要
ポッド作成プロセス中にイメージをダウンロードするには、大量の時間が必要です。 ポッドの作成を高速化するために、Elastic Container Instanceはイメージキャッシュを提供します。 イメージからキャッシュスナップショットを作成し、キャッシュスナップショットを使用してエラスティックコンテナインスタンスにポッドをデプロイできます。 これにより、ダウンロードする必要がある画像レイヤーが削減されるため、ポッドの作成が高速化されます。 たとえば、約386.26 MBのApache Flink用のDockerイメージを使用してポッドを作成する場合、Docker Hubからイメージをプルするのに50秒かかります。 イメージキャッシュを使用してポッドを作成する場合、イメージをプルするのに必要な時間はわずか5秒です。
これらのデータは理論的である。 削減される時間は、必要な画像の数とサイズ、および画像リポジトリへのネットワーク接続の品質によって異なります。
ACKクラスターでは、エラスティックコンテナインスタンスは、ImageCacheという名前のCustom Resource Definition (CRD) オブジェクトのタイプとしてキャッシュされます。 ImageCache CRDは、Kubernetesクラスター内のクラスターレベルのリソースであり、クラスター内のすべての名前空間で共有できます。
イメージキャッシュの作成方法と使用方法、および課金方法の詳細については、「イメージキャッシュの概要」をご参照ください。
ステップ1: ImageCacheの作成
次のコードブロックに基づいてimagecache-secrets-test.yamlファイルを作成し、イメージプルを高速化し、インスタンスの起動時間を短縮します。
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: imagecache-sample-test annotations: k8s.aliyun.com/eci-image-cache: "true" # Enable the reuse of ImageCaches. spec: images: - registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2 - registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30 imageCacheSize: 25 retentionDays: 7
説明キャッシュするイメージに、既存のImageCachesにあるイメージレイヤーが含まれている場合は、ImageCachesの再利用を有効にして、イメージのキャッシュを高速化できます。
前述のサンプルコードのImageCacheおよびパラメーターの設定方法の詳細については、「ImageCachesの管理」をご参照ください。
次のコマンドを実行してImageCacheを作成します。
kubectl create -f imagecache-secrets-test.yaml
次のコマンドを実行して、ImageCacheを照会します。
kubectl get imagecache imagecache-sample-test
期待される出力:
NAME AGE CACHEID PHASE PROGRESS imagecache-sample-test 20h imc-2zeditzeoemfhqor**** Ready 100%
ステップ2: ImageCacheを使用してポッドの作成を高速化する
ImageCacheからポッドを作成するときに、ポッドのメタデータ
にアノテーションを追加して、使用するImageCacheを指定したり、ImageCacheを自動的に選択するようにポッドを設定したりできます。 以下のリストでは、注釈について説明します。
k8s.aliyun.com/eci-image-snapshot-id
: 使用するImageCacheを指定します。k8s.aliyun.com/eci-image-cache
: 最適なImageCacheを自動的に選択します。
k8s.aliyun.com/eci-image-snapshot-id
とk8s.aliyun.com/eci-image-cache
を同時に指定した場合、onl y k8s.aliyun.com/eci-image-snapshot-idが有効になります。
ImageCacheの指定
Knative Serviceを作成するときに、k8s.aliyun.com/eci-image-snapshot-id
注釈を使用して、使用するImageCacheを指定できます。
指定されたImageCacheが準備状態であることを確認します。 そうしないと、ポッドの作成に失敗します。
例:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
labels:
app: helloworld-go
annotations:
k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga**** # Specify the ImageCache that you want to use.
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
ImageCacheを自動的に選択する
Knative Serviceを作成するときに、k8s.aliyun.com/eci-image-cache
アノテーションを使用して、ImageCacheを自動的に選択するようにポッドを設定できます。
このアノテーションを指定すると、Elastic Container Instanceは次のルールに基づいてImageCacheを選択します。
Elastic Container Instanceは、リージョン内のすべてのImageCachesをフィルタリングします。 各ImageCacheのサイズは、エラスティックコンテナインスタンスの一時ストレージスペースのサイズ以下です。
Elastic Container Instanceは、優先度の高い属性 (一致度、キャッシュサイズ、作成時間) に基づいて最適なImageCacheを選択します。
一致度: ImageCacheと指定されたイメージレジストリおよびイメージバージョンとの一致度。 最も高い一致度を有するImageCacheは、ポッドを作成するために使用される。
キャッシュサイズ: ImageCacheのサイズ。 指定されたイメージのサイズに最も近いImageCacheは、ポッドの作成に使用されます。
作成時刻: ImageCacheが作成された時刻。 最後に作成されたImageCacheは、ポッドの作成に使用されます。
説明一致するImageCacheがない場合、指定されたイメージはポッドの作成時に自動的にキャッシュされます。 この場合、システムは指定されたレジストリからイメージを取得します。 イメージプルポリシーをIfNotPresentに設定することを推奨します。 これにより、同じ画像レイヤーの繰り返しダウンロードが防止され、キャッシュ効率が向上します。
例:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
spec:
template:
metadata:
labels:
app: helloworld-go
annotations:
k8s.aliyun.com/eci-image-cache: "true" # Automatically select an ImageCache.
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56