[运维]5.镜像本地存在但仍然从网络拉取的问题

在deployment.yaml中设置image 为k8s.io/tomcat:8.5-jdk8,且这个镜像在本地存在:

复制代码
[root@node1 tmp]# ctr -n k8s.io images list | grep tomcat
docker.io/kubeguide/tomcat-app:v1                                                                                                                                            application/vnd.docker.distribution.manifest.v2+json      sha256:f2c465e01647be9a35c914205dc58912130e915426559cb60a7d12e9f4cc455e 352.5 MiB linux/amd64                                                                  io.cri-                               
k8s.io/tomcat:8.5-jdk8                                                                                                                                                       application/vnd.docker.distribution.manifest.v2+json      sha256:67f6f1f8e51fa8fdceb056c5b889b887ab8e00094e33fa981e35344511e937aa 151.6 MiB linux/amd64                                                                  io.cri-containerd.image=manag    

但是在创建pod的过程中仍然从远处拉取,造成pod启动失败:

复制代码
Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  30s               default-scheduler  Successfully assigned default/tomcat-749d98df56-hmlt9 to node1
  Normal   Pulled     2s (x5 over 29s)  kubelet            Container image "k8s.io/tomcat:8.5-jdk8" already present on machine
  Warning  Failed     2s (x5 over 29s)  kubelet            Error: failed to get image from containerd "sha256:6113f55245f6bb372e59de99ee3e9d848eef0bf64a07fcaf80e015f60ae8db08": image "docker.io/library/tomcat:8.5-jdk8": not found

解决方法:

发现这个问题和K8S的工作方式有关,Kubernetes 默认使用 docker.io/library/ 作为镜像仓库的前缀。如果您 Deployment 或 Pod 的 image 中只写了 tomcat:8.5-jdk8 或 docker.io/tomcat:8.5-jdk8,Kubernetes 实际上会自动补全为 docker.io/library/tomcat:8.5-jdk8。

所以将本地镜像的名称通过tag改为docker.io/library/tomcat:8.5-jdk8:

复制代码
ctr -n k8s.io images tag docker.io/tomcat:8.5-jdk8 docker.io/library/tomcat:8.5-jdk8

并将deployment中的镜像名称改为以上名称,则pod创建成功。

相关推荐
邪修king1 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
运维行者_3 小时前
应用性能监控怎么选?从调用链到用户体验的五个能力维度
运维·服务器·数据库·人工智能·mysql·性能优化·应用性能监控
考虑考虑7 小时前
nginx路由重写
运维·后端·自动化运维
Zenova EdgeOS9 小时前
Linux 内核日志 dmesg 进阶实战:从现场过滤到持久化闭环
linux·运维·服务器
郝亚军9 小时前
ec_private.pem的生成方法
linux·运维·服务器
NendoZen10 小时前
Arch Linux解决Grub无法SAVEDEFAULT问题(uki启动问题)
linux·运维·服务器
Elastic 中国社区官方博客11 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
忆挽篱笙歌11 小时前
进程控制管理
linux·运维·服务器
fengkai454512 小时前
3、Kubernetes的Namespace&Contexts&Pod&YAML格式
运维·容器·kubernetes·k8s·namespace·yaml·pod
戴西软件13 小时前
制造研发中的AI视觉与仿真:戴西工程图纸智能审图智能体、戴西3DViz_CAE AI集成与戴西3DViz_CAD AI集成
大数据·运维·人工智能·3d·自动化·制造·rpa