OpenShift ImageStream指向的镜像是否为内部镜
2019-07-24 本文已影响10人
潘晓华Michael
Openshift内部镜像仓库
ImageStream是OpenShift中的一个特有的资源。在DeploymentConfig/BuildConfig中使用ImageStream和ImageStreamTag时经常会有这样的疑惑:究竟它指向的镜像有没有pull到OpenShift内部的镜像仓库呢?我们使用DeploymentConfig发布应用时,集群会从内部镜像仓库中pull镜像,还是从指向的外部镜像仓库中拉取?
大家来看一下下面这个例子:
$ oc import-image openshift/jenkins:v3.10 --from=docker.io/openshift/jenkins-2-centos7:v3.10 --confirm
猜一猜,以上这条命令是否会将镜像拉取到内部镜像仓库?
答案是否定的,内部镜像仓库并不会
拉取镜像本身,只是获取镜像的元数据,将创建的ImageStreamTag openshift/jenkins:v3.10
指向镜像docker.io/openshift/jenkins-2-centos7:v3.10
。这里的关键就是ImageStream[Tag]的一个配置项:referencePolicy.type。导入镜像时,referencePolicy.type默认为source。
所以如果需要将导入镜像到ImageStream[Tag],并将它自动拉取到内部镜像仓库,需要设置referencePolicy.type为local,在DeploymentConfig第一次部署拉取镜像时,镜像也会导入到私有镜像仓库中。
apiVersion: v1
kind: ImageStream
metadata:
...
tags:
- ...
referencePolicy:
type: Local
在使用oc import-image
时需要添加参数--reference-policy='local'
,如下
$ oc import-image openshift/jenkins:v3.10 --reference-policy='local' --from=docker.io/openshift/jenkins-2-centos7:v3.10 --confirm
或者是通过docker push
将镜像推送到镜像仓库
$ docker pull docker.io/openshift/jenkins-2-centos7:v3.10
$ docker tag docker.io/openshift/jenkins-2-centos7:v3.10 docker-registry-default.example.com/openshift/jenkins-2-centos7:v3.10
$ docker login -p `oc whoami -t` -e unused -u unused docker-registry-default.example.com
$ docker push docker-registry-default.example.com/openshift/jenkins-2-centos7:v3.10
参考文章:
https://austindewey.com/2018/12/09/a-word-about-openshift-imagestreams/