tnblog
首页
视频
资源
登录

OKD ImageStream

6266人阅读 2021/8/25 15:02 总访问:3467594 评论:0 收藏:0 手机
分类: 云产品

OKD ImageStream

ImageStream


ImageStream是OpenShift独有的一种对象,在Kubernetes中没有对应的对象。它主要目标是简化容积镜像管理,机制就是通过使用标签实现镜像指针。ImageStream包括一系列”标签指针“指向实际的容器,例如下图有latest、8和7版本的容器指针,它们分别指向了不同位置和版本的容器镜像。ImageStream本身并不保存镜像,而是只保存容器元数据和”标签指针“。
(可以简单理解为:存放image名称与image地址的一个键值队集合)

ImageStreamTag


内部镜像链接指向外部镜像链接的键值对

ImageStream简单实践


首先我们登录,并拉取一个helloword的镜像

  1. oc login -u admin -p admin
  2. docker pull mcr.microsoft.com/mcr/hello-world


然后我们创建项目

  1. oc new-project is-project


我们可以用以下oc import-image命令和oc tag命令创建一个存放在is-project下的ImageStream,并让它指向外部Image,这个外部Image就是mcr.microsoft.com/mcr/hello-world:latest

  1. oc import-image is-project/myhelloword:latest --from="mcr.microsoft.com/mcr/hello-world:latest" --confirm
  2. oc tag mcr.microsoft.com/mcr/hello-world:latest is-project/myhelloword:latest


然后我们可以查看这个ImageStream和ImageStreamTag的详细信息。


名为myhelloword的ImageSteamTag指向的是DockerImage类型的External Image,外部镜像URL(名称+Tag)是mcr.microsoft.com/mcr/hello-world:latest
这个ImageSteam的mytag实际指向的外部Image是由dockerImageReference所指的sha256 ID,即下面的字符串。在生成ImageStreamTag的时候,OpenShift是使用了mcr.microsoft.com/mcr/hello-world:latest获得的该Image的sha256 ID。这样当在build或deployment命令中引用ImageStreamTag来创建Pod的时候,实际上使用的是用sha256 ID代表的Image。

  1. mcr.microsoft.com/mcr/hello-world@sha256:92c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a


1.每次通过ImageSteamTag使用Image的时候使用的是source类型的referencePolicy,即直接从source访问Image。因此如果当时网络不通,则无法访问该Image。
2.当生成ImageSteamTag指向sha256 ID后,修改升级外部镜像的tag就不再影响ImageSteamTag了,也就是说即便把外部镜像从mcr.microsoft.com/mcr/hello-world:latest改为mcr.microsoft.com/mcr/hello-world:v1,只要sha256 ID没有变化,OpenShift的ImageSteamTag就可以继续使用该外部镜像。
3.当外部镜像发生变化后需要自动更新ImageSteamTag对应的sha256 ID,那么可以使用oc tagoc import-image命令的-–scheduled=true参数,它会在YAML中设置importPolicy: {scheduled: true}
4.ImageStream是OpenShift扩展的对象,因此OpenShift的Build、DeploymentConfig等对象可以直接使用它。如果需要在Kubernetes的RC、Pod等对象使用ImageStream,可执行以下的命令启动ImageStream的本地名称查询功能。该命令将把ImageStream的Imagestream.spec.lookupPolicy.local设为true。

  1. oc set image-lookup <<IMAGESTREAM>>


就拿我们刚刚的举例,当我们不开本地名称查询

  1. oc run myhelloword --image=myhelloword
  2. oc get pod -w


下面在使用了set image-lookup后就可通过--image=myhelloword使用该镜像了。

  1. oc delete dc myhelloword
  2. oc set image-lookup myhelloword
  3. oc run myhelloword --image=myhelloword
  4. oc get pod


我们可以看到它已经执行完成了,最后清理资源。

  1. oc delete dc myhelloword

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术