SaaS化开源项目之HouseKeeper云上部署实践

Posted 华为云开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SaaS化开源项目之HouseKeeper云上部署实践相关的知识,希望对你有一定的参考价值。

摘要:华为云DTSE技术专家从源码构建、应用部署到系统调测,详细解读云原生SaaS应用构建的全过程。

本文分享自华为云社区HouseKeeper云上部署实践》,作者:华为云DTSE。

HouseKeeper是华为云开发者团队基于SaaS项目技术支持实践,采用微服务架构(SpringCloud),结合华为云服务能力开发的SaaS化开源项目,旨在为企业级开发者提供云原生SaaS应用构建的技术参考,包括微服务架构、多租隔离设计、多租户路由、数据存储多租设计等。

一、源码构建

1.代码托管

将gitee上的个人fork仓同步到华为云CodeArts平台上

启用软件开发流水线CodeArts

如下所示,选择北京4启用CodeArts,其基础版本免费试用,最大支持人数5人;编译构建并发数5,600分钟/月;代码托管10G存储空间,单个仓库容量上限2G。

创建项目

如下所示,选择scrum创建项目,自定义项目名称,如HouseKeeper。Scrum是增量迭代式的软件开发方法,通过迭代计划会议、每日站会、迭代回顾、验收会议等来简单高效管理开发项目。

导入外部仓库

如下所示,进行外部仓库配置。

如下所示,复制gitee上源码仓库地址。

将源码仓库地址复制到codearts外部仓库配置项中,并填写gitee源码仓访问信息后进入下一步。

注意选择同步全部分支,确认后创建仓库。

2、基于IDE online 修改预置参数

使用IDE online一键创建工程

如下所示,在新建的代码仓页面,点击右上角IDE online自动进入IDE,系统会基于当前仓库自动创建加载好相关工程。

切换分支为cloud1.0.0

如下所示,点击IDE online工程里左下角,在工程上方弹出的分支列表中选择cloud1.0.0分支。

修改源代码中helm镜像路径

如下所示,将源码中helm charts文件中的镜像路径修改为对应仓库,未避免名称冲突,此处将镜像修改为house-keeper-0504

修改源码中gitee访问信息

如下所示,修改helm/value.yaml文件中 giteePassword、giteeUser字段,其中字段数值采用Base64进行混淆

global:
...
  giteePassword: xxx
  giteeUser: xxx

提交修改文件

如下所示,将修改的文件提交到codeArts仓库。

或者通过命令行终端git命令方式提交修改。

cd helm-charts
git add values.yaml
git commit -m "修改gitee访问信息"
git remote -v
git push origin cloud-1.0.0

如下所示,在codearts代码仓可以查看对应的修改记录

3、创建镜像仓库

如下所示,按照helm-charts中修改的镜像路径,在北京4区域创建对应的组织。

4、创建并启动构建任务

如下所示,新建构建任务。

自定义任务名称,但为了方便维护,建议任务名称同helm-charts中保持一致。

选择maven容器模板。

设置任务参数,添加version字段,并设置为运行时设置。

如下所示,构建步骤中仅修改镜像推送配置,其它信息保持模板默认配置即可,其中组织名即上述环节中设置的,镜像名称同helm-charts中对应,工作路径即源码仓中对应模块的子路径,完成配置后点击右上角【新建并执行】构建任务。

5、通过自定义模板构建其它组件

如下所示,将上述saas-housekeeper-config-server的构建任务保存为自定义模板,名字自定义为House-Keeper。

如下所示,使用自定义模板创建其它构建任务,其中,构建frontend前台任务时无需maven打包,工作路径设置为代码根路径即可。

如下所示,相关模块均已构建成功。

二、应用部署

1、Helm工具打包

Helm工具安装

helm工具安装参考链接,下载对应的windows版本即可。

如下所示,设置好系统环境变量好,可以在git bash里查看工具版本。

下载源码到本地

