DockOne微信分享(七十七):用Harbor实现容器镜像仓库的管理和运维

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 本文讲的是DockOne微信分享(七十七):用Harbor实现容器镜像仓库的管理和运维【编者的话】本次分享主要讲述了在开发运维中的管理容器镜像方法。为了便于说明原理,较多地使用Harbor作为例子。
本文讲的是DockOne微信分享(七十七):用Harbor实现容器镜像仓库的管理和运维【编者的话】本次分享主要讲述了在开发运维中的管理容器镜像方法。为了便于说明原理,较多地使用Harbor作为例子。

内容主要包括:
  1. 开发和生产环境中镜像仓库的权限控制;
  2. 镜像远程同步(复制)的原理;
  3. 大规模应用镜像发布方式;
  4. 镜像删除和空间回收;
  5. Registry高可用性设计。

首先简单介绍一下Harbor项目。Harbor是由VMware中国研发团队负责开发的开源企业级Registry,可帮助用户迅速搭建企业级的Registry服务。该项目发布5多个月以来,深受用户喜爱,在GitHub获得了近1000个点赞星星和200多个Forks。有兴趣的朋友可以使用:  https://github.com/vmware/harbor  

容器应用的使用越来越普遍,容器最大优点就是开发运维一体化,通过容器镜像打包应用,使得开发、测试和发布都具有相同的运行环境,带来极大的便利。那么镜像在实际运维中处于怎样的地位呢?

我们先看看下面这张经典的Docker容器的生命周期图:
dockerLifeCycle.png

从图中可以看到,容器镜像的关联箭头最多,不言而喻,镜像技术就是容器的核心所在。概括地说,容器包含一静一动两部分:静态存放的镜像(images)和动态运行的containers。相应地,容器的开发运维主要涉及镜像管理和运行时(Runtime)管理两部分。本文主要和大家分享的是容器镜像管理的部分。

开发和生产环境中镜像仓库的权限控制

在企业中,通常有不同的开发团队来负责不同的应用项目,和源代码分项目管理一样,镜像也需要按照项目来存放和管理。由于团队中有不同的成员,如项目经理、产品经理、开发、测试和运维等人员,每人使用镜像的需求不同,因此可以根据角色分配相应的权限。

例如,测试人员通常只需要镜像的读权限(pull),开发人员需要读写权限(push/pull),项目经理除了拥有开发人员的权限之外,还可以增加和删除项目成员,设定他们的角色。

在Harbor Registry中,每个项目可有三种角色:项目管理员(project admin)、开发者(developer)和客人(guest)。某些项目,如放在Library中的公共镜像, 可以允许匿名访问,即用户不同Docker Login也可以访问,这样可以方便使用。在整个系统中,还设有系统管理员,具有维护镜像同步策略、用户增删等权限。

需要指出的是,在不同的环境中,某个成员的角色可以不同。例如,在开发环境的Registry中,运维人员一般不需要权限(或需要只读权限);而在生产环境中的Registry,运维人员就需要有读写权限。下图是Harbor的权限管理界面:
harbor3.png

镜像远程同步(复制)的原理

很多用户在开发、测试和运维中都使用同一个Registry,这样“简单粗暴”的方式比较适合小团队或简单的项目,其他情况最好使用多个Registry以区分不同的用途。如下图,容器镜像管理的参考流程。
imagelifeCycle.png

开发环境的Registry:主要由开发人员使用,镜像变化频繁。当开发完成后,通过CI系统生成稳定镜像,同步到测试Registry;

测试环境的Registry:主要由测试人员使用,镜像保持不变。当测试通过后,同步到准生产环境的Registry;

准生产环境的Registry:主要由测试和运维人员使用,镜像保持不变。当准生产环境试运行后,最后再同步生产环境的Registry;

生产环境的Registry:发布镜像到生产环境运行。

从开发到生产的整个过程中,实现容器镜像的Build-Ship-Run过程。Harbor可以提供Registry之间的镜像自动同步和复制功能,简化了管理。

大规模应用镜像发布方式

在实际生产运维的中,往往需要把镜像发布到几十或上百台集群节点上。这时,单个Registry已经无法满足大量节点的下载需求,因此要配置多个Registry实例做负载均衡。手工维护多个Registry实例上的镜像,将是十分繁琐的事情。Harbor可以支持一主多从的镜像发布模式,可以解决大规模镜像发布的难题。
masterSlave.png

