无法在 Minikube 中创建 Pod

Unable to Create Pod in Minikube

我正在使用 minikube 创建 k8s 集群。我正在尝试创建一个 pod。 Pod 已创建,但在拉取我的图像时出现错误。当我尝试 运行 kubectl describe pod posts 时,出现以下错误,但我的图像显示在本地。

Failed to pull image "suresheerf/posts": rpc error: code = Unknown desc = Error response from daemon: pull access denied for suresheerf/posts, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

这里发生了什么?如何解决?

我的 K8s Pod yaml:

apiVersion: v1
kind: Pod
metadata:
  name: posts
spec:
  containers:
    - name: posts
      image: suresheerf/posts

此外,我的终端屏幕截图:

您必须指定容器名称和命名空间。
在你的情况下你没有 namepsace 所以它只是:

# get the desired pod id
kubectl get pods -A

# copy the pod id and use it
kubectl describe pod <name> 

在我看来,您的图像似乎无法用于 minikube。 Minikube 在虚拟机上运行并使用自己的本地 Docker 守护进程。

像这样让您的图像对 minikube 可用:

  1. 执行 eval $(minikube -p minikube docker-env) 将您的本地 shell 指向 minikube 的 Docker 守护进程。
  2. 构建您的形象,例如docker build -t suresheerf/posts.
  3. 通过将 imagePullPolicy 设置为 Never:
  4. 来修改 Pod yaml,确保 minikube 不会尝试从 Docker Hub 拉取您的图像
apiVersion: v1
kind: Pod
metadata:
  name: posts
spec:
  containers:
    - name: posts
      image: suresheerf/posts
      imagePullPolicy: Never

错误的一些可能原因是:

  • 图片或标签不存在。
  • 您在图片名称或标签中输入错误。
  • 映像注册表需要身份验证。

检查图片名称是否正确。正确更新镜像名称和标签。

如果您需要从私有图像注册表中提取图像,您需要确保向 Kubernetes 提供提取图像所需的凭据。您可以通过创建一个 Secret 来做到这一点。您必须创建一个包含您需要访问的凭证的 Secret。还要确保您已将 Secret 添加到适当的命名空间中。您还需要在 Pod 上设置 imagePullSecrets 字段。该字段告诉 Kubernetes 在向注册表进行身份验证时应该使用哪个 Secret。

示例:

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
    - name: posts
      image: <image name>
      imagePullPolicy: Never
  imagePullSecrets:
  - name: the-secret


如果 Minikube 无法直接访问您的本地 docker 存储库。有几种方法可以解决此问题。有关信息,请参阅 pulling images

一个简单的解决方法是,您可以使用 minikube cache add 将图像添加到 Minikube 缓存,并且您需要将 yaml 文件中的 imagePullPolicy 更改为 Never。这样,它将默认使用您缓存到 minikube 中的本地图像。您也可以在添加缓存后重新加载缓存。