全部产品
Search
文档中心

使用ImageCache加速创建Pod

更新时间: 2021-11-10

阿里云以ImageCache CRD的方式将ECI的镜像缓存功能提供给Kubernetes用户,以便Kubernetes用户也可以使用该功能来加速创建Pod。本文介绍如何使用ImageCache加速创建Pod。

配置说明

ImageCache资源是Cluster级别,因此在不同的namespace下创建Pod时均可以使用ImageCache来实现加速创建Pod。

使用ImageCache创建Pod包括自动匹配和明确指定两种方式,您可以在Pod级别的metadata中添加Annotation来配置,相关配置项如下:

  • k8s.aliyun.com/eci-image-cache:根据匹配策略自动匹配最优的ImageCache创建Pod。如果没有匹配到,系统将在创建Pod的同时自动创建一个ImageCache。

  • k8s.aliyun.com/eci-image-snapshot-id:明确指定使用哪个镜像缓存创建Pod。

说明

如果同时设置k8s.aliyun.com/eci-image-cachek8s.aliyun.com/eci-image-snapshot-id,则明确指定方式的优先级高于自动匹配方式。更多信息,请参见镜像缓存概述

使用ImageCache创建Pod时,请注意以下事项:

  • Pod中容器的镜像建议采用ImageCache中的镜像,以提高匹配度。

  • Pod中容器的镜像拉取策略(ImagePullPolicy)建议设置为按需拉取(IfNotPresent),以避免镜像层重复下载。

自动匹配ImageCache

创建Pod时,您可以通过添加Annotation的方式,声明使用自动匹配的ImageCache来加速创建Pod。ECI将基于您已有的ImageCache列表,根据匹配策略选择最优的ImageCache来创建Pod。匹配策略的优先级从高到低依次为:镜像匹配度、匹配的镜像大小、创建时间。

说明

如果没有匹配到合适的ImageCache,系统将在创建Pod的同时自动创建一个ImageCache。

  • Deployment示例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
          annotations:
            k8s.aliyun.com/eci-image-cache: "true"   #开启自动匹配ImageCache
        spec:
          nodeName: virtual-kubelet
          containers:
          - name: nginx
            image: nginx:1.7.9
            imagePullPolicy: IfNotPresent
  • Pod示例

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.aliyun.com/eci-image-cache: "true"  #开启自动匹配ImageCache
      name: nginx-auto-match
    spec:
      containers:
      - image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        name: nginx
        resources:
          limits:
            cpu: 300m
            memory: 200Mi
          requests:
            cpu: 200m
            memory: 100Mi
      nodeName: virtual-kubelet

明确指定ImageCache

创建Pod时,您可以通过添加Annotation的方式,声明使用指定的ImageCache来加速创建Pod。

注意

请确保指定的ImageCache的状态为Ready,其它状态的ImageCache会导致Pod创建失败。

  • Deployment示例

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
          annotations:
            k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga****  #明确指定ImageCache
        spec:
          nodeName: virtual-kubelet
          containers:
          - name: nginx
            image: nginx:1.7.9
            imagePullPolicy: IfNotPresent
  • Pod示例

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga****  #明确指定ImageCache
      name: nginx-imagecache-id
    spec:
      containers:
      - image: nginx:1.7.9
        imagePullPolicy: IfNotPresent
        name: nginx
        resources:
          limits:
            cpu: 300m
            memory: 200Mi
          requests:
            cpu: 200m
            memory: 100Mi
      nodeName: virtual-kubelet