我尝试使用KinD作为Minikube的替代品,在本地机器上引导K8S集群。
群集创建成功。
但是当我试图从镜像创建一些pod/部署时,它失败了。
$ kubectl run nginx --image=nginx
$ kubectl run hello --image=hello-world
几分钟后,使用get pods
获取失败状态。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello 0/1 ImagePullBackOff 0 11m
nginx 0/1 ImagePullBackOff 0 22m
恐怕这是中国的另一个全球防火墙问题。
kubectl describe pods/nginx
Name: nginx
Namespace: default
Priority: 0
Node: dev-control-plane/172.19.0.2
Start Time: Sun, 30 Aug 2020 19:46:06 +0800
Labels: run=nginx
Annotations: <none>
Status: Pending
IP: 10.244.0.5
IPs:
IP: 10.244.0.5
Containers:
nginx:
Container ID:
Image: nginx
Image ID:
Port: <none>
Host Port: <none>
State: Waiting
Reason: ErrImagePull
Ready: False
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-mgq96 (ro)
Conditions:
Type Status
Initialized True
Ready False
ContainersReady False
PodScheduled True
Volumes:
default-token-mgq96:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-mgq96
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 56m default-scheduler Successfully assigned default/nginx to dev-control-plane
Normal BackOff 40m kubelet, dev-control-plane Back-off pulling image "nginx"
Warning Failed 40m kubelet, dev-control-plane Error: ImagePullBackOff
Warning Failed 13m (x3 over 40m) kubelet, dev-control-plane Failed to pull image "nginx": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nginx:latest": failed to copy: unexpected EOF
Warning Failed 13m (x3 over 40m) kubelet, dev-control-plane Error: ErrImagePull
Normal Pulling 13m (x4 over 56m) kubelet, dev-control-plane Pulling image "nginx"
当我进入kindest/node容器时,里面没有docker,不清楚KIND是怎么工作的,原来我理解它是将一个K8S集群部署到一个Docker容器中。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a644f8b61314 kindest/node:v1.19.0 "/usr/local/bin/entr…" About an hour ago Up About an hour 127.0.0.1:52301->6443/tcp dev-control-plane
$ docker exec -it a644f8b61314 /bin/bash
root@dev-control-plane:/# docker -v
bash: docker: command not found
在阅读了Kind文档后,我找不到像Minikube那样设置仓库镜像的选项。
顺便说一句,我正在Windows 10上使用最新的Docker Desktop beta。
3条答案
按热度按时间4szc88ey1#
首先使用
docker pull nginx
在本地系统中拉取映像,然后使用下面的命令将该映像加载到kind集群Kind使用containerd而不是docker作为运行时,这就是为什么docker没有安装在节点上。
或者,您可以使用crictl工具来拉取和检查kind节点中的图像。
2izufjch2#
我遇到了同样的问题,因为我在创建集群之前将
http_proxy
和https_proxy
导出到本地代理(127.0.0.1),该代理在集群中不可访问。在取消http(s)_proxy并重新创建集群之后,一切正常。f4t66c6m3#
因为其他的答案对我的情况没有帮助:在运行
kind create cluster
之前,需要设置http(s)_proxy
环境变量。只为docker resp. containerd设置环境在这里没有帮助: