You need to enable JavaScript to run this app.
导航
使用 CRD 管理 VCI 镜像缓存
最近更新时间:2024.07.11 14:28:15首次发布时间:2024.07.01 15:08:35

本文主要介绍通过 Kubernetes CustomResourceDefinition(CRD)的方式创建和管理 VCI 镜像缓存的方法。

说明

邀测·申请试用】:VCI 镜像缓存功能目前处于邀测阶段,如需使用,请提交申请。

前提条件

  • 已创建 VCI 业务相关集群。详细操作,请参见 创建集群
  • 已通过 kubectl 连接 VCI 集群。详细操作,请参见 连接集群
  • 已准备 VCI 实例所需的容器镜像。支持使用火山引擎镜像仓库(CR)中的镜像,也支持使用第三方镜像仓库中的镜像。上传镜像到 CR 的操作,请参见 推送和拉取镜像

基于 ImageCache 创建 VCI 镜像缓存

  1. 创建 VCI 镜像缓存对应的 ImageCache Custom Resource。示例 YAML 文件imagecache-test.yaml代码如下:
    apiVersion: vci.volcengine.com/v1beta1
    kind: ImageCache
    metadata:
      name: imagecache-test  # 指定 ImageCache Custom Resource 名称。须确保名称在集群内唯一。
    spec:
      images:                  # 制作镜像缓存所需要的容器镜像列表。
      - cr-cn-beijing.volces.com/vke/centos:v1
      - cr-cn-beijing.volces.com/vke/busybox:v1
      imagePullSecrets:        # 镜像仓库的访问凭证 Secret(保密字典)列表,不配置时会获取临时密钥。
      - default:secret1
      subnetIds:               # 镜像缓存实例所属的子网 ID 列表。
      - subnet-3rf6vwb******
      - subnet-7s89a78******
      securityGroupIds:        # 镜像缓存实例网络所在的安全组 ID 列表。
      - sg-2byy13cns******
      - sg-ds89xas98******
      retentionDays: 7         # 镜像缓存保留时间,单位:天。过期后镜像缓存会被清理。
      volume:
        imageCacheSize: 40   # 指定镜像缓存的大小,单位:GiB。
        prewarmZoneIds:  # 镜像缓存对应的弹性块存储(EBS)快照预热策略配置。指定需要预热的快照可用区。
        - cn-beijing-b
        - cn-beijing-c
        prewarmRetentionDays: 90 # 镜像缓存对应 EBS 快照的预热保留时长。单位:天,取值范围:1~180。
    
  2. 执行以下命令,创建 ImageCache。
    kubectl create -f imagecache-test.yaml
    

使用 ImageCache 关联存量 VCI 镜像缓存实例

  1. 创建 ImageCache Custom Resource,关联已有的 VCI 镜像缓存实例。示例 YAML 文件imagecache-exist.yaml代码如下:
    apiVersion: vci.volcengine.com/v1beta1
    kind: ImageCache
    metadata:
      name: imagecache-exist # 指定 ImageCache Custom Resource 名称。须确保名称在集群内唯一。
    spec: 
      appointedImageCacheId: imc-****** # 存量镜像缓存实例 ID。
      securityGroupIds: # 镜像缓存网络所在安全组 ID 列表。
      - sg-2byy13cns******
      subnetIds:        # 镜像缓存实例所属的子网 ID 列表。
      - subnet-3rf6vwb******
      - subnet-7s89a78******
    
  2. 执行以下命令,创建 ImageCache。
    kubectl create -f imagecache-exist.yaml
    

查询 ImageCache 的状态和最新信息

VCI 镜像缓存创建后,ImageCache Controller 会获取镜像缓存的最新信息,并同步到 ImageCache 的描述中,您可以通过get ImageCache命令来获取镜像缓存的最新状态和信息。

说明

  • 镜像缓存创建完成后的状态,可以回写到对应 ImageCache Custom Resource 的status字段中。
  • 如果通过 openAPI 的 UpdateImageCache 接口更新镜像缓存信息,则对应 ImageCache Custom Resource 的信息也会被刷新。
  • 当镜像缓存被删除或者清理后,更新 Custom Resource 对象的状态,而不是直接删除。

ImageCache Custom Resource 内容如下所示:

apiVersion: vci.volcengine.com/v1beta1
kind: ImageCache
metadata:
  name: imagecache-test  # ImageCache Custom Resource 名称。
