【云效最完整测评】从自建DevOps部署微服务再到云效

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本人还是个在校生,不是什么业界大佬,每次社区出征文计划我都会珍惜测评的机会。因为本人专业学习的是网络方向,对开发其实还是有不少欠缺。在学习云计算时对devops进行了研究,包括容器云k8s的一些列运维搭建。很多概念上的东西要是理解错误,希望各位能够多多指教QAQ

   DevOps意为“Development”“Operations”,即为开发人员和运维人员之间沟通合作的开发模式,通过自动化软件交付架构更变的流程,实现开发运维一体化,使得开发构建、测试、发布能够更加快捷、频繁和高效稳定。DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保证部门之间的沟通、协作与整合。它的出现时由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。其最大的特点就是极速的迭代和快速的用户反馈。

   云效,云原生时代一站式BizDevOps平台,支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造双敏组织,实现 10 倍效能提升。

   如今,业务追求上云,业务流程也可以上云。阿里的云效DevOps全家桶,真正的为人们带来便利,今天,我就以jenkins+gitlab基于k8s集群实现自建DevOps系统的方式部署开源微服务PiggyMetrics,与云效DevOps对比,告诉大家真正的免运维,实现高效的业务开发流程。

image.png


自建DevOps实现CI/CD-部署微服务PiggyMetrics

这里,我先从自建devops系统并部署微服务应用开始

测试的devops系统架构流程如下:

   基于现有的kubernetes集群和harbor镜像仓库,搭建以docker运行的gitlab代码仓库和CI工具jenkins,并编写自动化流水线脚本。

 

image.png

1.部署jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。我们通过容器部署jenkins服务

容器名称:jenkins;端口映射:8080:8080;使用root身份生成容器;

[root@master  opt]# docker run -itd --name jenkins -p 8881:8080 -u  root -v /home/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v  /usr/bin/docker:/usr/bin/docker -v /usr/bin/kubectl:/usr/local/bin/kubectl -v /root/.kube:/root/.kube  jenkins/jenkins:2.262-centos


设置jenkins

web端通过http://IP:8080访问Jenkins

 

image.jpeg

 

查看默认密码:

[root@master ~]#  docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
54670064056e42a2a47485a5e3356e57

输入密码并点击“继续”

 

image.jpeg


选择“安装推荐的插件”,如图所示:

image.jpeg


插件安装完成后自动转入管理员用户创建界面

 

image.jpeg

输入用户信息,点击“保存并完成”

image.jpeg

 

配置完URL后使用新建的用户登录Jenkins,如图

image.jpeg

 

2.部署Gitlab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。

我们这里也是通过容器部署gitlab服务

容器名称:gitlab;端口映射:1022:2281:80443:443;容器重启策略:always

[root@master  opt]# docker run -itd --name gitlab -p 81:80 -p 443:443 -v  /root/gitlab/config:/etc/gitlab -v /root/gitlab/logs:/var/log/gitlab -v  /root/gitlab/data:/var/opt/gitlab --restart always  gitlab/gitlab-ce:12.9.2-ce.0

image.jpeg

设置root用户信息并使用root用户登录Gitlab,如图所示:

 image.jpeg

 

创建项目Create a project

image.png

 

我们就可以在本地通过git上传代码到仓库

git init
git  remote add origin http://ip/xxxx.git
git add .
git commit -m  'upload'
git push -u origin  master


3.配置Jenkins对接Gitlab

gitlab设置Outbound  requests

image.png

 

生成“Access Tokens”并命名为jenkins

image.png

 image.png

 设置Jenkins取消对’/project end-point进行身份验证;

image.png

 image.png

 

jenkins添加gitlab api  token

image.png 

4.配置Jenkins连接maven

采用docker in docker的方式在Jenkins内安装maven

[root@master ~]# cp  apache-maven-3.6.3-bin.tar.gz /root/jenkins/
[root@master ~]#  docker exec -it jenkins bash
[root@b957b62337cc  /]# cd /var/jenkins_home/
[root@b957b62337cc  jenkins_home]# tar -zxvf apache-maven-3.6.3-bin.tar.gz -C .
[root@2927036f2450  jenkins_home]# mv apache-maven-3.6.3 /usr/local/maven
//配置maven环境变量
[root@b957b62337cc  jenkins_home]# vi /etc/profile
export  M2_HOME=/usr/local/maven
export  PATH=$PATH:$M2_HOME/bin
[root@2927036f2450  /]# vim /root/.bashrc
if [ -f /etc/bashrc  ]; then
        . /etc/bashrc
        source  /etc/profile
