我们确实有一个私有存储库,我可以成功地推送和拉出所有必需的docker映像。当我尝试在kubernetes上部署特定映像时遇到问题。以下是我正在执行的命令。
kubectl run redis --image=private repo name/redis:redis --image-pull-policy=IfNotPresent
当我运行命令kubectl describe pods <pod name>
时,我会看到以下错误。
警告失败3s(x2超过16s)kubelet,node1失败 拉图像“专用存储库名称/ redis:redis”:rpc错误:代码= 未知desc =错误:状态400尝试提取存储库回购 名称/名称:“ {\ n \”错误\“:[{\ n \”状态\“:400,\ n
\“ message \”:\“不支持'repo的docker v1存储库请求 name'\“ \ n}] \ n}”警告失败3秒(x2超过16秒) kubelet,node1错误:ErrImagePull
谢谢。
答案 0 :(得分:0)
您似乎已丢失授权。 您将必须完成文档中的“ Pull Image from a Private Docker Repository”过程-这里是description的如何针对不同的云提供商或本地Kubernetes以多种方式执行此操作的方法。 以下是有关提供凭据的不同方法的一些有用信息:
私人注册表可能需要密钥才能从中读取图像。 凭证可以通过几种方式提供:
- 使用Google Container Registry
- 每个集群
- 在Google Compute Engine或Google Kubernetes Engine上自动配置
- 所有吊舱都可以读取该项目的私人注册表
- 使用AWS EC2容器注册表(ECR)
- 使用IAM角色和策略来控制对ECR存储库的访问
- 自动刷新ECR登录凭据
- 使用Azure容器注册表(ACR)
- 配置节点以对专用注册表进行身份验证
- 所有Pod均可读取任何已配置的私人注册表
- 需要集群管理员配置节点
- 预拉图像
- 所有Pod都可以使用节点上缓存的任何图像
- 需要对所有节点的root访问权限才能设置
- 在Pod上指定ImagePullSecrets
- 只有提供自己的密钥的Pod才能访问私有注册表。下面将更详细地描述每个选项。
返回您看到的“不支持的Docker v1存储库请求”错误及其原因(假设您使用的可能是v2存储库)。 Docker客户端从存储库中提取映像时的工作方式。首先,如果请求返回错误(未经授权的请求或映像不存在),则它将v2请求发送到注册表,然后使用v1重试该请求。因此它返回v1错误。