すべてのプロダクト
Search
ドキュメントセンター

Elastic Container Instance:ImageCache CRD のデプロイ

最終更新日:Apr 02, 2026

ImageCache は、仮想ノード (VNode) を介して Elastic Container Instance (ECI) 上でワークロードを実行する自己管理型 Kubernetes クラスターにおいて、Pod の起動を高速化する機能です。複数の Pod が同時に起動する場合、各 Pod が独自にイメージをプルするため、大規模環境では処理が遅くなる可能性があります。ImageCache は、事前にプル済みのイメージをディスク上にスナップショットとして保存し、新しい Pod がレジストリからレイヤーをダウンロードする代わりに、このスナップショットを直接マウントできるようにします。

ImageCache を使用する前に、クラスター内にそのカスタムリソース定義 (CRD) およびコントローラーをデプロイしてください。本ページでは、このセットアップ手順について説明します。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • 自己管理型 Kubernetes クラスター内に VNode がデプロイ済みであること

  • (クラスターがデータセンター内にある場合)データセンターと Alibaba Cloud 間の接続が確立されていること

  • Alibaba Cloud の AccessKey ID および AccessKey Secret を所持していること

ImageCache CRD のデプロイ

ステップ 1:YAML ファイルの作成

以下の内容で imagecache-crd.yaml を作成します。すべての # TODO とマークされた値を、実際の値に置き換えてください。

パブリックイメージと ImageCache を併用する場合は、設定済みの vSwitch が配置される VPC がインターネットに接続可能である必要があります。また、セキュリティグループもインターネットへのアクセスを許可する必要があります。
# ── カスタムリソース定義 ────────────────────────────────────────────────
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: imagecaches.eci.alibabacloud.com
spec:
  group: eci.alibabacloud.com
  scope: Cluster
  names:
    plural: imagecaches
    singular: imagecache
    kind: ImageCache
    listKind: ImageCacheList
    shortNames:
      - imc
    categories:
      - all
  versions:
    - name: v1
      served: true
      storage: true
      subresources:
        status: {}
      additionalPrinterColumns:
        - name: Age
          type: date
          jsonPath: .metadata.creationTimestamp
        - name: Id
          type: string
          jsonPath: .status.imageCacheId
        - name: Phase
          type: string
          jsonPath: .status.phase
        - name: Progress
          type: string
          jsonPath: .status.progress
      schema:
        openAPIV3Schema:
          type: object
          required:
            - spec
          description: "Imagecache is an image acceleration capability provided by alibabacloud"
          properties:
            status:
              type: object
              required:
                - phase
                - progress
              properties:
                events:
                  type: array
                  nullable: true
                  items:
                    type: object
                    properties:
                      name:
                        type: string
                      message:
                        type: string
                      type:
                        type: string
                      timestamp:
                        type: string
                        nullable: true
                phase:
                  type: string
                  default: Pending
                reason:
                  type: string
                  default: ""
                progress:
                  type: string
                  default: "0%"
                expireDateTime:
                  type: string
                  nullable: true
                startTime:
                  type: string
                  nullable: true
                lastUpdatedTime:
                  type: string
                  nullable: true
                imageCacheId:
                  type: string
                  default: ""
            spec:
              type: object
              required:
                - images
              properties:
                images:
                  type: array
                  minItems: 1          # 最低でも 1 つのイメージが必要
                  items:
                    type: string
                imagePullSecrets:
                  type: array
                  items:
                    type: string
                  default: []          # 非公開レジストリ認証用のシークレット
                imageCacheSize:
                  type: integer
                  default: 30          # ディスクサイズ(GiB 単位)。デフォルトは 30
                retentionDays:
                  type: integer        # キャッシュの有効期限(日単位)。省略または 0 を指定すると有効期限なし
---
# ── ServiceAccount ─────────────────────────────────────────────────────────────
apiVersion: v1
kind: ServiceAccount
metadata:
  name: alibabacloud-eci-imagecache-controller
  namespace: kube-system