只要往一台Registry上发布,镜像就像“仙女散花”般地同步到多个Registry中,高效可靠。

如果是地域分布较广的集群,还可以采用层次型发布方式,如从集团总部同步到省公司,从省公司再同步到市公司:
repli2.png

在同步过程中,如果源镜像已删除,Harbor会自动同步删除远端的镜像。在镜像同步复制的过程中,Harbor会监控整个复制过程,遇到网络等错误,会自动重试。

这是同步复制的监控画面:
harbor4.png

镜像删除和空间回收

Docker命令没有提供Registry镜像删除功能,日积月累,将会产生许多无用的镜像,占用大量存储空间。若要删除镜像并回收空间,需要调用docker registry API来完成,比较麻烦。Harbor提供了可视化的镜像删除界面,可以逻辑删除镜像。在维护状态下可以回收垃圾镜像的空间。

Registry高可用性设计。

Registry高可用性(HA)是多数生产系统需要关心的问题,基本要求就是没有单点故障。通常需要根据允许服务中断的时间,以及可以承受的成本和损失,来确定采用的技术。下面介绍3种HA的方案:
ha1.png

一种比较标准的方案,就是多个的Registry实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取。通过前置LB进来的请求,可以分流到不同的实例中去处理,实现了负载均衡,也避免了单点故障。

应该指出,实际中需要考虑的问题远比上述模型复杂。例如,共享存储的选取,用户Session在不同的实例上共享等等。用户可根据自己业务要求设计出不同的方案。Harbor将会推出基于Swift分布式存储,以及共享Session的方案(采用Redis)来满足用户的需求。

如果没有共享存储,另一种方案就是在两个节点间采用双主复制策略,互相复制镜像。即使有一个实例失效,另一个实例仍然可以提供服务,从而在一定程度上可以满足HA的需求。
ha2.png

第3中方案是利用已有的HA平台,如vSphere HA,配合分布式存储VSAN,可以实现Harbor的HA,具体架构见下图:
vsannew1.png

节点出现故障的时候,有vSphere自动切换到好的节点上,镜像数据不丢失。
vsannew2.png

我们以开源Harbor为例子,总结了Registry的使用场景和要点,希望对大家有帮助。欢迎大家使用Harbor和反馈意见,也可以加入Harbor开源项目群讨论。 Harbor的GitHub地址: https://github.com/vmware/harbor

Q&A

Q:Master-Slave的镜像架构中,如果Slave Registy中的镜像被删除了,会不会再次自动从Master Reg里面自动同步?
A:如果停止后再重新启动复制策略,可以同步被删除的镜像。
Q:对于多个投产地,多个仓库,哪种方式的高可用方案好么?第一种,共享存储存储可能会出现单点故障么?
A:共享存储只适合同一数据中心,多个产地延时太大,不适合共享存储。
Q:Registry之间同步是如何实现的?
A:Registry API。
Q:在存储这块考虑过提供插件方式可以调用外部模块,比如以插件方式支持s3这种对象存储?
A:Harbor支持其他存储方式,参见 Harbor文档

以上内容根据2016年8月18日晚微信群分享内容整理。分享人张海宁(Henry Zhang),VMware中国研发中心云原生应用首席架构师,Harbor开源企业级容器Registry项目负责人,Cloud Foundry中国社区最早的技术布道师之一。在VMware中国研发中心先后负责开源平台Cloud Foundry、大数据虚拟化、软件定义存储等领域的技术布道和解决方案推广。目前着重关注云原生应用的研发工作,内容包括Container、PaaS、IaaS等方面。DockOne每周都会组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesz,进群参与,您有想听的话题或者想分享的话题都可以给我们留言。

原文发布时间为:2016-08-21

