[k8s问题笔录] 记一次 kubectl 部署时,pull image 报错,拉取不到镜像
部署一个简单的 demo 返现一个很奇妙的错误,yaml 文件内容在下方,镜像仓库是内网自建的 harbor-1.9.1 单节点仓库,测试就没有整高可用了。
用户名:admin
密码:admin123
[root@k8s-m1 ~]# cat /opt/work/jenkins/jenkins_home/workspace/k8s-web-demo/web.yaml
#deploy apiVersion: apps/v1 kind: Deployment metadata: name: k8s-web-demo spec: selector: matchLabels: app: k8s-web-demo replicas: 1 template: metadata: labels: app: k8s-web-demo spec: containers: - name: k8s-web-demo image: harbor.unchch.com/kubernetes/k8s-web-demo:20191031_105142_3551 ports: - containerPort: 8080 --- #service apiVersion: v1 kind: Service metadata: name: k8s-web-demo spec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: k8s-web-demo type: ClusterIP --- #ingress apiVersion: extensions/v1beta1 kind: Ingress metadata: name: k8s-web-demo spec: rules: - host: k8s-web.unchch.com http: paths: - path: / backend: serviceName: k8s-web-demo servicePort: 80
检查 pods,发现报错:
继续查看错误信息
# kubectl describe po k8s-web-demo-675df649c7-s2scg
报错内容是:
pulling image "harbor.unchch.com/kubernetes/k8s-web-demo:20191031_105142_3551" Warning Failed 36s (x3 over 71s) kubelet, k8s-n1 Failed to pull image "harbor.unchch.com/kubernetes/k8s-web-demo:20191031_105142_3551": rpc error: code = Unknown desc = Error response from daemon: pull access denied for harbor.unchch.com/kubernetes/k8s-web-demo, repository does not exist or may require 'docker login': denied: requested access to the resource is denied Warning Failed 36s (x3 over 71s) kubelet, k8s-n1 Error: ErrImagePull Normal BackOff 10s (x4 over 70s) kubelet, k8s-n1 Back-off pulling image "harbor.unchch.com/kubernetes/k8s-web-demo:20191031_105142_3551" Warning Failed 10s (x4 over 70s) kubelet, k8s-n1 Error: ImagePullBackOff
错误提示 “repository does not exist or may require 'docker login': denied: requested access to the resource is denied”,字面理解为“镜像不存在或者需要 docker login 拿到 pull 权限”。
但是在对应的 node 上执行 docker pull harbor.unchch.com/kubernetes/k8s-web-demo:20191031_105142_3551 是可以获取到镜像的,这个就尴尬了
排查过程:
1、去对应的 worker 节点手动 pull 该镜像,是 ok 的,说明之前的 docker login 的用户名和密码是正确的,排除镜像不存在和用户名密码输错的可能;
2、检查 /root/.docker/config 文件中的用户名密码是不是有问题,解密之后也排除了:
3、测试了 docker push 等操作,排除了 harbor 仓库的功能出错等问题;
4、最后想到是不是 kubectl apply -f web.yaml 时,不能正确的获取 docker login 的认证信息,基本就这一种解释了,于是,手工创建了一个secret,使用 secret 来指定 pull 权限:
(1)创建 secret,此处在 harbor 上新建了一个用户 manager:Harbor123
kubectl create secret docker-registry registry-harbor --namespace=default \ --docker-server=harbor.unchch.com --docker-username=manager \ --docker-password=Harbor123 --docker-email=unchch.xt@gmail.com
(2)查看创建的 secret
[root@k8s-m1 script]# kubectl get secrets NAME TYPE DATA AGE default-token-rqf8z kubernetes.io/service-account-token 3 9d registry-harbor kubernetes.io/dockerconfigjson 1 3h24m [root@k8s-m1 script]# kubectl describe secrets registry-harbor Name: registry-harbor Namespace: default Labels: <none> Annotations: <none> Type: kubernetes.io/dockerconfigjson Data ==== .dockerconfigjson: 141 bytes
(3)在 yaml 文件对应的部分指定secret:
再次 部署,一切正常。
原文地址:https://www.cnblogs.com/unchch/p/11771005.html
- What is aspnet.config
- qq侧滑
- Novell 发布Mono 1.2 推动.NET跨平台
- 【Java SE】Java NIO系列教程(十一) Pipe
- 仿qq最新侧滑菜单
- 【高能】用PyMC3进行贝叶斯统计分析(代码+实例)
- 【Java SE】Java NIO系列教程(十二)Java NIO与IO
- 【贝叶斯系列】预测未来回报的交易算法基于Bayesian cone
- android viewgroup事件分发机制
- Rafy 领域实体框架示例(1) - 转换传统三层应用程序
- android view事件分发机制
- Rafy 领域实体框架演示(2) - 新功能展示
- ormlite介绍一
- 从Encoder到Decoder实现Seq2Seq模型(算法+代码)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决Keras TensorFlow 混编中 trainable=False设置无效问题
- 浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
- 使用 prometheus python 库编写自定义指标的方法(完整代码)
- PHP PDOStatement::fetchColumn讲解
- PHP PDOStatement::bindValue讲解
- PDO::lastInsertId讲解
- thinkPHP框架RBAC实现原理分析
- PHP PDOStatement::debugDumpParams讲解
- PDO::prepare讲解
- sklearn的predict_proba使用说明
- 如何使用python记录室友的抖音在线时间
- 使用keras实现BiLSTM+CNN+CRF文字标记NER
- 图解MyBatis的SQL执行流程
- Keras: model实现固定部分layer,训练部分layer操作
- 在Keras中CNN联合LSTM进行分类实例