spec:
  images:                  # 制作镜像缓存所需要的容器镜像列表。
  - cr-cn-beijing.volces.com/vke/centos:v1
  - cr-cn-beijing.volces.com/vke/busybox:v1
  imagePullSecrets:        # 镜像仓库的访问凭证 Secret 列表。
  - default:secret1
  subnetIds:               # 镜像缓存实例所属的子网 ID 列表。
  - subnet-3rf6vwb******
  - subnet-7s89a78******
  securityGroupIds:        # 镜像缓存实例网络所在的安全组 ID 列表。
  - sg-2byy13cns******
  - sg-ds89xas98******
  retentionDays: 7         # 镜像缓存保留时间,单位:天。过期后镜像缓存会被清理。
  volume:
    imageCacheSize: 40   # 镜像缓存的大小,单位:GiB。
    prewarmZoneIds:  # 镜像缓存对应 EBS 快照预热策略配置,即预热快照的可用区。
    - cn-beijing-b
    - cn-beijing-c
    prewarmRetentionDays: 90 # 镜像缓存对应 EBS 快照的预热保留时长。单位:天。
status:
  images:
    previous: # .spec 上一次配置的 images 信息,用于和当前 .spec 对比。
    - cr-cn-beijing.volces.com/vke/centos:v1
    - cr-cn-beijing.volces.com/vke/busybox:v1
    latest:  # 根据 EventRuleRecords 同步的当前最新镜像信息。
    - cr-cn-shanghai.volces.com/vke/centos:v2
    - cr-cn-shanghai.volces.com/busybox:v2
  imageCacheName: imagecache-test-******
  imageCacheId: *********  # 镜像缓存 ID。
  creationTime: 2024-04-16T20:33:54Z    # 镜像缓存的创建时间。
  updateTime: 2024-04-16T20:33:54Z      # 镜像缓存最近一次更新的时间。
  expireDateTime: 2024-07-16T20:33:54Z  # 镜像缓存到期时间。
  lastMatchedTime: 2024-04-16T21:23:54Z # 最近一次匹配镜像缓存的时间。
  phase: Ready                          # 镜像缓存状态信息。
  conditions:
  - lastTransitionTime: "2024-04-16T20:33:54Z"
    message: instance imc-3vknvu66783****** has been ready
    reason: ImageCacheHasBeenReady
    status: "True"
    type: ImageCacheReady
  - lastTransitionTime: "2024-04-16T20:33:54Z"
    message: "instance {imc-******} is in progress"
    reason: CreateImageCacheRequestSuccess
    status: "True"
    type: CreationInProgress

通过 ImageCache 删除 VCI 镜像缓存

当您通过delete命令删除 ImageCache Custom Resource 时,ImageCache Controller 将会联动删除对应的 VCI 镜像缓存。

下方命令以删除名为imagecache-test的 ImageCache Custom Resource 为例,执行命令后,imagecache-test对应的 VCI 镜像缓存会被删除。

kubectl delete imc imagecache-test

通过 ImageCache 更新 VCI 镜像缓存

当您更新 ImageCache Custom Resource 时,ImageCache Controller 将会联动更新对应的 VCI 镜像缓存。

说明

  • 当镜像缓存的状态为Ready时,必须修改images字段(可以同时修改其他字段),才会触发镜像缓存更新。
  • 当镜像缓存的状态为Failed时,修改下方 YAML 中可更新的字段,均可以触发镜像缓存更新。

支持更新的字段说明,请见如下 YAML 文件中的注释(除了提示 不支持更新 的注释以外,其余带有注释的参数,均支持更新)。

apiVersion: vci.volcengine.com/v1beta1
kind: ImageCache
metadata:
  name: imagecache-test  # ImageCache Custom Resource 名称。不支持更新。
spec:
  images:                  # 制作镜像缓存所需要的容器镜像列表。
  - cr-cn-beijing.volces.com/vke/centos:v1
  - cr-cn-beijing.volces.com/vke/busybox:v1
  imagePullSecrets:        # 镜像仓库的访问凭证 Secret 列表,不配置时会获取临时密钥。
  - default:secret1
  subnetIds:               # 镜像缓存实例所属的子网 ID 列表。
  - subnet-3rf6vwbgkg****
  - subnet-7s89a78xaa****
  securityGroupIds:        # 镜像缓存实例网络所在的安全组 ID 列表。
  - sg-2byy13cnsczy****
  - sg-ds89xas98sa9****
  retentionDays: 7         # 镜像缓存保留时间,单位:天。不支持更新。
  volume:
    imageCacheSize: 40   # 镜像缓存的大小,单位:GiB。
    prewarmZoneIds:  # 镜像缓存对应 EBS 快照预热策略配置。指定需要预热的快照可用区。
    - cn-beijing-b
    - cn-beijing-c
    prewarmRetentionDays: 90 # 镜像缓存对应 EBS 快照的预热保留时长。单位:天,取值范围:1~180。

基于事件通知自动更新 VCI 镜像缓存

