我正在使用minikube
测试部署,并且正在通过this链接
我要部署的清单文件就像
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 1
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
imagePullPolicy: Never # <-- here we go!
image: sams
ports:
- containerPort: 80
在此之后,当我尝试执行以下命令时,输出了
user@usesr:~/Downloads$ kubectl create -f mydeployment.yaml --validate=false
deployment "webapp" created
user@user:~/Downloads$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
---- -------- ------- ---------- --------- ----
webapp 1 1 1 0 9s
user@user:~/Downloads$ kubectl get pods
NAME READY STATUS RESTARTS AGE
---- -------- ------- ---------- --------- ----
webapp-5bf5bd94d-2xgs8 0/1 ErrImageNeverPull 0 21s
甚至我尝试通过从Docker-Hub
中删除行imagePullPolicy: Never
来从deployment.yml
中提取图像,但得到相同的错误。任何人都可以在这里帮助我确定问题出在哪里和出了什么问题
kubectl describe pod $POD_NAME
Name: webapp-5bf5bd94d-2xgs8
Namespace: default
Node: minikube/10.0.2.15
Start Time: Fri, 31 May 2019 14:25:41 +0530
Labels: app=webapp
pod-template-hash=5bf5bd94d
Annotations: <none>
Status: Pending
IP: 172.17.0.4
Controlled By: ReplicaSet/webapp-5bf5bd94d
Containers:
webapp:
Container ID:
Image: sams
Image ID:
Port: 80/TCP
State: Waiting
Reason: ErrImageNeverPull
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-wf82w (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-wf82w:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-wf82w
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 18m default-scheduler Successfully assigned default/webapp-5bf5bd94d-2xgs8 to minikube
Warning ErrImageNeverPull 8m (x50 over 18m) kubelet, minikube Container image "sams" is not present with pull policy of Never
Warning Failed 3m (x73 over 18m) kubelet, minikube Error: ErrImageNeverPull
docker images:
REPOSITORY TAG IMAGE ID CREATED SIZE
---------- --- -------- ------- ----
<none> <none> 723ce2b3d962 3 hours ago 1.91GB
bean_ben501/sams latest c7c4a04713f4 4 hours ago 278MB
sams latest c7c4a04713f4 4 hours ago 278MB
sams v1 c7c4a04713f4 4 hours ago 278MB
<none> <none> b222da630bc3 4 hours ago 1.91GB
mcr.microsoft.com/dotnet/core/sdk 2.2-stretch e4747ec2aaff 9 days ago 1.74GB
mcr.microsoft.com/dotnet/core/aspnet 2.2-stretch-slim f6d51449c477 9 days ago 260MB
答案 0 :(得分:4)
您需要在当前终端窗口中使用eval $(minikube docker-env)
。这将在当前会话中使用minikube docker-env。
映像必须位于minikube虚拟机上。因此,现在您需要重新构建图像。
但是要小心!!构建图像时不要使用 sudo 。它不会使用minikube docker-env。
关闭终端后,一切都会恢复到原来的状态。
然后,在清单文件中使用imagePullPolicy: Never
来使用本地映像注册表。
示例:
apiVersion: v1
kind: Pod
metadata:
name: demo
spec:
containers:
- name: demo
image: demo
imagePullPolicy: Never # <-- here
ports:
- containerPort: 3000
答案 1 :(得分:1)
将单个VM用于Kubernetes时,重新使用Minikube的内置Docker守护程序很有用。重用内置守护程序意味着您不必在主机上构建Docker注册表并将映像推送到其中。取而代之的是,您可以在与Minikube相同的Docker守护进程中进行构建,从而加快本地实验的速度。
以下命令具有魔力
eval $(minikube docker-env)
对于imagePullPolicy: Never
,图像必须位于minikube节点上。
答案 2 :(得分:0)
检查你的
kubectl version
确保客户端版本与守护程序(服务器)版本保持同步。阅读以下来自官方文档的引用
您必须使用与集群的一个次要版本差异之内的 kubectl 版本。例如,v1.2 客户端应与 v1.1、v1.2 和 v1.3 主服务器配合使用。使用最新版本的 kubectl 有助于避免不可预见的问题。
答案 3 :(得分:0)
如果您正在查看此问题,但使用的是 k3s
,而不是给定的 minikube 解决方案,您可以使用 this solution,或来自 rancher docs。向 --docker
的设置添加 k3s
标志。
curl -sfL https://get.k3s.io | sh -s - --docker