Explication détaillée de la gestion du cache d'images K8 à partir de Kube

Cet article est partagé par la communauté Huawei Cloud « K8s Image Cache Management Kube-fledged Awareness » par Shanhe.

Nous savons que la planification des conteneurs sur Internet doit extraire l'image du conteneur actuel sur la ligne du nœud planifié. Dans certains scénarios spéciaux, k8s 

  • 快速启动和/或扩展 Demande requise . Par exemple, les applications qui effectuent un traitement de données en temps réel doivent évoluer rapidement en raison de l'explosion des volumes de données.
  • L'image est relativement volumineuse et implique plusieurs versions. Le stockage des nœuds est limité et les images inutiles doivent être nettoyées dynamiquement.
  • 无服务器函数 Il est souvent nécessaire de réagir immédiatement aux événements entrants et de démarrer les conteneurs en une fraction de seconde.
  • L’exécution sur des appareils Edge doit tolérer une connectivité réseau intermittente au référentiel miroir.   IoT 应用程序 边缘设备
  • Si vous devez extraire une image 专用仓库 de , et que vous ne pouvez pas donner à tout le monde 镜像仓库 l'accès pour extraire l'image à partir de là, vous pouvez rendre l'image disponible sur les nœuds du cluster.
  • Si un administrateur ou un opérateur de cluster doit mettre à niveau une application et souhaite vérifier à l'avance si la nouvelle image peut être extraite avec succès.

