本文使用Java微服务项目为例作为wydevops打包发布微服务的首秀,充分展示了它的敏捷、高效和易扩展性。它必定会为微服务开发人员和团队带来的生产力的显著提升。让我们走进wydevops的世界...
wydevops有两种工作方式:本地工作方式和Jenkins工作方式。本文主要介绍本地工作方式,Jenkins工作方式另外行文介绍。
1. 准备阶段
在本地工作方式下,wydevops可以工作在两种配置环境下,第一种是无仓库环境(没有配置有docker仓库和chart仓库的工作环境),第二种是有仓库环境(配置有docker仓库和chart仓库的工作环境)。为了后续的演示你需要做好如下准备:
- 有一台安装了Windows系统的计算机。
- 已安装好了Docker Desktop最新版本,并使能自带的k8s。
- 已安装有IntelliJ idea 开发工具。
- 确保能通过网络访问dockerHub网站。
- 安装有git工具(确保gitbash能正常工作)。
- 安装有maven工具(3.8.3+)。
- 安装好wsl2 + ubuntu on windows(ubuntu中要打开SSH服务:sudo service ssh start, 没有ssh可执行命令sudo apt install openssh-server进行安装),或者另外一台安装有docker(最好是一台K8SApiServer节点)的并可以免密SSH连接的计算机。在ubuntu中运行ip addr show命令从中找到ubuntu系统的IP地址,如下图:
ubuntu系统的IP地址为172.28.8.151。后面会使用到整个地址。
- 最后在ubuntu中运行:kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.1/deploy/static/provider/cloud/deploy.yaml 在K8S中安装好ingress-nginx网关
完成上述准备工作后,我们就有了一个部署微服务的docker 和 k8s 环境。
2. 克隆wydevops源码
https://gitee.com/tmt_china/wydevops源码工程到本地d/wsdevops目录中https://gitee.com/tmt_china/wydevops
如果是团队使用wydevops,则需要在某台服务器上下载好源码,公司统一维护这份源码和其中的配置,例如开发集群的节点信息、K8S集群的apiServer信息,使用的网关信息、域名信息等。团队中的成员使用远程挂载的方式把该源码目录挂载到本地,例如windows下可以使用winfsp + sshfs-win方案。这样就可以在团队中共享同一份wydevops源码和配置,也避免了各成员独立下载源码导致的配置不同步的问题。
如果是个人使用,则直接下载源码到本地即可。
3. 配置目标部署环境
打开下载的源码目录,打开script/templates/config/java/_ci-cd-template.yaml配置文件。
我们先介绍无仓库环境这种最简单的情况下wydevops的使用。在无仓库环境下,wydevops仅支持微服务的docker部署方式,因此此处需要将配置文件中deployType参数设置为docker。
devApiServer参数是采用K8S部署方式时你希望微服务部署的目标K8S集群的apiserver节点信息。支持部署到多个集群,采用英文逗号隔开。这里可以先配置好,以便后续演示K8S部署方式。修改devApiServer参数修改为上述执行ip addr show命令得到的IP地址,以及SSH端口、登录账号和密码(注意要能免密SSH连接该服务器),格式如下图(使用竖杠作为分隔符):
继续将该文件下拉到最后面,修改nodeIPs参数,如下图:
nodeIPs参数是个列表,可列举你想使用docker部署方式部署的所有目标节点。wydevoops会自动检测目标节点的架构信息,并自动部署架构匹配的服务镜像。这里仅配置了一个节点的信息(注意要能免密SSH连接该服务器)。
4. 创建Java例子项目(源码仓库的sample/java目录下有这个例子)
使用IntelliJ idea,创建一个如下图所示目录结构和文件的Java maven项目。
图中展示了application.yml文件的内容,展示出来的这些参数都是wydevops会自动读取(通过源码中script/templates/config/java/param-mapping目录下的配置文件指定的,,也可在项目级定义这类配置文件。如下图,可先看看后续会详细介绍)和处理的参数。
部署时wydevops会将spring.profiles.active自动设置为prod,并将application.yml和application-prod.yml自动添加到ConfigMap配置文件中(K8S部署方式)或者自动挂载到微服务docker容器中(docker部署方式)
wydevops会将url-prefix参数的值视为K8S部署方式的网关路径设置,自动完成Ingress-nginx类型的路由配置(默认使用Ingress-nginx网关)或者Apisix网关类型的路由配置。
wydevops会自动判断management.endpoints.web.exposure.include的值是否为”*“,如果是且management.endpoints.enabled-by-default=true则在K8S部署模式下将自动配置和开启服务探活和就绪探针。
另外wydevop会读取application-prod.yml文件中配置server.port参数值,将根据这个值:
- 在构建docker镜像时声明需要开放的端口
- 在构建chart镜像时生成匹配的ClusterIP类型或NodePort类型的Service配置,并且服务探活和就绪探针使用的端口也是server.port指定的值
上述这些参数不特定必须放在某个文件中,wydevops会依次扫描application-prod.yaml和application.yaml文件中的参数(扫描文件列表也是在script/templates/config/java/param-mapping目录下的配置文件指定的,也可在项目级定义这类配置文件),读取第一个遇到的参数值。
图中wydevops-run.sh文件是复制的wydevops源码中script目录下的wydevops-run.sh.tmpl文件,删除.tmpl后缀后得到的。其内容如下:
这个文件是wydevops的本地启动文件,各标志或参数的释义可直接运行 wydevops.sh -h参看,如下:
重点说明:
-A linux/amd64 #指定构建的架构 -O linux/amd64 #指定生成的离线安装包的架构(即安装包中携带的docker镜像的架构) -B single #指定构建类型为单镜像模式,也即不进行分层打包,只生成一个docker镜像 -I /d/cachedImage #指定外网拉取的第三方镜像的本地缓存目录,会优先在这个目录中查找目标镜像 -L java #指定项目的语言类型 -S build,docker,chart,package,deploy #指定项目需要构建的过程,这里5个构建过程全部都要执行 -M local #指定wydevops工作模式为本地模式 -T true #是否强制使用内置模板,这个参数已废弃 -W "${_SCRIPT_ROOT_DIR}" #指定wydevops源码中script目录的路径 -P "${_PROJECT_MAIN_MODULE_DIR}" #指定需要构建的项目源码中主模块的路径。 #-C "harbor,chartmuseum,192.168.1.214:80,admin,Harbor12345,80" #Chart镜像仓库的信息,这里注释掉了 #-D "harbor,registry.docker.home,192.168.1.214:80,admin,Harbor12345,80" #docker镜像仓库的信息,这里注释掉了 #-N "http://192.168.100.236:8000/atom/v1/deployPlatform/api/update" #外部通知接口URL地址,这里注释掉了
至此,例子项目的wydevops配置已经完成了(好像啥也没干呀)。
5. 执行本地构建
在上述wydevops-run.sh文件所在的目录中打开git bash窗口,
执行命令:bash wydevops-run.sh,则会显示如下输出:
经过几分钟到十几分钟的运行(视你的计算机配置而定),如果成功则会显示如下信息:
即表示java-sample服务已成功采用docker方式运行起来了。
6. 结果验证
如上图,可以看到java-sample容器已经正常运行了。接着打开浏览器,输入http://localhost:8052/wydevops/v1/sample/hello, 成功返回正确结果,如下图所示。
至此,无仓库环境下的微服务docker部署方式已介绍完毕。主要工作集中在环境搭建部分。下一篇文章,将在这个例子的基础上介绍K8S部署方式,主要内容就是配置nexus和harbor环境。如果你已经安装有这两者之一,则仅需要:
- 将前述deployType参数设置为:k8s
- 将devApiServer参数按格式设置正确(IP地址|SSH端口|SSH账号|SSH密码)
- 将wydevops-run.sh文件中的-C 和 -D两行去掉注释,并按wydevops.sh -h 命令中的说明配置好这两个参数。特别注意,集群内部使用的docker仓库应与项目中此处"-D"参数是同一个仓库,否则服务部署后无法拉取到docker镜像。
- 执行命令:bash wydevops-run.sh,成功执行后目标K8S集群中就能查询到java-sample相关信息。
这篇文章就写道这里!感谢您的关注。