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. phpStudy8.1.0.1配置子域名多网站

    版本 这里phpStudy版本为8.1.0.1: 步骤 假设域名为:domain.com:公网IP地址为:42.33.33.33 首先云解析中配置,添加子域名A记录直接指向你的公网IP: ep.dom ...

  2. MySQL中的find_in_set()函数使用技巧心得与应用场景总结

    Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,CSDN官方首发原创文章 企业博客 CSDN.com 个人博 ...

  3. Hive中的数据类型以及案例实操

    @ 目录 基本数据类型 集合数据类型 案例实操 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它 ...

  4. Linux ALSA 音频库 配置和使用

    ALSA应用库是核心功能,而alsa-utils是一些工具功能集合库.单纯地播放一个wav文件,使用alsa-utils即可,如果还需要合成音频.调试音频质量,那么就需要ALSA应用库. 欲安装使用A ...

  5. makefile实验五 make clean rebuild 以及规则中的模式替换. 综合小小实验

    makefile代码: .PHONY : rebuild clean $(TARGET) #声明伪目标时,除直接使用目标名外, 也可以使用 $(变量) 这是取变量的值 CC := g++ TARGET ...

  6. 第二次UML作业

    博客班级 https://edu.cnblogs.com/campus/fzzcxy/2018SE1/ 作业要求 https://edu.cnblogs.com/campus/fzzcxy/2018S ...

  7. 028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑“或”运算符

    028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑"或"运算符 本文知识点:Java中的逻辑"或"运算符 逻辑& ...

  8. STM32F103C8T6-CubeMx串口收发程序详细设计与测试(2)——程序规划、代码编写及测试

    摘要:演示程序的功能:通过中断接收串口数据,在1750us时间内没有收到新的字节的话,将收到的数据原封不动地发送出去,以测试串口的完整收发流程.对使用到的函数进行了说明,阐述了各个函数的调用顺序和调用 ...

  9. CSGO 服务端扩展插件开发记录之"DropClientReason"(1)

    最近开始接触到了CSGO这款游戏,还是老套路,就是想千方百计的从里面增添新的游戏功能,当然刚开始想做到游刃有余是有点困难, 跟之前做CS1.6的第三方开发一样,都得自己慢慢的摸索过来,纵然CSGO所使 ...

  10. 2016年 实验二、C2C模拟实验

    实验二.C2C模拟实验 [实验目的] 掌握网上购物的基本流程和C2C平台的运营 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网. (3).奥派电子商务应用软件 [知识准备] 本实 ...