执行在Ubuntu 16.04上运行的kubectl时出现kubectl错误

时间:2018-07-30 12:41:41

标签: kubernetes

我们确实有一个私有存储库,我可以成功地推送和拉出所有必需的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

谢谢。

1 个答案:

答案 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错误。