创建 deployment时 从 私有仓库 拉取镜像失败的解决办法 ErrImagePull

Posted gaohq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建 deployment时 从 私有仓库 拉取镜像失败的解决办法 ErrImagePull相关的知识,希望对你有一定的参考价值。

我刚开始的 ssm-deployment.yml 文件如下 

技术图片

 

 

 

 

使用 kubectl get deploy  结果如下 

技术图片

 

 

居然没有起来 因为我 pull  和push 镜像都没有问题 。然后我看 具体的Pod的状态如下 

 

Failed to pull image "10.136.195.150:80/micro/ssm:latest": rpc error: code = 

Unknown desc = Error response from daemon: pull access denied for 10.136.195.150:80/micro/ssm, repository does not exist or may require ‘do

cker login‘

 

 

可是 我已经登录 我自己的 私有仓库了啊

经过百度 发现需要配置 secret 

命令如下

 

技术图片

 

 

然后在 ssm-deployment.yml 中引用这个 secret 就可以了

 

 

 

 

 

 

 

 

 

 

 

 

 


[root@master ~]# kubectl get secretsNAME                  TYPE                                  DATA   AGEdefault-token-77vdj   kubernetes.io/service-account-token   3      40h[root@master ~]# vi ssm-deployment.yml [root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           46m[root@master ~]# kubectl delete deploy ssm-deploymentdeployment.extensions "ssm-deployment" deleted[root@master ~]# kubectl apply -f ssm-deployment.yml deployment.apps/ssm-deployment created[root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           9s[root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           14s[root@master ~]# kubectl get podsNAME                                  READY   STATUS             RESTARTS   AGEkubernetes-bootcamp-76fcb8587-cd7s7   1/1     Running            1          26hnginx-deployment-5754944d6c-pf256     1/1     Running            1          26hnginx-deployment-5754944d6c-r7ths     1/1     Running            1          26hssm-deployment-855cd7f589-48qcg       0/1     InvalidImageName   0          20sssm-deployment-855cd7f589-skmxx       0/1     InvalidImageName   0          20s[root@master ~]# kubectl get podsNAME                                  READY   STATUS             RESTARTS   AGEkubernetes-bootcamp-76fcb8587-cd7s7   1/1     Running            1          26hnginx-deployment-5754944d6c-pf256     1/1     Running            1          26hnginx-deployment-5754944d6c-r7ths     1/1     Running            1          26hssm-deployment-855cd7f589-48qcg       0/1     InvalidImageName   0          30sssm-deployment-855cd7f589-skmxx       0/1     InvalidImageName   0          30s[root@master ~]# [root@master ~]# kubectl get podsNAME                                  READY   STATUS             RESTARTS   AGEkubernetes-bootcamp-76fcb8587-cd7s7   1/1     Running            1          26hnginx-deployment-5754944d6c-pf256     1/1     Running            1          26hnginx-deployment-5754944d6c-r7ths     1/1     Running            1          26hssm-deployment-855cd7f589-48qcg       0/1     InvalidImageName   0          34sssm-deployment-855cd7f589-skmxx       0/1     InvalidImageName   0          34s[root@master ~]# kubectl get podsNAME                                  READY   STATUS             RESTARTS   AGEkubernetes-bootcamp-76fcb8587-cd7s7   1/1     Running            1          26hnginx-deployment-5754944d6c-pf256     1/1     Running            1          26hnginx-deployment-5754944d6c-r7ths     1/1     Running            1          26hssm-deployment-855cd7f589-48qcg       0/1     InvalidImageName   0          36sssm-deployment-855cd7f589-skmxx       0/1     InvalidImageName   0          36s[root@master ~]# kubectl describe pod ssm-deployment-855cd7f589-skmxxName:           ssm-deployment-855cd7f589-skmxxNamespace:      defaultPriority:       0Node:           node1/10.136.195.150Start Time:     Thu, 14 Nov 2019 11:31:45 +0800Labels:         app=ssm-service                pod-template-hash=855cd7f589Annotations:    <none>Status:         PendingIP:             10.244.1.47Controlled By:  ReplicaSet/ssm-deployment-855cd7f589Containers:  ssm:    Container ID:       Image:          http://10.136.195.150:80/micro/ssm:latest    Image ID:           Port:           8070/TCP    Host Port:      0/TCP    State:          Waiting      Reason:       InvalidImageName    Ready:          False    Restart Count:  0    Environment:    <none>    Mounts:      /var/run/secrets/kubernetes.io/serviceaccount from default-token-77vdj (ro)Conditions:  Type              Status  Initialized       True   Ready             False   ContainersReady   False   PodScheduled      True Volumes:  default-token-77vdj:    Type:        Secret (a volume populated by a Secret)    SecretName:  default-token-77vdj    Optional:    falseQoS Class:       BestEffortNode-Selectors:  <none>Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s                 node.kubernetes.io/unreachable:NoExecute for 300sEvents:  Type     Reason         Age               From               Message  ----     ------         ----              ----               -------  Normal   Scheduled      60s               default-scheduler  Successfully assigned default/ssm-deployment-855cd7f589-skmxx to node1  Warning  InspectFailed  2s (x6 over 59s)  kubelet, node1     Failed to apply default image tag "http://10.136.195.150:80/micro/ssm:latest": couldn‘t parse image reference "http://10.136.195.150:80/micro/ssm:latest": invalid reference format  Warning  Failed         2s (x6 over 59s)  kubelet, node1     Error: InvalidImageName[root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           95s[root@master ~]# kubectl delete deploy ssm-deploymentdeployment.extensions "ssm-deployment" deleted[root@master ~]# vi ssm-deployment.yml [root@master ~]# kubectl apply -f ssm-deployment.yml deployment.apps/ssm-deployment created[root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           7s[root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           11s[root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           13s[root@master ~]# kubectl get podsNAME                                  READY   STATUS         RESTARTS   AGEkubernetes-bootcamp-76fcb8587-cd7s7   1/1     Running        1          26hnginx-deployment-5754944d6c-pf256     1/1     Running        1          26hnginx-deployment-5754944d6c-r7ths     1/1     Running        1          26hssm-deployment-5959dfbb8b-cls58       0/1     ErrImagePull   0          18sssm-deployment-5959dfbb8b-hcwhf       0/1     ErrImagePull   0          18s[root@master ~]# bubectl describe pod ssm-deployment-5959dfbb8b-cls58-bash: bubectl: command not found[root@master ~]# kubectl describe pod ssm-deployment-5959dfbb8b-cls58Name:           ssm-deployment-5959dfbb8b-cls58Namespace:      defaultPriority:       0Node:           node1/10.136.195.150Start Time:     Thu, 14 Nov 2019 11:35:34 +0800Labels:         app=ssm-service                pod-template-hash=5959dfbb8bAnnotations:    <none>Status:         PendingIP:             10.244.1.49Controlled By:  ReplicaSet/ssm-deployment-5959dfbb8bContainers:  ssm:    Container ID:       Image:          micro/ssm:latest    Image ID:           Port:           8070/TCP    Host Port:      0/TCP    State:          Waiting      Reason:       ErrImagePull    Ready:          False    Restart Count:  0    Environment:    <none>    Mounts:      /var/run/secrets/kubernetes.io/serviceaccount from default-token-77vdj (ro)Conditions:  Type              Status[root@master ~]# kubectl create secret docker-registry regsecret --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=yin32167@aliyun.com --docker-password=xxxxxx --docker-email=yin32167@aliyun.comsecret/regsecret created[root@master ~]# [root@master ~]# [root@master ~]# [root@master ~]# 作者:殷临风-bash: 作者:殷临风: command not found[root@master ~]# 链接:https://www.jianshu.com/p/fd13c2762d81-bash: 链接:https://www.jianshu.com/p/fd13c2762d81: No such file or directory[root@master ~]# 来源:简书-bash: 来源:简书: command not found                                                                                           ^C[root@master ~]# kubectl create secret docker-registry regsecret --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=yin321Error: required flag(s) "docker-password" not set

