kubernetes 无法在我的dockerhub仓库中下载docker镜像

xj3cbfub  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(277)

我已经构建了一些docker镜像,并将它们推送到我的dockerhub仓库。这意味着这些docker镜像也可以在我的本地计算机上使用。下面是我的仓库https://hub.docker.com/repository/docker/vikash112/pathology/general中的一个公共docker镜像示例
我为一个使用这个图像的pod写了一个yaml文件,我一直得到以下错误

Type     Reason     Age                  From               Message
  ----     ------     ----                 ----               -------
  Normal   Scheduled  7m39s                default-scheduler  Successfully assigned default/classification-pod to digi1036734
  Warning  Failed     30s                  kubelet            Failed to pull image "vikash112/pathology:0.1.0": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/vikash112/pathology:0.1.0": failed to copy: httpReadSeeker: failed open: server message: invalid_token: authorization failed
  Warning  Failed     30s                  kubelet            Error: ErrImagePull
  Normal   BackOff    30s                  kubelet            Back-off pulling image "vikash112/pathology:0.1.0"
  Warning  Failed     30s                  kubelet            Error: ImagePullBackOff
  Normal   Pulling    16s (x2 over 7m38s)  kubelet            Pulling image "vikash112/pathology:0.1.0"

字符串
有趣的是
因为镜像在本地可用,所以k8s不应该尝试下载镜像。所以,为了强制k8s不下载镜像,我使用了imagePullPolicy:从来没有和我得到以下错误,即使图像是清楚地存在如图所示

Events:
  Type     Reason             Age               From               Message
  ----     ------             ----              ----               -------
  Normal   Scheduled          83s               default-scheduler  Successfully assigned default/classification-pod to digi1036734
  Warning  ErrImageNeverPull  5s (x9 over 82s)  kubelet            Container image "vikash112/kftools:0.0.1" is not present with pull policy of Never
  Warning  Failed             5s (x9 over 82s)  kubelet            Error: ErrImageNeverPull
(base) gupta@DIGI1036734:~/disk/Tools/kfp_pipeline_7/app/CAII/cai2package$ docker images | grep kftools 
vikash112/kftools                                        0.0.2             90e48f4cee7b   4 months ago    13.4GB
vikash112/kftools                                        0.0.1             1f00fe6b3e82   4 months ago    13.4GB


所以,我尝试的另一件事是按照这里的说明在k8s中为我的docker登录创建一个secret https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
但是,我可以提取公共存储库,如mongodb,busybox等。所以,我不知道为什么我自己的公共存储库在拉取时会有任何问题。
我们怎样才能复制它(尽可能少地和精确地)?您可以使用下面的yaml脚本来尝试

apiVersion: v1
kind: Pod
metadata:
  name: classification-pod
spec:
  restartPolicy: OnFailure
  containers:
    - name: caiiapp
      image: vikash112/hellok8s:v1
      imagePullPolicy: IfNotPresent
      resources:
        limits:
          nvidia.com/gpu: 1
  nodeSelector:
    kubernetes.io/hostname: digi1036734


假设您将文件保存为myscript.yaml。您可以将其执行为

kubectl apply -f myscript.yaml


我不希望k8s拉任何图像,如果他们在本地可用。如果它试图拉取,它应该从docker hub拉取我的图像,因为它正在拉取其他图像,如mongodb,busybox等。

exdqitrt

exdqitrt1#

由于映像在本地可用,因此k8s不应尝试下载映像
Docker和Kubernetes不共享相同的镜像存储(Docker Desktop从那里运行Kubernetes的一个小例外)。因此,您需要将图像推送到注册表并从那里提取它们。
您列出的图像是68层,总计超过7 GB压缩。我会建议尝试削减这种方式下来,以减少网络和磁盘负载对您的系统。
无效令牌:授权失败
此错误表示您提供的任何身份验证凭据都不正确。仔细检查您输入到kubernetes中的凭据是否显示了正确的base64编码的用户/密码(docker desktop默认情况下不会将凭据放在config文件中)。如果您在Docker Hub中启用了2fa,请确保您使用的是访问令牌而不是密码。

相关问题