前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >openshift/origin工作记录(7)——持久化openshift内部镜像仓库

openshift/origin工作记录(7)——持久化openshift内部镜像仓库

作者头像
胡了了
发布2019-05-26 14:54:12
1K0
发布2019-05-26 14:54:12
举报

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'

需要备份这些数据,通过oc rsync命令,将容器中某个目录的数据同步到宿主机上。

# mkdir /root/backup
# cd /root/backup
# oc rsync docker-registry-1-fg6kd:/registry .
这里写图片描述
这里写图片描述

备份完成了会有提示。

创建存储

采用NFS作为后端的存储。

# mkdir -p /exports/images
# yum -y install nfs-utils rpcbind
# chown nfsnobody:nfsnobody /exports/ -R
# echo "/exports/images *(rw,sync,all_squash)" >> /etc/exports
# systemctl start rpcbind
# systemctl enable rpcbind
# exportfs -r
# systemctl start nfs-server
# systemctl enable nfs-server
  • 查看nfs-server端口,这里没做修改,采用的都是默认配置
这里写图片描述
这里写图片描述
  • 修改/etc/sysconfig/iptables

添加以下规则

-A INPUT -p tcp --dport 2049 -j ACCEPT
-A INPUT -p udp --dport 2049 -j ACCEPT
  • 重启iptables
# systemctl restart iptables
  • 测试挂载该NFS共享目录,并尝试创建一个文件
# mount 10.126.3.207:/exports/images /mnt/
# touch /mnt/test
# ls /mnt
# rm -f /mnt/test
# umount /mnt
这里写图片描述
这里写图片描述

创建持久化卷

  • 根据上创建的NFS信息,创建持久化卷。在Master上将如下JSON保存为images-pv.json
{
  "apiVersion": "v1",
  "kind": "PersistentVolume",
  "metadata": {
     "name": "images"
  },
  "spec": {
     "capacity": {
        "storage": "80Gi"
     },
     "accessModes": [ "ReadWriteOnce" ],
     "nfs": {
        "path": "/exports/images",
        "server": "10.126.3.207"
     },
     "persistentVolumeReclaimPolicy": "Retain"
  }
}
  • 创建持久化卷
# oc create -f images-pv.json
  • 查看持久化卷
# oc get pv
这里写图片描述
这里写图片描述

我分配了80G的存储空间。

创建持久化卷请求

在Master上将一下JSON存储为images-pvc.json,声明需要80GB的后端存储,访问方式为ReadWriteOnce。

{
  "apiVersion": "v1",
  "kind": "PersistentVolumeClaim",
  "metadata": {
    "name": "docker-registry-claim"
  },
  "spec": {
    "accessModes": [  
      "ReadWriteOnce"    
    ],
    "resources": {
      "requests": {
        "storage": "80Gi"
      }
    }
  }
}
  • 创建持久化卷请求
# oc create -f images-pvc.json
  • 查看持久化卷请求和持久化卷的状态
这里写图片描述
这里写图片描述

持久化卷请求和持久化卷已连接起来。

关联持久化卷请求

  • 将备份的数据恢复到前文创建的NFS目录中
# mv /root/backup/registry/* /exports/images/
# chown nfsnobody:nfsnobody /exports/ -R
  • 为Registry的容器定义添加持久化卷请求,并与挂载点registry-storage关联
# oc volume dc/docker-registry --add --name=registry-storage -t pvc --claim-name=docker-registry-claim --overwrite

Deployment Config的容器定义修改后,Openshift会创建新的容器实例。等待容器运行起来。

  • 验证
这里写图片描述
这里写图片描述

6.1G的数据已经恢复,也改成了持久化存储。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年01月04日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 检查挂载点
  • 备份数据
  • 创建存储
  • 创建持久化卷
  • 创建持久化卷请求
  • 关联持久化卷请求
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档