Elastic Container Instance (ECI) が実行される前に、必要なコンテナイメージをプルする必要があります。イメージのプルは、Pod 起動時の主な遅延要因となります。ImageCache は、コンテナイメージのキャッシュスナップショットを事前に作成することで、以降の Pod 作成時にキャッシュを再利用して、仮想ノード上での Pod 起動時間を短縮します。
実際の短縮時間は、イメージの数、サイズ、ネットワーク状況によって異なります。
課金
ImageCache の作成と使用には料金が発生する場合があります。詳細については、「ImageCache の課金」をご参照ください。
前提条件
以下の条件を満たしていることを確認してください。
-
仮想ノードが有効化された ACK クラスターがあること
-
クラスターへの
kubectlアクセス権限があること
ステップ1:ImageCache サポートの有効化
クラスターが ImageCache をサポートしているかどうかを確認します。
kubectl get crd/imagecaches.eci.alibabacloud.com
-
imagecaches.eci.alibabacloud.comに関する情報が返された場合、ImageCache はサポートされています。ステップ2に進んでください。 -
エラーが返された場合は、ACK Virtual Node を最新バージョンに更新してください。
ステップ2:ImageCache の作成
最初の Pod で最大限の速度が必要な場合を除き、自動作成を使用してください。
| 方法 | 使用場面 | 動作原理 |
|---|---|---|
| 自動 | ほとんどのケース — コスト削減 | 一致するキャッシュが存在しない場合、Pod 作成時にシステムがキャッシュを作成します。同じイメージを使用する今後の Pod はそれを再利用します。 |
| 手動 | 初回作成時に最大限の速度が求められる場合 | YAML テンプレートを使用して事前に ImageCache を作成して、Pod 作成時にそれを参照します。 |
手動作成については、「ImageCache の管理」および「ImageCache のアノテーション」をご参照ください。各方法の比較については、「ImageCache の作成方法」をご参照ください。
ステップ3:ImageCache を使用した Pod の作成
Pod 仕様の metadata セクション (Deployment の場合は spec.template.metadata) にアノテーションを追加して、ImageCache を選択します。
アノテーションは Pod 作成時にのみ有効です。既存の Pod のアノテーションを変更しても効果はありません。
アノテーションリファレンス
ImageCache は、名前空間をまたいで使用できるクラスターレベルのリソースです。
-
イメージマッチング: マッチ度を最大化するため、Pod 仕様では ImageCache と同じイメージ参照を使用してください。
-
プルポリシー:
imagePullPolicyをIfNotPresentに設定することで、キャッシュされたレイヤーの再ダウンロードをスキップできます。
| アノテーション | 設定例 | デフォルト値 | 説明 |
|---|---|---|---|
k8s.aliyun.com/eci-auto-imc |
"true" |
true |
ImageCache の自動マッチングを有効にします。イメージのマッチ度、サイズ、作成時刻に基づいて最適なキャッシュを選択します。一致するキャッシュが存在しない場合は、新しいキャッシュを作成します。 |
k8s.aliyun.com/imc-perfect-match |
"true" |
false |
Pod 内のすべてのイメージが ImageCache と完全に一致することを要求します。imc-match-count-request より優先されます。 |
k8s.aliyun.com/imc-match-count-request |
"2" |
— | ImageCache と一致する必要がある Pod イメージの数を指定します。 |
k8s.aliyun.com/eci-imc-id |
imc-2zebxkiifuyzzlhl**** |
— | Pod を特定の ImageCache ID に固定します。自動マッチングより優先されます。 |
アノテーションの優先順位: imc-perfect-match と imc-match-count-request の両方が設定されている場合、imc-perfect-match が優先されます。eci-imc-id が指定されている場合は、自動マッチングより優先されます。
ImageCache の自動マッチング (推奨)
eci-auto-imc を有効にして、必要に応じて imc-perfect-match を追加することで、より厳格なマッチングが可能になります。
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" # ImageCache の自動マッチングを有効化します
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: IfNotPresent
ImageCache の指定
指定する ImageCache は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**** # 特定の ImageCache に固定します
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
アノテーションの一括適用
eci-profile の Elastic Container Instance Effect 機能を使用すると、一致するすべての Pod に ImageCache アノテーションを適用できます。詳細については、「eci-profile を設定して ImageCache 機能を自動的に使用する」をご参照ください。