fi

Jenkins中配置maven信息

Dashboard-全局工具配置

image.png

 

5.配置CI/CD

新建流水线任务

image.png

配置触发器

image.png

 

image.png

编写流水线脚本

构建微服务项目中的gatewayconfig服务,

将构建后的镜像自动上传到Harbor仓库,

并自动发布gatewayconfig服务到Kubernetes集群的springcloud命名空间下

node{
    stage('git clone'){
        //check CODE 从代码仓库克隆
        git credentialsId:  'ad561b3b-5252-43d5-b9c4-ec9bece0134c', url: 'http://IP/xxx.git'
    }
    stage('maven build'){
//maven编译
        sh  '''/usr/local/maven/bin/mvn package -DskipTests -f  /var/jenkins_home/workspace/xxx'''
    }
    stage('image build'){
//构建镜像,并将镜像ID变量作为tag
        sh '''
              echo $BUILD_ID
              docker build -t 10.24.2.10/xxx/gateway:$BUILD_ID -f  /var/jenkins_home/workspace/xxx/gateway/Dockerfile   /var/jenkins_home/workspace/xxx/gateway
              docker build -t 10.24.2.10/xxx/config:$BUILD_ID -f  /var/jenkins_home/workspace/xxx/config/Dockerfile   /var/jenkins_home/workspace/xxx/config'''
    }
    stage('test'){
//测试镜像
        sh '''docker run -itd --name gateway  10.24.2.10/xxx/gateway:$BUILD_ID
        docker ps -a|grep  chinaskillproject|grep Up
        if [ $? -eq 0 ];then
            echo "Success!"
            docker rm -f gateway
        else
            docker rm -f gateway
            exit 1
            fi
        '''
    }
    stage('upload registry'){
//上传构建完成的镜像到harbor镜像仓库
        sh '''docker login  10.24.2.10 -u=admin -p=xxxxxxxxxxxxxx
            docker push  10.24.2.10/chinaskillproject/gateway:$BUILD_ID
            docker push  10.24.2.10/chinaskillproject/config:$BUILD_ID'''
    }
    stage('deploy k8s'){
        //创建命名空间,部署yaml脚本到k8s集群
       sh 'kubectl create ns springcloud'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/deployment/gateway-deployment.yaml  --kubeconfig=/root/.kube/config'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/deployment/config-deployment.yaml  --kubeconfig=/root/.kube/config'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/svc/gateway-svc.yaml --kubeconfig=/root/.kube/config'
       sh 'kubectl apply -f  /var/jenkins_home/workspace/xxx/yaml/svc/config-svc.yaml --kubeconfig=/root/.kube/config'
    }
}
  • image.png

 

配置gitlabwebhook

Gitlab,进入项目,点击左侧导航栏Settings”→“Webhooks

GitLab webhook  URL地址填入URL处,禁用SSL认证,如图所示。

image.png


点击Add webhook添加webhook

image.png

点击Push events”进行测试

image.jpeg

结果返回HTTP 200则表明Webhook配置成功。

 

6.触发流水线

git重新提交代码,触发流水线

[root@master  ]# git commit -m "Initial commit"
# On  branch master
nothing  to commit, working directory clean
[root@master  ]# git push -u origin master

触发后开始运行

image.png

流水线一路绿灯,构建部署成功

image.png

 

微服务成功部署在k8s集群,CI/CD部署完成

image.png

 

接下来就是本次的正文了-云效

为什么要花这么多功夫写自建devops系统呢?

因为这些部署在云效之中,都!不!需!要!

 当自建系统时,基础设施需要确保Kubernetes集群、部署镜像仓库、部署代码仓库、部署CI/CD工具,还需要针对业务编写设置不同的流水线,并考虑服务的高可用性

一切复杂冗余的部署运维,有了云效,都可以省去!


就好比官方文档中所述:

  • 为什么选择云效公共云,而不是自建或开源?
  • 免搭建、免维护,注册即用
  • 一站式DevOps,账号、数据打通
  • 钉钉集成,成员、消息及时同步
  • 无缝对接阿里云ECS、ACK等
  • 丰富的研发效能数据洞察
  • 精细化企业级安全防控能力


云效DevOps-部署微服务PiggyMetrics

一、云效代码管理 Codeup

