1 背景说明

在部署k8s node节点时,kubelet的基础设施镜像,修改为私有仓库的镜像,发现在创建pod的时候,一直报错无法拉取pause的镜像。

2 现象

pod无法启动,一直显示ContainerCreating

[root@node-08 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-5bbf8d494b-qf98r 0/1 ContainerCreating 0 94s <none> 172.20.59.57 <none> <none>

通过kubectl describe pod如下报错:

  Normal   Scheduled               <unknown>         default-scheduler      Successfully assigned default/zmm-nginx-deployment-66548984d9-ghx59 to 172.20.59.57
Warning MissingClusterDNS 8s (x2 over 27s) kubelet, 172.20.59.57 pod: "zmm-nginx-deployment-66548984d9-ghx59_default(3f71451b-9004-43b9-9519-047041bd8c35)". kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to "Default" policy.
Warning FailedCreatePodSandBox 2s (x2 over 20s) kubelet, 172.20.59.57 Failed to create pod sandbox: rpc error: code = Unknown desc = failed pulling image "172.20.59.190/kubernetes/pause-amd64:3.1": Error response from daemon: pull access denied for 172.20.59.190/kubernetes/pause-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

查看kubelet的后台日志,报错如下:

Oct 28 18:17:48 nccztsjb-node-08 kubelet: E1028 18:17:48.761788   15938 pod_workers.go:191] Error syncing pod 18eca05b-803e-413b-ad1a-de948fe212ce ("zmm-nginx-deployment-78667db46c-n7tbp_default(18eca05b-803e-413b-ad1a-de948fe212ce)"), skipping: failed to "CreatePodSandbox" for "zmm-nginx-deployment-78667db46c-n7tbp_default(18eca05b-803e-413b-ad1a-de948fe212ce)" with CreatePodSandboxError: "CreatePodSandbox for pod \"zmm-nginx-deployment-78667db46c-n7tbp_default(18eca05b-803e-413b-ad1a-de948fe212ce)\" failed: rpc error: code = Unknown desc = failed pulling image \"172.20.59.190/kubernetes/pause-amd64:3.1\": Error response from daemon: pull access denied for 172.20.59.190/kubernetes/pause-amd64, repository does not exist or may require 'docker login': denied: requested access to the resource is denied"

3 问题分析

通过上面的日志输出来看,是没有权限拉取私有镜像仓库中的pause镜像。

kubelet的启动参数如下

