【问题标题】:Skaffold not working with local docker image & docker-desktop kubernetesSkaffold 不适用于本地 docker 映像和 docker-desktop kubernetes
【发布时间】:2020-11-02 22:32:40
【问题描述】:

我有一个简单的 docker-desktop for mac 设置,附带 Kubernetes 集群。

每次我使用imagePullPolicy: Never 运行skaffold dev 时,都会创建一个映像,但在将脏映像部署到 Kubernetes 集群时仍然会出错:

ErrImageNeverPull: Container image "user/test:bf13343a4b431df2b7df84f58ede9229bd3d868a4b10147fff04eae8a7adc0cd" is not present with pull policy of Never

谁能帮我调试一下?我不知道如何进一步调查。但是skaffold 并没有将我的脏镜像部署到 Kubernetes 集群。每个人都建议将imagePullPolicy: Never 添加到我的deployment.yaml 中,但这并不能解决任何问题

skaffold.yml 内容:

apiVersion: skaffold/v2beta5
kind: Config
metadata:
  name: test
build:
  artifacts:
  - image: user/test
deploy:
  kubectl:
    manifests:
    - kube/postgres/postgres-configmap.dev.yaml
    - kube/redis/redis-configmap.secret.yaml
    - kube/web/web-configmap.dev.yaml
    - kube/elasticsearch/elasticsearch-storage.dev.yaml
    - kube/postgres/postgres-storage.dev.yaml
    - kube/cable/cable-service.yaml
    - kube/dashboard.yaml
    - kube/cable/cable-deployment.yaml
    - kube/nginx/load-balancer.dev.yaml
    - kube/redis/redis-storage.yaml
    - kube/sidekiq/sidekiq-deployment.yaml
    - kube/web/web-deployment.yaml
    - kube/web/web-service.dev.yaml
    - kube/web/web-migration.yaml
    - kube/web/web-seed.yaml

【问题讨论】:

  • 请分享skaffold dev的全部日志:我想检查上下文和其他......另外,如果你能分享skaffold yaml文件的内容,那就更好了
  • 还有运行skaffold dev -v debug的日志。如果你运行 docker images user/test:bf13343a4b431df2b7df84f58ede9229bd3d868a4b10147fff04eae8a7adc0cd 会发生什么?
  • 我添加了 skaffold.yaml,但就日志而言,一切看起来都不错,然后我反复收到 ErrImageNeverPull 错误,直到 skaffold dev 完全回滚。

标签: docker kubernetes docker-desktop skaffold


【解决方案1】:

我唯一能想到的就是你的skaffold.yaml与图片名称不匹配:

apiVersion: skaffold/v2beta5
kind: Config
build:
  artifacts:
  - image: user/test ? does this match?
deploy:
  kubectl:
    manifests:
      - deployment.yaml

否则,您的 docker + K8s 实例可能会损坏某些内容。你可以试试:

  • 在 Docker 中启用/禁用 K8s
  • 使用KinD

【讨论】:

  • 实际上是的,build.artifacts.image 确实与图像名称匹配。并且图像确实是在本地创建的,所以当我执行docker image ls 时,我看到了新创建的脏图像。错误是由 mac(不是 minikube)上 docker-desktop 的 kubernetes 节点给出的:pod/web-7f685f866c-ncwt8: ErrImageNeverPull: Container image "user/test:bf13343a4b431df2b7df84f58ede9229bd3d868a4b10147fff04eae8a7adc0cd" is not present with pull policy of Never
  • 我一直在想,由于某种原因,kubernetes 节点无法访问我的本地图像。如果我尝试imagePullPolicy:AlwaysIfNotPresent,则会收到此错误,因为我使用的是私有图像存储库:Failed: Failed to pull image "user/test:59f07723660cc1b012440144cf9f75512da07d7e266aada9af8aea97f12089ff": rpc error: code = Unknown desc = Error response from daemon: manifest for user/test:59f07723660cc1b012440144cf9f75512da07d7e266aada9af8aea97f12089ff not found: manifest unknown: manifest unknown
  • 您的 docker 实例中的 K8s 集群可能存在某些问题。您可以尝试几件事:1)在 docker 中禁用和重新启用 K8s。 2)尝试使用KinD。
  • 这很可能是它。不幸的是我没有足够的经验来调试这个,所以我没有卸载和重新安装,而是在docker-desktop 中禁用了 kubernetes 并安装了minikube,然后 skaffold 运行了半个小时,然后抛出了这个错误Failed to validate 'docker' driver .. 只需要解决这个问题,我想我可以走了
  • 是的,只需要在 docker-desktop 首选项中取消选中Deploy Docker Stacks to Kubernetes by default,现在系统正在运行
猜你喜欢
  • 2014-07-04
  • 2023-02-19
  • 2021-09-03
  • 2017-12-24
  • 2022-12-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多