У меня есть minikube, работающий на OSX, с гиперкитом и включенным небезопасным реестром.
$ minikube start
🎉 minikube 1.12.1 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.12.1
💡 To disable this notice, run: 'minikube config set WantUpdateNotification false'
🙄 minikube v1.9.2 on Darwin 10.15.6
✨ Using the hyperkit driver based on existing profile
👍 Starting control plane node m01 in cluster minikube
🔄 Restarting existing hyperkit VM for "minikube" ...
🐳 Preparing Kubernetes v1.18.0 on Docker 19.03.8 ...
🌟 Enabling addons: dashboard, default-storageclass, registry, storage-provisioner
🏄 Done! kubectl is now configured to use "minikube"
Я могу проверить реестр на IP-адресе minikube
$ curl $(minikube ip):5000/v2/_catalog
{"repositories":[]}
$ curl https://$(minikube ip):5000/v2/_catalog
curl: (35) error:1400410B:SSL routines:CONNECT_CR_SRVR_HELLO:wrong version number
Я создал образ локально и
$ kubectl create deployment spark-k8s --image=192.168.64.9:5000/spark-k8s:latest
Если я проверю статус модуля, я вижу, что он не смог получить изображение, см. Ниже
k describe pod spark-k8s-799578f68d-2v54k
Name: spark-k8s-799578f68d-2v54k
Namespace: default
Priority: 0
Node: minikube/192.168.64.9
Start Time: Thu, 23 Jul 2020 20:30:18 -0700
Labels: app=spark-k8s
pod-template-hash=799578f68d
Annotations: <none>
Status: Pending
IP: 172.17.0.11
IPs:
IP: 172.17.0.11
Controlled By: ReplicaSet/spark-k8s-799578f68d
Containers:
spark-k8s:
Container ID:
Image: 192.168.64.9:5000/spark-k8s:latest
Image ID:
Port: <none>
Host Port: <none>
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-f9p8t (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-f9p8t:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-f9p8t
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/spark-k8s-799578f68d-2v54k to minikube
Normal Pulling 5m10s (x4 over 6m29s) kubelet, minikube Pulling image "192.168.64.9:5000/spark-k8s:latest"
Warning Failed 5m10s (x4 over 6m29s) kubelet, minikube Failed to pull image "192.168.64.9:5000/spark-k8s:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://192.168.64.9:5000/v2/: http: server gave HTTP response to HTTPS client
Warning Failed 5m10s (x4 over 6m29s) kubelet, minikube Error: ErrImagePull
Warning Failed 4m41s (x6 over 6m29s) kubelet, minikube Error: ImagePullBackOff
Normal BackOff 86s (x20 over 6m29s) kubelet, minikube Back-off pulling image "192.168.64.9:5000/spark-k8s:latest"
Как я могу заставить kuernetes использовать HTTP для извлечения образа из небезопасного локального реестра?
Это не то, что сам Kubernetes контролирует (AFAIK) - скорее, если вы используете докер, вам нужно включить --insecure-registries
что можно сделать с помощью аргумента демону докера или (что более удобно) через /etc/docker/daemon.json
(как показано в этой ссылке документации)
Мне никогда не приходилось этого делать containerd
, но, вероятно, имеет аналогичную концепцию
Как упоминалось в комментариях, проблема была в версии minikube.
К сожалению, я только что заметил это, но есть ли причина, по которой вы используете такую устаревшую версию? Доступна minikube 1.12.1!
И, как подтвердил @bachr после обновления, он работает.
@mdaniel это действительно работает, я удалил текущую виртуальную машину minikube, обновил ее и выполнил те же шаги, что и выше, и мое развертывание с использованием локального реестра просто сработало !!