Alibaba Cloud は、ImageCache カスタムリソース定義 (CRD) を使用することにより、Elastic Container Instance のイメージキャッシュ機能を提供しています。この機能により、Kubernetes クラスターで Elastic Container Instance が作成されるたびにリモートリポジトリからコンテナイメージをプルするのに必要な時間が短縮されます。このトピックでは、より高速な Elastic Container Instance の作成のために ImageCache を作成および使用する方法について説明します。
ImageCache とは
ImageCache は、コンテナイメージのレイヤーをキャッシュしてインスタンスの作成を高速化する、Elastic Container Instance によって定義されたリソースを表します。各 ImageCache はイメージキャッシュに対応しています。Elastic Container Instance を作成するときに、すべてのイメージレイヤーをダウンロードする代わりに、ImageCache を使用すると、インスタンスは事前にキャッシュされたレイヤーを使用できます。この機能により、特にサイズの大きいイメージの場合やネットワークの状態が不安定な場合に、コンテナーの起動に必要な時間が短縮されます。詳細については、「イメージキャッシュの概要」をご参照ください。
削減される時間は、イメージの数とサイズ、およびネットワークの状態によって異なります。
課金
ImageCache の作成および使用中に、関連リソースの料金が発生する場合があります。詳細については、「イメージキャッシュの課金」をご参照ください。
手順
ステップ 1:ImageCache CRD をデプロイする
次のコマンドを実行して、クラスターが ImageCache をサポートしているかどうかを確認します。
kubectl get crd/imagecaches.eci.alibabacloud.comimagecaches.eci.alibabacloud.comに関する情報が返された場合、クラスターは ImageCache をサポートしています。エラーメッセージが返された場合は、ACK Virtual Node コンポーネントを最新バージョンに更新して、ImageCache を有効にしてください。
ステップ 2:ImageCache を作成する
ImageCache は、自動または手動の 2 つの方法で作成できます。コスト効率のために、新しい Elastic Container Instance の即時高速化が必要な場合を除き、ImageCache の自動作成を使用することをお勧めします。手動で作成された ImageCache と自動で作成された ImageCache の違いの詳細については、「イメージキャッシュを作成する方法」をご参照ください。
方法 | 説明 |
自動作成 | Elastic Container Instance を作成するときに、ImageCache の自動一致を有効にすることができます。その後、ImageCache が一致しない場合、システムは Elastic Container Instance の作成中に ImageCache を自動的に作成します。このキャッシュは、同じイメージを使用して Elastic Container Instance を後で作成する際に高速化するために使用できます。 |
手動作成 | 初めて Elastic Container Instance を作成し、作成をできるだけ早くしたい場合は、YAML テンプレートを使用して事前に ImageCache を手動で作成できます。詳細については、「ImageCache を管理する」および「イメージキャッシュのアノテーション」をご参照ください。 |
Elastic Container Instance の初回作成時の高速化を除き、コストを節約するために自動作成された ImageCache を使用することをお勧めします。
手動で作成された ImageCache と自動で作成された ImageCache の違いの詳細については、「イメージキャッシュを作成する方法」をご参照ください。
ステップ 3:ImageCache を使用して Elastic Container Instance を作成する
ImageCache から Elastic Container Instance を作成する場合、ImageCache を 自動的に一致させる か、手動で 指定 することができます。
自動一致を有効にし、より厳密な一致のために imc-perfect-match パラメーターを構成することをお勧めします。imc-perfect-match と imc-match-count-request の両方が構成されている場合、前者が優先されます。自動一致と手動指定の両方が構成されている場合、後者が優先されます。詳細については、「イメージキャッシュの概要」をご参照ください。
次の表に、主要なアノテーションを示します。
一致方法 | アノテーション | 例 | 説明 |
自動一致 | k8s.aliyun.com/eci-auto-imc | "true" | イメージキャッシュを自動的に一致させるかどうかを指定します。デフォルト値は true です。これは、システムが一致ポリシーに基づいて Elastic Container Instance を作成するのに最適な ImageCache を自動的に一致させることを示します。システムは、イメージの一致度、イメージのサイズ、イメージが作成された時点の順に ImageCache を選択します。 完全に一致する ImageCache がない場合、システムは Elastic Container Instance の作成時に自動的に ImageCache を作成します。 |
k8s.aliyun.com/imc-perfect-match | "true" | Pod 内のすべてのコンテナイメージが ImageCache と完全に一致する必要があるかどうかを指定します。デフォルト値:false。 | |
k8s.aliyun.com/imc-match-count-request | "2" | ImageCache と完全に一致する必要がある Pod 内のコンテナイメージの数を指定します。 | |
手動指定 | k8s.aliyun.com/eci-imc-id | imc-2zebxkiifuyzzlhl**** | Pod を作成するためのイメージキャッシュを指定します。 |
構成例
ImageCache はクラスターレベルのリソースであり、異なる名前空間で使用できます。
アノテーションは、Pod 構成ファイルの
metadataセクションに追加する必要があります。たとえば、Deployment では、spec.template.metadataの下にアノテーションを追加します。これらのアノテーションは、Elastic Container Instance を作成するときにのみ有効です。既存の Elastic Container Instance のアノテーションを追加または変更しても、有効になりません。
eci-profile の Elastic Container Instance Effect 機能は、事前定義された条件に基づいて ImageCache 関連のアノテーションを Pod に動的に追加することで、イメージキャッシュ機能を自動的に使用します。これらのアノテーションが Pod の YAML ファイルに存在しない場合は、eci-profile を構成することで、各 Pod の YAML ファイルを手動で更新することなく、システムが一致するすべての Pod に自動的に適用します。詳細については、「eci-profile を構成して ImageCache 機能を自動的に使用する」をご参照ください。
イメージの一致:ImageCache を使用してイメージを指定し、一致度を向上させてキャッシュを最大限に活用します。
プルポリシー:
ImagePullPolicyをIfNotPresentに設定して、同じイメージレイヤーが繰り返しダウンロードされないようにします。
ImageCache を自動的に一致させる
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-auto-imc: "true" # イメージキャッシュの自動一致を有効にします
k8s.aliyun.com/imc-perfect-match: "true" # Pod 内のすべてのコンテナイメージがイメージキャッシュと一致する必要があることを指定します。
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: ["sleep"]
args: ["999999"]
imagePullPolicy: IfNotPresentImageCache を指定する
指定されたイメージキャッシュが Ready 状態であることを確認してください。そうでない場合、Pod は作成に失敗します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-imc-id: imc-2ze5tm5gehgtiiga**** # イメージキャッシュを指定します。
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent