Antes de uma instância ECI ser executada, ela precisa baixar as imagens de contêiner necessárias. Esse download é o principal fator de atraso na inicialização do pod. O ImageCache cria previamente snapshots de cache das imagens de contêiner para que as criações subsequentes de pods reutilizem esse cache e reduzam o tempo de inicialização em nós virtuais.
O tempo real economizado varia conforme a quantidade de imagens, o tamanho delas e as condições da rede.
Faturamento
A criação e o uso de cache de imagem podem gerar custos. Consulte Image caches billing.
Pré-requisitos
Verifique se você tem:
Um cluster ACK com nós virtuais habilitados
Acesso ao cluster via
kubectl
Etapa 1: Ative o suporte ao ImageCache
Verifique se o cluster suporta o ImageCache:
kubectl get crd/imagecaches.eci.alibabacloud.com
Se o comando retornar informações sobre
imagecaches.eci.alibabacloud.com, o ImageCache tem suporte. Prossiga para a Etapa 2.Se houver retorno de erro, atualize o ACK Virtual Node para a versão mais recente.
Etapa 2: Crie um cache de imagem
Prefira a criação automática, a menos que seja essencial obter velocidade máxima já no primeiro pod.
|
Método |
Quando usar |
Como funciona |
|
Automático |
Na maioria dos cenários — reduz custos |
Se não existir um cache correspondente, o sistema o cria durante a geração do pod. Pods futuros com as mesmas imagens reutilizam esse cache. |
|
Manual |
Quando a primeira criação exige velocidade máxima |
Crie um cache de imagem antecipadamente por meio de um modelo YAML e referencie-o ao criar o pod. |
Para criação manual, consulte Gerencie ImageCaches e Image cache annotations. Compare os métodos em Methods to create an image cache.
Etapa 3: Use um cache de imagem para criar pods
Adicione anotações à seção metadata da especificação do pod (ou em spec.template.metadata no caso de um Deployment) para selecionar um cache de imagem.
As anotações só têm efeito no momento da criação do pod. Alterar anotações em um pod existente não produz nenhum resultado.
Referência de anotações
O ImageCache é um recurso de nível de cluster utilizável em diferentes namespaces.
Correspondência de imagens: Use as mesmas referências de imagem na especificação do pod e no ImageCache para maximizar o grau de correspondência.
Política de pull: Defina
imagePullPolicycomoIfNotPresentpara evitar baixar novamente camadas já armazenadas em cache.
|
Anotação |
Valor de exemplo |
Padrão |
Descrição |
|
|
|
|
Ativa a correspondência automática de cache de imagem. Seleciona a melhor opção com base no grau de correspondência das imagens, no tamanho e no horário de criação. Gera um novo cache caso não haja correspondência. |
|
|
|
|
Exige que todas as imagens do pod correspondam totalmente ao cache de imagem. Tem precedência sobre |
|
|
|
— |
Define a quantidade de imagens do pod que precisam corresponder ao cache de imagem. |
|
|
|
— |
Vincula o pod a um cache de imagem específico por ID. Sobrescreve a correspondência automática. |
Precedência de anotações: Se imc-perfect-match e imc-match-count-request estiverem definidos simultaneamente, imc-perfect-match prevalece. Ao especificar eci-imc-id, a correspondência automática é substituída.
Correspondência automática de cache de imagem (recomendado)
Ative eci-auto-imc e, opcionalmente, adicione imc-perfect-match para uma correspondência mais rigorosa:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-auto-imc: "true" # Enables automatic image cache matching
k8s.aliyun.com/imc-perfect-match: "true" # All images in the pod must fully match the cache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: ["sleep"]
args: ["999999"]
imagePullPolicy: IfNotPresent
Especifique um cache de imagem
O cache de imagem especificado deve estar no estado Ready. Caso contrário, a criação do pod falhará.
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-imc-id: imc-2ze5tm5gehgtiiga**** # Pins to a specific image cache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent
Aplique anotações em massa
Use o recurso Elastic Container Instance Effect no eci-profile para aplicar anotações do ImageCache a todos os pods correspondentes. Consulte Configure eci-profile to automatically use the ImageCache feature.