Pull through Cache
In diesem Artikel zeige ich wie man einfach einen Pull through Cache für K3D nutzt, um auch beim Löschen eines Clusters vom Caching von größen Images zu profitieren.
K3D
Ein Kubernetes Cluster der mit K3D/K3S aufgebaut ist, der hat ein integriertes Caching für Docker Images die aus einer Registry (docker.io oder quay.io) geladen werden. Solange also der Cluster steht und nicht mit delete gelöscht wird, hält K3D die Images innerhalb der Docker Container weiter vor. Dadurch wird der Netzwerkverkehr gesenkt und auch das erneute Deployen von Anwendungen erfolgt deutlich schneller.
K3D Registries
Seit kurzer Zeit besteht eine komfortable Möglichkeit eine Registry in K3D zu registrieren. Dazu muss man nur eine Registry Konfigurationsdatei angeben. In dieser werden die Parameter für die Konfiguration der Registry übergeben. Der Parameter –registry-config spezifiziert die Konfigurationsdatei.
Der Default registriert K3D den Hostname host.k3d.internal automatisch mit der IP des Hosts, sodass aus dem Cluster dieser hierüber angesprochen werden kann. In dem Beispiel möchte ich die docker.io und quay.io cachen. Trage wir dazu 2 Registries als Mirror in die Konfiguration ein:
mirrors:
docker.io:
endpoint:
- "http://host.k3d.internal:5001"
- "https://docker.io"
quay.io:
endpoint:
- "http://host.k3d.internal:5002"
- "https://quay.io"
Wir werden auf den lokalen Ports 5001 und 5002 des Hosts jeweils einen Pull through Cache installieren, sodass diese als Registries innerhalb des Clusters verwendet werden.
Docker Registry V2 und UI
Kommen wir nun zur Installation des Caches. Docker bietet mit dem Registry v2 Image selber eine Lösung hierfür an. Wichtig ist hierbei die Environment Variable REGISTRY_PROXY_REMOTEURL. Über diese kann eine Registry die angegeben werden, diese wird dann geproxied und das ist genau das wir für den Anwendungsfall benötigen.
Als UI kommt die https://github.com/Joxit/docker-registry-ui zum Einsatz. Diese bietet eine einfache UI, um den Inhalt der Registry anzuzeigen. Was in unserem Fall aber vollkommen ausreichend ist. Die UI wird über die Ports 6001 und 6002 analog zu den Registries bereitgestellt. Somit ergibt sich das folgende Dockerfile:
version: '2.0'
services:
#
# docker.io
#
registry_1:
image: registry:2.6.2
ports:
- 5001:5000
volumes:
- ./registry-data_1:/var/lib/registry
networks:
- registry-ui-net
environment:
REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
ui_1:
image: joxit/docker-registry-ui:static
ports:
- 6001:80
environment:
- REGISTRY_TITLE=My Private Docker docker.io Registry
- REGISTRY_URL=http://registry_1:5000
depends_on:
- registry_1
networks:
- registry-ui-net
#
# quay.io
#
registry_2:
image: registry:2.6.2
ports:
- 5002:5000
volumes:
- ./registry-data_2:/var/lib/registry
networks:
- registry-ui-net
environment:
REGISTRY_PROXY_REMOTEURL: https://quay.io
ui_2:
image: joxit/docker-registry-ui:static
ports:
- 6002:80
environment:
- REGISTRY_TITLE=My Private Docker Quay.io Registry Cache
- REGISTRY_URL=http://registry_2:5000
depends_on:
- registry_2
networks:
- registry-ui-net
networks:
registry-ui-net:
Registry und UI starten
Der Start ist unspektakulär. Es genügt
docker-compose up -d
um die Container zu starten. Nun steht K3D der Pull through Cache zur Verfügung.