本文作者:张海宁

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:DockOne微信分享(七十七):用Harbor实现容器镜像仓库的管理和运维

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
28天前
|
运维 Kubernetes 监控
提升运维效率:容器化技术在现代IT基础设施中的应用
本文将探讨容器化技术如何优化企业的IT基础设施,提高部署效率和资源利用率。我们将深入分析容器技术的优势、实现步骤以及在实际运维中的应用场景。通过实例展示,帮助读者更好地理解并应用这一前沿技术,助力企业实现高效运维。
|
3月前
|
运维 监控 Cloud Native
自动化运维的魔法书云原生之旅:从容器化到微服务架构的演变
【8月更文挑战第29天】本文将带你领略自动化运维的魅力,从脚本编写到工具应用,我们将一起探索如何通过技术提升效率和稳定性。你将学会如何让服务器自主完成更新、监控和故障修复,仿佛拥有了一本能够自动翻页的魔法书。
|
10天前
|
存储 数据库 Docker
正确删除容器和镜像的方式
【10月更文挑战第24天】本文介绍了在Docker中如何正确删除容器和镜像,包括停止容器、删除已停止容器、删除未被使用的镜像以及注意事项,如数据备份、依赖关系检查和权限问题。其他容器管理工具的操作类似,但命令和语法可能不同。
|
13天前
|
缓存 运维 Docker
容器化运维:Docker Desktop 占用磁盘空间过大?教你轻松解决!
Windows Docker Desktop 使用过程中,因镜像、容器数据及构建缓存的累积,可能导致磁盘空间占用过高。通过删除无用镜像与容器、压缩磁盘以及清理构建缓存等方法,可有效释放空间。具体步骤包括关闭WSL、使用`diskpart`工具压缩虚拟磁盘、执行`docker buildx prune -f`清理缓存等。这些操作能显著减少磁盘占用,提升系统性能。
119 4
|
8天前
|
运维 资源调度 调度
容器微服务运维
【10月更文挑战第16天】业务容器化后,运维需采用面向容器的新型平台,主要由镜像仓库、资源调度、容器调度、调度策略和服务编排组成。镜像仓库负责存储与分发容器镜像,支持权限控制、镜像同步和高可用性设计;资源调度解决不同环境下的机器部署问题;容器调度实现容器在主机上的合理分配;调度策略优化容器主机选择;服务编排则处理服务间的依赖关系和服务发现,支持自动扩缩容以适应业务需求变化。
|
26天前
|
运维 Prometheus 监控
提升运维效率:容器化技术与自动化工具的结合
在当今信息技术飞速发展的时代,运维工作面临着前所未有的挑战。为了应对这些挑战,本文将探讨如何通过结合容器化技术和自动化工具来提升运维效率。我们将介绍容器化技术的基本概念和优势,然后分析自动化工具在运维中的应用,并给出一些实用的示例。通过阅读本文,您将了解到如何利用这些先进技术来优化您的运维工作流程,提高生产力。
|
2月前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
148 3
|
28天前
|
Kubernetes 应用服务中间件 nginx
k8s学习--k8s集群使用容器镜像仓库Harbor
本文介绍了在CentOS 7.9环境下部署Harbor容器镜像仓库,并将其集成到Kubernetes集群的过程。环境中包含一台Master节点和两台Node节点,均已部署好K8s集群。首先详细讲述了在Harbor节点上安装Docker和docker-compose,接着通过下载Harbor离线安装包并配置相关参数完成Harbor的部署。随后介绍了如何通过secret和serviceaccount两种方式让Kubernetes集群使用Harbor作为镜像仓库,包括创建secret、配置节点、上传镜像以及创建Pod等步骤。最后验证了Pod能否成功从Harbor拉取镜像运行。
|
3月前
|
运维 Kubernetes 负载均衡
震惊!容器化运维竟藏如此大招,容器调度与服务编排让你的软件部署 “逆天改命”
【8月更文挑战第31天】在数字化时代,容器化技术革新了软件开发与运维方式,其高效、灵活及可移植的特点为企业应用部署提供了全新方案。容器调度与服务编排作为核心环节,通过优化资源分配、提升系统可靠性和可扩展性,实现了自动化管理。Kubernetes 等工具不仅简化了容器调度,还通过 Deployment、Service、Ingress 等资源对象实现了复杂应用架构的自动化运维,大幅提高了资源利用率和系统稳定性,减少了人工干预,加速了企业数字化转型。
44 2
|
3月前
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
233 5

热门文章

最新文章

相关产品

  • 容器镜像服务