我们用一个系列来讲解从需求到上线、从代码到k8s部署、从日志到监控等各个方面的微服务完整实践 。
整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中间件,所用到的技术栈基本是go-zero项目组的自研组件,基本是go-zero全家桶了 。
实战项目地址:https://github.com/Mikaelemmmm/go-zero-looklook
1、概述上一节,我们已经把gitlab、jenkins、harbor、k8s都已经搭建好了,这一节我们来编写jenkins的pipline将我们的服务通过jenkins完整的发布到k8s中 。
2、部署中间件将MySQL、redis、es等部署到k8s之外,模拟用作线上独立环境(至于线上你想把某些中间件部署到k8s内部这个自行处理,本次重点是如何将go-zero开发的微服务部署到k8s集群内部),这里我就直接使用项目下的Docker-compose-env.yaml了,把所有依赖的第三方中间件环境直接安装在srv-data.com(192.168.1.181)这台服务器,前提是这台服务器已经安装好docker、docker-compose 。
登陆到 192.168.1.181
$ mkdir data && cd data && vim docker-compose.yml$ docker-compose up -d$ docker-compose ps #查看确认3、独立配置将每个服务的配置都独立出来,统一放在一个git仓库,这样只给一个人线上仓库的权限,如果线上配置有变直接修改这个仓库的文件,在jenkins做cd的时候,会先拉取代码再拉取对应服务的配置自动构建,具体可以看后面的pipline 。
【问】为什么不用配置中心?
1)修改db、redis等需要重启服务,但是有一些配置又不需要重启服务,运维又要去记,记混了比较容易造成线上事故
2)方便回滚 。我们发新版本到线上,并且又改了新版本配置 。这时候线上用户反馈有问题,线上需要快速回滚的话,如果我们使用将文件构建到镜像中,直接使用k8s一行命令就可以将上一个版本代码加配置直接回滚回来 。如果使用了配置中心,回滚了代码,还要将上个版本的配置去配置中心改回来,很麻烦 。
【k8s部署 微服务从代码到k8s部署应有尽有大结局】独立线上仓库目录结构如下(这个结构是跟pipline中写法相关的)

文章插图
仓库地址 : https://github.com/Mikaelemmmm/go-zero-looklook-pro-conf , 直接下载就好
1、修改配置中的中间件,数据库、redis等都要改成192.168.1.181这台机器,我们把这台机器当成线上环境的中间件 。4、编写 jenkins 的 pipline4.1 配置参数访问 http://192.168.1.180:8989/ 打开jenkins,进入jenkins首页,点击左侧菜单新建Item
2、另外一个就是我们的服务发现,线上我们部署在k8s中,go-zero直接支持k8s服务发现,所以不需要etcd等,我们在配置zrpc client的时候,要改成target,k8s的配置方式 。
我们先创建 identity 授权服务的流水线

文章插图
然后点击“General” , 选择“This project is parameterized”,"添加参数",“Choice Parameter”,如下图

文章插图
然后编写内容如下

文章插图
直接保存 。
4.2 编写pipline向下滑动找到Pipeline script,填写脚本内容
pipeline {agent anyparameters {gitParameter name: 'branch',type: 'PT_BRANCH',branchFilter: 'origin/(.*)',defaultValue: 'master',selectedValue: 'DEFAULT',sortMode: 'ASCENDING_SMART',description: '选择需要构建的分支'}stages {stage('服务信息'){steps {sh 'echo 分支:$branch'sh 'echo 构建服务类型:${JOB_NAME}-$type'}}stage('拉取代码') {steps {checkout([$class: 'GitSCM',branches: [[name: '$branch']],doGenerateSubmoduleConfigurations: false,extensions: [],submoduleCfg: [],userRemoteConfigs: [[credentialsId: 'gitlab-cert', url: 'ssh://git@192.168.1.180:2222/root/go-zero-looklook.git']]])}}stage('获取commit_id') {steps {echo '获取commit_id'git credentialsId: 'gitlab-cert', url: 'ssh://git@192.168.1.180:2222/root/go-zero-looklook.git'script {env.commit_id = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()}}}stage('拉取配置文件') {steps {checkout([$class: 'GitSCM',branches: [[name: '$branch']],doGenerateSubmoduleConfigurations: false,extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'conf']],submoduleCfg: [],userRemoteConfigs: [[credentialsId: 'gitlab-cert', url: 'ssh://git@192.168.1.180:2222/root/go-zero-looklook-pro-conf.git']]])}}stage('goctl版本检测') {steps{sh '/usr/local/bin/goctl -v'}}stage('Dockerfile Build') {steps{sh 'yes | cp-rf conf/${JOB_NAME}/${type}/${JOB_NAME}.yamlApp/${JOB_NAME}/cmd/${type}/etc'//线上配置文件sh 'cd app/${JOB_NAME}/cmd/${type} && /usr/local/bin/goctl docker -go ${JOB_NAME}.go && ls -l'script{env.image = sh(returnStdout: true, script: 'echo ${JOB_NAME}-${type}:${commit_id}').trim()}sh 'echo 镜像名称:${image} && cp app/${JOB_NAME}/cmd/${type}/Dockerfile ./&& ls -l && docker build-t ${image} .'}}stage('上传到镜像仓库') {steps{//docker login 这里要注意,会把账号密码输出到jenkins页面,可以通过port.sh类似方式处理,官网文档有这里我就不详细写了sh 'docker login --username=${docker_username} --password=${docker_pwd} http://${docker_repo}'sh 'docker tag${image} ${docker_repo}/go-zero-looklook/${image}'sh 'docker push ${docker_repo}/go-zero-looklook/${image}'}}stage('部署到k8s') {steps{script{env.deployYaml = sh(returnStdout: true, script: 'echo ${JOB_NAME}-${type}-deploy.yaml').trim()env.port=sh(returnStdout: true, script: '/root/port.sh ${JOB_NAME}-${type}').trim()}sh 'echo ${port}'sh 'rm -f ${deployYaml}'sh '/usr/local/bin/goctl kube deploy -secret docker-login -replicas 2 -nodePort 3${port} -requestCpu 200 -requestMem 50 -limitCpu 300 -limitMem 100 -name ${JOB_NAME}-${type} -namespace go-zero-looklook -image ${docker_repo}/${image} -o ${deployYaml} -port ${port} --home /root/template'sh '/usr/local/bin/kubectl apply -f ${deployYaml}'}}stage('Clean') {steps{sh 'docker rmi -f ${image}'sh 'docker rmi -f ${docker_repo}/${image}'cleanWs notFailBuild: true}}}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 微软|电脑卡得受不了还误杀?教你一键关闭Defender
- 教你通过微信搜一搜截流 不能忽略的引流重要阵地
- 基于Vue3+TS+ElementPlus+Qiankun构建微应用项目
- 北大|批评北大教授语病者 感到失望:116字微博被指有12处语病 让人难以理解
- 微信头像如何设置全图?
- 红茶的主要成分和功效,茶的功效与作用微信
- Centos 7部署Suricata
- 一篇文章教会你使用Python定时抓取微博评论
- 微软|2022全球17款杀毒软件实测:微软免费杀软Defender倒数第二
- 部署云探针,配置轻量级监控系统