在创建 VCI 镜像缓存对应的 ImageCache Custom Resource 时,支持配置镜像仓库事件通知规则,实现基于事件通知自动更新 VCI 镜像缓存。

  1. 创建 VCI 镜像缓存对应的 ImageCache Custom Resource,并配置镜像仓库事件通知规则。示例 YAML 文件imagecache-test.yaml代码如下:
    apiVersion: vci.volcengine.com/v1beta1
    kind: ImageCache
    metadata:
      name: imagecache-test  # 指定 ImageCache Custom Resource 名称。须确保名称在集群内唯一。
    spec:
      eventRule: # 创建镜像仓库事件通知规则。
        strategy: update  # 命中策略,取值:update(更新),new(新增),表示命中 eventRule 后更新/新建镜像缓存。
        registry: "helm-cr"  # 镜像仓库实例名称,仅支持标准版。
        namespaces:  # 镜像仓库实例内的命名空间列表。
        - vke
        images:  # 命名空间下的镜像列表。
        - centos 
        - busybox
        tag: ".*"  # 规则作用范围,支持正则表达式。
        enabled: true  # 是否启用 eventRule,取值:true(启用)、false(不启用)。   
      images:  # 制作镜像缓存所需要的容器镜像列表。
      - cr-cn-beijing.volces.com/vke/centos:v1
      - cr-cn-beijing.volces.com/vke/busybox:v1
      imagePullSecrets:  # 镜像仓库的访问凭证 Secret 列表,不配置时会获取临时密钥。
      - default:secret1
      subnetIds:  # 镜像缓存实例所属的子网 ID 列表。
      - subnet-3rf6vwb******
      - subnet-7s89a78******
      securityGroupIds:  # 镜像缓存实例网络所在的安全组 ID 列表。
      - sg-2byy13cns******
      - sg-ds89xas98******
      retentionDays: 7  # 镜像缓存保留时间,单位:天。过期后镜像缓存会被清理。
      volume:
        imageCacheSize: 40  # 指定镜像缓存的大小,单位:GiB。
        prewarmZoneIds:  # 镜像缓存对应 EBS 快照预热策略配置。指定需要预热的快照可用区。
        - cn-beijing-b
        - cn-beijing-c
        prewarmRetentionDays: 90  # 镜像缓存对应 EBS 快照的预热保留时长。单位:天,取值范围:1~180。
    
  2. 执行以下命令,创建 ImageCache。
    kubectl create -f imagecache-test.yaml
    
    创建完成包含镜像仓库事件通知规则的 ImageCache Custom Resource 后,查询该 ImageCache 时,YAML 文件中的status字段说明如下所示。查询方法,请参见本文上方 查询 ImageCache 的状态和最新信息
    status:
      notifications:  # 记录 EventRuleRecords 消息。
      - image: "cr-cn-shanghai.volces.com/vke/centos:v3"
        receviedTimestamp: 2024-05-27T10:33:30Z
        processedTimestamp: 2024-05-27T10:34:30Z
        id: "xx-4"
      - image: "cr-cn-shanghai.volces.com/vke/busybox:v3"
        receviedTimestamp: 2024-05-27T10:33:30Z
        processedTimestamp: 2024-05-27T10:34:30Z
        id: "xx-1"
      eventRuleStatus:
        ruleName: ******  #  镜像仓库事件通知规则名称。
        ruleId: "******"  # 事件通知规则的 ID。
        updateTime: 2024-05-27T09:23:56Z  # 事件通知规则最近一次更新的时间。
        eventRuleHash: "******"
      images:
        previous:  # .spec 上一次配置的 images 信息,用于和当前 .spec 对比。
        - cr-cn-shanghai.volces.com/vke/centos:v1
        - cr-cn-guilin-boe.cr.volces.com/busybox:v1
        latest:  # 根据 EventRuleRecords 同步的当前最新镜像信息。
        - cr-cn-shanghai.volces.com/vke/centos:v2
        - cr-cn-guilin-boe.cr.volces.com/busybox:v2
      imageCacheName: *********  # 镜像缓存实例名称。
      imageCacheId: *********  # 镜像缓存 ID。
      creationTime: 2024-05-27T10:33:30Z     # 镜像缓存的创建时间。
      updateTime: 2024-05-27T10:33:30Z       # 镜像缓存最近一次更新的时间。
      expireDateTime: 2024-05-27T10:33:30Z   # 镜像缓存到期时间。
      lastMatchedTime: 2024-05-27T09:33:30Z  # 最近一次匹配镜像缓存的时间。
      phase: Failed  # 镜像缓存状态信息。
      conditions:
      - lastTransitionTime: "2024-04-16T20:33:54Z"
        message: instance imc-3vknvu667****** has been ready
        reason: ImageCacheHasBeenReady
        status: "True"
        type: ImageCacheReady
      - lastTransitionTime: "2024-04-16T20:33:54Z"
        message: "instance {imc-******} is in progress"
        reason: CreateImageCacheRequestSuccess
        status: "True"
        type: CreationInProgress