如下所示,首次使用codearts时需要点击右上角个人用户图标,进入设置页面,进行ssh/https相关配置。

 

如下所示,本次使用https方式下载源码,命令如下

git clone https://username:password@codehub.devcloud.cn-north-4.huaweicloud.com/HouseKeeper00003/saas-housekeeper.git

helm打包安装包

如下所示,使用helm工具打包,命令

helm.exe package ./helm-charts
helm.exe lint housekeeper-1.0.0.tgz

2、创建CCE集群及工作节点

如下所示,按需购买CCE集群,其中出于demo成本考虑,CCE集群不启用高可用模式。

CCE集群创建需要时间,可在集群页面查看执行过程。

待CCE集群创建完成后,创建节点池,同样成本考虑,节点数量及规格不用太大,本次演示数量设置2,磁盘类型高IO。

按需购买2个EIP资源。

在ECS主机页面绑定EIP。

绑定EIP后如在CCE集群节点看不到对应的EIP时,选择手动同步云服务器。

3、导入模板并安装部署

如下所示,对应工作负载均已创建成功并正常运行。

4、创建ELB

为前段服务创建ELB访问

三、系统调测

1、配置内部域名解析

由于公网域名解析需要进行备案等,演示场景配置内部4级域名解析,具体相关要求请参考gitee对应项目的Readme。

2、创建测试PC

按需在对应VPC内创建windows镜像的测试PC

3、修改测试PC的hosts文件

如下所示,可以通过ping测试内部域名正常。

4、通过测试PC访问租户注册页面

源码对IE浏览器支持不太友好,建议使用谷歌浏览器进行测试,如下所示,访问租户注册页面,其中域名即上述配置的内网域名解析记录对应的。

http://housekeeper.saas.cloud.com/tenant/#register

其它操作可参考HouseKeeper开源项目继续进行。

 

点击关注,第一时间了解华为云新鲜技术~

k8s入门系列之介绍篇

•Kubernetes介绍
1.背景介绍
  云计算飞速发展
    - IaaS
    - PaaS
    - SaaS
  Docker技术突飞猛进
    - 一次构建,到处运行
    - 容器的快速轻量
    - 完整的生态环境
2.什么是kubernetes
  Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
  Kubernetes优势:
    - 容器编排
    - 轻量级
    - 开源
    - 弹性伸缩
    - 负载均衡

•Kubernetes的核心概念
1.Pod
  运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。
2.Replication Controller
  Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
3.Service
  Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。
4.Label
  Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的K/V键值对。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。
5.Node
  Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。

•Kubernetes架构和组件
架构:

  技术图片
主从分布式架构,Master/Node
  - 服务分组,小集群,多集群
  - 服务分组,大集群,单集群
组件:
  Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件:
  1.Kubernetes API Server
    作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。
  2.Kubernetes Scheduler
    为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。
  3.Kubernetes Controller
    负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。

   - Replication Controller
    管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。
   - Node Controller
    管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。
   - Namespace Controller
    管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。
   - Service Controller
    管理维护Service,提供负载以及服务代理。
   - EndPoints Controller
    管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。
   - Service Account Controller
    管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。
   - Persistent Volume Controller
    管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。
   - Daemon Set Controller
    管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。
   - Deployment Controller
    管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。
   - Job Controller
    管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目
   - Pod Autoscaler Controller
    实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。

  Kubernetes Node运行节点,运行管理业务容器,包含如下组件:
  1.Kubelet
    负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。
  2.Kubernetes Proxy
    负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。
  3.Docker
    Node上需要运行容器服务。

以上是关于SaaS化开源项目之HouseKeeper云上部署实践的主要内容,如果未能解决你的问题,请参考以下文章

如何在阿里云上部署Rstudio server

k8s入门系列之介绍篇

k8s入门系列之介绍篇

8步安装多多客小程序全插件化1.0开源版

8步安装多多客小程序全插件化1.0开源版

关于私有云专有云公有云SaaS独立部署多租户