Description=Kubernetes Kubelet Server
After=docker.service
Requires=docker.service [Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/usr/local/bin/kubelet \
--kubeconfig=/root/.kube/config \
--hostname-override=172.20.59.57 \
--pod-infra-container-image=172.20.59.190:81/k8s/pause-amd64:3.1 \ #该配置为pod的基础容器使用的镜像
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=4
Restart=on-failure [Install]
WantedBy=multi-user.target

4 尝试的解决方法

4.1 本地docker login登录镜像仓库,通过docker pull拉取该pause镜像,可以解决该问题(需要所有的node都将pause缓存到本地)

4.2 配置docker-registry secret,在pod的yaml文件中,配置imagePullSecrets来使用该secret,创建pod,仍然报这个错误

该方法说明,pod中容器,和kubelet下载的pause使用的是不同的凭证

查找了kubelet配置的所有参数,没有看到和镜像仓库相关的

配置使用secret的方法,可以参考kuernetes集群中,pod拉取私有镜像仓库(harbor)中的镜像的方法

4.3 修改habor中,pause镜像所在的项目为公开类型--可以解决该问题

思考过程

  • 1.默认的kubelet中pause的配置是gcr.io/google_containers/pause-amd64,也就是表示是从公共仓库中拉取,自然不需要什么权限、认证
  • 2.我们配置了私有的pause镜像地址,但是是放在私有权限的仓库里的,拉取的时候需要认证的
  • 3.尝试,把harbor里面,pause所在的仓库修改为公开类型,发现,把本地的pause,应用镜像都删除后,重新创建pod,是可以拉取pause镜像成功的,pod启动成功,docker images可以查到
  • 4.pause使用公开的仓库去拉取,应用的镜像,通过secret,到私有的仓库拉取

5 思考

kubelet在拉取pause镜像的时候的逻辑是什么?能否配置认证去拉取私有镜像仓库中的pause镜像?

kubelet拉取pause镜像报错pull access denied for 172.20.59.190:81/kubernetes/pause-amd64, repository does not exist or may require 'docker login': denied的更多相关文章

  1. docker中pull镜像,报错 pull access denied for ubantu, repository does not exist or may require 'docker login'

    报错说明:拒绝获取ubantu,  仓库不存在或者需要登录docker 1.先尝试注册docker 2.在拉镜像前,先登录docker, 命令:docker  login 3.然后执行 docker ...

  2. git 拉取远程分支报错(fatal: '' is not a commit and a branch '' cannot be created from it)

    问题描述从远程git上拉取某一个分支,然后报错,拉取不了这个分支. 拉取分支的命令: git checkout -b xxx-static-19 origin/xxx-static-19 其中xxx- ...

  3. Git 拉取Gitee仓库报错:“fatal: unable to access ''": Failed to connect to 127.0.0.1 port 1080: Connection refused”

    1.报错信息: 2.本地查看是否Git使用了代理 git config --global http.proxy 3.取消代理 git config --global --unset http.prox ...

  4. git拉取GitLab工程报错Repository not found

    # git clone http://xxx/jiqing/frog.git 正克隆到 'frog'... fatal: repository 'http://xxx/jiqing/frog.git/ ...

  5. 关于 Git 拉取GitLab工程报错:Repository not found的问题

    [root@localhost xscan]# git pull fatal: repository 'http://gitlab.***.com/***.git/' not found 原因1: 可 ...

  6. kubernetes之基于ServiceAccount拉取私有镜像

    前面可以通过ImagPullPolicy和ImageullSecrets指定下载镜像的策略,ServiceAccount也可以基于spec.imagePullSecret字段附带一个由下载镜像专用的S ...

  7. 配置kuernetes集群pod拉取私有镜像仓库中的镜像

    目录 1 背景说明 2 实现方法 3 具体实现 配置镜像仓库项目为公开类型(任何人可以访问) 配置docker-registry类型的secret(pod使用secret获取镜像认证) 通过账户名密码 ...

  8. docker拉取镜像报错:net/http: TLS handshake timeout.

    docker拉取镜像报错:net/http: TLS handshake timeout. 启动一个后台的busybox容器 [yunva@node1 network-scripts]$ docker ...

  9. Window中的Docker 拉取Mysql镜像 并在本地Navicate链接

    首先本地   拉取mysql镜像 以下是所有mysql镜像 我自己下载的为5.6   下面 以5.6为例:(拉取mysql5.6镜像) docker pull mysql:5.6 创建一个容器 doc ...

随机推荐

  1. Windows下设置Mongodb用户名密码

    MongoDB认证: 在默认的情况下,Mongodb是监听在127.0.0.1 IP上的,端口号默认为27017,任何客户端都可以连接,不需要认证 默认情况下,Mongodb也是没有管理账户的,除非你 ...

  2. Processing 网格(棋盘格)无限偏移纹理动画

    过火 再度出击!这次我们要玩得更火一点---把静帧变动画.没错,将棋盘格动起来!看一下效果: 这是一个经典的无限偏移动画,在很多2d横版射击游戏中都会采用的技术.如何在Processing中实现,有两 ...

  3. npm包的发布和管理

    npm包管理 npm其实是Node.js的包管理工具(node package manager). 为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScrip ...

  4. Spring Environment对象获取属性

    String[] activeProfiles = env.getActiveProfiles();//获取当前是启用哪一个个配置文件 System.out.println(Arrays.toStri ...

  5. 玩命学JVM(一)—认识JVM和字节码文件

    本篇文章的思维导图 一.JVM的简单介绍 1.1 JVM是什么? JVM (java virtual machine),java虚拟机,是一个虚构出来的计算机,但是有自己完善的硬件结构:处理器.堆栈. ...

  6. flutter json_annotation和json_serializable处理json数据序列化

    flutter json_annotation和json_serializable处理json数据序列化 导包 dependencies: json_annotation: ^2.4.0 dev_de ...

  7. Emgu.CV怎么加载Bitmap

    EmguCV 在4.0.1版本之后没办法用Bitmap创建Image了. 我给大家说下 EmguCV怎么加载Bitmap 下边是 EmguCV 官方文档写的,意思是从4.0.1以后的版本不能直接Bit ...

  8. 走进shiro,构建安全的应用程序---shiro修仙序章

    0. 写在前面 在最近的一个项目当中,我们基于Shiro实现我们系统的认证和授权.借此机会,写几篇博客,总结一下在本次实践当中遇到的问题,和较全面地学习一下Shiro的知识点, 1. 权限管理 权限管 ...

  9. 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点

    087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...

  10. Matlab 中 imshow 函数

    转自: https://blog.csdn.net/xiaochou87/article/details/43488829 matlab中显示图像的语句是:                       ...