Ich habe Probleme mit kubernetes (minikube) und ziehe Images aus dem lokalen Image-Repository auf Docker . Das Docker-Repository wurde erstellt:
docker run --entrypoint htpasswd registry:2 -Bbn zordon examplePassword > /mnt/LINUX/auth/htpasswd
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v /mnt/LINUX/dockerreg:/var/lib/registry \
-v /mnt/LINUX/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
Dann möchte ich einen einfachen Pod mit einem Bild erstellen, das erfolgreich in das lokale Repository hochgeladen wurde:
curl localhost:5000/v2/_catalog
{"repositories":["car/configuration"]}
Ich habe auch Geheimnis auf Minikube-Cluster mit:
kubectl create secret docker-registry docregkey --docker-server=localhost:5000 --docker-username=zordon --docker-password=examplePassword [email protected]
und definieren Sie einen einfachen Pod:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: car/configuration:latest
imagePullPolicy: Always
restartPolicy: Always
imagePullSecrets:
- name: docregkey
leider werde ich still:
Image "car/configuration: latest" konnte nicht abgerufen werden: rpc-Fehler: code = Unknown desc = Fehlerantwort vom Daemon: Pull-Zugriff für .__ verweigert. Auto/Konfiguration, Repository ist nicht vorhanden oder erfordert 'Docker Anmeldung'
Wie kann ich dieses Problem beheben?
Das Problem ist mit der Image-Pull-Policy - Sie haben thist auf Always (Standardeinstellung) gesetzt, und der Docker-Deamon versucht immer, ein Image aus der äußeren Docker-Registry zu ziehen - und Sie möchten stattdessen ein lokales verwenden
versuchen Sie, beim Erstellen der Bereitstellung --image-pull-policy=Never
hinzuzufügen
ein gutes Tutorial für die Verwendung von lokal erstellten Bildern ist hier (es hat mir geholfen):
https://kubernetes.io/docs/tutorials/hello-minikube/#create-a-docker-container-image
Das Problem bezieht sich auf den Bildnamen, den Sie in der POD-yaml-Datei angeben.
bild: Auto/Konfiguration: aktuell
Dadurch wird versucht, aus der globalen Registrierung statt aus der lokalen Registrierung zu ziehen. Ändern Sie den Image-Namen, um auch das Repository einzuschließen.
bild: localhost: 5000/Auto/Konfiguration: aktuell
Stellen Sie sicher, dass Sie eine unsichere Registrierung in Ihre Docker-Daemon-Konfiguration aufgenommen haben, wenn Ihre Registrierung nicht gesichert ist.
Da Minikube VM kein lokaler Host ist. Sie versuchen diesen Code eval $(minikube docker-env)
https://kubernetes.io/docs/getting-started-guides/minikube) /
eval $(minikube docker-env)
gültig nur dieses Terminal. Wenn das Terminal wieder geschlossen ist, öffne das Terminal und schreibe eval $(minikube docker-env)
eval $(minikube docker-env)
dieses Code-Build-Image in Minikube
Wenn Sie Kubernetes in Docker for Desktop ausführen, verwenden Ihre Anwendungen in Docker und Kubernetes dieselbe Image-Registrierung. Liste od alle Bilder:
docker images --all
Wähle sie aus und starte sie mit geändertem Attribut --image-pull-policy=Never
. Zum Beispiel:
kubectl run ContainerName --image=myimage/server --port=8080 --image-pull-policy=Never
Standardmäßig versucht das Kubelet, jedes Bild aus der angegebenen Registrierung abzurufen. Wenn jedoch die Eigenschaft imagePullPolicy
des Containers auf IfNotPresent
oder Never
gesetzt ist, wird ein lokales Image verwendet (bevorzugt bzw. ausschließlich). Link
Es ist gemein, dass Kubernetes Bilder aus der lokalen Registrierung und nicht aus der Remote-Cloud bezieht.
Private Registry in Minikube
kubectl create -f kube-registry.yaml
(Ergreifen Sie kube-registry.yaml von diesem Gist auf github.)
und Sie benötigen einen Port-Forward-Minikube zu localhost (Nur Image-Build-Zeit)
kubectl port-forward --namespace kube-system \
$(kubectl get po -n kube-system | grep kube-registry-v0 | \
awk '{print $1;}') 5000:5000
Danach sollte vom Host curl localhost:5000
eine gültige Antwort aus der Docker-Registry zurückgegeben werden, die auf minikube ausgeführt wird
Repo: http: // localhost: 5000/v2/_catalog
Bild ziehen: localhost: 5000/bildname: bildtag
Referenz: https://blog.hasura.io/sharing-a-local-registry-for-minikube-37c7240d0615
Ich wollte eine einzeilige Lösung in meinem Terminal ausführen. Alles andere, was ich ausprobierte, war zu komplex, um mit Minikube zu autorisieren.
Dies ist mein Befehl für das aws-ecr-Login, das ich jeden Tag ausführen werde, da das Token abläuft. Die folgenden Beispiele beziehen sich auf Debian 9 mit AWS ECR.
Schale
kubectl create secret docker-registry aws-ecr-credentials \
--docker-server=$ECR_REGISTRY \
--docker-username=AWS \
--docker-password=$(aws ecr get-login | awk '{print $6}') \
--docker-email=$IAM_EMAIL \
--namespace=$KUBE_NAMESPACE
template.yml
spec:
imagePullSecrets:
- name: aws-ecr-credentials