Ao executar imagens de contêiner grandes ou dimensionar pods com frequência, o pull de imagens de um registro remoto pode adicionar minutos à inicialização do pod. Um ImageCache é um CustomResourceDefinition (CRD) do Kubernetes fornecido pelo Elastic Container Instance (ECI) que armazena imagens de contêiner em cache como snapshots. Quando o ECI cria um pod, ele carrega as imagens diretamente do cache, o que reduz significativamente o tempo de inicialização para imagens grandes ou workloads dimensionados com frequência.
Para que você gerencie os ImageCaches de forma eficiente, este tópico descreve como criar, consultar e excluir um ImageCache.
Um ImageCache é armazenado como um snapshot e gera custos de snapshot enquanto existir. Portanto, exclua os ImageCaches que não estiverem mais em uso.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster Kubernetes com o componente
ack-virtual-nodeinstaladoAcesso ao cluster via
kubectl
Verifique se o seu cluster oferece suporte a ImageCaches
Para continuar, execute o comando a seguir e verifique se o CRD do ImageCache está instalado:
kubectl get crd/imagecaches.eci.alibabacloud.com
Se o CRD não for encontrado, a saída será semelhante a:
Error from server (NotFound): customresourcedefinitions.apiextensions.k8s.io "imagecaches.eci.alibabacloud.com" not found
Atualize o ack-virtual-node para uma versão que ofereça suporte a ImageCaches. Recomendamos que você atualize o componente ack-virtual-node para a versão mais recente para usar os novos recursos. Para obter informações sobre versões e instruções de atualização, consulte ack-virtual-node e Gerencie componentes do sistema.
Se o CRD estiver instalado, a saída será semelhante a:
NAME CREATED AT
imagecaches.eci.alibabacloud.com 2024-01-23T05:54:44Z
Se o CRD instalado não for a versão mais recente, aplique o manifesto do CRD atualizado:
kubectl apply -f imagecache-crd-sample.yaml
<details> <summary>Visualize imagecache-crd-sample.yaml</summary>
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: imagecaches.eci.alibabacloud.com
spec:
group: eci.alibabacloud.com
version: v1
names:
kind: ImageCache
plural: imagecaches
shortNames:
- ic
categories:
- all
scope: Cluster
subresources:
status: {}
validation:
openAPIV3Schema:
required:
- spec
properties:
spec:
type: object
required:
- images
properties:
imagePullSecrets:
type: array
items:
type: string
images:
minItems: 1
type: array
items:
type: string
imageCacheSize:
type: integer
retentionDays:
type: integer
additionalPrinterColumns:
- name: Age
type: date
JSONPath: .metadata.creationTimestamp
- name: CacheId
type: string
JSONPath: .status.imageCacheId
- name: Phase
type: string
JSONPath: .status.phase
- name: Progress
type: string
JSONPath: .status.progress
</details>
Crie um ImageCache
Configure o manifesto YAML
Para começar, crie um arquivo YAML (por exemplo, imagecache-test.yaml) com a estrutura a seguir. Cada campo é anotado na própria linha para referência rápida.
apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
name: imagecache-sample-test
annotations:
k8s.aliyun.com/imc-enable-reuse: "true" # Enables ImageCache reuse across pods
spec:
images: # [Required] Images to cache
- registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
- registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
imagePullSecrets: # [Optional] Secrets for private image repositories
- default:secret1 # Format: namespace:secretName
- default:secret2
- kube-system:secret3
imageCacheSize: 25 # [Optional] Cache size in GiB. Default: 20. Range: 20-32768.
# Must be >= 2x the image size.
retentionDays: 7 # [Optional] Days before the cache is deleted. Default: never expires.
Referência de parâmetros:
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
String[] |
Sim |
Imagens de contêiner a serem incluídas no cache |
|
|
String[] |
Não |
Secrets para repositórios de imagens privadas, no formato |
|
|
int |
Não |
Tamanho do cache em GiB. Padrão: |
|
|
int |
Não |
Número de dias para reter o cache antes da exclusão automática. Em branco por padrão (nunca expira). |
Por meio de anotações, ative recursos adicionais do ImageCache. Por exemplo, k8s.aliyun.com/imc-enable-reuse: "true" permite que vários pods compartilhem o mesmo ImageCache. Para obter a lista completa de anotações suportadas, consulte ImageCache annotations . Para a referência completa da API, consulte Kubernetes ImageCache API .
Aplique o manifesto
kubectl create -f imagecache-test.yaml
Verifique se o ImageCache está pronto
kubectl get imagecache imagecache-sample-test
O ImageCache está pronto quando PHASE exibe Ready e PROGRESS atinge 100%:
NAME AGE CACHEID PHASE PROGRESS
imagecache-sample-test 5m30s imc-2ze2kbf9l1onf03z**** Ready 100%
Consulte ImageCaches
Liste todos os ImageCaches no cluster:
kubectl get imagecache
Obtenha a configuração completa e o status de um ImageCache específico:
kubectl get imagecache <imagecache-name> -o yaml
Exclua um ImageCache
kubectl delete imagecache <imagecache-name>
Um ImageCache é um snapshot. Portanto, exclua os ImageCaches que não forem mais necessários para evitar custos contínuos de snapshot.