Ausführliche Erläuterung der Bild-Cache-Verwaltung von K8s im Kube-Format

Dieser Artikel wurde von Shanhe aus der Huawei Cloud Community „ K8s Image Cache Management Kube-fledged Awareness “ geteilt.

Wir wissen , dass die Containerplanung im Internet in einigen speziellen Szenarien das Bild des aktuellen Containers in der geplanten Knotenzeile abrufen muss. k8s 

  • 快速启动和/或扩展 Bewerbung erforderlich . Beispielsweise müssen Anwendungen, die Datenverarbeitung in Echtzeit durchführen, aufgrund explodierender Datenmengen schnell skaliert werden.
  • Das Image ist relativ groß und umfasst mehrere Versionen. Der Knotenspeicher ist begrenzt und unnötige Images müssen dynamisch bereinigt werden.
  • 无服务器函数 Oft ist es notwendig, sofort auf eingehende Ereignisse zu reagieren und Container innerhalb von Sekundenbruchteilen zu starten.
  • Bei der Ausführung auf Edge-Geräten muss eine zeitweilige Netzwerkverbindung zum Spiegel-Repository toleriert werden.   IoT 应用程序 边缘设备
  • Wenn Sie ein Image 专用仓库 von dort und nicht jedem 镜像仓库 Zugriff gewähren können, um das Image von dort abzurufen, können Sie das Image auf den Knoten des Clusters verfügbar machen.
  • Wenn ein Clusteradministrator oder -betreiber eine Anwendung aktualisieren muss und im Voraus überprüfen möchte, ob das neue Image erfolgreich abgerufen werden kann.

kube-fledged Es wird verwendet , um Container-Image-Cache direkt auf den Knoten des Kubernetes-Clusters zu erstellen und zu verwalten. Es ermöglicht Benutzern, eine Liste von Bildern zu definieren und festzulegen, auf welchen Arbeitsknoten diese Bilder zwischengespeichert (d. h. abgerufen) werden sollen. Dadurch kann der Anwendungs-Pod fast sofort gestartet werden, da das Image nicht aus der Registrierung abgerufen werden muss. kubernetes operator worker 

kube-fledged Zur Verwaltung des Lebenszyklus des Bildcaches wird eine CRUD-API bereitgestellt, die mehrere konfigurierbare Parameter unterstützt, sodass Sie Funktionen an Ihre eigenen Bedürfnisse anpassen können.

Kubernetes hat es integriert 镜像垃圾回收机制. Das Kubelet im Knoten prüft regelmäßig, ob die Festplattennutzung einen bestimmten Schwellenwert erreicht (konfigurierbar über Flags). Sobald dieser Wert erreicht ist 阈值, löscht das Kubelet automatisch alle nicht verwendeten Bilder vom Knoten.

In der vorgeschlagenen Lösung müssen automatische und regelmäßige Aktualisierungsmechanismen implementiert werden. Wenn das Bild im Bildcache durch Kubelets GC gelöscht wird, wird das gelöschte Bild beim nächsten Aktualisierungszyklus in den Bildcache gezogen. Dadurch wird sichergestellt, dass der Bildcache auf dem neuesten Stand ist.

Design-Flow

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

Stellen Sie Kube-fähig bereit

Bereitstellung im Helmmodus