云效代码管理 Codeup 是阿里云出品的一款企业级代码管理平台,提供代码托管、代码评审、代码扫描、质量检测等功能,全方位保护企业代码资产,帮助企业实现安全、稳定、高效的研发管理。

代码仓库相信是个搞计算机的都不陌生,最热门的github/gitee等在线代码仓库,或gitlab等等。我们对代码仓库最基本的需求便是代码托管与版本管理。云效提供了代码托管,同时也可以连接其他git仓库。

   这里,我们从代码管理开始

image.png


创建新代码库

image.png 

 

通过git上传本地代码文件

image.png

Tips:git连接时的账号需要在个人设置里https密码中重新设置,与阿里的登录账号无关

  • image.png


上传我们的测试代码后,仓库显示

image.png

 

云效的代码管理功能类似与常见代码仓库,包括项目分支、请求提交记录、安全管理

image.png


在代码安全中,云效提供了依赖包漏洞检测与源码漏洞检测

image.png

 

image.png

 

二、云效流水线Flow

   云效流水线完美的替代jenkinsCI功能,相比较自建的持续交付工具,使用 Flow 仅仅需要几步,就可以快速搭建 CICD 流程。Flow 提供了开箱即用的构建环境,提供了数十种通用的流水线模版帮助你快速创建流水线,可以根据开发业务选择不同的模板,这个对于自己编写pipeline脚本真的方便了很多,当我在自己编写流水线脚本时,需要进行大量的测试调试,还需要根据不同的业务需求而进行调整。Flow提供的不同功能的模板,大量减少了运维工作

image.png


在这里,我们新建流水线,选择

image.png

 

image.png


根据我们发布流程,我们分别需要设置四个流程

第一阶段。选择流水线来源,选择上面我们完成代码上传的云效codeup,选择好仓库和分支

image.png 

 

第二阶段。我们需要对仓库内代码进行maven build,流水线运行时会将打包完的jar包暂存在工作空间中 

image.png


第三阶段。我们配置镜像构建,这里需要构建微服务中的gatewayconfig镜像,选择镜像构建推送到阿里云

image.png


配置阿里镜像仓库,设置Dockerfile的文件路径,可以设置构建镜像的tag

image.png

 

第四阶段。我们将构建完成的镜像部署到k8s集群中,我们可以直接部署到阿里的ACK集群中

image.png


选择好kubectl的选项,以及yaml部署脚本文件

image.png

 

微服务PiggyMetrics的流水线Flow到这里就完成设置了,非常简单便捷的部署了四个流程

image.png

 

Tips:每个阶段还可以配置通知功能

image.png


完成配置后,点击运行配置

image.png


流水线运行成功,一路绿灯

PS:图中构建出现的告警是因为dockerfile中编写容器源镜像选择的是dockerhub官方的,阿里建议使用国内镜像站

image.png


此时我们进ACK集群,查看创建的deployment,如图configgateway以及正常上线

image.png

 

通过ACK服务,使用负载均衡就可以暴露服务端口在公网上

image.png

 

PiggyMetrics微服务部署完成,公网访问成功

image.png



其他云效全家桶工具体验

云效知识库 Thoughts

   文档管理是最为重要的功能,文档是最基础的技术载体,对新人进入时可以通过学习文档快速进入工作,也可以避免开发中解决重复性的问题解决。

   多人协作的文档管理产品有很多,常见的以Wiki为主,企业常用的文档及项目管理为Confluence+jira,也有公有云SaaS产品语雀,这些产品我或多或少接触过。但是对于一些小型团队,这些产品偏重。

   这是我个人在使用的wiki知识平台wiki.js,搭建较轻,但是还是有运维的要求(数据库、存储备份等)

image.png

 

云效中集成了知识库模块,我第一使用感受就是简约、轻

image.png

 

可以有几大经典的模板供创建,非常方便

image.png

 

我选择了创建IT运营模板,可以配置文档库公开性

image.png


 

image.png

 

模板库有大量现成文档模板,包含了标题,可以促进编写文档的标准化

image.png

 

 文档编辑是markdown格式的,熟悉markdown的非常好上手

image.png 


同时也可以导入现有的文档内容,包括了markdown\云效文档导出\Confluence\Word文件

image.png


测试了导入word文档文件,对word导入效果还不错

image.png

测试管理Testhub

云效提供了测试管理,针对研发中测试人员直接在云效中跟进项目测试与反馈