kube-fledged Il permet de créer et de gérer le cache d'images de conteneur directement sur les nœuds du cluster Kubernetes . Il permet aux utilisateurs de définir une liste d'images et sur quels nœuds de travail ces images doivent être mises en cache (c'est-à-dire extraites). En conséquence, le module d'application peut être démarré presque immédiatement car il n'est pas nécessaire d'extraire l'image du registre. kubernetes operator worker 

kube-fledged Une API CRUD est fournie pour gérer le cycle de vie du cache d'images et prend en charge plusieurs paramètres configurables, vous permettant de personnaliser les fonctions en fonction de vos propres besoins.

Kubernetes l'a intégré 镜像垃圾回收机制. Le kubelet du nœud vérifie périodiquement si l'utilisation du disque atteint un certain seuil (configurable via des indicateurs). Une fois cet objectif atteint 阈值, le kubelet supprimera automatiquement toutes les images inutilisées du nœud.

Des mécanismes de rafraîchissement automatiques et périodiques doivent être implémentés dans la solution proposée. Si l'image dans le cache d'images est supprimée par le gc de kubelet, le prochain cycle d'actualisation extraira l'image supprimée dans le cache d'images. Cela garantit que le cache d’images est à jour.

Flux de conception

https://github.com/senthilrch/kube-fledged/blob/master/docs/kubefledged-architecture.png

Déployer Kube à part entière

Déploiement en mode Helm

──[[email protected]]-[~/ansible]
└─$mkdir kube à part entière
┌──[[email protected]]-[~/ansible]
└─$cd kube à part entière
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$export KUBEFLEDGED_NAMESPACE=kube-fledged
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$kubectl créer un espace de noms ${KUBEFLEDGED_NAMESPACE}
espace de noms/kube-fledged créé
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$helm repo ajouter kubefledged-charts https://senthilrch.github.io/kubefledged-charts/
"kubefledged-charts" a été ajouté à vos référentiels
┌──[[email protected]]-[~/ansible/kube-fledged]
└─Mise à jour du dépôt $helm
Attendez bien pendant que nous récupérons les dernières nouveautés de vos référentiels de graphiques...
...Obtention réussie d'une mise à jour du référentiel de graphiques "kubefledged-charts"
...Obtention réussie d'une mise à jour du référentiel de graphiques "kubescape"
...Obtention réussie d'une mise à jour du référentiel de cartes "rancher-stable"
...Obtention réussie d'une mise à jour du référentiel de graphiques "skm"
...Obtention réussie d'une mise à jour du référentiel de cartes "openkruise"
...Obtention réussie d'une mise à jour du référentiel de graphiques "awx-operator"
...Obtention réussie d'une mise à jour du référentiel de graphiques "botkube"
Mise à jour terminée. ⎈Joyeux Helming !⎈
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$helm install --verify kube-fledged kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --wait

Lors du déploiement proprement dit, il a été constaté qu'en raison de problèmes de réseau, chart le téléchargement ne pouvait pas être effectué. Il a donc été déployé à l'aide de yaml. make deploy-using-yaml 

Déploiement de fichiers Yaml

┌──[[email protected]]-[~/ansible/kube-fledged]
└─$git clone https://github.com/senthilrch/kube-fledged.git
Clonage sur 'kube-fledged'...
distant : Énumération des objets : 10613, terminé.
à distance : Comptage d'objets : 100 % (1501/1501), terminé.
à distance : compression des objets : 100 % (629/629), terminé.
à distance : Total 10 613 (delta 845), 1 357 réutilisés (delta 766), 9 112 réutilisés en pack
Parmi les objets récepteurs : 100 % (10613/10613), 34,58 Mio | 7,33 Mio/s, c'est fait.
Traitement du milieu delta : 100 % (4431/4431), terminé.
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$ls
Kube à part entière
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$cd kube-à part entière/
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$make déployer-en utilisant-yaml
kubectl apply -f déployer/kubefledged-namespace.yaml

Lors du premier déploiement, j'ai constaté que l'image ne pouvait pas être extraite.

┌──[[email protected]]-[~]
└─$kubectl obtient tout -n kube à part entière
NOM PRÊT STATUT REDÉMARRE L'ÂGE
pod/kube-fledged-controller-df69f6565-drrqg 0/1 CrashLoopBackOff 35 (il y a 5h59m) 21h
pod/kube-fledged-webhook-server-7bcd589bc4-b7kg2 0/1 Init:CrashLoopBackOff 35 (il y a 5h58m) 21h
pod/kubefledged-controller-55f848cc67-7f4rl 1/1 En cours d'exécution 0 21h
pod/kubefledged-webhook-server-597dbf4ff5-l8fbh 0/1 Init:CrashLoopBackOff 34 (il y a 6h) 21h

NOM TYPE CLUSTER-IP PORT(S) IP EXTERNE ÂGE
service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <aucun> 3443/TCP 21h
service/kubefledged-webhook-server ClusterIP 10.101.191.206 <aucun> 3443/TCP 21h

NOM PRÊT À JOUR DISPONIBLE ÂGE
déploiement.apps/kube-fledged-controller 0/1 1 0 21h
déploiement.apps/kube-fledged-webhook-server 0/1 1 0 21h
déploiement.apps/kubefledged-controller 0/1 1 0 21h
déploiement.apps/kubefledged-webhook-server 0/1 1 0 21h

NOM DÉSIRÉ ÂGE PRÊT ACTUEL
réplicaset.apps/kube-fledged-controller-df69f6565 1 1 0 21h
replicaset.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 0 21h
réplicaset.apps/kubefledged-controller-55f848cc67 1 1 0 21h
replicaset.apps/kubefledged-webhook-server-597dbf4ff5 1 1 0 21h
┌──[[email protected]]-[~]
└─$

Ici nous trouvons l'image que nous voulons extraire

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$cat *.yaml | image grep :
      - image : senthilrch/kubefledged-controller:v0.10.0
      - image : senthilrch/kubefledged-webhook-server:v0.10.0
      - image : senthilrch/kubefledged-webhook-server:v0.10.0

Tirez-en quelques-uns individuellement et utilisez actuellement des opérations par lots sur tous les nœuds de travail. ansible 

┌──[[email protected]]-[~/ansible]
└─$ansible k8s_node -m shell -a "docker pull docker.io/senthilrch/kubefledged-cri-client:v0.10.0" -i host.yaml

Extraire d'autres images connexes

Une fois l'opération terminée, l'état du conteneur est tout à fait normal.

┌──[[email protected]]-[~/ansible]
└─$kubectl -n kube-fledged tout obtenir
NOM PRÊT STATUT REDÉMARRE L'ÂGE
pod/kube-fledged-controller-df69f6565-wdb4g 1/1 En cours d'exécution 0 13h
pod/kube-fledged-webhook-server-7bcd589bc4-j8xxp 1/1 En cours d'exécution 0 13h
pod/kubefledged-controller-55f848cc67-klxlm 1/1 En cours d'exécution 0 13h
pod/kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 En cours d'exécution 0 13h

NOM TYPE CLUSTER-IP PORT(S) IP EXTERNE ÂGE
service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <aucun> 3443/TCP 36h
service/kubefledged-webhook-server ClusterIP 10.101.191.206 <aucun> 3443/TCP 36h

NOM PRÊT À JOUR DISPONIBLE ÂGE
déploiement.apps/kube-fledged-controller 1/1 1 1 36h
déploiement.apps/kube-fledged-webhook-server 1/1 1 1 36h
déploiement.apps/kubefledged-controller 1/1 1 1 36h
déploiement.apps/kubefledged-webhook-server 1/1 1 1 36h

NOM DÉSIRÉ ÂGE PRÊT ACTUEL
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

Vérifier l'installation réussie

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$kubectl obtenir des pods -n kube-fledged -l app=kubefledged
NOM PRÊT STATUT REDÉMARRE L'ÂGE
kubefledged-controller-55f848cc67-klxlm 1/1 En cours d'exécution 0 16h
kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 En cours d'exécution 0 16h
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$kubectl récupère les imagescaches -n kube-fledged
Aucune ressource trouvée dans l'espace de noms à part entière de Kube.

Utiliser Kubefledged

Créer un objet cache d'images

Créer un objet de cache d'image basé sur le fichier Demo 

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$cd déployer/
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$cat kubefledged-imagecache.yaml
---
Version api : kubefledged.io/v1alpha2
genre : ImageCache
métadonnées :
  # Nom du cache d'images. Un cluster peut avoir plusieurs objets de cache d'images
  nom : imagecache1
  espace de noms : kube-fledged
  # L'espace de noms Kubernetes à utiliser pour ce cache d'images. Vous pouvez choisir un espace de noms différent selon vos préférences
  Étiquettes:
    application : kubefledged
    Kubefledged : cache d'images
spécification :
  # Le champ "cacheSpec" permet à un utilisateur de définir une liste d'images et sur quels nœuds de travail ces images doivent être mises en cache (c'est-à-dire pré-extraites).
  cacheSpec :
  # Spécifie une liste d'images (nginx:1.23.1) sans sélecteur de nœud, donc ces images seront mises en cache dans tous les nœuds du cluster
  - images:
    - ghcr.io/jitesoft/nginx:1.23.1
  # Spécifie une liste d'images (cassandra:v7 et etcd:3.5.4-0) avec un sélecteur de nœuds, donc ces images seront mises en cache uniquement sur les nœuds sélectionnés par le sélecteur de nœuds
  - images:
    - us.gcr.io/k8s-artifacts-prod/cassandra:v7
    - us.gcr.io/k8s-artifacts-prod/etcd:3.5.4-0
    sélecteur de nœud :
      niveau : back-end
  # Spécifie une liste de secrets d'extraction d'images pour extraire des images de référentiels privés dans le cache
  imagePullSecrets :
  - nom : ma clé de registre

L'image correspondante dans la démo officielle ne peut pas être extraite, alors modifiez-la.

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$docker pull us.gcr.io/k8s-artifacts-prod/cassandra:v7
Réponse d'erreur du démon : Obtenez "https://us.gcr.io/v2/": net/http : demande annulée en attendant la connexion (Client.Timeout dépassé en attendant les en-têtes)
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Afin de tester l'utilisation des balises de sélection, nous trouvons la balise d'un nœud et faisons le cache d'image séparément.

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl récupère les nœuds --show-labels

En même temps, nous extrayons l'image directement de l'entrepôt public, aucun objet n'est donc nécessaire imagePullSecrets 

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$vim kubefledged-imagecache.yaml

fichier modifié yaml 

  • Ajout d'un cache d'images liruilong/my-busybox:latest pour tous les nœuds
  • Ajout d'un cache miroir correspondant au sélecteur de balises   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
---
Version api : kubefledged.io/v1alpha2
genre : ImageCache
métadonnées :
  # Nom du cache d'images. Un cluster peut avoir plusieurs objets de cache d'images
  nom : imagecache1
  espace de noms : kube-fledged
  # L'espace de noms Kubernetes à utiliser pour ce cache d'images. Vous pouvez choisir un espace de noms différent selon vos préférences
  Étiquettes:
    application : kubefledged
    Kubefledged : cache d'images
spécification :
  # Le champ "cacheSpec" permet à un utilisateur de définir une liste d'images et sur quels nœuds de travail ces images doivent être mises en cache (c'est-à-dire pré-extraites).
  cacheSpec :
  # Spécifie une liste d'images (nginx:1.23.1) sans sélecteur de nœud, donc ces images seront mises en cache dans tous les nœuds du cluster
  - images:
    - liruilong/my-busybox:dernière
  # Spécifie une liste d'images (cassandra:v7 et etcd:3.5.4-0) avec un sélecteur de nœuds, donc ces images seront mises en cache uniquement sur les nœuds sélectionnés par le sélecteur de nœuds
  - images:
    - liruilong/hikvision-sdk-config-ftp:dernier
    sélecteur de nœud :
      kubernetes.io/nom d'hôte : vms105.liruilongs.github.io
  # Spécifie une liste de secrets d'extraction d'images pour extraire des images de référentiels privés dans le cache
  #imagePullSecrets :
  #- nom : ma clé de registre
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Créé directement et signalé une erreur

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl create -f kubefledged-imagecache.yaml
Erreur du serveur (InternalError) : erreur lors de la création de « kubefledged-imagecache.yaml » : une erreur interne s'est produite : échec de l'appel du webhook « validate-image-cache.kubefledged.io » : échec de l'appel du webhook : publication « https://kubefledged- webhook-server.kube-fledged.svc:3443/validate-image-cache?timeout=1s": x509 : certificat signé par une autorité inconnue (peut-être à cause de "crypto/rsa : erreur de vérification" lors de la tentative de vérification du certificat de l'autorité candidate " kubefledged.io")
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl récupère les imagescaches -n kube-fledged
Aucune ressource trouvée dans l'espace de noms à part entière de Kube.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

