k8s踩坑:拉取镜像提示pull access denied for repository does not exist or may require ‘docker login‘
使用阿里云镜像仓库,docker push了之后,使用docker pull可以成功拉取仓库中的镜像。提示说使用docker login,可是我已经docker login过了呀!
·
写在前面
使用阿里云镜像仓库,docker push了之后,使用docker pull可以成功拉取仓库中的镜像。
但是使用k8s的yaml文件,kubectl apply -f xxx.yaml时,一直不成功:
[root@m ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
springboot-demo-857c5b668d-4xx48 0/1 ErrImagePull 0 8s
我们查看pod详情时:
[root@m ~]# kubectl describe pod springboot-demo-857c5b668d-4xx48
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 27s default-scheduler Successfully assigned default/springboot-demo-857c5b668d-4xx48 to w2
Normal BackOff 25s kubelet, w2 Back-off pulling image "registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0"
Warning Failed 25s kubelet, w2 Error: ImagePullBackOff
Normal Pulling 14s (x2 over 27s) kubelet, w2 Pulling image "registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0"
Warning Failed 13s (x2 over 26s) kubelet, w2 Failed to pull image "registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0": rpc error: code = Unknown desc = Error response from daemon: pull access denied for registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo, repository does not exist or may require 'docker login'
Warning Failed 13s (x2 over 26s) kubelet, w2 Error: ErrImagePull
[r
提示说使用docker login,可是我已经docker login过了呀!
问题解决
查阅资料发现,如果使用私有云
docker仓库的话,不光需要docker login,k8s也需要一个secret!
在Kubernetes 集群中配置正确的凭证来访问该镜像仓库
在 Kubernetes 集群中配置正确的凭证来访问镜像仓库,您可以按照以下步骤操作:
1、首先,您需要在集群中创建一个 Kubernetes 密钥(secret),用于存储镜像仓库的凭证。可以使用以下命令创建一个 secret 对象:
kubectl create secret docker-registry <secret-name> \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email> \
--docker-server=<registry>
其中:
<secret-name> 是您为 secret 指定的名称,例如 my-registry-secret。
<username> 是您在镜像仓库的用户名。
<password> 是您在镜像仓库的密码。
<email> 是与您在镜像仓库的账号相关联的电子邮件。
<registry> 是您的镜像仓库地址。
这将创建一个 secret 对象,并将镜像仓库的凭证存储在其中。
2、接下来,您需要在使用该凭证的部署(deployment)或其他相关资源中引用该 secret。可以在相关资源的定义文件中添加以下部分:
spec:
template:
spec:
imagePullSecrets:
- name: <secret-name>
这将告诉 Kubernetes 使用给定的 secret 来拉取镜像。
3、保存并应用更改后的 YAML 文件:
kubectl apply -f <file-name>.yaml
确保将 <file-name> 替换为实际的 YAML 文件名。
经过以上步骤,Kubernetes 集群就配置了正确的凭证来访问镜像仓库。在部署中指定了正确的 secret,Kubernetes 将在拉取镜像时自动使用该凭证。
更多推荐
已为社区贡献7条内容
所有评论(0)