──[[email protected]]-[~/ansible]
└─$mkdir kube-fledged
┌──[[email protected]]-[~/ansible]
└─$cd kube-flügge
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$export KUBEFLEDGED_NAMESPACE=kube-fledged
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$kubectl erstellt den Namespace ${KUBEFLEDGED_NAMESPACE}
Namespace/kube-fledged erstellt
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$helm repo kubefledged-charts hinzufügen https://senthilrch.github.io/kubefledged-charts/
„kubefledged-charts“ wurde zu Ihren Repositories hinzugefügt
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$helm-Repo-Update
Bleiben Sie dran, während wir uns die neuesten Informationen aus Ihren Diagramm-Repositories holen ...
...Erfolgreich ein Update vom Diagramm-Repository „kubefledged-charts“ erhalten
...Erfolgreich ein Update aus dem Diagramm-Repository „kubescape“ erhalten
...Erfolgreich ein Update vom Karten-Repository „rancher-stable“ erhalten
...Erfolgreich ein Update aus dem Diagramm-Repository „skm“ abgerufen
...Erfolgreich ein Update aus dem Chart-Repository „openkruise“ erhalten
...Erfolgreich ein Update vom Diagramm-Repository „awx-operator“ erhalten
...Erfolgreich ein Update aus dem Diagramm-Repository „botkube“ erhalten
Aktualisierung abgeschlossen. ⎈Viel Spaß beim Helfen!⎈
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$helm install --verify kube-fledged kubefledged-charts/kube-fledged -n ${KUBEFLEDGED_NAMESPACE} --wait

Während der eigentlichen Bereitstellung wurde festgestellt, dass chart der Download aufgrund von Netzwerkproblemen nicht möglich war, und wurde daher mit Yaml bereitgestellt. make deploy-using-yaml 

Bereitstellung von Yaml-Dateien

┌──[[email protected]]-[~/ansible/kube-fledged]
└─$git-Klon https://github.com/senthilrch/kube-fledged.git
Klonen auf „kube-fledged“ ...
remote: Objekte aufzählen: 10613, fertig.
remote: Objekte zählen: 100 % (1501/1501), fertig.
remote: Objekte komprimieren: 100 % (629/629), fertig.
Remote: Insgesamt 10613 (Delta 845), wiederverwendet 1357 (Delta 766), wiederverwendet 9112
Unter den empfangenden Objekten: 100 % (10613/10613), 34,58 MiB | 7,33 MiB/s, fertig.
Delta-Medium verarbeiten: 100 % (4431/4431), fertig.
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$ls
kube-flügge
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$cd kube-fledged/
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$makeployment-using-yaml
kubectl apply -fploy/kubefledged-namespace.yaml

Bei der ersten Bereitstellung stellte ich fest, dass das Image nicht heruntergezogen werden konnte.

┌──[[email protected]]-[~]
└─$kubectl erhält alle Kube-Flüge
NAME BEREIT STATUS NEUSTART ALTER
pod/kube-fledged-controller-df69f6565-drrqg 0/1 CrashLoopBackOff 35 (vor 5h59m) 21h
pod/kube-fledged-webhook-server-7bcd589bc4-b7kg2 0/1 Init:CrashLoopBackOff 35 (vor 5h58m) 21h
pod/kubefledged-controller-55f848cc67-7f4rl 1/1 Läuft 0 21 Stunden
pod/kubefledged-webhook-server-597dbf4ff5-l8fbh 0/1 Init:CrashLoopBackOff 34 (vor 6 Stunden) 21 Stunden

NAME TYP CLUSTER-IP EXTERNE IP-PORT(S) ALTER
service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <keine> 3443/TCP 21h
service/kubefledged-webhook-server ClusterIP 10.101.191.206 <keine> 3443/TCP 21h

NAME BEREIT AKTUELLES VERFÜGBARES ALTER
Deployment.apps/kube-fledged-controller 0/1 1 0 21h
Deployment.apps/kube-fledged-webhook-server 0/1 1 0 21h
Deployment.apps/kubefledged-controller 0/1 1 0 21h
Deployment.apps/kubefledged-webhook-server 0/1 1 0 21h

NAME GEWÜNSCHT AKTUELL BEREIT ALTER
replikset.apps/kube-fledged-controller-df69f6565 1 1 0 21h
replikset.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 0 21h
replikset.apps/kubefledged-controller-55f848cc67 1 1 0 21h
replikset.apps/kubefledged-webhook-server-597dbf4ff5 1 1 0 21h
┌──[[email protected]]-[~]
└─$

Hier finden wir das Bild, das wir ziehen möchten

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

Ziehen Sie einige einzeln herunter und verwenden Sie derzeit Batch-Vorgänge auf allen Arbeitsknoten. ansible 

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