La solution est de supprimer l'objet correspondant et de le recréer

J'ai trouvé une solution dans le cadre d'un de mes projets en cours https://github.com/senthilrch/kube-fledged/issues/76 issues  

Il semble que cela soit codé en dur, mais lorsque le serveur démarre, un nouveau bundle CA est généré et la configuration du webhook est mise à jour. Lorsqu'un autre déploiement se produit, le bundle CA d'origine est réappliqué et les demandes de webhook commencent à échouer jusqu'à ce que le composant webhook soit redémarré pour corriger le serveur d'initialisation du bundle. Webhook CA  webhook 

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$make supprimer-kubefledged-and-operator
# Supprimer Kubefledged
kubectl delete -f déployer/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
erreur : mappage de ressources introuvable pour le nom : espace de noms "kube-fledged" : "kube-fledged" de "deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml" : aucune correspondance pour le type "KubeFledged " dans la version "charts.helm.kubefledged.io/v1alpha2"
assurez-vous que les CRD sont installés en premier
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$make déployer-en utilisant-yaml
kubectl apply -f déployer/kubefledged-namespace.yaml
espace de noms/kube-fledged créé
kubectl apply -f déployer/kubefledged-crd.yaml
customresourcedefinition.apiextensions.k8s.io/imagecaches.kubefledged.io inchangé
.......................
Déploiement de l'état du déploiement de kubectl kubefledged-webhook-server -n kube-fledged --watch
En attente de la fin du déploiement "kubefledged-webhook-server" : 0 sur 1 réplicas mis à jour sont disponibles...
déploiement "kubefledged-webhook-server" déployé avec succès
kubectl obtient des pods -n kube-fledged
NOM PRÊT STATUT REDÉMARRE L'ÂGE
kubefledged-controller-55f848cc67-76c4v 1/1 en cours d'exécution 0 112s
kubefledged-webhook-server-597dbf4ff5-56h6z 1/1 En cours d'exécution 0 66s

