【问题标题】:How to resolve ImagePullBackOff error in local?如何解决本地 ImagePullBackOff 错误?
【发布时间】:2021-01-08 04:21:48
【问题描述】:

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

docker tag microservicestest:dev microservicestest .
docker build -t microservicestest .
docker run -d -p 8080:80 --name myapp microservicetest

然后我创建了如下部署。

kubectl run microservicestest-deployment --image=microservicestest:latest --port 80 --replicas=3
kubectl expose deployment microservicestest-deployment --type=NodePort

然后当我看到 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

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

【问题讨论】:

  • kubectl get deployment microservicestest-deployment -o yaml 的输出是什么?
  • 嗨 Kamol Hasan,我在上面添加了输出

标签: docker kubernetes containers kubectl


【解决方案1】:

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

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

spec:
     containers:
     - image: my-image:my-tag
       name: my-app
       imagePullPolicy: Never

查看here官方文档

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).

因为你没有使用 yaml 文件,你可以像这样创建资源

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

kubectl expose deployment microservicestest-deployment --type=NodePort

【讨论】:

  • 您好,感谢您的回答。我已经在我的本地系统中安装了 docker。另外如何设置 eval $(minikube docker-env)?哪里可以 Iset 高于规范?
  • 这样的东西应该可以工作kubectl run microservicestest-deployment --image=microservicestest:latest --image-pull-policy=Never --port 80 --replicas=3我刚刚更新了答案
  • 关于评估的事情检查这个答案stackoverflow.com/questions/48376928/…
  • 以上代码对我有用。但根本原因是什么?
  • Kubernetes 默认情况下会转到指定的注册表(大多数情况下在 docker 注册表中)以拉取图像,这就是为什么在使用本地设置时需要指定不同的拉取策略的原因。 kubernetes.io/docs/concepts/containers/images/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多