Examples:[root@master ~]# kubectl create secret docker-registry regsecret --docker-server=10.136.195.150:80 --docker-username=adminError: required flag(s) "docker-password" not set

Examples:  # If you don‘t already have a .dockercfg file, you can create a dockercfg secret directly by using:  kubectl create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
Options:      --allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.      --append-hash=false: Append a hash of the secret to its name.      --docker-email=‘‘: Email for Docker registry      --docker-password=‘‘: Password for Docker registry authentication      --docker-server=‘https://index.docker.io/v1/‘: Server location for Docker registry      --docker-username=‘‘: Username for Docker registry authentication      --dry-run=false: If true, only print the object that would be sent, without sending it.      --from-file=[]: Key files can be specified using their file path, in which case a default name will be given to them, or optionally with a name and file path, in which case the given name will be used.  Specifying a directory will iterate each named file in the directory that is a valid secret key.      --generator=‘secret-for-docker-registry/v1‘: The name of the API generator to use.  -o, --output=‘‘: Output format. One of: json|yaml|name|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-file.      --save-config=false: If true, the configuration of current object will be saved in its annotation. Otherwise, the annotation will be unchanged. This flag is useful when you want to perform kubectl apply on this object in the future.      --template=‘‘: Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].      --validate=true: If true, use a schema to validate the input before sending it
Usage:  kubectl create secret docker-registry NAME --docker-username=user --docker-password=password --docker-email=email [--docker-server=string] [--from-literal=key1=value1] [--dry-run] [options]
Use "kubectl options" for a list of global command-line options (applies to all commands).
required flag(s) "docker-password" not set[root@master ~]# kubectl create secret docker-registry regsecret --docker-server=10.136.195.150:80 --docker-username=admin -- docker-possword Harbor12345Error: required flag(s) "docker-password" not set