Recréez l'objet de cache et créez-le avec succès

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl create -f kubefledged-imagecache.yaml
imagecache.kubefledged.io/imagecache1 créé
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl récupère les imagescaches -n kube-fledged
NOM AGE
imagecache1 10s
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Afficher le cache d'images actuellement géré

┌──[[email protected]]-[~/ansible/kube-fledged]
└─$kubectl obtenir des imagescaches imagecache1 -n kube-fledged -o json
{
    "apiVersion": "kubefledged.io/v1alpha2",
    "genre": "ImageCache",
    "métadonnées": {
        "creationTimestamp": "2024-03-01T15:08:42Z",
        "génération": 83,
        "Étiquettes": {
            "app": "kubefledged",
            "kubefledged": "imagecache"
        },
        "nom": "imagecache1",
        "namespace": "kube à part entière",
        "ressourceVersion": "20169836",
        "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72"
    },
    "spécification": {
        "Spécification du cache": [
            {
                "images": [
                    "liruilong/my-busybox:dernière"
                ]
            },
            {
                "images": [
                    "liruilong/hikvision-sdk-config-ftp:dernière"
                ],
                "nodeSelector": {
                    "kubernetes.io/hostname": "vms105.liruilongs.github.io"
                }
            }
        ]
    },
    "statut": {
        "completetionTime": "2024-03-02T01:06:47Z",
        "message": "Toutes les images demandées ont été extraites avec succès vers les nœuds respectifs",
        "raison": "ImageCacheRefresh",
        "startTime": "2024-03-02T01:05:33Z",
        "status": "Réussi"
    }
}
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$