---
# ── ClusterRole ────────────────────────────────────────────────────────────────
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: alibabacloud:eci:imagecache-controller
rules:
  - apiGroups:
      - apiextensions.k8s.io
    resources:
      - customresourcedefinitions
    verbs:
      - "*"
  - apiGroups:
      - "eci.alibabacloud.com"
    resources:
      - imagecaches
    verbs:
      - "*"
  - apiGroups:
      - "eci.alibabacloud.com"
    resources:
      - imagecaches/status
    verbs:
      - "*"
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
      - patch
      - update
  - apiGroups:
      - ""
    resources:
      - secrets
    verbs:
      - get
---
# ── ClusterRoleBinding ─────────────────────────────────────────────────────────
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: alibabacloud:eci:imagecache-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: alibabacloud:eci:imagecache-controller
subjects:
  - kind: ServiceAccount
    name: alibabacloud-eci-imagecache-controller
    namespace: kube-system
---
# ── シークレット:Alibaba Cloud 認証情報 ─────────────────────────────────────────
apiVersion: v1
kind: Secret
metadata:
  name: alibabacloud-eci-imagecache-secret
  namespace: kube-system
type: Opaque
stringData:
  ACCESS_KEY: "***"   # TODO: ご利用の Alibaba Cloud AccessKey ID
  SECRET_KEY: "***"   # TODO: ご利用の Alibaba Cloud AccessKey Secret
---
# ── デプロイメント:ImageCache コントローラー ─────────────────────────────────────────
apiVersion: apps/v1
kind: Deployment
metadata:
  name: alibabacloud-eci-imagecache-controller
  namespace: kube-system
  labels:
    app: eci-imagecache-controller
spec:
  selector:
    matchLabels:
      app: eci-imagecache-controller
  replicas: 1
  template:
    metadata:
      labels:
        app: eci-imagecache-controller
    spec:
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      serviceAccount: alibabacloud-eci-imagecache-controller
      containers:
      - name: imagecache-controller
        imagePullPolicy: Always
        image: registry.cn-hangzhou.aliyuncs.com/eci-release/imagecache-controller:1.0.0
        command:
        - /imagecache
        args:
        - --provider
        - eci
        env:
        - name: CLUSTER_ID
          value: "unique-cluster-id"  # TODO: ご利用の Alibaba Cloud アカウント内でこのクラスターを一意に識別する ID。必須。
        - name: REGION_ID
          value: "cn-beijing"         # TODO: VNode が実行されるリージョン(例:cn-hangzhou)。必須。
        - name: RESOURCE_GROUP_ID
          value: ""                   # リソースグループ ID。任意。
        - name: SECURITY_GROUP_ID
          value: "sg-***"             # TODO: ECI Pod 用のセキュリティグループ ID。必須。
        - name: VSWITCH_IDS
          value: "vsw-*******"        # TODO: 1 個以上の vSwitch ID(カンマ区切り)。必須。
        - name: MY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        envFrom:
        - secretRef:
            name: alibabacloud-eci-imagecache-secret

以下の表に、設定が必須となる環境変数を示します。

変数説明必須
CLUSTER_IDAlibaba Cloud アカウント内でクラスターを一意に識別する IDはい
REGION_IDVNode が実行されるリージョン ID(例:cn-beijingはい
SECURITY_GROUP_IDECI Pod 用のセキュリティグループ IDはい
VSWITCH_IDS1 個以上の vSwitch ID(カンマ区切り)はい
RESOURCE_GROUP_IDリソースグループ IDいいえ

ステップ 2:マニフェストの適用

kubectl create -f imagecache-crd.yaml

ステップ 3:デプロイの確認

コントローラー Pod が実行中であることを確認します。

kubectl get pod -n kube-system

期待される出力:

NAME                                                     READY   STATUS    RESTARTS   AGE
alibabacloud-eci-imagecache-controller-8857984bd-2lnhs   1/1     Running   1          7s
......

CRD が登録されていることを確認します。

kubectl get crd imagecaches.eci.alibabacloud.com

期待される出力:

NAME                               CREATED AT
imagecaches.eci.alibabacloud.com   2022-09-01T07:12:47Z