我正在尝试在Kubernetes上运行一些docker映像。
码头工人图像
master* $ docker images [15:16:49]
REPOSITORY TAG IMAGE ID CREATED SIZE
usm latest 4dd5245393bf About an hour ago 158MB
kuard latest 497961f486c7 4 days ago 22.9MB
集装箱码头工人
master* $ docker ps [15:21:40]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a46850d28303 usm "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:6061->80/tcp, :::6061->80/tcp usm
88471e086486 gcr.io/k8s-minikube/kicbase:v0.0.32 "/usr/local/bin/entr…" 2 days ago Up 2 hours 127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp minikube
Dockerfile
FROM nginx
COPY ./dist /usr/share/nginx/html
EXPOSE 80
kube版本
master* $ minikube version [15:37:13]
minikube version: v1.26.0
commit: f4b412861bb746be73053c9f6d2895f12cf78565
当我运行kubectl run mypod --image=usm
时,我得到ErrImagePull
如何使用本地docker映像运行pod ?
master* $ kubectl run mypod --image=usm
pod/mypod created
master* $ kubectl get pods [15:07:49]
NAME READY STATUS RESTARTS AGE
mypod 0/1 ErrImagePull 0 6s
我试图将imagePullPolicy设置为never
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: usm
imagePullPolicy: Never
name: mypod
ports:
- containerPort: 80
name: http
protocol: TCP
master* $ kubectl apply -f kube-pod-usm.yaml [15:55:39]
pod/mypod created
master* $ kubectl get pods [15:55:54]
NAME READY STATUS RESTARTS AGE
mypod 0/1 ErrImageNeverPull 0 42s
您需要该图像在某个地方可用。通常这是通过注册表完成的,但是对于本地开发,您可以使用以下命令将本地映像上传到minikukbe集群:
minikube image load image:tag
你可能还想检查minikube docker-env
,它允许你的终端docker-cli以一种简单的方式指向minikube中的docker。
当Kubernetes集群创建新部署或更新现有部署时,它需要拉取映像。这是通过每个用户节点上的kubelet进程完成的。为了让kubelet成功地提取这个映像,它们必须可以从集群中匹配调度请求的所有节点访问。
编辑pod规范并提供正确的注册表
如果您将图像拉取策略设置为Never:kubelet不会尝试获取图像。如果映像以某种方式已经在本地存在(在Kubernetes的本地注册表中),kubelet会尝试启动容器;