全部產品
Search
文件中心

Container Service for Kubernetes:使用ImageCache加速建立Pod

更新時間:Jul 10, 2024

阿里雲以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