为什么docker在我使用Kubernetes时再次下载相同的图像

为什么docker在我使用Kubernetes时再次下载相同的图像,docker,kubernetes,Docker,Kubernetes,我在一个没有互联网的隔离环境中使用kbuernetes&docker,我总是在其他机器中拉取映像并保存到.tar文件,然后加载到隔离环境,但有时kubernetes的Pod无法成功启动,并说Pod是拉取映像,但网络不正常。 但是我检查docker的图像,图像已经加载,为什么我还需要再次拉相同的图像 这是docker的图像,MYSQL的图像已加载: [root@localhost kubecfg]# docker images REPOSITORY

我在一个没有互联网的隔离环境中使用kbuernetes&docker,我总是在其他机器中拉取映像并保存到.tar文件,然后加载到隔离环境,但有时kubernetes的Pod无法成功启动,并说Pod是拉取映像,但网络不正常。 但是我检查docker的图像,图像已经加载,为什么我还需要再次拉相同的图像

这是docker的图像,MYSQL的图像已加载:

[root@localhost kubecfg]# docker images
REPOSITORY                                                       TAG                 IMAGE ID            CREATED             SIZE
quay.io/kubernetes-ingress-controller/nginx-ingress-controller   0.12.0              4a9cd8a2008a        3 weeks ago         230.5 MB
docker.io/mysql                                                  latest              5195076672a7        3 weeks ago         371.4 MB
gcr.io/google_containers/kube-apiserver-amd64                    v1.9.2              7109112be2c7        11 weeks ago        210.4 MB
这是kubernetes的错误日志

[root@localhost kubecfg]# kubectl describe pod mysql-vmwdw
Name:           mysql-vmwdw
Namespace:      default
Node:           localhost.localdomain/192.168.88.129
Start Time:     Mon, 02 Apr 2018 14:14:07 +0800
Labels:         app=mysql
Annotations:    <none>
Status:         Running
IP:             192.168.0.61
Controlled By:  ReplicationController/mysql
Containers:
  mysql:
    Container ID:   docker://9aa3128eaa1f330dfd0d6ebf732dca5a99ad49d7d6d4002a2384bdb03e056d7d
    Image:          docker.io/mysql
    Image ID:       docker-pullable://docker.io/mysql@sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c
    Port:           3306/TCP
    State:          Waiting
      Reason:       ImagePullBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Tue, 10 Apr 2018 14:56:04 +0800
      Finished:     Wed, 11 Apr 2018 08:56:04 +0800
    Ready:          False
    Restart Count:  3
    Environment:
      MYSQL_ROOT_PASSWORD:  123456
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-s7kq2 (ro)
Conditions:
  Type           Status
  Initialized    True 
  Ready          False 
  PodScheduled   True 
Volumes:
  default-token-s7kq2:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-s7kq2
    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   SuccessfulMountVolume   19m                 kubelet, localhost.localdomain  MountVolume.SetUp succeeded for volume "default-token-s7kq2"
  Normal   SandboxChanged          19m (x12 over 19m)  kubelet, localhost.localdomain  Pod sandbox changed, it will be killed and re-created.
  Warning  FailedCreatePodSandBox  19m (x12 over 19m)  kubelet, localhost.localdomain  Failed create pod sandbox.
  Warning  Failed                  9m (x6 over 18m)    kubelet, localhost.localdomain  Failed to pull image "docker.io/mysql": rpc error: code = Unknown desc = Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/mysql/images. You may want to check your internet connection or if you are behind a proxy.
  Warning  Failed                  4m (x41 over 18m)   kubelet, localhost.localdomain  Error: ImagePullBackOff
[root@localhostkubecfg]#kubectl描述pod mysql vmwdw
名称:mysql-vmwdw
名称空间:默认值
节点:localhost.localdomain/192.168.88.129
开始时间:2018年4月2日星期一14:14:07+0800
标签:app=mysql
注释:
状态:正在运行
IP:192.168.0.61
控制者:ReplicationController/mysql
容器:
mysql:
容器ID:docker://9aa3128eaa1f330dfd0d6ebf732dca5a99ad49d7d6d4002a2384bdb03e056d7d
图片:docker.io/mysql
图像ID:docker-pullable://docker.io/mysql@sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c
端口:3306/TCP
国家:等待
原因:图像拉回
最后状态:终止
原因:错误
退出代码:1
开始时间:2018年4月10日星期二14:56:04+0800
完成日期:2018年4月11日星期三08:56:04+0800
就绪:错误
重新启动计数:3
环境:
MYSQL\u ROOT\u密码:123456
挂载:
/来自default-token-s7kq2(ro)的var/run/secrets/kubernetes.io/serviceCount
条件:
类型状态
初始化为True
准备错误
播客预定为真
卷数:
default-token-s7kq2:
类型:Secret(由Secret填充的卷)
SecretName:default-token-s7kq2
可选:false
QoS等级:最佳努力
节点选择器:
容差:node.kubernetes.io/未就绪:不执行300秒
node.kubernetes.io/不可访问:不执行300秒
活动:
从消息中键入原因年龄
----     ------                  ----                ----                            -------
正常成功装入卷19m kubelet,localhost.localdomain装入卷。卷“default-token-s7kq2”的安装成功
普通沙盒更改19m(x12超过19m)kubelet,localhost.localdomain Pod沙盒更改,它将被杀死并重新创建。
警告FailedCreatePodSandBox 19m(x12超过19m)kubelet,localhost.localdomain创建pod sandbox失败。
警告失败9m(x6超过18m)kubelet,localhost.localdomain未能提取映像“docker.io/mysql”:rpc错误:code=Unknown desc=尝试连接到时网络超时https://index.docker.io/v1/repositories/library/mysql/images. 您可能需要检查您的internet连接,或者您是否支持代理。
警告失败4m(x41超过18m)kubelet,localhost.localdomain错误:ImagePullBackOff
它显示:“未能拉取图像”docker.io/mysql“:rpc错误:code=Unknown desc=尝试连接到时网络超时。您可能需要检查internet连接或是否在代理后面。”


我已经加载了图像,为什么docker会再次加载相同的图像?我应该如何解决问题?

不清楚指定的
imagePullPolicy
是什么。在您的情况下,它应该是
永不


您正在为图像使用
:最新的
标记。当图像标记为最新时,kubernetes会将
imagePullPolicy
设置为
始终
。有关详细信息


您可以将标记更改为其他内容(例如,
docker.io/mysql:8.0
),或者,在您创建部署时,您只需将自己指定为
imagePullPolicy

 kubectl run mysql --image=docker.io/mysql --imagePullPolicy=Never
应该解决这个问题。或者,您可以在部署的
yaml
规范中将
imagePullPolicy
设置为
Never
IfNotPresent
,以修复此错误