立即咨询

电话咨询

微信咨询

立即试用
商务合作

业务容器化改造实践(二)

2019-09-18

在上一篇文章《业务容器化改造实践(一)》中,我们讲到了业务容器化改造的思路和方案,业务容器化改造主要是从三个方面进行:进行业务微服务拆分、业务发布流程自动化和构建容器云管理平台。同时介绍了方案中选用的技术或工具,使用Kubernetes构建容器平台,用Harbor构建镜像仓库,用Gitlab作为代码仓库,用Jenkins作为CI/CD工具集。

本篇文章用于介绍利用Rancher、Harbor构建Kubernetes集群和私有镜像仓库,共同组成容器云管理平台,后续将以此平台为基础实施业务的容器化改造。

容器云管理平台的方案及规划

容器云管理平台的方案架构

我们选择Kubernetes作为容器平台,除了官方开源的Kubernetes平台之外,各大公有云厂商也都推出了公有云版本的Kubernetes平台,比如:阿里云的ACK(Aliyun Container Service for Kubernetes)、腾讯云的TKE(Tencent Kubernetes Engine)、华为云的CCE(Cloud Container Engine)、谷歌的GKE(Google Kubernetes Engine)、亚马逊的EKS(Amazon Elastic Container Service for Kubernetes)、微软的AKS(Azure Kubernetes Service)等。还有一批厂商推出了可私有部署的kubernetes平台或管理平台,比如:IBM的ICP(IBM Cloud Private)和Rancher公司的RKE(Rancher Kubernetes Engine)都是可以私有部署的Kubernetes平台。另外Rancher公司的Rancher产品是一款Kubernetes的管理平台,通过该平台我们可以在私有的物理机、虚拟机或者公有云的云主机上快速安装部署Kubernetes平台,也可以直接接管公有云厂商提供的公有云版本的Kubernetes集群。

无论是使用公有云的Kubernetes平台还是自建私有的Kubernetes平台,其技术架构基本上一致,都是以服务器层为基础,在其上构建Kubernetes平台,利用命令行或者web界面调用其中封装好的API接口来操纵和使用Kubernetes集群。二者的区别主要是公有云厂商提供了所有的IaaS层资源,用户在其上购买云主机,一键部署Kubernetes集群,然后使用,不用关心底层的实现和维护问题,同时公有云厂商提供了完善的配套工具和解决方案:如监控、日志、镜像仓库、应用商店等;而自建私有的Kubernetes平台,需要用户自己准备相关的服务器,然后在其上安装Kubernetes集群,再根据需要在其上搭建配套的监控、日志、镜像仓库、应用商店等,同时用户需要根据实际情况去维护自下而上所有的系统和服务。

上图是容器云管理平台的方案架构,我们利用Rancher自建私有的Kubernetes平台,同时利用Harbor搭建私有镜像仓库,最终建好的容器云管理平台主要由四层组成:第一层为基础设施层,包含了服务器、存储、网络等基础资源,其中服务器可以是物理机,基于VMware、OpenStack、CloudStack的虚拟机,甚至是来自公有云的云主机。第二层是容器基础设施层,即docker层,是在服务器主机的操作系统上安装Docker,将底层的环境和资源容器化,形成可以供容器使用的计算资源、存储资源、网络资源等。第三层应用编排和资源调度层,即Kubernetes层,利用Rancher构建Kubernetes平台,将Docker层的资源调度起来,同时可以编排容器,决定容器可以运行几个副本,在哪台主机上运行,遇到压力峰谷时自动扩缩容。最上面一层是应用管理层,即用户可以通过界面对整个平台进行管理,管理台中同时可以提供配套的管理工具,如:CI/CD工具集、镜像仓库、应用商店、监控、日志、多租户管理等。

容器云管理平台的规划