Ziehen Sie andere verwandte Bilder

Nach Abschluss des Vorgangs ist der Containerstatus völlig normal.

┌──[[email protected]]-[~/ansible]
└─$kubectl -n kube-fledged alles bekommen
NAME BEREIT STATUS NEUSTART ALTER
pod/kube-fledged-controller-df69f6565-wdb4g 1/1 Läuft 0 13 Stunden
pod/kube-fledged-webhook-server-7bcd589bc4-j8xxp 1/1 Läuft 0 13 Stunden
pod/kubefledged-controller-55f848cc67-klxlm 1/1 Läuft 0 13 Stunden
pod/kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 Läuft 0 13 Stunden

NAME TYP CLUSTER-IP EXTERNE IP-PORT(S) ALTER
service/kube-fledged-webhook-server ClusterIP 10.100.194.199 <keine> 3443/TCP 36h
service/kubefledged-webhook-server ClusterIP 10.101.191.206 <keine> 3443/TCP 36h

NAME BEREIT AKTUELLES VERFÜGBARES ALTER
Deployment.apps/kube-fledged-controller 1/1 1 1 36h
Deployment.apps/kube-fledged-webhook-server 1/1 1 1 36h
Deployment.apps/kubefledged-controller 1/1 1 1 36h
Deployment.apps/kubefledged-webhook-server 1/1 1 1 36h

NAME GEWÜNSCHT AKTUELL BEREIT ALTER
replikset.apps/kube-fledged-controller-df69f6565 1 1 1 36h
replikset.apps/kube-fledged-webhook-server-7bcd589bc4 1 1 1 36h
replikset.apps/kubefledged-controller-55f848cc67 1 1 1 36h
replikset.apps/kubefledged-webhook-server-597dbf4ff5 1 1 1 36h

Überprüfen Sie die erfolgreiche Installation

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$kubectl get pods -n kube-fledged -l app=kubefledged
NAME BEREIT STATUS NEUSTART ALTER
kubefledged-controller-55f848cc67-klxlm 1/1 Läuft 0 16 Stunden
kubefledged-webhook-server-597dbf4ff5-ktbsh 1/1 Läuft 0 16 Stunden
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$kubectl get imagecaches -n kube-fledged
Im Kube-Namespace wurden keine Ressourcen gefunden.

Verwendung von kubefledged

Erstellen Sie ein Bild-Cache-Objekt

Erstellen Sie ein Bild-Cache-Objekt basierend auf der Datei Demo 

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$cd Deploy/
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$cat kubefledged-imagecache.yaml
---
apiVersion: kubefledged.io/v1alpha2
Art: ImageCache
Metadaten:
  # Name des Bildcaches. Ein Cluster kann über mehrere Bildcacheobjekte verfügen
  Name: imagecache1
  Namespace: kube-fledged
  # Der Kubernetes-Namespace, der für diesen Image-Cache verwendet werden soll. Sie können je nach Wunsch einen anderen Namensraum auswählen
  Etiketten:
    App: kubefledged
    kubefledged: Imagecache
Spezifikation:
  # Das Feld „cacheSpec“ ermöglicht es einem Benutzer, eine Liste von Bildern zu definieren und festzulegen, auf welchen Worker-Knoten diese Bilder zwischengespeichert (dh vorab abgerufen) werden sollen.
  CacheSpec:
  # Gibt eine Liste von Bildern (nginx:1.23.1) ohne Knotenselektor an, daher werden diese Bilder in allen Knoten im Cluster zwischengespeichert
  - Bilder:
    - ghcr.io/jitesoft/nginx:1.23.1
  # Gibt eine Liste von Bildern (cassandra:v7 und etcd:3.5.4-0) mit einem Knotenselektor an, daher werden diese Bilder nur auf den vom Knotenselektor ausgewählten Knoten zwischengespeichert
  - Bilder:
    - us.gcr.io/k8s-artifacts-prod/cassandra:v7
    - us.gcr.io/k8s-artifacts-prod/etcd:3.5.4-0
    nodeSelector:
      Ebene: Backend
  # Gibt eine Liste von Image-Pull-Geheimnissen an, um Bilder aus privaten Repositorys in den Cache zu ziehen
  imagePullSecrets:
  - Name: myregistrykey

