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
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