Shanhe comparte este artículo de la comunidad de nube de Huawei " Conciencia de Kube sobre administración de caché de imágenes de K8s ".
Sabemos que la programación de contenedores en Internet necesita extraer la imagen del contenedor actual en la fila del nodo programado. En algunos escenarios especiales, k8s
-
Se requiere
快速启动和/或扩展
solicitud . Por ejemplo, las aplicaciones que realizan procesamiento de datos en tiempo real deben escalarse rápidamente debido a los enormes volúmenes de datos. -
La imagen es relativamente grande e implica múltiples versiones. El almacenamiento del nodo es limitado y las imágenes innecesarias deben limpiarse dinámicamente.
-
无服务器函数
A menudo es necesario reaccionar inmediatamente a los eventos entrantes e iniciar contenedores en una fracción de segundo. -
La ejecución en dispositivos perimetrales debe tolerar la conectividad de red intermitente al repositorio espejo.
IoT 应用程序
边缘设备
-
Si necesita extraer una imagen
专用仓库
de y no puede dar镜像仓库
acceso a todos para extraer la imagen desde allí, puede hacer que la imagen esté disponible en los nodos del clúster. -
Si un administrador u operador de clúster necesita actualizar una aplicación y desea verificar de antemano si la nueva imagen se puede extraer correctamente.
kube-fledged
Se utiliza para crear y administrar la caché de imágenes del contenedor directamente en los nodos del clúster de Kubernetes . Permite a los usuarios definir una lista de imágenes y en qué nodos trabajadores se deben almacenar en caché estas imágenes (es decir, extraerlas). Como resultado, el módulo de aplicaciones se puede iniciar casi de inmediato porque no es necesario extraer la imagen del registro. kubernetes operator
worker
kube-fledged
Se proporciona una API CRUD para administrar el ciclo de vida del caché de imágenes y admite múltiples parámetros configurables, lo que le permite personalizar funciones según sus propias necesidades.
Kubernetes lo tiene integrado 镜像垃圾回收机制
. El kubelet en el nodo verifica periódicamente si el uso del disco alcanza un cierto umbral (configurable mediante indicadores). Una vez que se alcanza esto 阈值
, kubelet eliminará automáticamente todas las imágenes no utilizadas del nodo.
Es necesario implementar mecanismos de actualización automática y periódica en la solución propuesta. Si el gc de kubelet elimina la imagen en el caché de imágenes, el siguiente ciclo de actualización colocará la imagen eliminada en el caché de imágenes. Esto garantiza que la caché de imágenes esté actualizada.
Flujo de diseño
https://github.com/senthilrch/kube-fledged/blob/master/docs/kubefledged-architecture.png
Implementar kube
Implementación del modo de timón
──[[email protected]]-[~/ansible] └─$mkdir kube-de pleno derecho ┌──[[email protected]]-[~/ansible] └─$cd Kube-de pleno derecho ┌──[[email protected]]-[~/ansible/kube-fledged] └─$exportar KUBEFLEDGED_NAMESPACE=kube-de pleno derecho ┌──[[email protected]]-[~/ansible/kube-fledged] └─$kubectl crear espacio de nombres ${KUBEFLEDGED_NAMESPACE} espacio de nombres/kube creado ┌──[[email protected]]-[~/ansible/kube-fledged] └─$ helm repo agregar kubefledged-charts https://senthilrch.github.io/kubefledged-charts/ "kubefledged-charts" se ha agregado a sus repositorios ┌──[[email protected]]-[~/ansible/kube-fledged] └─$actualización del repositorio de helm Espera mientras tomamos las últimas novedades de tus repositorios de gráficos... ...Obtuve con éxito una actualización del repositorio de gráficos "kubefledged-charts" ...Obtuve con éxito una actualización del repositorio de gráficos "kubescape" ...Obtuve con éxito una actualización del repositorio de gráficos "rancher-stable" ...Obtuve con éxito una actualización del repositorio de gráficos "skm" ...Obtuve con éxito una actualización del repositorio de gráficos "openkruise" ...Obtuve con éxito una actualización del repositorio de gráficos "awx-operator" ...Obtuve con éxito una actualización del repositorio de gráficos "botkube" Actualizacion completa. ⎈¡Feliz timón!⎈
┌──[[email protected]]-[~/ansible/kube-fledged] └─$helm install --verify kube-fledged kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --espera
Durante la implementación real, se descubrió que debido a problemas de red, chart
no se podía realizar la descarga, por lo que se implementó usando yaml. make deploy-using-yaml
Implementación de archivos Yaml
┌──[[email protected]]-[~/ansible/kube-fledged] └─$git clon https://github.com/senthilrch/kube-fledged.git Clonación de 'kube'... remoto: Enumeración de objetos: 10613, listo. remoto: Contando objetos: 100% (1501/1501), listo. remoto: Comprimir objetos: 100% (629/629), listo. remoto: Total 10613 (delta 845), reutilizado 1357 (delta 766), paquete reutilizado 9112 Entre objetos receptores: 100% (10613/10613), 34,58 MiB | 7,33 MiB/s, listo. Procesamiento del medio delta: 100% (4431/4431), listo. ┌──[[email protected]]-[~/ansible/kube-fledged] └─$ls kube-de pleno derecho ┌──[[email protected]]-[~/ansible/kube-fledged] └─$cd kube-de pleno derecho/ ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$hacer implementar-usando-yaml kubectl aplicar -f implementar/kubefledged-namespace.yaml
Al implementar por primera vez, descubrí que la imagen no se podía bajar.
┌──[[email protected]]-[~] └─$kubectl obtiene todo -n kube-de pleno derecho NOMBRE LISTO ESTADO REINICIA EDAD pod/kube-fledged-controller-df69f6565-drrqg 0/1 CrashLoopBackOff 35 (hace 5h59m) 21h pod/kube-fledged-webhook-server-7bcd589bc4-b7kg2 0/1 Init:CrashLoopBackOff 35 (hace 5h58m) 21h pod/kubefledged-controller-55f848cc67-7f4rl 1/1 En funcionamiento 0 21 h pod/kubefledged-webhook-server-597dbf4ff5-l8fbh 0/1 Init:CrashLoopBackOff 34 (hace 6 h) 21 h NOMBRE TIPO CLUSTER-IP EXTERNAL-IP PUERTO(S) EDAD service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <ninguno> 3443/TCP 21h service/kubefledged-webhook-server ClusterIP 10.101.191.206 <ninguno> 3443/TCP 21h NOMBRE LISTO ACTUALIZADO DISPONIBLE EDAD implementación.apps/kube-fledged-controller 0/1 1 0 21h implementación.apps/kube-fledged-webhook-server 0/1 1 0 21h implementación.apps/kubefledged-controller 0/1 1 0 21h implementación.apps/kubefledged-webhook-server 0/1 1 0 21h NOMBRE EDAD ACTUAL DESEADA LISTO replicaset.apps/kube-fledged-controller-df69f6565 1 1 0 21h replicaset.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 0 21h replicaset.apps/kubefledged-controller-55f848cc67 1 1 0 21h replicaset.apps/kubefledged-webhook-server-597dbf4ff5 1 1 0 21h ┌──[[email protected]]-[~] └─$
Aquí encontramos la imagen que queremos sacar.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$gato *.yaml | imagen grep: - imagen: senthilrch/kubefledged-controller:v0.10.0 - imagen: senthilrch/kubefledged-webhook-server:v0.10.0 - imagen: senthilrch/kubefledged-webhook-server:v0.10.0
Realice algunas operaciones individualmente y utilice actualmente operaciones por lotes en todos los nodos en funcionamiento. ansible
┌──[[email protected]]-[~/ansible] └─$ansible k8s_node -m shell -a "docker pull docker.io/senthilrch/kubefledged-cri-client:v0.10.0" -i host.yaml
Extrae otras imágenes relacionadas
Una vez completada la operación, el estado del contenedor es normal.
┌──[[email protected]]-[~/ansible] └─$kubectl -n kube-fledged obtener todo NOMBRE LISTO ESTADO REINICIA EDAD pod/kube-fledged-controller-df69f6565-wdb4g 1/1 En ejecución 0 13 h pod/kube-fledged-webhook-server-7bcd589bc4-j8xxp 1/1 En ejecución 0 13 h pod/kubefledged-controller-55f848cc67-klxlm 1/1 En ejecución 0 13 h pod/kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 En ejecución 0 13 h NOMBRE TIPO CLUSTER-IP EXTERNAL-IP PUERTO(S) EDAD service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <ninguno> 3443/TCP 36h service/kubefledged-webhook-server ClusterIP 10.101.191.206 <ninguno> 3443/TCP 36h NOMBRE LISTO ACTUALIZADO DISPONIBLE EDAD implementación.apps/kube-fledged-controller 1/1 1 1 36h implementación.apps/kube-fledged-webhook-server 1/1 1 1 36h implementación.apps/kubefledged-controller 1/1 1 1 36h implementación.apps/kubefledged-webhook-server 1/1 1 1 36h NOMBRE EDAD ACTUAL DESEADA LISTO replicaset.apps/kube-fledged-controller-df69f6565 1 1 1 36h replicaset.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 1 36h replicaset.apps/kubefledged-controller-55f848cc67 1 1 1 36h replicaset.apps/kubefledged-webhook-server-597dbf4ff5 1 1 1 36h
Verificar la instalación exitosa
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$kubectl obtener pods -n kube-fledged -l app=kubefledged NOMBRE LISTO ESTADO REINICIA EDAD kubefledged-controller-55f848cc67-klxlm 1/1 En ejecución 0 16 h kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 Ejecutando 0 16 h ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$kubectl obtiene imagecaches -n kube-fledged No se encontraron recursos en el espacio de nombres desarrollado por kube.
Usando kubefledged
Crear objeto de caché de imagen
Cree un objeto de caché de imagen basado en el archivo Demo
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$despliegue de cd/ ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- Versión api: kubefledged.io/v1alpha2 tipo: ImageCache metadatos: # Nombre del caché de imágenes. Un clúster puede tener varios objetos de caché de imágenes. nombre: imagecache1 espacio de nombres: kube-fledged # El espacio de nombres de Kubernetes que se utilizará para esta caché de imágenes. Puede elegir un espacio de nombres diferente según su preferencia etiquetas: aplicación: kubefledged kubefledged: caché de imágenes Especificaciones: # El campo "cacheSpec" permite al usuario definir una lista de imágenes y en qué nodos trabajadores se deben almacenar en caché esas imágenes (es decir, extraerlas previamente). especificación de caché: # Especifica una lista de imágenes (nginx:1.23.1) sin selector de nodos, por lo que estas imágenes se almacenarán en caché en todos los nodos del clúster. - imágenes: - ghcr.io/jitesoft/nginx:1.23.1 # Especifica una lista de imágenes (cassandra:v7 y etcd:3.5.4-0) con un selector de nodos, por lo tanto, estas imágenes se almacenarán en caché solo en los nodos seleccionados por el selector de nodos. - imágenes: - us.gcr.io/k8s-artifacts-prod/cassandra:v7 - us.gcr.io/k8s-artifacts-prod/etcd:3.5.4-0 selector de nodo: nivel: backend # Especifica una lista de secretos de extracción de imágenes para extraer imágenes de repositorios privados al caché imagenPullSecrets: - nombre: mi clave de registro
La imagen correspondiente en la demostración oficial no se puede desplegar, así que cámbiela.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$docker tire us.gcr.io/k8s-artifacts-prod/cassandra:v7 Respuesta de error del demonio: Obtener "https://us.gcr.io/v2/": net/http: solicitud cancelada mientras se espera la conexión (Client.Timeout excedió mientras se esperaban los encabezados) ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Para probar el uso de etiquetas selectoras, buscamos la etiqueta de un nodo y realizamos el caché de imágenes por separado.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl obtener nodos --show-labels
Al mismo tiempo, extraemos la imagen directamente del almacén público, por lo que no se necesita ningún objeto . imagePullSecrets
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$vim kubefledged-imagecache.yaml
archivo modificado yaml
-
Se agregó un liruilong/my-busybox: caché de imagen más reciente para todos los nodos
-
Se agregó un caché espejo correspondiente al selector de etiquetas.
kubernetes.io/hostname: vms105.liruilongs.github.io
liruilong/hikvision-sdk-config-ftp:latest
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- Versión api: kubefledged.io/v1alpha2 tipo: ImageCache metadatos: # Nombre del caché de imágenes. Un clúster puede tener varios objetos de caché de imágenes. nombre: imagecache1 espacio de nombres: kube-fledged # El espacio de nombres de Kubernetes que se utilizará para esta caché de imágenes. Puede elegir un espacio de nombres diferente según su preferencia etiquetas: aplicación: kubefledged kubefledged: caché de imágenes Especificaciones: # El campo "cacheSpec" permite al usuario definir una lista de imágenes y en qué nodos trabajadores se deben almacenar en caché esas imágenes (es decir, extraerlas previamente). especificación de caché: # Especifica una lista de imágenes (nginx:1.23.1) sin selector de nodos, por lo que estas imágenes se almacenarán en caché en todos los nodos del clúster. - imágenes: - liruilong/my-busybox:último # Especifica una lista de imágenes (cassandra:v7 y etcd:3.5.4-0) con un selector de nodos, por lo tanto, estas imágenes se almacenarán en caché solo en los nodos seleccionados por el selector de nodos. - imágenes: - liruilong/hikvision-sdk-config-ftp:último selector de nodo: kubernetes.io/nombre de host: vms105.liruilongs.github.io # Especifica una lista de secretos de extracción de imágenes para extraer imágenes de repositorios privados al caché #imagePullSecretos: #- nombre: mi clave de registro ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Creado directamente y reportado un error
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl crear -f kubefledged-imagecache.yaml Error del servidor (InternalError): error al crear "kubefledged-imagecache.yaml": se produjo un error interno: no se pudo llamar al webhook "validate-image-cache.kubefledged.io": no se pudo llamar al webhook: Publicar "https://kubefledged- webhook-server.kube-fledged.svc:3443/validate-image-cache?timeout=1s": x509: certificado firmado por una autoridad desconocida (posiblemente debido a "crypto/rsa: error de verificación" al intentar verificar el certificado de autoridad candidata " kubefledged.io") ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl obtiene imagecaches -n kube-fledged No se encontraron recursos en el espacio de nombres desarrollado por kube. ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
La solución es eliminar el objeto correspondiente y recrearlo.
Encontré una solución en uno de mis proyectos actuales https://github.com/senthilrch/kube-fledged/issues/76 issues
Parece que esto está codificado, pero cuando se inicia el servidor, se genera un nuevo paquete de CA y se actualiza la configuración del webhook. Cuando se produce otra implementación, el paquete de CA original se vuelve a aplicar y las solicitudes de webhook comienzan a fallar hasta que el componente del webhook se reinicia nuevamente para parchear el paquete init-server. Webhook CA
webhook
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$hacer eliminar-kubefledged-y-operador # Eliminar kubefledged kubectl eliminar -f implementar/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml error: no se encontró la asignación de recursos para el nombre: "kube-fledged" espacio de nombres: "kube-fledged" de "deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml": no hay coincidencias para el tipo "KubeFledged" " en la versión "charts.helm.kubefledged.io/v1alpha2" asegúrese de que los CRD estén instalados primero
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged] └─$hacer implementar-usando-yaml kubectl aplicar -f implementar/kubefledged-namespace.yaml espacio de nombres/kube creado kubectl aplicar -f implementar/kubefledged-crd.yaml customresourcedefinition.apiextensions.k8s.io/imagecaches.kubefledged.io sin cambios .................... Implementación del estado de implementación de kubectl kubefledged-webhook-server -n kube-fledged --watch Esperando que finalice la implementación de "kubefledged-webhook-server": 0 de 1 réplicas actualizadas están disponibles... implementación "kubefledged-webhook-server" implementada con éxito kubectl obtiene vainas -n kube-fledged NOMBRE LISTO ESTADO REINICIA EDAD kubefledged-controller-55f848cc67-76c4v 1/1 Ejecutando 0 112s kubefledged-webhook-server-597dbf4ff5-56h6z 1/1 Ejecutando 0 66s
Vuelva a crear el objeto de caché y créelo correctamente
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl crear -f kubefledged-imagecache.yaml imagecache.kubefledged.io/imagecache1 creado ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl obtiene imagecaches -n kube-fledged NOMBRE EDAD caché de imagen1 10s ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Ver la caché de imágenes administrada actualmente
┌──[[email protected]]-[~/ansible/kube-fledged] └─$kubectl obtiene imagecaches imagecache1 -n kube-fledged -o json { "apiVersion": "kubefledged.io/v1alpha2", "tipo": "ImageCache", "metadatos": { "creationTimestamp": "2024-03-01T15:08:42Z", "generación": 83, "etiquetas": { "aplicación": "kubefledged", "kubefledged": "caché de imágenes" }, "nombre": "imagecache1", "namespace": "kube-pleno", "resourceVersion": "20169836", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "Especificaciones": { "especificación de caché": [ { "imágenes": [ "liruilong/my-busybox:último" ] }, { "imágenes": [ "liruilong/hikvision-sdk-config-ftp:último" ], "Selector de nodo": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "estado": { "completionTime": "2024-03-02T01:06:47Z", "message": "Todas las imágenes solicitadas se extrajeron con éxito a los respectivos nodos", "razón": "ImageCacheRefresh", "startTime": "2024-03-02T01:05:33Z", "status": "Exitoso" } } ┌──[[email protected]]-[~/ansible/kube-fledged] └─$
Verificar vía ansible
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "imágenes acoplables | grep liruilong/my-busybox" -i host.yaml 192.168.26.102 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.101 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.103 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.105 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.100 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.106 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB ┌──[[email protected]]-[~/ansible] └─$
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "imágenes acoplables | grep liruilong/hikvision-sdk-config-ftp" -i host.yaml 192.168.26.102 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.100 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.103 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.105 | CAMBIADO | rc=0 >> liruilong/hikvision-sdk-config-ftp último a02cd03b4342 Hace 4 meses 830MB 192.168.26.101 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.106 | FALLADO | rc=1 >> código de retorno distinto de cero ┌──[[email protected]]-[~/ansible] └─$
Activar la actualización automática
┌──[[email protected]]-[~/ansible] └─$kubectl anotar imagecaches imagecache1 -n kube-fledged kubefledged.io/refresh-imagecache= imagecache.kubefledged.io/imagecache1 anotado ┌──[[email protected]]-[~/ansible] └─$
Agregar caché de imagen
Agregar una nueva caché de imágenes
┌──[[email protected]]-[~/ansible] └─$kubectl obtiene imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "tipo": "ImageCache", "metadatos": { "creationTimestamp": "2024-03-01T15:08:42Z", "generación": 92, "etiquetas": { "aplicación": "kubefledged", "kubefledged": "caché de imágenes" }, "nombre": "imagecache1", "namespace": "kube-pleno", "resourceVersion": "20175233", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "Especificaciones": { "especificación de caché": [ { "imágenes": [ "liruilong/my-busybox:último", "liruilong/jdk1.8_191:último" ] }, { "imágenes": [ "liruilong/hikvision-sdk-config-ftp:último" ], "Selector de nodo": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "estado": { "completionTime": "2024-03-02T01:43:32Z", "message": "Todas las imágenes solicitadas se extrajeron con éxito a los respectivos nodos", "razón": "ImageCacheUpdate", "startTime": "2024-03-02T01:40:34Z", "status": "Exitoso" } } ┌──[[email protected]]-[~/ansible] └─$
Confirmar vía ansible
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "imágenes acoplables | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.101 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.100 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.102 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.103 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.105 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.106 | FALLADO | rc=1 >> código de retorno distinto de cero ┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "imágenes acoplables | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.101 | CAMBIADO | rc=0 >> liruilong/jdk1.8_191 último 17dbd4002a8c Hace 5 años 170MB 192.168.26.102 | CAMBIADO | rc=0 >> liruilong/jdk1.8_191 último 17dbd4002a8c Hace 5 años 170MB 192.168.26.100 | CAMBIADO | rc=0 >> liruilong/jdk1.8_191 último 17dbd4002a8c Hace 5 años 170MB 192.168.26.103 | CAMBIADO | rc=0 >> liruilong/jdk1.8_191 último 17dbd4002a8c Hace 5 años 170MB 192.168.26.105 | CAMBIADO | rc=0 >> liruilong/jdk1.8_191 último 17dbd4002a8c Hace 5 años 170MB 192.168.26.106 | CAMBIADO | rc=0 >> liruilong/jdk1.8_191 último 17dbd4002a8c Hace 5 años 170MB ┌──[[email protected]]-[~/ansible] └─$
Eliminar caché de imágenes
┌──[[email protected]]-[~/ansible] └─$kubectl editar imagecaches imagecache1 -n kube-fledged imagecache.kubefledged.io/imagecache1 editado ┌──[[email protected]]-[~/ansible] └─$kubectl obtiene imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "tipo": "ImageCache", "metadatos": { "creationTimestamp": "2024-03-01T15:08:42Z", "generación": 94, "etiquetas": { "aplicación": "kubefledged", "kubefledged": "caché de imágenes" }, "nombre": "imagecache1", "namespace": "kube-pleno", "resourceVersion": "20175766", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "Especificaciones": { "especificación de caché": [ { "imágenes": [ "liruilong/jdk1.8_191:último" ] }, { "imágenes": [ "liruilong/hikvision-sdk-config-ftp:último" ], "Selector de nodo": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "estado": { "message": "La caché de imágenes se está actualizando. Vea el estado después de un tiempo", "razón": "ImageCacheUpdate", "startTime": "2024-03-02T01:48:03Z", "estado": "Procesando" } }
A través de la confirmación de Ansible, puede ver que ya sea el nodo en el maestro o el nodo de trabajo, el caché de imagen correspondiente se ha borrado.
┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "imágenes acoplables | grep liruilong/my-busybox" -i host.yaml 192.168.26.102 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.101 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.105 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.100 | CAMBIADO | rc=0 >> liruilong/my-busybox último 497b83a63aad Hace 11 meses 1,24 MB 192.168.26.103 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.106 | FALLADO | rc=1 >> código de retorno distinto de cero ┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "imágenes acoplables | grep liruilong/my-busybox" -i host.yaml 192.168.26.105 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.102 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.103 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.101 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.100 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.106 | FALLADO | rc=1 >> código de retorno distinto de cero ┌──[[email protected]]-[~/ansible] └─$
Cabe señalar aquí que si se borran todos los cachés de imágenes, la siguiente matriz debe escribirse como "". images
┌──[[email protected]]-[~/ansible] └─$kubectl editar imagecaches imagecache1 -n kube-fledged imagecache.kubefledged.io/imagecache1 editado ┌──[[email protected]]-[~/ansible] └─$ansible all -m shell -a "imágenes acoplables | grep liruilong/jdk1.8_191" -i host.yaml 192.168.26.102 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.101 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.100 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.105 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.103 | FALLADO | rc=1 >> código de retorno distinto de cero 192.168.26.106 | FALLADO | rc=1 >> código de retorno distinto de cero ┌──[[email protected]]-[~/ansible] └─$kubectl obtiene imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json { "apiVersion": "kubefledged.io/v1alpha2", "tipo": "ImageCache", "metadatos": { "creationTimestamp": "2024-03-01T15:08:42Z", "generación": 98, "etiquetas": { "aplicación": "kubefledged", "kubefledged": "caché de imágenes" }, "nombre": "imagecache1", "namespace": "kube-pleno", "resourceVersion": "20176849", "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72" }, "Especificaciones": { "especificación de caché": [ { "imágenes": [ "" ] }, { "imágenes": [ "liruilong/hikvision-sdk-config-ftp:último" ], "Selector de nodo": { "kubernetes.io/hostname": "vms105.liruilongs.github.io" } } ] }, "estado": { "completionTime": "2024-03-02T01:52:16Z", "message": "Todas las imágenes almacenadas en caché se eliminaron con éxito de los respectivos nodos", "razón": "ImageCacheUpdate", "startTime": "2024-03-02T01:51:47Z", "status": "Exitoso" } } ┌──[[email protected]]-[~/ansible] └─$
Si se elimina mediante el siguiente método, comente directamente la etiqueta correspondiente
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$cat kubefledged-imagecache.yaml --- Versión api: kubefledged.io/v1alpha2 tipo: ImageCache metadatos: # Nombre del caché de imágenes. Un clúster puede tener varios objetos de caché de imágenes. nombre: imagecache1 espacio de nombres: kube-fledged # El espacio de nombres de Kubernetes que se utilizará para esta caché de imágenes. Puede elegir un espacio de nombres diferente según su preferencia etiquetas: aplicación: kubefledged kubefledged: caché de imágenes Especificaciones: # El campo "cacheSpec" permite al usuario definir una lista de imágenes y en qué nodos trabajadores se deben almacenar en caché esas imágenes (es decir, extraerlas previamente). especificación de caché: # Especifica una lista de imágenes (nginx:1.23.1) sin selector de nodos, por lo que estas imágenes se almacenarán en caché en todos los nodos del clúster. #- imágenes: #- liruilong/my-busybox:último # Especifica una lista de imágenes (cassandra:v7 y etcd:3.5.4-0) con un selector de nodos, por lo tanto, estas imágenes se almacenarán en caché solo en los nodos seleccionados por el selector de nodos. - imágenes: - liruilong/hikvision-sdk-config-ftp:último selector de nodo: kubernetes.io/nombre de host: vms105.liruilongs.github.io # Especifica una lista de secretos de extracción de imágenes para extraer imágenes de repositorios privados al caché #imagePullSecretos: #- nombre: mi clave de registro ┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$
Entonces se informará el siguiente error.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy] └─$kubectl editar imagecaches imagecache1 -n kube-fledged error: imagecaches.kubefledged.io "imagecache1" no se pudo parchear: el webhook de admisión "validate-image-cache.kubefledged.io" denegó la solicitud: No coincide en el no. de listas de imágenes Puede ejecutar `kubectl replace -f /tmp/kubectl-edit-4113815075.yaml` para intentar esta actualización nuevamente.
Referencia a parte de la publicación del blog.
© Los derechos de autor de los enlaces de referencia en este artículo pertenecen al autor original. Si hay alguna infracción, infórmenos. Si está de acuerdo, no sea tacaño con las estrellas :)
https://github.com/senthilrch/kube-fledged
Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud lo antes posible ~
¡Compañero pollo deepin-IDE de "código abierto" y finalmente logró el arranque! Buen chico, Tencent realmente ha convertido Switch en una "máquina de aprendizaje pensante" Revisión de fallas de Tencent Cloud del 8 de abril y explicación de la situación Reconstrucción de inicio de escritorio remoto de RustDesk Cliente web Base de datos de terminal de código abierto WeChat basada en SQLite WCDB marcó el comienzo de una actualización importante Lista de abril de TIOBE: PHP cayó a un mínimo histórico, Fabrice Bellard, el padre de FFmpeg, lanzó la herramienta de compresión de audio TSAC , Google lanzó un modelo de código grande, CodeGemma , ¿te va a matar? Es tan bueno que es de código abierto: herramienta de edición de carteles e imágenes de código abierto