openshift内部镜像仓库Registry组件默认是非持久化的。之前重启过一次openshift集群,导致重启前通过s2i构建的镜像都不能用了。所以需要持久化openshift内部镜像仓库。
有状态的应用如果未配置持久化卷,容器一旦意外退出,容器内部所有的镜像、配置、数据都将消失殆尽。
本部分参考《开源容器云OpenShift》一书129-133页以及官方文档https://docs.openshift.org/latest/install_config/registry/index.html部分的内容。
检查挂载点
- 以集群管理员身份登录Openshift,切换到default工程,查看Registry的容器状态
# oc project default
# oc get pod
- 查看Registry组件的Deployment Config关于Volume的定义
# oc volumes dc/docker-registry --all
Registy已经创建了一个Volume Mounts对象registry-storage,挂载点指向了/registry目录,使用的是empty directory卷。要做的就是给registry-storage挂载点挂载一个持续化的后端。
备份数据
之前在执行S2I的时候往Registry推送了不少镜像,需要备份这些镜像。
- 查看Registry容器内/registry目录下文件大小
这里指令中需要替换pod的名称为当前docker-registry pod的名称。
# oc rsh docker-registry-1-fg6kd 'du' '-sh' '/registry'