kubernetes集群拉取docker镜像失败

Han*_*tsy 10 docker kubernetes

我尝试使用KinD作为 Minikube 的替代品在我的本地计算机中引导 K8S 集群。

\n

集群创建成功。

\n

但是当我尝试从映像创建一些 Pod/部署时,它失败了。

\n
$ kubectl run nginx --image=nginx\n$ kubectl run hello --image=hello-world\n
Run Code Online (Sandbox Code Playgroud)\n

几分钟后,用于get pods获取失败状态。

\n
$ kubectl get pods\nNAME    READY   STATUS             RESTARTS   AGE\nhello   0/1     ImagePullBackOff   0          11m\nnginx   0/1     ImagePullBackOff   0          22m\n
Run Code Online (Sandbox Code Playgroud)\n

恐怕这是中国的另一个全球防火墙问题。

\n
kubectl describe pods/nginx\nName:         nginx\nNamespace:    default\nPriority:     0\nNode:         dev-control-plane/172.19.0.2\nStart Time:   Sun, 30 Aug 2020 19:46:06 +0800\nLabels:       run=nginx\nAnnotations:  <none>\nStatus:       Pending\nIP:           10.244.0.5\nIPs:\n  IP:  10.244.0.5\nContainers:\n  nginx:\n    Container ID:\n    Image:          nginx\n    Image ID:\n    Port:           <none>\n    Host Port:      <none>\n    State:          Waiting\n      Reason:       ErrImagePull\n    Ready:          False\n    Restart Count:  0\n    Environment:    <none>\n    Mounts:\n      /var/run/secrets/kubernetes.io/serviceaccount from default-token-mgq96 (ro)\nConditions:\n  Type              Status\n  Initialized       True\n  Ready             False\n  ContainersReady   False\n  PodScheduled      True\nVolumes:\n  default-token-mgq96:\n    Type:        Secret (a volume populated by a Secret)\n    SecretName:  default-token-mgq96\n    Optional:    false\nQoS Class:       BestEffort\nNode-Selectors:  <none>\nTolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s\n                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s\nEvents:\n  Type     Reason     Age                From                        Message\n  ----     ------     ----               ----                        -------\n  Normal   Scheduled  56m                default-scheduler           Successfully assigned default/nginx to dev-control-plane\n  Normal   BackOff    40m                kubelet, dev-control-plane  Back-off pulling image "nginx"\n  Warning  Failed     40m                kubelet, dev-control-plane  Error: ImagePullBackOff\n  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\n  Warning  Failed     13m (x3 over 40m)  kubelet, dev-control-plane  Error: ErrImagePull\n  Normal   Pulling    13m (x4 over 56m)  kubelet, dev-control-plane  Pulling image "nginx"\n
Run Code Online (Sandbox Code Playgroud)\n

当我进入kindest/node容器时,但里面没有docker。不确定 KIND 是如何工作的,最初我理解它是将 K8S 集群部署到 Docker 容器中。

\n
$ docker ps\nCONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                       NAMES\na644f8b61314        kindest/node:v1.19.0   "/usr/local/bin/entr\xe2\x80\xa6"   About an hour ago   Up About an hour    127.0.0.1:52301->6443/tcp   dev-control-plane\n\n$ docker exec -it  a644f8b61314  /bin/bash\nroot@dev-control-plane:/# docker -v\nbash: docker: command not found\n
Run Code Online (Sandbox Code Playgroud)\n

阅读 Kind 文档后,我找不到像 Minikube 那样设置存储库镜像的选项。

\n

顺便说一句,我在 Windows 10 上使用最新的 Docker Desktop beta。

\n

Arg*_*dhu 17

首先使用在本地系统中拉取映像docker pull nginx,然后使用以下命令将该映像加载到种类集群

kind load docker-image nginx --name kind-cluster-name 
Run Code Online (Sandbox Code Playgroud)

Kind使用containerd而不是docker作为运行时,这就是为什么docker没有安装在节点上。

或者,您可以使用crictl工具拉取并检查 kind 节点内的图像。

crictl pull nginx
crictl images
Run Code Online (Sandbox Code Playgroud)