首先明确一下我们需要搭建的内容:一套Kubernetes平台、一套私有镜像仓库、一套CI/CD工具集、一套代码仓库。其中CI/CD工具集和代码仓库可以直接在Kubernetes平台中运行,因此不必单独搭建。为了方便管理企业自身的业务镜像,同时搭建Kubernetes平台的时候就已经用到很多镜像,所以私有的镜像仓库可以独立部署。利用Rancher搭建Kubernetes平台的时候,Rancher管理台自身可以作为一个单独的容器来运行,也可以先用Rancher的RKE搭建一套Kunernetes集群,在集群中运行高可用的Rancher管理台。

Kubernetes集群中,部署容器应用时,如果涉及到应用数据的持久化,一般可以采用给容器挂载外部目录的方式来实现,即将外部的目录(来自宿主机的目录,或者是NFS等存储)映射到容器中的目录上,容器中的数据就可以存储到外部的目录中,从而实现了数据的持久化。考虑到容器可能会在任意的一个宿主机上运行,只要容器启动就需要访问到对应的目录,因此不能直接使用宿主机操作系统上的目录,而要使用一个所有宿主机都能够访问到的共享的目录或存储。解决方案有多种,可以使用基于宿主机本地硬盘的分布式存储(如Ceph),可以使用外部的存储设备(如NFS等),或者使用云厂商提供的云硬盘。我们这里采用NFS的方式来提供共享的存储。

因此,我们使用一台服务器来运行私有镜像仓库和Rancher管理台,三台服务器运行Kunernetes集群,服务器外接NFS共享存储,在Kubernetes集群中运行Jenkins、Gitlab以及业务应用。最终容器云管理平台的规划如下:

使用Rancher创建Kubernetes集群

服务器及操作系统准备

准备四台服务器,安装好Linux操作系统,Linux内核要求在3.10以上,推荐的操作版本为:RedHat/CentOS 7.4以上、Ubuntu 16.04以上。

事先规划好主机名、IP,以及Rancher管理台和Harbor镜像仓库的域名,并在/etc/hosts中或DNS中做好配置。

假设Rancher管理台的域名为rancher.yuandingit.com,Harbor镜像仓库的域名为harbor.yuandingit.com 。

安装 Docker

所有服务器上均安装Docker,目前Rancher及Kubernetes支持的docker版本有操作系统自带的docker 1.13,或者docker-ce 17.03、18.06、18.09等。

以上为笔者编写本文时查询的结果,未来可能有变化,具体的可自行查询官方文档进行确认。下面为在CentOS操作系统中安装docker-ce的方法,我们使用清华大学的YUM源进行安装。

安装 Rancher Server

本次规划中,Rancher Server和Harbor在一台服务器上,由于二者均需要使用80和443端口,因此可以将Rancher Server的端口调整为8080和8443,为了保证Rancher Server的数据持久化,可以挂在本地的目录给Rancher Server的容器,因此单容器运行Rancher Server管理台的命令如下:

成功运行之后,Rancher Server将以单容器的形式在主机上运行,可以通过https://xx.xx.xx.xx:8443 或者 https://rancher.yuandingit.com:8443 访问Rancher Server的管理台。

登录到Rancher Server中只有,可以创建Kubernetes集群,在添加集群中选择“自定义”,之后可根据节点的角色,复制相关的命令到节点上执行即可。

部署Harbor镜像仓库

安装 Harbor

Harbor镜像仓库由一系列服务组成,主要包含镜像仓库、数据库、门户、代理等,这些服务均以容器的形式运行。Harbor使用的是docker-compose进行编排,因此我们需要安装docker-compose和harbor。

docker-compose是二进制的命令,直接将命令的路径添加到PATH即可使用。harbor软件包解压后需要修改harbor.cfg文件的配置,主要修改镜像仓库的域名地址(hostname)及密码(harbor_admin_password)

配置文件中的hostname为harbor镜像仓库的地址,该地址也是该镜像仓库中镜像名称的前缀,比如配置为:harbor.yuandingit.com 。

配置完成后可按照如下方式执行安装:

# 执行install.sh脚本进行安装,如果需要同时安装chart包管理和镜像扫描功能,可以加对应的参数

./install.sh --with-chartmuseum --with-clair