Das entsprechende Bild in der offiziellen Demo kann nicht heruntergezogen werden, also ändern Sie es.

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$docker pull us.gcr.io/k8s-artifacts-prod/cassandra:v7
Fehlerantwort vom Daemon: Get „https://us.gcr.io/v2/“: net/http: Anfrage beim Warten auf Verbindung abgebrochen (Client.Timeout beim Warten auf Header überschritten)
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Um die Verwendung von Selektor-Tags zu testen, suchen wir das Tag eines Knotens und führen den Bild-Cache separat durch.

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl Knoten abrufen --show-labels

Gleichzeitig beziehen wir das Bild direkt aus dem öffentlichen Lager, sodass kein Objekt erforderlich ist imagePullSecrets 

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

geänderte Datei yaml 

  • Für alle Knoten wurde ein Bildcache „liruilong/my-busybox:latest“ hinzugefügt
  • Ein Spiegelcache entsprechend dem Tag-Selektor hinzugefügt   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
---
apiVersion: kubefledged.io/v1alpha2
Art: ImageCache
Metadaten:
  # Name des Bildcaches. Ein Cluster kann über mehrere Bildcacheobjekte verfügen
  Name: imagecache1
  Namespace: kube-fledged
  # Der Kubernetes-Namespace, der für diesen Image-Cache verwendet werden soll. Sie können je nach Wunsch einen anderen Namensraum auswählen
  Etiketten:
    App: kubefledged
    kubefledged: Imagecache
Spezifikation:
  # Das Feld „cacheSpec“ ermöglicht es einem Benutzer, eine Liste von Bildern zu definieren und festzulegen, auf welchen Worker-Knoten diese Bilder zwischengespeichert (dh vorab abgerufen) werden sollen.
  CacheSpec:
  # Gibt eine Liste von Bildern (nginx:1.23.1) ohne Knotenselektor an, daher werden diese Bilder in allen Knoten im Cluster zwischengespeichert
  - Bilder:
    - liruilong/my-busybox:latest
  # Gibt eine Liste von Bildern (cassandra:v7 und etcd:3.5.4-0) mit einem Knotenselektor an, daher werden diese Bilder nur auf den vom Knotenselektor ausgewählten Knoten zwischengespeichert
  - Bilder:
    - liruilong/hikvision-sdk-config-ftp:latest
    nodeSelector:
      kubernetes.io/hostname: vms105.liruilongs.github.io
  # Gibt eine Liste von Image-Pull-Geheimnissen an, um Bilder aus privaten Repositorys in den Cache zu ziehen
  #imagePullSecrets:
  #- Name: myregistrykey
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Direkt erstellt und einen Fehler gemeldet

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl create -f kubefledged-imagecache.yaml
Fehler vom Server (InternalError): Fehler beim Erstellen von „kubefledged-imagecache.yaml“: Interner Fehler aufgetreten: Aufruf des Webhooks „validate-image-cache.kubefledged.io“ fehlgeschlagen: Aufruf des Webhooks fehlgeschlagen: Beitrag „https://kubefledged- webhook-server.kube-fledged.svc:3443/validate-image-cache?timeout=1s“: x509: Zertifikat von unbekannter Autorität signiert (möglicherweise aufgrund von „crypto/rsa: Überprüfungsfehler“ beim Versuch, das Zertifikat der Kandidatenautorität zu überprüfen „ kubefledged.io")
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl get imagecaches -n kube-fledged
Im Kube-Namespace wurden keine Ressourcen gefunden.
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Die Lösung besteht darin, das entsprechende Objekt zu löschen und neu zu erstellen

Eine Lösung habe ich unter einem meiner aktuellen Projekte https://github.com/senthilrch/kube-fledged/issues/76 gefunden issues  

