Explicación detallada de la gestión de caché de imágenes de K8 en Kube

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
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/11052468
Recomendado
Clasificación