安装完成后,会启动若干个容器,占用操作系统的80、443、4443端口,可以通过https://xx.xx.xx.xx 或者 https://harbor.yuandingit.com 访问镜像仓库的管理台。

使用 Harbor

如果harbor采用http协议对外提供服务,其他节点在操作系统级别访问镜像仓库时,需要在本地的docker中配置insecure-registries参数,将镜像仓库添加到不安全的仓库列表中,之后才能正常使用该镜像仓库中的镜像。

# 修改 /etc/docker/daemon.json 文件,加入一行 "insecure-registries": ["harbor.yuandingit.com"],最终文件内容如下:

{

"insecure-registries": ["harbor.yuandingit.com"]

}

# 重启docker进程  

systemctl daemon-reload && systemctl restart docker

Harbor镜像仓库采用的是项目管理,即一个Registry中拥有多个项目,每个项目中拥有多个仓库(Repository),每个镜像仓库拥有多个标签(Tag),因此在使用harbor私有镜像仓库之前,需要在仓库中建立项目。登录Harbor之后,点击“新建项目”→填写项目名称,勾选访问级别。

Harbor私有镜像仓库中镜像的命名格式为:镜像仓库地址/项目名称/仓库名称:标签 ,比如镜像 harbor.yuandingit.com/test/test-image:v1.0 的各部分组成为:

镜像仓库地址:harbor.yuandingit.com

项目名称:test

仓库名称:test-image

标签:v1.0

在操作系统上,常用的镜像操作命令如下,供参考:

# 制作名称符合要求的镜像:假设为 harbor.yuandingit.com/test/test-image:v1.0

docker build -t harbor.yuandingit.com/test/test-image:v1.0 .

# 将已有镜像重命名为符合要求的镜像  

docker tag source-image:v1 harbor.yuandinit.com/test/test-image:v1.0

# 登录harbor私有镜像仓库,输入用户名和密码

docker login harbor.yuandingit.com

# 上传docker镜像  

docker push harbor.yuandinit.com/test/test-image:v1.0  

# 下载使用镜像  

docker pull harbor.yuandinit.com/test/test-image:v1.0

Rancher 访问 Harbor

Rancher与Harbor配套使用时,由于Harbor具有用户名密码认证,Rancher不能直接从Harbor镜像仓库下载镜像。

有两种方式解决此问题:一种是把Harbor中建立的项目设置为“公开”,避免进行访问验证,推荐在测试环境使用;另外一种是在Rancher中建立对应的Harbor镜像仓库的凭证secret,但是该配置只能针对某个命名空间或某个项目,每个命名空间都需要设置,推荐在生产环境使用。

配置secret也有两种方式,具体如下:

通过Rancher控制台设置镜像仓库secret的方法为,进入Kubernetes集群的一个项目中,点击“资源”→“镜像库凭证”→“添加镜像库凭证”→填写名称、镜像仓库地址、用户名和密码。

或者通过如下的命令创建:

# kubectl create secret docker-registry \  

# harbor-yuandingit-com \                             # secret的名称  

# --namespace=cicd \                                 # secret所属的命名空间  

# --docker-server=harbor.yuandingit.com \      # harbor私有镜像仓库的地址  

# --docker-username=admin \                    # harbor私有镜像仓库的用户名  

# --docker-password=xxxxxx                        # harbor私有镜像仓库的密码  

# --docker-email=xxx@xxx.com                      # 邮箱,必须填写

kubectl create secret docker-registry \  

harbor-yuandingit-com \  

--namespace=cicd \  

--docker-server=harbor.yuandingit.com \  

--docker-username=admin \  

--docker-password=xxxxxx \  

--docker-email=xxx@xxx.com

至此,我们在所有节点上安装了docker,安装了Rancher并创建了Kubernetes集群,同时还安装了Harbor私有镜像仓库,最基础的容器云管理平台已经搭建完成。后续我们将以此为基础安装Jenkins和Gitlab,并构建CI/CD流水线,实现业务发布流程的自动化,请继续关注。

更多产品了解

欢迎扫码加入云巴巴企业数字化交流服务群