Es sieht so aus, als wäre dies fest codiert, aber wenn der Server startet, wird ein neues CA-Bundle generiert und die Webhook-Konfiguration aktualisiert. Wenn eine weitere Bereitstellung erfolgt, wird das ursprüngliche CA-Bundle erneut angewendet und Webhook-Anfragen schlagen fehl, bis die Webhook-Komponente erneut gestartet wird, um den Bundle-Init-Server zu patchen Webhook CA  webhook 

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$make remove-kubefledged-and-operator
# Kubefledged entfernen
kubectl delete -fploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml
Fehler: Ressourcenzuordnung für Name nicht gefunden: „kube-fledged“ Namespace: „kube-fledged“ aus „deploy/kubefledged-operator/deploy/crds/charts.helm.kubefledged.io_v1alpha2_kubefledged_cr.yaml“: keine Übereinstimmungen für Art „KubeFledged " in der Version "charts.helm.kubefledged.io/v1alpha2"
Stellen Sie sicher, dass zuerst CRDs installiert werden
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged]
└─$makeployment-using-yaml
kubectl apply -fploy/kubefledged-namespace.yaml
Namespace/kube-fledged erstellt
kubectl apply -fploy/kubefledged-crd.yaml
customresourcedefinition.apiextensions.k8s.io/imagecaches.kubefledged.io unverändert
....................
kubectl-Rollout-Statusbereitstellung kubefledged-webhook-server -n kube-fledged --watch
Warten auf den Abschluss des Rollouts „kubefledged-webhook-server“ für die Bereitstellung: 0 von 1 aktualisierten Replikaten sind verfügbar …
Bereitstellung „kubefledged-webhook-server“ erfolgreich eingeführt
kubectl get pods -n kube-fledged
NAME BEREIT STATUS NEUSTART ALTER
kubefledged-controller-55f848cc67-76c4v 1/1 Läuft 0 112 Sekunden
kubefledged-webhook-server-597dbf4ff5-56h6z 1/1 Läuft 0 66s

Erstellen Sie das Cache-Objekt neu und erstellen Sie es erfolgreich

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl create -f kubefledged-imagecache.yaml
imagecache.kubefledged.io/imagecache1 erstellt
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl get imagecaches -n kube-fledged
NAME ALTER
imagecache1 10s
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Zeigen Sie den aktuell verwalteten Bildcache an

┌──[[email protected]]-[~/ansible/kube-fledged]
└─$kubectl get imagecaches imagecache1 -n kube-fledged -o json
{
    „apiVersion“: „kubefledged.io/v1alpha2“,
    „kind“: „ImageCache“,
    „Metadaten“: {
        „creationTimestamp“: „2024-03-01T15:08:42Z“,
        „Generation“: 83,
        "Etiketten": {
            „app“: „kubefledged“,
            „kubefledged“: „imagecache“
        },
        „name“: „imagecache1“,
        „namespace“: „kube-fledged“,
        „resourceVersion“: „20169836“,
        „uid“: „3a680a57-d8ab-444f-b9c9-4382459c5c72“
    },
    "spec": {
        „cacheSpec“: [
            {
                "Bilder": [
                    „liruilong/my-busybox:latest“
                ]
            },
            {
                "Bilder": [
                    „liruilong/hikvision-sdk-config-ftp:latest“
                ],
                „nodeSelector“: {
                    „kubernetes.io/hostname“: „vms105.liruilongs.github.io“
                }
            }
        ]
    },
    „Status“: {
        „completionTime“: „2024-03-02T01:06:47Z“,
        „message“: „Alle angeforderten Bilder wurden erfolgreich auf die jeweiligen Knoten übertragen“,
        „reason“: „ImageCacheRefresh“,
        „startTime“: „2024-03-02T01:05:33Z“,
        „status“: „Erfolgreich“
    }
}
┌──[[email protected]]-[~/ansible/kube-fledged]
└─$

Überprüfen Sie dies über Ansible

┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "docker images | grep liruilong/my-busybox" -i host.yaml
192.168.26.102 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.101 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.103 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.105 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.100 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.106 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
┌──[[email protected]]-[~/ansible]
└─$
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "docker images | grep liruilong/hikvision-sdk-config-ftp" -i host.yaml
192.168.26.102 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.100 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.103 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.105 | GEÄNDERT | rc=0 >>
liruilong/hikvision-sdk-config-ftp neueste a02cd03b4342 vor 4 Monaten 830 MB
192.168.26.101 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.106 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
┌──[[email protected]]-[~/ansible]
└─$

Aktivieren Sie die automatische Aktualisierung

┌──[[email protected]]-[~/ansible]
└─$kubectl kommentieren Imagecaches imagecache1 -n kube-fledged kubefledged.io/refresh-imagecache=
imagecache.kubefledged.io/imagecache1 kommentiert
┌──[[email protected]]-[~/ansible]
└─$

Bildcache hinzufügen

Fügen Sie einen neuen Bildcache hinzu

┌──[[email protected]]-[~/ansible]
└─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json
{
    „apiVersion“: „kubefledged.io/v1alpha2“,
    „kind“: „ImageCache“,
    „Metadaten“: {
        „creationTimestamp“: „2024-03-01T15:08:42Z“,
        „Generation“: 92,
        "Etiketten": {
            „app“: „kubefledged“,
            „kubefledged“: „imagecache“
        },
        „name“: „imagecache1“,
        „namespace“: „kube-fledged“,
        „resourceVersion“: „20175233“,
        „uid“: „3a680a57-d8ab-444f-b9c9-4382459c5c72“
    },
    "spec": {
        „cacheSpec“: [
            {
                "Bilder": [
                    „liruilong/my-busybox:latest“,
                    „liruilong/jdk1.8_191:latest“
                ]
            },
            {
                "Bilder": [
                    „liruilong/hikvision-sdk-config-ftp:latest“
                ],
                „nodeSelector“: {
                    „kubernetes.io/hostname“: „vms105.liruilongs.github.io“
                }
            }
        ]
    },
    „Status“: {
        „completionTime“: „2024-03-02T01:43:32Z“,
        „message“: „Alle angeforderten Bilder wurden erfolgreich auf die jeweiligen Knoten übertragen“,
        „reason“: „ImageCacheUpdate“,
        „startTime“: „2024-03-02T01:40:34Z“,
        „status“: „Erfolgreich“
    }
}
┌──[[email protected]]-[~/ansible]
└─$

Bestätigen Sie über Ansible

┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "docker images | grep liruilong/jdk1.8_191" -i host.yaml
192.168.26.101 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.100 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.102 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.103 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.105 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.106 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "docker images | grep liruilong/jdk1.8_191" -i host.yaml
192.168.26.101 | GEÄNDERT | rc=0 >>
liruilong/jdk1.8_191 zuletzt 17dbd4002a8c vor 5 Jahren 170 MB
192.168.26.102 | GEÄNDERT | rc=0 >>
liruilong/jdk1.8_191 zuletzt 17dbd4002a8c vor 5 Jahren 170 MB
192.168.26.100 | GEÄNDERT | rc=0 >>
liruilong/jdk1.8_191 zuletzt 17dbd4002a8c vor 5 Jahren 170 MB
192.168.26.103 | GEÄNDERT | rc=0 >>
liruilong/jdk1.8_191 zuletzt 17dbd4002a8c vor 5 Jahren 170 MB
192.168.26.105 | GEÄNDERT | rc=0 >>
liruilong/jdk1.8_191 zuletzt 17dbd4002a8c vor 5 Jahren 170 MB
192.168.26.106 | GEÄNDERT | rc=0 >>
liruilong/jdk1.8_191 zuletzt 17dbd4002a8c vor 5 Jahren 170 MB
┌──[[email protected]]-[~/ansible]
└─$

Bildcache löschen

