坐井观天说Devops--1--情况总体说明
一.介绍
虽然从事IT行业已过10年,但是一直从事传统软件的测试工作。对于目前互联网流行的技术devops,我没有较好的资历、背景以及实践经历,只是根据自己的学习研究和一定的实践经历,坐井观天聊一聊devops。
关于devops概念,我觉得这篇文章写的挺好的-----什么是 DevOps?一篇读懂!。
DevOps 是一种文化理念、工具与实践的结合,目的是更快更可靠地向用户持续交付价值,为了能够快速的持续集成集成,持续交付,持续部署,我们需要将开发,运维,测试的琐碎的事,全部自动化,能自动不手动,能容器不虚拟机(物理机),不断的优化,提高交付效率。
devops技术,能够将开发,运维以及测试融为一体,极大的提高开发效率和质量。
因为我是测试工程师,我更多的是站在测试工程师的角度,来说一下devops技术,我们测试也是需要devops技术的,能够给我们测试带来那些好处?
devops技术,有3个比较核心的技术,k8s集群技术,jenkins持续集成技术以及docker容器技术。
1.能够为性能测试赋能,对于电商中的秒杀或者抢火车票,测试时,需要模拟千万级别(甚至更多)的并发,一台测试电脑,是远远不够的,可能需要100台测试服务器甚至更多。k8s集群技术,能够轻松的做到,对于集群电脑的统一调度,管理,监控等等。
2.利用jenkins技术和k8s技术,搭建测试平台管理系统,目前应用搭载的设备和系统众多,比如,不同型号的手机平板(安卓,苹果)以及他们还存在不同版本的系统,不同的电脑系统(windows,mac,linux),还有不同的手机和电脑浏览器(chrome,edge,firefox,safari)等等,面对如此繁杂的设备,系统,浏览器等,自动化的测试脚本和工具也会很繁杂,我们需要一个平台,能够统一的管理不同硬件,系统,能够统一的管理不同的自动化脚本和工具。目前jenkins可以做到这些。比如,开发版本发布后,我们能够选择不同的硬件,系统,自动化脚本脚本进行测试(ui自动化,接口自动化,兼容行测试自动化),当然整个过程, 也可以全程自动化的。
3.资源共享。比如我们的测试集群有100台服务器,如果仅仅只是用来做性能测试,有点浪费,可以在这个集群上,做ui自动测试,接口自动测试,兼容性自动化测试等等,当然也可以把我们的测试相关的系统部署上去,比如jira,禅道,testlink等等
4.提高测试效率,开发运维需要devops技术,进行全程自动化。对于我们自动化测试而言,我们也有很多类型的测试代码,我们也需要对测试代码进行版本管理,持续集成等等。我们也可以将这些东西放在我们的测试集群上去。
我写了几篇博客,也做了相关实验,有兴趣可以一块看看。
坐井观天说Devops—1–情况总体说明,该篇主要介绍的整体的流程、实验环境以及实验规划等内容
坐井观天说Devops–2–实验环境准备,该篇主要讲的是搭建实验环境,搭建harbor,搭建k8s集群,在k8s集群上,搭建gitlab,jenkins,sonarqube,prometheus,grafana,metrics server,StorageClass,nginx-ingress等等
坐井观天说Devops–3–开发CICD之k8s部署springboot分布式持续集成持续交付,该篇主要讲的是,站在开发的角度,多个开发项目是springboot项目的整个CICD流程,里面有使用k8s容器化部署jenkins是节点,并且容器里面能够使用docker命令和kubectl命令等内容
坐井观天说Devops–4–测试CICD之k8s部署selenium分布式自动化持续集成,该篇用时最长,里面讲的有UI自动化的PO设计模式,将3种浏览器(chrome,edge,Firefox)容器化并且k8s动态部署,整合selenium,pytest,allure,k8s,jenkins,gitlab,shell,python等技术,实现seleniumui自动化测试脚本分布式自动化持续集成
坐井观天说Devops–5–测试CICD之k8s部署selenium grid分布式自动化持续集成,该篇主要将的是selenium grid部署到k8s集群的两种方式,以及测试脚本分布式部署到k8s集群中去。
二.Devops流程说明
整体的流程图,第一次使用dia软件画的流程图,效果很不好(字体不是太清楚),凑合看,大致的流程如下:
1.开发工程师和测试工程师通过git提交代码到gitlab代码仓库(测试工程师提交的是自动化相关的代码)
2.jenkins的子节点自动去抓取代码
3.自动的通过sonarqube对代码进行静态检测
4.自动的将代码打包编译,自动的做成docker镜像
5.自动的应用镜像推送到harbor仓库
6.进入到k8s master节点,读取和启动应用部署的yaml文件
7.自动的通过k8s主节点将应用部署,到k8s的测试集群中去
8.自动的去从harbor中拉取部署的镜像
9.自动的启动自动化测试(ui自动测试,接口自动化测试,性能或者压力自动化,兼容性自动化测试等等,根据实际需要来设置自动化测试)
10.自动的去从harbor拉取自动化测试的镜像
11.自动化测试完成后,自动的出测试报告
12.自动的将测试报告通知给相关的人员,然后根据测试结果,做出对应的动作
这样,就将很多琐碎的事情,全部流程化和自动化掉了,能够比较大的提高工作效率
三.环境说明
1.k8s集群搭建
a.主机规划说明
K8S集群搭建主机规划
序列 | 主机 | IP | 系统 | 主机功能 | 软件 |
---|---|---|---|---|---|
1 | k8s-master1 | 192.168.100.200 | Ubuntu server22.04 | k8s主节点 | k8s相关容器,harbor,docker |
2 | k8s-node1 | 192.168.100.201 | Ubuntu server22.04 | 部署基础网站 | k8s相关容器,gitlab,jenkins,allure,grafana等web网站,docker |
3 | k8s-node2 | 192.168.100.202 | Ubuntu server22.04 | 持续集成的的各个子节点和prometheus | k8s相关容器,docker |
b.主件规划说明
K8S集群搭建,主件规划
序列 | 主件 | 节点 | 用途 |
---|---|---|---|
1 | kube-apiserver | master | 提供了HTTP Rest接口的关键服务进程,是K8S里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程 |
2 | kube-controller-manager | master | K8S里所有资源对象的自动化控制中心,集群内各种资源Controller的核心管理者,针对每一种资源都有相应的Controller,保证其下管理的每个Controller所对应的资源始终处于期望状态 |
3 | kube-scheduler | master | 负责资源调度(Pod调度)的进程,通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node |
4 | coredns | master | coredns在K8S中的用途,主要是用作服务发现,也就是服务(应用)之间相互定位的过程。 |
5 | etcd | master | K8S里的所有资源对象以及状态的数据都被保存在etcd中 |
6 | pause | master/slave | 在 pod 中担任 Linux 命名空间共享的基础,启用 pid 命名空间,开启 init 进程,回收僵尸进程 |
7 | kube-proxy | master/slave | 实现Kubernetes Service的通信与负载均衡机制的重要组件 |
8 | flannel | master/slave | 提供集群网络 |
9 | ingress-nginx-controller | slave | 实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发 |
10 | kube-prometheus | master/slave | kube-prometheus 是一整套监控解决方案,它使用 Prometheus 采集集群指标,Grafana 做展示,包含如下组件:The Prometheus Operator,Highly available Prometheus,Highly available,Alertmanager,Prometheus node-exporter,Prometheus Adapter for Kubernetes Metrics APIs (k8s-prometheus-adapter),kube-state-metrics,Grafana |
11 | kubelet | master/slave | 负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能 |
12 | kubeadm | master/slave | 用来安装和部署k8s |
13 | kubectl | master | 操作k8s集群的命令行工具 |
14 | docker engine | master/slave | Docker引擎,负责本机的容器创建和管理工作 |
15 | cri-dockerd | master/slave | 为Docker Engine提供一个能够支持到CRI规范的垫片,从而能够让Kubernetes基于CRI控制Docker |
2.网站搭建说明
CICD网站搭建规划
序列 | 域名 | 主机 | 名称 | 系统 | 用途 | 备注 |
---|---|---|---|---|---|---|
1 | harbor.xusanduo.com | k8s-master1 | harbor系列 | docker容器 | 管理镜像 | 通过docker-compose方式部署 |
2 | gitlab.xusanduo.com | k8s-node1 | gitlab | docker容器 | 管理代码 | k8s deployment方式部署,ingress-nginx方式访问 |
3 | jenkins.xusanduo.com | k8s-node1 | jenkins | docker容器 | cicd调度平台 | k8s deployment方式部署,ingress-nginx方式访问 |
4 | grafana.xusanduo.com | k8s-node1 | grafana | docker容器 | 监控整个集群的状态 | k8s deployment方式部署,ingress-nginx方式访问 |
5 | prometheus.xusanduo.com | k8s-node1 | prometheus | docker容器 | 监控整个集群 | k8s deployment方式部署,ingress-nginx方式访问 |
6 | sonar.xusanduo.com | k8s-node1 | sonarqube | docker容器 | 代码静态检测 | k8s deployment方式部署,ingress-nginx方式访问 |
3.Jenkins的主节点和子节点镜像和系统规划
Jenkins的主节点和子节点镜像和系统规划
序列 | 主机 | 名称 | 系统 | 用途 | 备注 |
---|---|---|---|---|---|
1 | k8s-node1 | Jenkins-master | docker容器 | Jenkins主节点网站 | k8s deployment方式部署,ingress-nginx方式访问 |
2 | k8s-node2 | Jenkins-node-maven | docker容器 | 打包Java应用程序 | 打包 |
3 | k8s-node2 | Jenkins-node-nodeJs | docker容器 | 打包nodeJs应用程序 | 打包 |
4 | k8s-node2 | Jenkins-node-seleniumHub | docker容器 | 用来分布式测试和兼容性测试 | UI自动化测试 |
5 | k8s-node2 | Jenkins-node-seleniumchromenode | docker容器 | 用来分布式测试和兼容性测试 | UI自动化测试,chrome浏览器 |
6 | k8s-node2 | Jenkins-node-seleniumfirefoxnode | docker容器 | 用来分布式测试和兼容性测试 | UI自动化测试,firefox浏览器 |
7 | k8s-node2 | Jenkins-node-seleniumedgenode | docker容器 | 用来分布式测试和兼容性测试 | UI自动化测试,edge浏览器 |
8 | k8s-node2 | Jenkins-node-seleniumchrome | docker容器 | 用来分布式测试和兼容性测试 | UI自动化测试,chrome浏览器,序列5的镜像,无法单独使用,需要修改或者自己制作,才能使用(目前是单独制作) |
9 | k8s-node2 | Jenkins-node-seleniumfirefox | docker容器 | 用来分布式测试和兼容性测试 | UI自动化测试,firefox浏览器,序列6的镜像,无法单独使用,需要修改或者自己制作,才能使用(目前是单独制作) |
10 | k8s-node2 | Jenkins-node-seleniumedge | docker容器 | 用来分布式测试和兼容性测试 | UI自动化测试,edge浏览器,序列7的镜像,无法单独使用,需要修改或者自己制作,才能使用(目前是单独制作) |
11 | k8s-node2 | Jenkins-node-request | docker容器 | 使用Python的request做接口测试 | 接口自动化测试 |
12 | k8s-node2 | Jenkins-node-jmeter-master | docker容器 | 性能测试自动化测试 | 性能测试自动化测试–主节点 |
13 | k8s-node2 | Jenkins-node-jmeter-slave | docker容器 | 性能测试自动化测试 | 性能测试自动化测试–子节点,根据实际需要,可以在k8s集群启动很多个 |
14 | k8s-nodeX | Jenkins-node-windows/linux/mac-X | windows/linux/mac | 安卓系统自动化测试(UI自动化,Monkey,CTS,兼容,性能等) | 该电脑连接安卓手机,根据实际需要,类似这种电脑可以有很多台 |
15 | k8s-nodeX | Jenkins-node-windows/linux/mac-X | windows/linux/mac | IOS系统自动化测试(UI自动化,兼容,性能等) | 该电脑连接苹果手机,根据实际需要,类似这种电脑可以有很多台 |
四.实验规划
1.实验准备
1.docker-compose部署harbor
2.k8s环境集群搭建
3.k8s集群搭建helm
4.k8s集群搭建nfs类型的StorageClass
5.k8s集群部署nginx-ingress
6.k8s集群部署metrics server
7.k8s集群部署kube-prometheus
8.k8s集群部署gitlab
9.k8s集群部署jenkins
10.k8s集群部署sonarqube
2.持续集成实验
1.坐井观天说Devops–2–实验环境准备
2.坐井观天说Devops–3–开发CICD之k8s部署springboot分布式持续集成持续交付
3.坐井观天说Devops–4–测试CICD之k8s部署selenium分布式自动化持续集成
4.坐井观天说Devops–5–测试CICD之k8s部署selenium grid分布式自动化持续集成
5.坐井观天说Devops–6–测试CICD之python接口自动化持续集成(暂时未完成)
6.坐井观天说Devops–7–测试CICD之jmeter接口自动化持续集成(暂时未完成)
7.坐井观天说Devops–8–测试CICD之jmeter分布式性能自动化持续集成(暂时未完成)
8.坐井观天说Devops–9–开发和测试CICD整合(暂时未完成)
五.涉及到的工具和技术
编程语言 | 编码环境 | 系统 | 集群技术 | 自动化技术 | 代码和镜像管理 | 持续集成工具 | 打包工具 | 容器 | 代码静态检测 | 工具 |
---|---|---|---|---|---|---|---|---|---|---|
python,shell | pycharm,conda | ubuntu | k8s | selenium,request,jmeter,allure,pytest | gitlab,harbor | jenkins | maven | docker | sonarqube | grafana,prometheus,ssh,webhook,tomcat,NFS,VMvare,helm |
六.投资收益
站在测试的角度
七.遗留问题
1.kube-prometheus中的adapter无法获取cpu和内存
2.gitlab的使用上,还有很多功能,后面要添加上去
八.参考资料
VMvare官方地址
https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
Ubuntu系统下 VMware tools安装
https://blog.csdn.net/MR_lihaonan/article/details/125479384
重新开机后,vmvare的虚拟机硬盘无法打开
https://blog.csdn.net/o396032767/article/details/84805532
k8s学习笔记2-搭建harbor私有仓库
https://blog.csdn.net/weixin_43501172/article/details/125937610
Ubuntu 20.04 Server 安装nfs
https://www.jianshu.com/p/391822b208f0
mount.nfs: access denied by server while mounting
https://blog.csdn.net/ding_xc/article/details/123183499
如何在Ubuntu上配置NFS(着重看权限配置)
http://www.manongjc.com/detail/51-yuyinvlieoydurz.html
https://gitee.com/thinkgem/jeesite4#https://gitee.com/link?target=http%3A%2F%2Fdemo.jeesite.com%2F
https://github.com/princeqjzh/JeeSite4