无法在 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 可用:
- 执行
eval $(minikube -p minikube docker-env)
将您的本地 shell 指向 minikube 的 Docker 守护进程。
- 构建您的形象,例如
docker build -t suresheerf/posts
.
- 通过将
imagePullPolicy
设置为 Never
: 来修改 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 中的本地图像。您也可以在添加缓存后重新加载缓存。
我正在使用 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 可用:
- 执行
eval $(minikube -p minikube docker-env)
将您的本地 shell 指向 minikube 的 Docker 守护进程。 - 构建您的形象,例如
docker build -t suresheerf/posts
. - 通过将
imagePullPolicy
设置为Never
: 来修改 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 中的本地图像。您也可以在添加缓存后重新加载缓存。