┌──[[email protected]]-[~/ansible]
└─$kubectl edit imagecaches imagecache1 -n kube-fledged
imagecache.kubefledged.io/imagecache1 bearbeitet
┌──[[email protected]]-[~/ansible]
└─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json
{
    „apiVersion“: „kubefledged.io/v1alpha2“,
    „kind“: „ImageCache“,
    „Metadaten“: {
        „creationTimestamp“: „2024-03-01T15:08:42Z“,
        „Generation“: 94,
        "Etiketten": {
            „app“: „kubefledged“,
            „kubefledged“: „imagecache“
        },
        „name“: „imagecache1“,
        „namespace“: „kube-fledged“,
        „resourceVersion“: „20175766“,
        „uid“: „3a680a57-d8ab-444f-b9c9-4382459c5c72“
    },
    "spec": {
        „cacheSpec“: [
            {
                "Bilder": [
                    „liruilong/jdk1.8_191:latest“
                ]
            },
            {
                "Bilder": [
                    „liruilong/hikvision-sdk-config-ftp:latest“
                ],
                „nodeSelector“: {
                    „kubernetes.io/hostname“: „vms105.liruilongs.github.io“
                }
            }
        ]
    },
    „Status“: {
        „message“: „Der Bildcache wird aktualisiert. Bitte sehen Sie sich den Status nach einiger Zeit an“,
        „reason“: „ImageCacheUpdate“,
        „startTime“: „2024-03-02T01:48:03Z“,
        „status“: „In Bearbeitung“
    }
}

Durch die Ansible-Bestätigung können Sie sehen, dass der entsprechende Bildcache geleert wurde, unabhängig davon, ob es sich um den Knoten auf dem Master oder den Arbeitsknoten handelt.

┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "docker images | grep liruilong/my-busybox" -i host.yaml
192.168.26.102 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.101 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.105 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.100 | GEÄNDERT | rc=0 >>
liruilong/my-busybox neueste 497b83a63aad vor 11 Monaten 1,24 MB
192.168.26.103 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.106 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "docker images | grep liruilong/my-busybox" -i host.yaml
192.168.26.105 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.102 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.103 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.101 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.100 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.106 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
┌──[[email protected]]-[~/ansible]
└─$

Hierbei ist zu beachten, dass nach dem Löschen aller Bildcaches das folgende Array als „“ geschrieben werden muss. images 

┌──[[email protected]]-[~/ansible]
└─$kubectl edit imagecaches imagecache1 -n kube-fledged
imagecache.kubefledged.io/imagecache1 bearbeitet
┌──[[email protected]]-[~/ansible]
└─$ansible all -m shell -a "docker images | grep liruilong/jdk1.8_191" -i host.yaml
192.168.26.102 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.101 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.100 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.105 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.103 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
192.168.26.106 | FEHLGESCHLAGEN | rc=1 >>
Rückgabecode ungleich Null
┌──[[email protected]]-[~/ansible]
└─$kubectl get imagecaches.kubefledged.io -n kube-fledged imagecache1 -o json
{
    „apiVersion“: „kubefledged.io/v1alpha2“,
    „kind“: „ImageCache“,
    „Metadaten“: {
        „creationTimestamp“: „2024-03-01T15:08:42Z“,
        „Generation“: 98,
        "Etiketten": {
            „app“: „kubefledged“,
            „kubefledged“: „imagecache“
        },
        „name“: „imagecache1“,
        „namespace“: „kube-fledged“,
        „resourceVersion“: „20176849“,
        „uid“: „3a680a57-d8ab-444f-b9c9-4382459c5c72“
    },
    "spec": {
        „cacheSpec“: [
            {
                "Bilder": [
                    „“
                ]
            },
            {
                "Bilder": [
                    „liruilong/hikvision-sdk-config-ftp:latest“
                ],
                „nodeSelector“: {
                    „kubernetes.io/hostname“: „vms105.liruilongs.github.io“
                }
            }
        ]
    },
    „Status“: {
        „completionTime“: „2024-03-02T01:52:16Z“,
        „message“: „Alle zwischengespeicherten Bilder wurden erfolgreich von den jeweiligen Knoten gelöscht“,
        „reason“: „ImageCacheUpdate“,
        „startTime“: „2024-03-02T01:51:47Z“,
        „status“: „Erfolgreich“
    }
}
┌──[[email protected]]-[~/ansible]
└─$

