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 背景说明
在部署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的更多相关文章
- 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 ...
- 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- ...
- 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 ...
- git拉取GitLab工程报错Repository not found
# git clone http://xxx/jiqing/frog.git 正克隆到 'frog'... fatal: repository 'http://xxx/jiqing/frog.git/ ...
- 关于 Git 拉取GitLab工程报错:Repository not found的问题
[root@localhost xscan]# git pull fatal: repository 'http://gitlab.***.com/***.git/' not found 原因1: 可 ...
- kubernetes之基于ServiceAccount拉取私有镜像
前面可以通过ImagPullPolicy和ImageullSecrets指定下载镜像的策略,ServiceAccount也可以基于spec.imagePullSecret字段附带一个由下载镜像专用的S ...
- 配置kuernetes集群pod拉取私有镜像仓库中的镜像
目录 1 背景说明 2 实现方法 3 具体实现 配置镜像仓库项目为公开类型(任何人可以访问) 配置docker-registry类型的secret(pod使用secret获取镜像认证) 通过账户名密码 ...
- docker拉取镜像报错:net/http: TLS handshake timeout.
docker拉取镜像报错:net/http: TLS handshake timeout. 启动一个后台的busybox容器 [yunva@node1 network-scripts]$ docker ...
- Window中的Docker 拉取Mysql镜像 并在本地Navicate链接
首先本地 拉取mysql镜像 以下是所有mysql镜像 我自己下载的为5.6 下面 以5.6为例:(拉取mysql5.6镜像) docker pull mysql:5.6 创建一个容器 doc ...
随机推荐
- IDEA 2020.2 最新激活教程,有效期到2089年!
这段时间众多粉丝私信说需要IDEA 2020.2 最新激活教程,于是!他来了他带着最新激活教程来了. 注意: 本教程适用于 JetBrains 全系列产品 IDEA 2020.2 以下所有版本,请放心 ...
- 实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值
摘要:一文带你用小熊派开发板动手做土壤湿度传感器. 一.实验准备 1.实验环境 一块stm32开发板(推荐使用小熊派),以及数据线 已经安装STM32CubeMX 已经安装KeilMDK,并导入stm ...
- 谈谈数据库的事务ACID
在数据库中新建一个字段并且设置为索引列,还有删除整张表的数据,类似这些操作都是一系列操作的组合,执行后不能出现中间状态,也就是不会出现新建了字段却不是索引的情况,也不会出现只有一部分数据被删除的情况. ...
- 01 学习人工智能,不做笔记?做笔记不知道如何输入数学公式?“onenote+Mathematics Add-In”拯救你!onenote安装数学输入公式插件Microsoft Mathematics Add-In for Word and OneNote教程走一波
一.Microsoft Mathematics Add-In 插件下载 Microsoft Mathematics Add-In for Word and OneNote插件下载链接: https:/ ...
- 浙大《数据结构》学习&练习(一)算法初步
1.数据结构是数据在计算机中的组织方式,类比图书在图书馆中的存储,应该如何分类,如何在书架上存取. 2.抽象数据结构是对一类的数据的一种组织方式的通用(抽象)描述,包括类型的名称,数据对象集和操作集. ...
- 步进电机的Arduino库函数
This library allows you to control unipolar or bipolar stepper motors. To use it you will need a ste ...
- 【学习笔记/题解】分层图/[JLOI2011]飞行路线
题目戳我 \(\text{Solution:}\) 关于分层图: 一般用于处理:给你\(k\)次机会对边权进行修改的最短路问题. 算法流程: 建立出\(k\)层图,对应进行\(k\)次操作后的局面. ...
- 几个常用markdown工具的主要优缺点
几个常用markdown工具的主要优缺点 最近对几个热门的markdown工具做了一个对比表 表格 脚注 图片和图床 平台 移动端 实时预览 收费 操作难度 导出功能 mweb 非常棒 预览正常显示 ...
- Android使用Mono c#分段列表视图
下载source code - 21.7 KB 你想知道如何把多个ListView控件放到一个布局中,但是让它们在显示时表现正确吗 多个列表项?你对它们正确滚动有问题吗?这个例子将向你展示如何组合单独 ...
- C#数据结构-双向链表
链表的概念以及链表与数组的差异不做过多的叙述,相信大家都耳熟能详,这里以c#语言实现简单的双向链表,作为备用,记录下~ public class Node<T> { private Nod ...