创建测试用例库,填写名称、设置安全性、填写编号

image.png

 

新建用例,填入标题、测试条件、测试过程和期望

image.png

 

新建测试计划,选择人员设置日期

image.png


当测试人员完成测试后,就可以将测试结果反馈到平台

image.png

 

image.png

应用交付

AppStack中最为核心的三概念为发布应用、部署环境、应用编排

1.发布

一个可独立交付的对外提供服务的单元,在研发态,通常对应一个到多个功能模块,关联一个或多个代码库;在运行态,通常对应一组Kubernetes资源。

2.环境

环境是应用运行态的载体,是应用维度做部署和运维的操作界面。在AppStack中,一个应用可以创建多套环境,用于开发、测试、生产等不同场景,用户可以分别对这些环境进行更新、管理和运行状态监控。

3.编排

是对应用部署架构的描述,通常包含工作负载、配置项、网络、存储声明等,是一组Kubernetes资源组合。

image.png

 

我们可以选择发布应用的流水线,如上文发布微服务PiggyMetrics时配置的流水线

image.png

 

部署环境,appstack提供了三大预设环境,如开发环境、测试环境、生产环境,贴合实际的开发环境

image.png

 

应用编排使用了原生 YAML 的形式来描述应用部署架构,将预设的YAML脚本设置完成后即可完成应用的编排

image.png

image.png

项目管理

   云效Projex是新一代企业级研发协作平台,集成了敏捷研发项目管理的最佳实践,提供了针对项目、迭代、需求、缺陷等多个维度的协同管理以及相关的统计报告,让研发团队高效协作、践行敏捷并持续交付产品价值。

   通过与云效「代码管理」和「流水线」的结合,可打造一站式、端到端、全栈敏捷的软件研发DevOps项目。

image.png

项目,是围绕某一特定目标(如产品交付或服务),组织相应人力、物力资源进行的临时性工作。项目具有非常强的计划性,有确定的开始日期和结束日期,项目的周期时长有短期或长期两种形态。在现代软件交付项目中,也有未设置项目结束日期,以迭代的方式来持续演进交付产品。

项目是Projex的核心对象,汇集了同类工作内容以及投入的资源。

image.png

选择项目模板,填写基本信息,即可开始项目管理

image.png

云端开发DevStudio

   云效云端开发  DevStudio 是一款阿里云云效推出的面向云原生的 WebIDE 产品。只需一个浏览器即可获得与本地 IDE  一致的开发体验。通过预置开发环境,使用智能编码能力,即可快速地编辑、调试、运行、部署云端代码。

   DevStudio  以 WebIDE 为基础,提供函数计算、IoT应用和小程序等应用的开发和调试,串联起整个 DevOps  流程,无需用户配置环境,更不受操作系统限制,通过浏览器,即可使用完整 IDE 功能。DevStudio 支持在线安装插件来拓展原有功能,兼容所有常用  VSCode 插件

image.png

image.png

 

企业管理

云效全家桶,提供了高效的企业管理,分为三大为:企业和组织、企业成员管理、企业角色与权限

云效和钉钉集成使能组织架构和成员同步;钉钉消息通知,沟通协作更便捷

同时精细化企业级安全防控能力,提供精细化企业权限管控,提供事前、事中、事后多种安全防控机制

 image.png

image.png 



相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
1月前
|
Kubernetes 持续交付 Docker
利用 Docker 和 Kubernetes 实现微服务部署
【10月更文挑战第2天】利用 Docker 和 Kubernetes 实现微服务部署
|
2月前
|
运维 Kubernetes Cloud Native
云原生时代下,如何高效构建与部署微服务
【9月更文挑战第8天】随着云计算技术的飞速发展,云原生已成为现代软件架构的重要趋势。本文将深入浅出地介绍云原生概念、微服务架构的优势以及如何在云平台上高效构建和部署微服务。我们将通过实际的代码示例,展示在Kubernetes集群上部署一个简单的微服务应用的过程,帮助读者理解云原生环境下的微服务开发和运维实践。
|
7天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
17 1
|
24天前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
72 2
|
1月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
63 9
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
微服务实践k8s&dapr开发部署实验(1)服务调用(一)
49 2
|
1月前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
57 7
|
2月前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
|
1月前
|
Kubernetes Docker 微服务
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
微服务实践k8s&dapr开发部署实验(1)服务调用(二)
50 0
|
2月前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。