产品交流、问题咨询、专业测评

都在这里!

 

热门数字化产品

Tita OKRs-E企业目标管理平台拥抱人员管理新时代,人与组织融为一体,管理的内核是激活人心,实现企业的可持续发展。⼀个完整的⽬标管理框架,包含⽬标制定、⽬标达成检验,以及达成关键结果的具体执⾏计划。
纷呈科技电商开票软件纷呈科技电商开票软件实现多平台店铺订单一站式自动开票,无需托管税盘,企业自行管理,自动同步店铺订单及订单开票信息,在线批量、自动完成订单开票,自动回传发票至各电商平台,买家实时下载,覆盖所以税盘类型,多种模式操作,可自动、批量、单个实现订单开票。
航信云享·票据管理系统航信云享·票据管理系统为全量票据收集,建立企业全量票据中心。自动处理价格、折扣、税率和合计等发票信息,大大减少人工处理的误差,提高了工作效率。对企业的票据管理进行系统化、统一化的管理,提高了票据管理的效率和准确性,为企业节省了时间和人力成本。
晨科布草管理系统晨科布草管理系统,为酒店布草洗涤管理提供从交接、跟踪、生命周期管理等流程;批量扫描识别,使用方便快捷,提高工作效率和经济效益,节约人员费用支出,降低成本;记录客户资料及洗衣统计,生成各类报表,可随时查询和打印信息。
小望电商通小望电商通,全面数字化的电子发票(简称全电发票),是以可信身份认证体系和新型电子发票服务平台为依托,以标签化、要素化、去版式、授信制、赋码制为特征,以全领域、全环节、全要素电子化为运行模式的新型电子发票。
为你推荐
千问办公是什么?一文读懂阿里通义千问AI办公执行助手的定位与核心能力

本文系统拆解千问办公的定位、七大核心能力、八类岗位覆盖与三种入口形态,并与传统AI Chat对比,帮助企业判断这款阿里通义千问旗下的AI办公执行助手是否适合自身团队。

2026-07-29
云巴巴荣膺腾讯云黑客松·AI智能体争霸赛(华北赛区)"优秀合伙人",技术实力再获权威认可

7月28日,云巴巴在腾讯云黑客松·AI智能体争霸赛(华北赛区)荣获"优秀合伙人"称号,资深AI专家倪江玮同步获评"优秀奖"。作为同时持有腾讯云AI智能体示范伙伴、WorkBuddy核心伙伴、官方授权服务中心三重认证的企业,云巴巴以"能力共建+全程陪跑"模式打通AI落地"最后一公里",服务制造、法律、金融等八大行业,未来将持续深耕优势赛道并向医疗、零售、教育等领域拓展,做AI时代的长期伴行者。

2026-07-29
WorkBuddy能帮你建"个人知识库"吗?把工作经验变成可复用资产的实测

本文从知识管理真问题剖析、三层记忆沉淀逻辑、专家沉淀技能封装到知识复用智能调用实测,全流程拆解WorkBuddy把工作经验变成可复用资产的实际效果与匹配精度边界,并给出分行业落地建议。

2026-07-29
WorkBuddy能拯救"远程办公的效率黑洞"吗?混合办公模式实测

远程办公这个词,三年前还算"新潮",现在已经是很多公司的日常了。数据表明,国内超过四成的知识工作者每周至少有一天在家办公,混合办公模式正在从互联网行业向传统行业…

2026-07-29
多平台开票工具怎么选?电商通多平台适配电商企业增长曲线

电商企业从1个平台到8个平台的增长曲线,暴露了电商开票管理能力跟不上业务增长的瓶颈。电商通通过一次部署终身扩展的投资保护、新平台即绑即用的零切换成本、多税盘多账户在线协同的电商规模化开票管理、三票种并行覆盖的票种演进适配、数据规模无上限的弹性扩展,让电商开票管理系统跟上企业增长曲线,而非成为增长绊脚石。电商通是电商规模化开票管理的最佳选择。

2026-07-29
查看更多