[root@master ~]# kubectl create secret docker-registry regsecret > --docker-server=10.136.195.150:80 > --docker-username=admin > --docker-password=Harbor12345 > ^C[root@master ~]# kubectl create secret docker-registry regsecret --docker-server=10.136.195.150:80 --docker-username=admin --docker-password=Harbor12345Error from server (AlreadyExists): secrets "regsecret" already exists[root@master ~]# kubectl create secret docker-registry myregsecret --docker-server=10.136.195.150:80 --docker-username=admin --docker-password=Harbor12345secret/myregsecret created[root@master ~]# kubectl get secretsNAME                  TYPE                                  DATA   AGEdefault-token-77vdj   kubernetes.io/service-account-token   3      41hmyregsecret           kubernetes.io/dockerconfigjson        1      18sregsecret             kubernetes.io/dockerconfigjson        1      4m7s[root@master ~]# lsanaconda-ks.cfg  kube-flannel.yml  nginx-deployment.yml  nginx-service.yml  ssm-deployment.yml  ssm-service.yml[root@master ~]# vi ssm-deployment.yml [root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26hnginx-deployment      2/2     2            2           26hssm-deployment        0/2     2            0           15m[root@master ~]# kubectl delete deploy ssm-deploymentdeployment.extensions "ssm-deployment" deleted[root@master ~]# kubectl apply -f ssm-deployment.yml deployment.apps/ssm-deployment created[root@master ~]# kubectl get deployNAME                  READY   UP-TO-DATE   AVAILABLE   AGEkubernetes-bootcamp   1/1     1            1           26h

以上是关于创建 deployment时 从 私有仓库 拉取镜像失败的解决办法 ErrImagePull的主要内容,如果未能解决你的问题,请参考以下文章

k8s从私有仓库拉取镜像创建pod时ImagePullBackOff

通过Nexus搭建maven私有仓库,并通过gradle上传jar

Harbor单点仓库部署

Docker -- 镜像仓库(搭建私有镜像仓库向镜像仓库推送镜像从镜像仓库拉取镜像)

使用 docker-compose 从私有仓库拉取镜像

Harbor认证:K8S无法正常拉取harbor镜像