Wenn Sie es mit der folgenden Methode löschen, kommentieren Sie das entsprechende Tag direkt

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$cat kubefledged-imagecache.yaml
---
apiVersion: kubefledged.io/v1alpha2
Art: ImageCache
Metadaten:
  # Name des Bildcaches. Ein Cluster kann über mehrere Bildcacheobjekte verfügen
  Name: imagecache1
  Namespace: kube-fledged
  # Der Kubernetes-Namespace, der für diesen Image-Cache verwendet werden soll. Sie können je nach Wunsch einen anderen Namensraum auswählen
  Etiketten:
    App: kubefledged
    kubefledged: Imagecache
Spezifikation:
  # Das Feld „cacheSpec“ ermöglicht es einem Benutzer, eine Liste von Bildern zu definieren und festzulegen, auf welchen Worker-Knoten diese Bilder zwischengespeichert (dh vorab abgerufen) werden sollen.
  CacheSpec:
  # Gibt eine Liste von Bildern (nginx:1.23.1) ohne Knotenselektor an, daher werden diese Bilder in allen Knoten im Cluster zwischengespeichert
  #-Bilder:
    #- liruilong/my-busybox:latest
  # Gibt eine Liste von Bildern (cassandra:v7 und etcd:3.5.4-0) mit einem Knotenselektor an, daher werden diese Bilder nur auf den vom Knotenselektor ausgewählten Knoten zwischengespeichert
  - Bilder:
    - liruilong/hikvision-sdk-config-ftp:latest
    nodeSelector:
      kubernetes.io/hostname: vms105.liruilongs.github.io
  # Gibt eine Liste von Image-Pull-Geheimnissen an, um Bilder aus privaten Repositorys in den Cache zu ziehen
  #imagePullSecrets:
  #- Name: myregistrykey
┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$

Dann wird der folgende Fehler gemeldet

┌──[[email protected]]-[~/ansible/kube-fledged/kube-fledged/deploy]
└─$kubectl edit imagecaches imagecache1 -n kube-fledged
Fehler: imagecaches.kubefledged.io „imagecache1“ konnte nicht gepatcht werden: Zulassungs-Webhook „validate-image-cache.kubefledged.io“ lehnte die Anfrage ab: Nichtübereinstimmung in Nr. von Bildlisten
Sie können „kubectl replace -f /tmp/kubectl-edit-4113815075.yaml“ ausführen, um dieses Update erneut zu versuchen.

Verweis auf einen Teil des Blogbeitrags

© Das Urheberrecht der Referenzlinks in diesem Artikel liegt beim ursprünglichen Autor. Wenn Sie damit einverstanden sind, seien Sie nicht geizig gegenüber Stars.

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

 

Klicken Sie hier, um zu folgen und so schnell wie möglich mehr über die neuen Technologien von Huawei Cloud zu erfahren~

 

Fellow Chicken „Open-Source“ -Deepin-IDE und endlich Bootstrapping erreicht! Guter Kerl, Tencent hat Switch wirklich in eine „denkende Lernmaschine“ verwandelt. Tencent Clouds Fehlerüberprüfung und Situationserklärung vom 8. April RustDesk-Remote-Desktop-Startup-Rekonstruktion Web-Client WeChats Open-Source-Terminaldatenbank basierend auf SQLite WCDB leitete ein großes Upgrade ein TIOBE April-Liste: PHP fiel auf ein Allzeittief, Fabrice Bellard, der Vater von FFmpeg, veröffentlichte das Audiokomprimierungstool TSAC , Google veröffentlichte ein großes Codemodell, CodeGemma , wird es dich umbringen? Es ist so gut, dass es Open Source ist – ein Open-Source-Bild- und Poster-Editor-Tool
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/4526289/blog/11052468
Empfohlen
Rangfolge