Wie können wir helfen?
Kubernetes Image Cache
Kubernetes Container Images
Kubernetes löscht ungenutzte Container Images ab einem Speicherplatzverbrauch von 80% auf der Systempartition und erzwingt die Löschung ab 85%. Davon sind alle, aktuell nicht aktiv laufenden, Images auf dem jeweiligen Node betroffen. Dies kann in seltenen Fällen, bspw. einem Node Crash, zu Problemen führen, wenn kritische Images auf anderen Nodes nicht mehr verfügbar sind oder nie auf einem anderen Node gestartet wurden.
Ausfälle von öffentlichen Image Registries wie Dockerhub oder privaten Registries wie GitLab führen so zu einem längeren Ausfall, da die benötigten Images nicht gepulled werden können, obwohl genug Ressourcen im Cluster zur Verfügung stehen.
Wir haben für diesen Fall bereits das Registry Mirroring aktiviert, welches auf Spegel basiert. Alle Nodes innerhalb eines Clusters haben so die Möglichkeit von anderen Nodes Images zu pullen. Falls das Image nur auf dem ausgefallenen Node vorhanden war, kann dies dennoch zu Problemen führen.
Für diesen Fall haben wir einen Image Cache implementiert. Dieser implementiert eine Custom Resource Definition (CRD) welche durch ein Deployment regelmäßig überprüft ob die, in einem ImageCache definierten Images, auf allen Nodes verfügbar sind.
Image Cache
Ein Imagecache besteht aus einem oder mehreren Images und der Angabe von potentiell dazugehörigen Pullsecrets. kube-fledged stellt anschließend mithilfe von Kubernetes Jobs sicher, dass die definierten Images auf allen Nodes heruntergeladen sind. Des weiteren wird der Status des Image Caches innerhalb der Ressource angegeben. Sie können mehrere Image Caches pro Cluster und Namespace anlegen. Bitte beachten Sie, dass nur absolut kritische Images auf diese Art und Weise gecached werden sollten. Abhängig von der Image Größe kann es sonst schnell zu einem zu großen Speicherplatzverbrauch auf der Systempartition kommen.
Um einen Imagecache anzulegen, erstellen Sie eine Datei (cache.yaml) mit bspw. folgendem Inhalt:
apiVersion: kubefledged.io/v1alpha2
kind: ImageCache
metadata:
name: imagecache1
namespace: test
labels:
app: kubefledged
kubefledged: imagecache
spec:
cacheSpec:
- images:
- alpine:3.22.2
- myregistry.com/my/image:1.0.1
- more_images
imagePullSecrets:
- name: myregistrysecretname
Diesen Image Cache können Sie nun mithilfe von kubectl im Cluster anlegen:
kubectl apply -f cache.yaml
Den Status des Caches können Sie folgendermaßen überprüfen:
kubectl get imagecaches.kubefledged.io -n test -o yaml
