Images und Pull-Secrets
Öffentliche Images
Nichts zu konfigurieren. Nenn Image und Tag:
image: nginx:1.29Nagel eine echte Version fest, statt latest zu nehmen. Mit latest weißt du nicht, welcher Build läuft, und ein neu gestarteter Pod kann stillschweigend auf einem anderen hochkommen.
Die ITSH-Registry
registry.itsh.dev gehört zu deinem Konto. Repositories und Zugangstoken legst du im Bereich Registry im Portal an, dort steht auch die passende docker login-Zeile.
Im Pfad steht dein Account-Slug, nicht dein Namespace
Image-Pfade lauten registry.itsh.dev/<dein-slug>/<image>:<tag>. Den Wert findest du im Portal im Bereich Registry, dort heißt das Feld Registry-Namespace. Trotz dieses Namens ist es nicht dein Kubernetes-Namespace. Setzt du den ein, bekommst du einen ImagePullBackOff.
Dein Namespace hat dafür meistens schon ein Pull-Secret namens itsh-registry:
kubectl get secret itsh-registryEs hängt nicht am Standard-ServiceAccount, es zu haben reicht also nicht. Referenzier es im Pod-Template:
spec:
imagePullSecrets:
- name: itsh-registry
containers:
- name: myapp
image: registry.itsh.dev/<dein-slug>/myapp:1.0.0Wenn das Secret fehlt
Es wird für dich angelegt, aber ohne Wiederholungsversuch, ein Namespace kann also ohne dastehen. Später repariert das nichts. Leg es dann selbst an, mit einem Registry-Token aus dem Portal:
kubectl create secret docker-registry itsh-registry \
--docker-server=registry.itsh.dev \
--docker-username='<token-name>' \
--docker-password='<token>'Der Name ist egal, solange Pod-Template und Secret zusammenpassen.
Eine andere private Registry
Genau dieselbe Form, nur woandershin gezeigt:
kubectl create secret docker-registry my-registry \
--docker-server=registry.example.com \
--docker-username='<user>' \
--docker-password='<passwort-oder-token>'Danach referenzierst du my-registry unter imagePullSecrets.
Nimm ein Token oder einen Deploy Key, der nur dieses eine Repository lesen darf, nie ein Passwort mit weiterreichenden Rechten. Das Secret liegt in deinem Namespace, und wer deine Kubeconfig hat, kann es lesen.
Im Free Tier müssen Registries HTTPS sprechen
Ausgehender Traffic ist auf HTTP und HTTPS beschränkt, eine Registry auf einem ungewöhnlichen Port ist also nicht erreichbar. Siehe Free Tier.
Wenn ein Pull scheitert
ImagePullBackOff steht unter Ein Pod startet nicht. Kurz gesagt: kubectl describe pod <name> nennt Registry und Grund, und bei einer privaten Registry ist es fast immer ein fehlendes oder nicht referenziertes Pull-Secret.
Wie es weitergeht
- Erstes Deployment für das vollständige Manifest
- Deployment aus Git, um automatisch auszurollen