k8s 拉取镜像失败_[k8s问题笔录] 记一次 kubectl 部署时,pull image 报错,拉取不到镜像...

在k8s中部署应用时遇到拉取自建Harbor镜像失败的错误,错误信息提示镜像不存在或需要docker login。经过排查,包括手动在节点上pull镜像、检查配置文件、验证Harbor仓库功能,最终发现是kubectl在部署时无法获取正确的docker登录认证信息。通过创建Docker注册表Secret来指定镜像拉取权限,成功解决该问题。
摘要由CSDN通过智能技术生成

部署一个简单的 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:1template:

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: 80protocol: TCP

targetPort:8080selector:

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 39d

registry-harbor kubernetes.io/dockerconfigjson 13h24m

[root@k8s-m1 script]# kubectl describe secrets registry-harbor

Name: registry-harbor

Namespace: default

Labels:Annotations:Type: kubernetes.io/dockerconfigjson

Data====.dockerconfigjson:141 bytes

(3)在 yaml 文件对应的部分指定secret:

再次 部署,一切正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值