如何解决本地ImagePullBackOff错误?

Mr *_*ect 0 containers docker kubernetes kubectl

Net Core 应用程序映像,我正在尝试在本地 kubernetes 中创建部署。我创建了 docker 镜像,如下所示。

docker tag microservicestest:dev microservicestest .
docker build -t microservicestest .
docker run -d -p 8080:80 --name myapp microservicetest
Run Code Online (Sandbox Code Playgroud)

然后我创建了部署,如下所示。

kubectl run microservicestest-deployment --image=microservicestest:latest --port 80 --replicas=3
kubectl expose deployment microservicestest-deployment --type=NodePort
Run Code Online (Sandbox Code Playgroud)

然后当我看到 Kubectl get pods 时,我看到以下错误

在此输入图像描述

以下是我运行 docker images 时的输出

在此输入图像描述

下面是输出

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2020-09-22T04:29:14Z"
  generation: 1
  labels:
    run: microservicestest-deployment
  name: microservicestest-deployment
  namespace: default
  resourceVersion: "17282"
  selfLink: /apis/apps/v1/namespaces/default/deployments/microservicestest-deployment
  uid: bf75410a-d332-4016-9757-50d534114599
spec:
  progressDeadlineSeconds: 600
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      run: microservicestest-deployment
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: microservicestest-deployment
    spec:
      containers:
      - image: microservicestest:latest
        imagePullPolicy: Always
        name: microservicestest-deployment
        ports:
        - containerPort: 80
          protocol: TCP
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  conditions:
  - lastTransitionTime: "2020-09-22T04:29:14Z"
    lastUpdateTime: "2020-09-22T04:29:14Z"
    message: Deployment does not have minimum availability.
    reason: MinimumReplicasUnavailable
    status: "False"
    type: Available
  - lastTransitionTime: "2020-09-22T04:29:14Z"
    lastUpdateTime: "2020-09-22T04:29:14Z"
    message: ReplicaSet "microservicestest-deployment-5c67d587b9" is progressing.
    reason: ReplicaSetUpdated
    status: "True"
    type: Progressing
  observedGeneration: 1
  replicas: 3
  unavailableReplicas: 3
  updatedReplicas: 3
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么我的 Pod 无法从本地提取图像。有人可以帮助我确定我在这里所做的问题吗?任何帮助,将不胜感激。谢谢

cpe*_*z08 6

如果您使用的是 minikube,您首先需要在 minikube 机器托管的 docker 中构建映像,在 Windows 的 bash 会话中执行此操作,请eval $(minikube docker-env)检查此处

那么你需要告诉 Kubernetes 你的镜像拉取策略为 Never 或 IfNotPresent 来查找本地镜像

spec:
     containers:
     - image: my-image:my-tag
       name: my-app
       imagePullPolicy: Never
Run Code Online (Sandbox Code Playgroud)

在这里查看官方文档

By default, the kubelet tries to pull each image from the specified registry. However, if the imagePullPolicy property of the container is set to IfNotPresent or Never, then a local image is used (preferentially or exclusively, respectively).
Run Code Online (Sandbox Code Playgroud)

由于您没有使用 yaml 文件,因此您可以像这样创建资源

kubectl run microservicestest-deployment --image=microservicestest:latest --image-pull-policy=Never --port 80 --replicas=3

kubectl expose deployment microservicestest-deployment --type=NodePort