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
-
Crie um arquivo chamado
imagecache-secrets-test.yamlcom 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 -
Crie o ImageCache:
kubectl create -f imagecache-secrets-test.yaml -
Verifique se o ImageCache está pronto:
kubectl get imagecache imagecache-sample-testO ImageCache estará pronto quando
PHASEexibirReadyePROGRESSmostrar100%: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 |
|
|
Utiliza o ImageCache específico identificado por você |
|
|
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.
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:
Grau de correspondência — O cache cujo registro e versão de imagem melhor correspondem à imagem do pod é selecionado primeiro.
Tamanho do cache — Entre caches com igual correspondência, prefere-se aquele cujo tamanho mais se aproxima do tamanho da imagem.
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
Gerencie ImageCaches — Crie, consulte e exclua ImageCaches
Faturamento de caches de imagem — Entenda como os caches de imagem são faturados