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

来源: 云巴巴 2019-09-18 11:06:36

在上一篇文章《业务容器化改造实践(一)》中,我们讲到了业务容器化改造的思路和方案,业务容器化改造主要是从三个方面进行:进行业务微服务拆分、业务发布流程自动化和构建容器云管理平台。同时介绍了方案中选用的技术或工具,使用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流水线,实现业务发布流程的自动化,请继续关注。

更多产品了解

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

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

都在这里!

 

评论列表

为你推荐

云巴巴成为微软合作伙伴,带您实地体验AI的力量

云巴巴成为微软合作伙伴,带您实地体验AI的力量

近日,云巴巴团队走进了全球科技巨头微软,实地探访了其AI技术在协同办公领域的应用。

2024-03-27 15:17:16

追一科技AI数字员工与您相约首届深圳(国际) 人工智能展

追一科技AI数字员工与您相约首届深圳(国际) 人工智能展

聚深圳,见未来。 2020年后疫情时代全国第一场涵盖全产业链、聚焦行业领袖和最具创新力企业标杆的人工智能展会——首届2020深圳(国际)人工智能展将于8月27日至29日在深圳会展中心7号馆举办,追一科技将在本次展会亮相。

2022-11-22 09:34:40

人工智能中的人脸识别系统是怎么做到的

人工智能中的人脸识别系统是怎么做到的

你知道人工智能的人联系统是怎么找到人的吗?

2020-03-17 17:10:18

面向开发者的辅助工具!一文了解腾讯云AI代码助手

面向开发者的辅助工具!一文了解腾讯云AI代码助手

本文将带您深入了解腾讯云AI代码助手,探索其如何成为开发者们不可或缺的辅助工具。

2024-08-05 17:33:07

虹膜识别技术在智能手机上的应用让使用手机更安全

虹膜识别技术在智能手机上的应用让使用手机更安全

虹膜识别技术从出现再到发展至今,虽然虹膜识别技术在安全系数等很多方面拥有很多独一无二的优势,但是在一些我们生活中比较近的身份认证设备上海并没有看到虹膜识别技术的身影。而随着虹膜识别技术的不断发展,虹膜识别技术也经历了从出现在我们身边再到被我们了解,再到被我

2022-11-24 10:32:03

PaaS的主要技术与容器云的负载均衡选择问题

PaaS的主要技术与容器云的负载均衡选择问题

作为现代的技术革新给我们带来了很多便利,它们的存在,同时也对于传统文化的产生了巨大的影响。所以,我们要善于运用这些新科技,善于利用PaaS。     PaaS主要以容器云形式实现,其中BAT、京东、华为和网易等互联网公司,容器云依赖容器基础技术,

2020-04-30 17:08:36

严选云产品

云掣运维托管服务 云掣助力企业快速获得可靠的运维能力,满足企业各运维领域能力需求,助力企业收益数字化转型带来的多重价值。云厂商与云服务商之间分工明确、专业协作,为客户提供稳定可靠的云产品和专业的运维服务。让客户业务运行更稳定更放心。
CRMEB知识付费在线教育内容付费系统 CRMEB知识付费系统是众邦科技推出的一款为企业客户量身打造的专业内容付费系统,通过直播、在线付费视频、音频、图文等多种内容形式,结合分销推广、课程专题、课程推荐、拼团等方式助力内容营销,快速实现内容变现。
课师宝企业在线培训学习系统 课师宝企业在线培训学习系统,为机构打造品牌店铺, 一键分享课程内容和师资信息,快速触达客户,全面推动线上线下培训业务。高清视频内容,支持输出视频源文件,不含供应商logo,作为企业的学习资产终身使用。
Newline智能会议硬件解决方案 Newline智能会议硬件解决方案,搭载天籁inside拾音解决方案,全新升级8通道线性麦克风阵列,支持12米超远距离拾音,AI降噪、回声消除,可一次性解决键盘、触屏、空调、风扇等超300种日常噪声,犹如面对面般自如交流。
阿里云无影在线教学集成解决方案 阿里云无影在线教学提供一体化教学、实训环境,不依赖于学生PC,教学和联系环节全部在培训系统形成闭环。师生同屏互动,模拟线下手把手教,学生随时随地学习和实训、随时能得到老师单独辅导。
百望云—小望智票移动端 替代Windows环境,实现无电脑,在线7 * 24小时开票解决方案。 用户只需将税盘,Ukey插入到小智路由智能设备上,将设备连接到互联网并绑定小望智票APP, 即可使用手机随时随地完成开票。

甄选10000+数字化产品 为您免费使用

申请试用