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