Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Use image caches to accelerate pod creation for Knative Services

Última atualização: Jun 27, 2026

Ao implantar serviços Knative, o cluster ACK baixa imagens de registros remotos para cada novo pod. Imagens grandes resultam em tempos de download prolongados e inicializações a frio lentas. O recurso ImageCache do Elastic Container Instance (ECI) resolve esse problema ao criar snapshots em cache das imagens que você pretende utilizar. Quando um pod inicia com um cache de imagem, a quantidade de camadas de imagem a serem baixadas diminui, acelerando assim a criação do pod.

Por exemplo, baixe uma imagem docker do Apache Flink (~386,26 MB) do Docker Hub leva cerca de 50 segundos sem cache. Com um cache de imagem, a mesma operação é concluída em aproximadamente 5 segundos.

Esses valores são teóricos. A economia real de tempo depende da quantidade e do tamanho das imagens, além da conexão de rede com o registro de imagens.

Como funciona

Em um cluster ACK, as instâncias de contêiner elásticas são armazenadas em cache como um tipo de objeto Custom Resource Definition (CRD) chamado ImageCache. O CRD ImageCache é um recurso no nível do cluster, compartilhado entre todos os namespaces dele.

É possível crie um snapshot de cache a partir de uma imagem e usá-lo para implantar um pod em uma instância de contêiner elástica. Isso reduz as camadas de imagem que precisam ser baixadas e, consequentemente, acelera a criação do pod.

Para obter detalhes sobre como crie e gerencie caches de imagem, incluindo informações de faturamento, consulte Visão geral dos caches de imagem.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster ACK com o Knative ativado

  • O kubectl configurado para se conectar ao seu cluster

Etapa 1: Crie um ImageCache

  1. Crie um arquivo chamado imagecache-secrets-test.yaml com o seguinte conteúdo:

    A anotação k8s.aliyun.com/eci-image-cache: "true" permite reutilizar ImageCaches existentes. Se as imagens que você deseja armazenar em cache compartilharem camadas com um ImageCache existente, ative essa opção acelera o processo de cache. Para obter a lista completa de parâmetros configuráveis, consulte Gerencie ImageCaches .
    apiVersion: eci.alibabacloud.com/v1
    kind: ImageCache
    metadata:
      name: imagecache-sample-test
      annotations:
        k8s.aliyun.com/eci-image-cache: "true" # Enable the reuse of ImageCaches.
    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. Crie o ImageCache:

    kubectl create -f imagecache-secrets-test.yaml
  3. Verifique se o ImageCache está pronto:

    kubectl get imagecache imagecache-sample-test

    O ImageCache estará pronto quando PHASE exibir Ready e PROGRESS mostrar 100%:

    NAME                              AGE   CACHEID                               PHASE   PROGRESS
    imagecache-sample-test            20h   imc-2zeditzeoemfhqor****              Ready    100%

Etapa 2: Usar um ImageCache para acelerar a criação de pods

Adicione uma anotação aos metadata do pod do Knative Service para especifique qual ImageCache usar. Duas anotações estão disponíveis:

Anotação

Comportamento

k8s.aliyun.com/eci-image-snapshot-id

Utiliza o ImageCache específico identificado por você

k8s.aliyun.com/eci-image-cache

Selecione automaticamente o melhor ImageCache disponível

Se ambas as anotações forem defina no mesmo pod, apenas k8s.aliyun.com/eci-image-snapshot-id terá efeito.

Especifique um ImageCache

Utilize a anotação k8s.aliyun.com/eci-image-snapshot-id para vincular um Knative Service a um ImageCache específico.

Importante

O ImageCache especificado deve estar no estado Ready antes da criação do pod. Pods que referenciam um ImageCache não pronto falharão ao iniciar.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
spec:
  template:
    metadata:
      labels:
        app: helloworld-go
      annotations:
        k8s.aliyun.com/eci-image-snapshot-id: imc-2ze5tm5gehgtiiga****  # Specify the ImageCache that you want to use.
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56

Selecione automaticamente um ImageCache

Use a anotação k8s.aliyun.com/eci-image-cache: "true" para permitir que o ECI selecione automaticamente o ImageCache mais adequado.

O ECI filtra todos os ImageCaches na região. O tamanho de cada ImageCache não deve exceder o espaço de armazenamento temporário da instância de contêiner elástica de destino. Em seguida, o ECI seleciona um cache seguindo os critérios abaixo, em ordem de prioridade:

  1. Grau de correspondência — O cache cujo registro e versão de imagem melhor correspondem à imagem do pod é selecionado primeiro.

  2. Tamanho do cache — Entre caches com igual correspondência, prefere-se aquele cujo tamanho mais se aproxima do tamanho da imagem.

  3. Data de criação — Caso ainda haja empate entre múltiplos caches, o criado mais recentemente será utilizado.

Se nenhum cache corresponder, o ECI baixe a imagem do registro e a armazenará em cache automaticamente durante a criação do pod. Defina a política de pull de imagem como IfNotPresent para evitar downloads redundantes e melhorar a eficiência do cache.

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: helloworld-go
spec:
  template:
    metadata:
      labels:
        app: helloworld-go
      annotations:
        k8s.aliyun.com/eci-image-cache: "true"    # Automatically select an ImageCache.
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56

Próximos passos