Baixar imagens de contêiner do registro durante a criação do pod aumenta a latência, especialmente com imagens grandes ou em ambientes com acesso lento à rede. O ImageCache é um recurso do Elastic Container Instance (ECI) exposto como uma CustomResourceDefinition (CRD) do Kubernetes. Adicione annotations aos metadados do pod para que o ECI associe um cache de imagem pré-criado no momento da criação. Assim, as camadas da imagem já estarão disponíveis em disco, sem necessidade de download do registro.
As annotations só entram em vigor na criação do pod. Adicionar ou modificar annotations em um pod existente não surte efeito.
Como funciona
Crie um recurso ImageCache com as imagens que seus pods utilizam.
Adicione annotations à seção
spec.template.metadatano manifesto do pod ou Deployment.Ao criar o pod, o ECI compara a annotation com os recursos ImageCache disponíveis e monta as camadas em cache, ignorando o download da imagem.
O ImageCache é um recurso no nível do cluster. Pods em qualquer namespace do cluster podem utilizá-lo.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster Kubernetes com o ECI ativado
Pelo menos um recurso ImageCache no estado Ready (obrigatório ao fixar com
eci-imc-id)
Annotations
Adicione as annotations abaixo à seção metadata da especificação do pod. Para Deployments, insira-as em spec.template.metadata.
|
Annotation |
Valor de exemplo |
Padrão |
Descrição |
|
|
|
|
Ativa a correspondência automática de cache de imagem. O ECI seleciona a melhor opção com base no grau de correspondência das imagens, no tamanho da imagem e no horário de criação. Se nenhum cache corresponder, o ECI cria um automaticamente. |
|
|
|
|
Exige que todas as imagens de contêiner no pod correspondam ao cache de imagem. |
|
|
|
— |
Define quantas imagens de contêiner no pod devem corresponder exatamente ao cache de imagem. |
|
|
|
— |
Fixa o pod a um cache de imagem específico. |
Regras de prioridade
Quando várias annotations são definidas, aplica-se a seguinte precedência:
A annotation
eci-imc-id(fixar a um cache específico) substitui a correspondência automática (eci-auto-imc).Na correspondência automática,
imc-perfect-matchtem prioridade sobreimc-match-count-requestse ambas estiverem configuradas. Prefiraimc-perfect-match.
Exemplos de configuração
Para obter os melhores resultados em ambos os exemplos:
Use imagens já incluídas no recurso ImageCache para maximizar a taxa de acerto do cache.
Defina
imagePullPolicy: IfNotPresentem todos os contêineres para evitar o download de camadas já armazenadas em cache.
Exemplo 1: Correspondência automática de cache de imagem (recomendado)
Use eci-auto-imc para permitir que o ECI selecione automaticamente o melhor cache disponível. Adicione imc-perfect-match: "true" se todas as imagens do pod precisarem estar presentes no cache.
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" # Enable automatic cache matching
k8s.aliyun.com/imc-perfect-match: "true" # All images must be in the cache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent # Prevents re-downloading cached image layers
- name: busybox
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
command: ["sleep"]
args: ["999999"]
imagePullPolicy: IfNotPresent # Prevents re-downloading cached image layers
Exemplo 2: Fixar a um cache de imagem específico
Use eci-imc-id para direcionar um recurso ImageCache específico. O cache indicado deve estar no estado Ready antes da aplicação do manifesto; 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**** # ID of the target ImageCache
spec:
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
imagePullPolicy: IfNotPresent # Prevents re-downloading cached image layers