Vérifier via ansible

┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "images docker | grep liruilong/my-busybox" -i host.yaml
192.168.26.102 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.101 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.103 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.105 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.100 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.106 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
┌──[[email protected]]-[~/ansible]
└─$
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "images docker | grep liruilong/hikvision-sdk-config-ftp" -i host.yaml
192.168.26.102 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.100 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.103 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.105 | CHANGÉ | RC=0 >>
liruilong/hikvision-sdk-config-ftp dernier a02cd03b4342 il y a 4 mois 830 Mo
192.168.26.101 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.106 | ÉCHEC | RC=1 >>
code retour différent de zéro
┌──[[email protected]]-[~/ansible]
└─$

Activer l'actualisation automatique

┌──[[email protected]]-[~/ansible]
└─$kubectl annoter les caches d'images imagecache1 -n kube-fledged kubefledged.io/refresh-imagecache=
imagecache.kubefledged.io/imagecache1 annoté
┌──[[email protected]]-[~/ansible]
└─$

Ajouter un cache d'images

Ajouter un nouveau cache d'images

┌──[[email protected]]-[~/ansible]
└─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json
{
    "apiVersion": "kubefledged.io/v1alpha2",
    "genre": "ImageCache",
    "métadonnées": {
        "creationTimestamp": "2024-03-01T15:08:42Z",
        "génération": 92,
        "Étiquettes": {
            "app": "kubefledged",
            "kubefledged": "imagecache"
        },
        "nom": "imagecache1",
        "namespace": "kube à part entière",
        "ressourceVersion": "20175233",
        "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72"
    },
    "spécification": {
        "Spécification du cache": [
            {
                "images": [
                    "liruilong/my-busybox:dernière",
                    "liruilong/jdk1.8_191 :dernier"
                ]
            },
            {
                "images": [
                    "liruilong/hikvision-sdk-config-ftp:dernière"
                ],
                "nodeSelector": {
                    "kubernetes.io/hostname": "vms105.liruilongs.github.io"
                }
            }
        ]
    },
    "statut": {
        "completetionTime": "2024-03-02T01:43:32Z",
        "message": "Toutes les images demandées ont été extraites avec succès vers les nœuds respectifs",
        "raison": "ImageCacheUpdate",
        "startTime": "2024-03-02T01:40:34Z",
        "status": "Réussi"
    }
}
┌──[[email protected]]-[~/ansible]
└─$

Confirmer via ansible

┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "images docker | grep liruilong/jdk1.8_191" -i host.yaml
192.168.26.101 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.100 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.102 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.103 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.105 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.106 | ÉCHEC | RC=1 >>
code retour différent de zéro
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "images docker | grep liruilong/jdk1.8_191" -i host.yaml
192.168.26.101 | CHANGÉ | RC=0 >>
liruilong/jdk1.8_191 dernier 17dbd4002a8c il y a 5 ans 170MB
192.168.26.102 | CHANGÉ | RC=0 >>
liruilong/jdk1.8_191 dernier 17dbd4002a8c il y a 5 ans 170MB
192.168.26.100 | CHANGÉ | RC=0 >>
liruilong/jdk1.8_191 dernier 17dbd4002a8c il y a 5 ans 170MB
192.168.26.103 | CHANGÉ | RC=0 >>
liruilong/jdk1.8_191 dernier 17dbd4002a8c il y a 5 ans 170MB
192.168.26.105 | CHANGÉ | RC=0 >>
liruilong/jdk1.8_191 dernier 17dbd4002a8c il y a 5 ans 170MB
192.168.26.106 | CHANGÉ | RC=0 >>
liruilong/jdk1.8_191 dernier 17dbd4002a8c il y a 5 ans 170MB
┌──[[email protected]]-[~/ansible]
└─$

Supprimer le cache d'images

┌──[[email protected]]-[~/ansible]
└─$kubectl modifier les imagescaches imagecache1 -n kube-fledged
imagecache.kubefledged.io/imagecache1 modifié
┌──[[email protected]]-[~/ansible]
└─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json
{
    "apiVersion": "kubefledged.io/v1alpha2",
    "genre": "ImageCache",
    "métadonnées": {
        "creationTimestamp": "2024-03-01T15:08:42Z",
        "génération": 94,
        "Étiquettes": {
            "app": "kubefledged",
            "kubefledged": "imagecache"
        },
        "nom": "imagecache1",
        "namespace": "kube à part entière",
        "ressourceVersion": "20175766",
        "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72"
    },
    "spécification": {
        "Spécification du cache": [
            {
                "images": [
                    "liruilong/jdk1.8_191 :dernier"
                ]
            },
            {
                "images": [
                    "liruilong/hikvision-sdk-config-ftp:dernière"
                ],
                "nodeSelector": {
                    "kubernetes.io/hostname": "vms105.liruilongs.github.io"
                }
            }
        ]
    },
    "statut": {
        "message": "Le cache d'images est en cours de mise à jour. Veuillez consulter l'état après un certain temps",
        "raison": "ImageCacheUpdate",
        "startTime": "2024-03-02T01:48:03Z",
        "status": "Traitement"
    }
}

Grâce à la confirmation Ansible, vous pouvez voir que qu'il s'agisse du nœud sur le maître ou du nœud de travail, le cache d'image correspondant a été vidé.

┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "images docker | grep liruilong/my-busybox" -i host.yaml
192.168.26.102 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.101 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.105 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.100 | CHANGÉ | RC=0 >>
liruilong/my-busybox dernier 497b83a63aad il y a 11 mois 1,24 Mo
192.168.26.103 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.106 | ÉCHEC | RC=1 >>
code retour différent de zéro
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "images docker | grep liruilong/my-busybox" -i host.yaml
192.168.26.105 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.102 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.103 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.101 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.100 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.106 | ÉCHEC | RC=1 >>
code retour différent de zéro
┌──[[email protected]]-[~/ansible]
└─$

Il convient de noter ici que si tous les caches d'images sont effacés, le tableau suivant doit être écrit sous la forme "". images 

┌──[[email protected]]-[~/ansible]
└─$kubectl modifier les imagescaches imagecache1 -n kube-fledged
imagecache.kubefledged.io/imagecache1 modifié
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "images docker | grep liruilong/jdk1.8_191" -i host.yaml
192.168.26.102 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.101 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.100 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.105 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.103 | ÉCHEC | RC=1 >>
code retour différent de zéro
192.168.26.106 | ÉCHEC | RC=1 >>
code retour différent de zéro
┌──[[email protected]]-[~/ansible]
└─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json
{
    "apiVersion": "kubefledged.io/v1alpha2",
    "genre": "ImageCache",
    "métadonnées": {
        "creationTimestamp": "2024-03-01T15:08:42Z",
        "génération": 98,
        "Étiquettes": {
            "app": "kubefledged",
            "kubefledged": "imagecache"
        },
        "nom": "imagecache1",
        "namespace": "kube à part entière",
        "ressourceVersion": "20176849",
        "uid": "3a680a57-d8ab-444f-b9c9-4382459c5c72"
    },
    "spécification": {
        "Spécification du cache": [
            {
                "images": [
                    ""
                ]
            },
            {
                "images": [
                    "liruilong/hikvision-sdk-config-ftp:dernière"
                ],
                "nodeSelector": {
                    "kubernetes.io/hostname": "vms105.liruilongs.github.io"
                }
            }
        ]
    },
    "statut": {
        "completetionTime": "2024-03-02T01:52:16Z",
        "message": "Toutes les images mises en cache ont été supprimées avec succès des nœuds respectifs",
        "raison": "ImageCacheUpdate",
        "startTime": "2024-03-02T01:51:47Z",
        "status": "Réussi"
    }
}
┌──[[email protected]]-[~/ansible]
└─$

