kubernetes - 使用 minikube 从 docker hub 拉取私有(private)镜像

标签 kubernetes dockerhub minikube

我在 macOS 10.12 上使用 minikube 并尝试使用托管在 docker hub 上的私有(private)图像。我知道 minikube 启动了一个 VM,据我所知,它将是我本地 kubernetes 集群的唯一节点,它将托管我所有的 pod。

我读到我可以通过运行 eval $(minikube docker-env) 来使用 VM 的 docker 运行时。 .所以我使用这些变量从我的本地 docker 运行时更改为另一个。运行docker images我可以看到更改已有效完成。

我的下一步是使用 docker login 登录 docker hub。然后手动拉出我的图像,结果没有错误。之后,我认为该镜像将准备好被集群中的任何 pod 使用,但我总是得到 ImagePullBackOff .我还尝试通过 minikube ssh SSH 进入虚拟机结果是一样的,图像可以使用,但由于某种原因我不知道它拒绝使用它。

如果有帮助,这是我的部署描述文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 1
template:
  metadata:
    labels:
      app: nginx
  spec:
    containers:
    - name: nginx
      image: godraude/nginx
      imagePullPolicy: Always
      ports:
      - containerPort: 80
      - containerPort: 443

这是 kubectl describe pod <podname> 的输出:
Events:
  FirstSeen LastSeen    Count   From            SubobjectPath       Type        Reason      Message
  --------- --------    -----   ----            -------------       --------    ------      -------
  1m        1m      1   {default-scheduler }                Normal      Scheduled   Successfully assigned web-deployment-2451628605-vtbl8 to minikube
  1m        23s     4   {kubelet minikube}  spec.containers{nginx}  Normal      Pulling     pulling image "godraude/nginx"
  1m        20s     4   {kubelet minikube}  spec.containers{nginx}  Warning     Failed      Failed to pull image "godraude/nginx": Error: image godraude/nginx not found
  1m        20s     4   {kubelet minikube}              Warning     FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "nginx" with ErrImagePull: "Error: image godraude/nginx not found"

  1m    4s  5   {kubelet minikube}  spec.containers{nginx}  Normal  BackOff     Back-off pulling image "godraude/nginx"
  1m    4s  5   {kubelet minikube}              Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "nginx" with ImagePullBackOff: "Back-off pulling image \"godraude/nginx\""

最佳答案

我认为您需要创建一个 secret ,它将告诉 kube 从哪里可以提取您的私有(private)图像及其凭据

kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

下面的命令列出你的 secret
kubectl get secret
NAME            TYPE                      DATA      AGE
my-secret   kubernetes.io/dockercfg   1         100d

现在在部署定义中,您需要定义要使用的哪个密码
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 1
template:
  metadata:
    labels:
      app: nginx
  spec:
    containers:
    - name: nginx
      image: godraude/nginx
      imagePullPolicy: Always
      ports:
      - containerPort: 80
      - containerPort: 443
    imagePullSecrets:
      - name: my-secret

关于kubernetes - 使用 minikube 从 docker hub 拉取私有(private)镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41059807/

相关文章:

kubernetes - 将 GCloud 中 GKE 中的运行状况检查从 HTTP 更改为 TCP 后重置

http - 需要帮助解决 Istio IngressGateway HTTP 错误 503

docker - 将图像推送到Docker Hub

kubernetes - 创建简单 minikube 时出错 : `Error updating cluster: generating kubeadm cfg: parsing kubernetes version`

Kubernetes + CoreOS + Ceph RBD

mongodb - Kubernetes 杀死 Mongo 容器

docker - 启动Docker守护程序时出错

docker - 是否可以使用访问 token 从 Travis CI 登录并将图像推送到 Docker Hub?

docker - "kubectl get pods"显示状态 - ImagePullbackOff

kubernetes - 如何将 minikube 集群的 API 服务器暴露给公网(LAN)?