全部產品
Search
文件中心

Elastic Container Instance:管理ImageCache

更新時間:Nov 27, 2024

阿里雲以ImageCache CRD的方式將ECI的鏡像緩衝功能提供給Kubernetes使用者,以便Kubernetes使用者也可以使用該功能來加速建立ECI Pod。本文介紹ImageCache資源,以及如何建立、查詢和刪除ImageCache。

準備工作

登入Kubernetes叢集,執行以下命令,驗證您的Kubernetes叢集是否已經支援ImageCache。

kubectl get crd/imagecaches.eci.alibabacloud.com
  • 如果返回Error資訊,則表示您的Kubernetes叢集不支援ImageCache,返回樣本如下:

    Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "imagecaches.eci.alibabacloud.com" not found

    如果您的Kubernetes叢集不支援ImageCache,您需要升級VK(ack-virtual-node組件)到相應支援ImageCache的版本。

    說明

    建議您升級VK到最新版本,以便更好地使用新功能。

  • 如果返回imagecaches.eci.alibabacloud.com的資訊,則表示您的Kubernetes叢集已經支援ImageCache,返回樣本如下:

    NAME                               CREATED AT
    imagecaches.eci.alibabacloud.com   2024-01-23T05:54:44Z

    如果您的Kubernetes叢集的ImageCache CRD不是最新的,建議您執行kubectl apply命令重新部署。

    kubectl apply -f imagecache-crd-sample.yaml

    展開查看imagecache-crd-sample.yaml

    apiVersion: apiextensions.k8s.io/v1beta1
    kind: CustomResourceDefinition
    metadata:
      name: imagecaches.eci.alibabacloud.com
    spec:
      group: eci.alibabacloud.com
      version: v1
      names:
        kind: ImageCache
        plural: imagecaches
        shortNames:
        - ic
        categories:
        - all
      scope: Cluster
      subresources:
        status: {}
      validation:
        openAPIV3Schema:
          required:
          - spec
          properties:
            spec:
              type: object
              required:
              - images
              properties:
                imagePullSecrets:
                  type: array
                  items:
                    type: string
                images:
                  minItems: 1
                  type: array
                  items:
                    type: string
                imageCacheSize:
                  type: integer
                retentionDays:
                  type: integer
      additionalPrinterColumns:
      - name: Age
        type: date
        JSONPath: .metadata.creationTimestamp
      - name: CacheId
        type: string
        JSONPath: .status.imageCacheId
      - name: Phase
        type: string
        JSONPath: .status.phase
      - name: Progress
        type: string
        JSONPath: .status.progress

ImageCache配置說明

ImageCache的YAML設定檔如下,更多資訊,請參見kubernetes ImageCache API

apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
  name: imagecache-sample
  annotations:
    k8s.aliyun.com/imc-enable-reuse: "true" #開啟鏡像緩衝複用
spec:
  images:
  - centos:latest
  - busybox:latest
  imagePullSecrets:
  - default:secret1
  - default:secret2
  - kube-system:secret3
  imageCacheSize:
   25
  retentionDays:
   7

相關參數說明如下:

名稱

類型

是否必選

描述

spec.images

String[]

用於建立鏡像緩衝的容器鏡像列表。

spec.imagePullSecrets

String[]

鏡像倉庫對應的Secret列表。

  • 如果鏡像列表中包含私人倉庫的鏡像,則需要為私人鏡像倉庫建立Secret,然後按照namespace:secretName的格式設定該參數。

  • 如果鏡像列表中的鏡像均為公有鏡像,則無需設定該參數。

spec.imageCacheSize

int

鏡像緩衝大小。預設為20 GiB。取值範圍為20~32768 GiB。

請根據鏡像的大小進行設定,鏡像緩衝的大小需≥鏡像大小*2。

spec.retentionDays

int

鏡像緩衝保留時間長度,到期會被清理。單位為天。預設永不到期。

說明

ImageCache支援添加Annotation來充分使用鏡像緩衝功能,例如在上述YAML樣本中,添加了k8s.aliyun.com/imc-enable-reuse: "true" 的Annotation來開啟鏡像緩衝複用。更多資訊,請參見ImageCache Annotation

建立ImageCache

  1. 建立ImageCache。

    kubectl create -f imagecache-test.yaml

    imagecache-test.yaml的內容樣本如下:

    apiVersion: eci.alibabacloud.com/v1
    kind: ImageCache
    metadata:
      name: imagecache-sample-test
      annotations:
        k8s.aliyun.com/imc-enable-reuse: "true" #開啟鏡像緩衝複用
    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
  2. 查看ImageCache狀態。

    kubectl get imagecache imagecache-sample-test

    返回結果樣本如下,當狀態為Ready時,表示ImageCache建立完成,可以使用該ImageCache。

    NAME                     AGE     CACHEID                    PHASE   PROGRESS
    imagecache-sample-test   5m30s   imc-2ze2kbf9l1onf03z****   Ready   100%

查詢ImageCache

建立ImageCache後,您可以根據需要查詢叢集下所有ImageCache列表或者查看某個ImageCache的詳細資料:

  • 查詢叢集下所有ImageCache列表

    kubectl get imagecache
  • 查看某個ImageCache的詳細資料

    kubectl get imagecache <imagecache-name> -o yaml

刪除ImageCache

ImageCache對應一份快照。對於手動建立的ImageCache,保留需要支付快照費用,如果不再使用,建議您及時手動刪除。

如果想要刪除某個ImageCache,可執行如下命令:

kubectl delete imagecache <imagecache-name>