En cas de suppression via la méthode suivante, commentez directement la balise correspondante

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$cat kubefledged-imagecache.yaml
---
Version api : kubefledged.io/v1alpha2
genre : ImageCache
métadonnées :
  # Nom du cache d'images. Un cluster peut avoir plusieurs objets de cache d'images
  nom : imagecache1
  espace de noms : kube-fledged
  # L'espace de noms Kubernetes à utiliser pour ce cache d'images. Vous pouvez choisir un espace de noms différent selon vos préférences
  Étiquettes:
    application : kubefledged
    Kubefledged : cache d'images
spécification :
  # Le champ "cacheSpec" permet à un utilisateur de définir une liste d'images et sur quels nœuds de travail ces images doivent être mises en cache (c'est-à-dire pré-extraites).
  cacheSpec :
  # Spécifie une liste d'images (nginx:1.23.1) sans sélecteur de nœud, donc ces images seront mises en cache dans tous les nœuds du cluster
  #- images:
    #- liruilong/my-busybox:dernière
  # Spécifie une liste d'images (cassandra:v7 et etcd:3.5.4-0) avec un sélecteur de nœuds, donc ces images seront mises en cache uniquement sur les nœuds sélectionnés par le sélecteur de nœuds
  - images:
    - liruilong/hikvision-sdk-config-ftp:dernier
    sélecteur de nœud :
      kubernetes.io/nom d'hôte : vms105.liruilongs.github.io
  # Spécifie une liste de secrets d'extraction d'images pour extraire des images de référentiels privés dans le cache
  #imagePullSecrets :
  #- nom : ma clé de registre
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Ensuite, l'erreur suivante sera signalée

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl modifier les imagescaches imagecache1 -n kube-fledged
erreur : imagecaches.kubefledged.io "imagecache1" n'a pas pu être corrigé : le webhook d'admission "validate-image-cache.kubefledged.io" a refusé la demande : incompatibilité dans le numéro. de listes d'images
Vous pouvez exécuter `kubectl replace -f /tmp/kubectl-edit-4113815075.yaml` pour réessayer cette mise à jour.

Référence à une partie du billet de blog

© Le droit d'auteur des liens de référence dans cet article appartient à l'auteur original. En cas de violation, veuillez nous en informer. Si vous êtes d'accord, ne soyez pas avare d'étoiles :)

https://github.com/senthilrch/kube-fledged

 

Cliquez pour suivre et découvrir les nouvelles technologies de Huawei Cloud dès que possible~

 

Un camarade de poulet "open source" deepin-IDE et a finalement réalisé l'amorçage ! Bon gars, Tencent a vraiment transformé Switch en une « machine d'apprentissage pensante » Examen des échecs de Tencent Cloud le 8 avril et explication de la situation Reconstruction du démarrage du bureau à distance RustDesk Client Web La base de données de terminal open source de WeChat basée sur SQLite WCDB a inauguré une mise à niveau majeure Liste d'avril TIOBE : PHP est tombé à un plus bas historique, Fabrice Bellard, le père de FFmpeg, a sorti l'outil de compression audio TSAC , Google a sorti un gros modèle de code, CodeGemma , est-ce que ça va vous tuer ? C'est tellement bon qu'il est open source - outil d'édition d'images et d'affiches open source
{{o.name}}
{{m.nom}}

Je suppose que tu aimes

Origine my.oschina.net/u/4526289/blog/11052468
conseillé
Classement