导读:很多朋友问到关于devops如何配置的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
DevOps能做什么?
在软件开发的过程中,开发人员负责编写代码,然后将代码交给 QA(质量保障)团队进行测试,然后将最终的发布版交给运维团队去布署。
DevOps 就是 Development(开发)和 Operations(运维)两个词的组合。但这里的组合并不是简单地将两个团队合并,而是要从思维和流程上变革,根据 DevOps 思想重新梳理全流程的规范和标准。
DevOps 既是一种思维方式,同时也是一种工作方式,作为一套促进开发、技术运营和质量保障三个部门之间的沟通、协作与整合的方法论,使得组织的快速迭代,实现竞争优势成为现实。
在 DevOps 的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。
DevOps 的实施,打破了团队内各角色的职能壁垒,让开发人员和运维人员更好地沟通合作,通过自动化流程来使得软件开发的整体过程更加快捷和可靠。
DevOps-Jenkins 集成 Active Directory
最近在搭建一个 DevOps 平台,中间涉及搭建各种相关组件,在这里把这些过程做一下记录,前文已经介绍了 如何在 CentOS 7.5 上搭建 Jenkins ,本文主要介绍Jenkins 如何集成 Active Directory。
Jenkins 集成 Active Directory 是通过插件进行设置的,Active Directory 插件和 LDAP 插件都可以配置,本文使用的是 LDAP 插件,首先点击菜单【Manage Jenkins】-【Configure Global Security】:
然后在【Security Realm】中选中 LDAP:
接下来配置 LDAP 的一系列参数,其中 Manager DN 中配置一个域里面的账户信息,包含 CN,OU,DC,具体可以在加域的 Windows Server 上使用 dsquery 命令去查询,详见下图:
配置完成后就可以测试配置是否成功了,通过输入一个域账号的用户名和密码进行测试:
测试成功后会出现以下信息:
然后就可以使用域账号进行登录了。
DevOps之prometheus实现优雅的告警
目前prometheus的告警,常用的有grafana自带的告警和prometheus插件alertmanger的告警两种,这里测试下alertmanger的告警功能。
综合考虑,配合上prometheus operator,使用alertmanger,能够使监控告警这块的工作更加devops。
prometheus operator 在k8s中引入了自定义资源定义(CRSs)Prometheus、ServiceMonitor、PrometheusRule和Alertmanager。
所以在k8s中搭建好prometheus operator后,当我们需要监控一个项目时,我们的配置顺序是配置ServiceMonitor获取监控数据,配置PrometheusRule获取告警阈值,配置Alertmanager制定告警发送方式
如果我们已经完成了ServerMonitor的对象的编写,下面就要将监控好的重要数据,设置阈值,触发告警。
这里用spark 服务cpu使用率为例,介绍下PrometheusRule的写法
这样我们就完成一个PrometheusRule 资源对象的编写了,那么prometheus是怎么识别这个告警规则的呢。
我们先查看下prometheus的资源对象
kubectl get prometheus/k8s -n monitoring -o yaml
可以看到,prometheus会自动匹配标签为prometheus=k8s 和 role=alert-rules的prometheusRule的资源对象,这里我们可以体会到prometheus operator自动发现的魅力,我们只需要编写相应的告警规则yaml文件,然后apply一下,便可以制定告警。
在prometheus界面上面查看刚刚制定的告警规则
对于告警通知,需要考虑以下几点
及时性:邮件通知有时候不会注意,尤其是不在电脑面前,所以这里我们选择工作中使用的企业微信作为告警消息推送方式
简洁性:如果服务器性能等到达了一个warning值,会有很多相关的告警全部触发,所以这里我们需要配置分组、静默、抑制方案
容灾性:如果alermanger或者prometheus本身挂掉了,发不出告警怎么办,一般会采用另一个监控来监控prometheus,或者自定义一个持续不断的告警通知,哪一天这个告警通知不发了,说明监控出现问题了。很棒的一点是,prometheus operator已经考虑了这一点,本身携带一个watchdog,作为对自身的监控
创建一个alertmanger配置文件
删除之前的secret对象,并且创建新的
查看企业微信,这个时候会发现已经收到告警信息
这个watchdog便是对prometheus自身的监控。如果有需要,可以制定一条路由,匹配severity为none的告警,然后每24h重复一次,这样可以达到每天监控prometheus本身的效果,哪一天没收到watchdog,便可以知道prometheus挂了。
正常收到的告警信息
alertmanger也支持webhook告警,但是比如钉钉和企业微信机器人这类对消息头有特殊要求的,如果直接用webhook的话,需要安装一个插件封装下,才可以调用
Alertmanager还支持临时静默告警。有时候我们在处理告警,想要临时静默告警消息,或者测试环境中,进行压测,需要临时静默一段时间的告警,我们就可以直接通过Alertmanager的UI临时屏蔽特定的告警通知。通过定义标签的匹配规则(字符串或者正则表达式),如果新的告警通知满足静默规则的设置,则停止向receiver发送通知
目前Alertmanager只支持在UI上面进行临时静默告警
当静默规则生效以后,从Alertmanager的Alerts页面下用户将不会看到该规则匹配到的告警信息,微信机器人也不会发送响应的告警消息
什么是DevOps的基石?为什么顶级公司都离不开它?
CI/CD管道实现,或持续集成/持续部署,是现代DevOps环境的基石。它通过自动化应用程序的构建、测试和部署来弥补开发团队和操作团队之间的差距。在本文中,我们将介绍什么是CI/CD管道以及它是如何工作的。
在进入CI/CD管道之前,让我们先了解一下什么是DevOps?
DevOps是一种软件开发方法,它涉及软件的持续开发、持续测试、持续集成、持续部署,以及在整个开发生命周期中对软件的持续监控。这是所有顶级公司都采用的开发高质量软件和缩短开发生命周期的过程,从而提高客户满意度,这是每个公司都想要的。
想学习DevOps?就需要先理解它的生命周期。我们下面来看看DevOps的生命周期,并探讨一下它与各个软件开发阶段之间的关系。
CI代表了持续集成,而CD则代表着持续交付或持续部署。如上图所示,您可以将其视为类似于软件开发生命周期的一个过程
让我们具体来看看它是如何工作的。上述管道从逻辑的角度演示、说明了软件是如何沿着其生命周期的每个阶段向前移动,直至最终被交付给客户或部署到生产环境中。
让我们假设一个CI/CD的管道场景。例如:您要构建一个Web应用程序,并将它部署到在线的Web服务器上。那么您手头应该有一组负责代码编写的开发团队,他们将进一步去着手构建Web应用程序。
最初,开发团队将软件代码提交到版本控制系统(如git或svn)。接下来,代码进入构建阶段,这是管道的第一个阶段,开发人员将其代码导入其中,进而在打上适当的版本标签之后,再返回到版本控制系统。
假设我们手头已有一些Java程序代码,并且需要在执行之前进行构建。那么在经过了刚才的版本控制阶段,代码再次来到构建阶段,并在此完成编译。所谓构建阶段,实际上就是您从不同的存储库分支处获取该代码的所有特征,通过合并,最后使用编译器来对它进行编译的整个过程。
一旦完成了构建,我们就进入到了测试阶段。在此阶段中,我们将采取各种测试,其中包括:功能块测试、单元测试、以及可用性测试
在测试完成之后,我们将移步至部署阶段,即:将代码部署到暂存服务器或测试服务器中。在此阶段,您可以通过模拟器来查看具体的代码,及其整个应用程序的运行状况。
一旦成功部署了代码,您就可以开展另一轮可用性测试了。如果一切正常,那么该代码就可以被部署到生产环境了。
同时,如果在任何一个步骤中出现了错误,您完全可以通过电子邮件发回给开发团队,以便他们及时予以修复。然后,他们会将新的代码推送到版本控制系统中,让其重回管道。
此流程周而复始,直到我们完成所有的测试与验证,最终将代码部署并导入生产环境的服务器上。
至此,我们已经了解了CI/CD管道及其工作原理。下面,我们一起来看看何为Jenkins、如何通过Jenkins来部署演示性代码、以及自动化整个过程。
CI工具及其他在CI/CD管道中的重要性。
我们的任务是:从开发团队提交代码,到我们将其投入生产环境的全过程,实现自动化。因此,为了在整个软件开发生命周期中实现DevOps管道的自动化模式,我们需要用到一些相应的自动化工具。
Jenkins为我们提供了各种接口和工具,来自动化整个软件交付的过程。
首选,我们需要有一个Git的存储库,以供开发团队提交他们的代码。然后,Jenkins就从此处开始“接手”。它是一款前端工具,您可以自定义整个工作流或任务。在此,我们的工作就是要确保对特定工具、或特定应用程序,实现持续集成与交付的过程。
从Git的角度而言,Jenkins采取的是“拉代码”的模式,然后Jenkins转向交付阶段,实现从各个分支提交代码。构建阶段主要进行的是代码编译。如果是Java代码,我们可以使用Jenkins中诸如maven之类的工具,来编译代码,并且通过运行一系列测试来实现部署。同样,这些测试案例也都是由Jenkins来进行“监管”的。
之后,代码被转移到缓存服务器上,以便使用Docker来进行部署。最后,在经过一系列单元测试和可用性测试之后,代码“流入”生产环境。
Docker是一个虚拟环境,我们可以在其中创建服务器。实际上,创建一整台服务器、并部署需要测试的工件也只需要几秒钟的时间。
那么我们该如何使用Docker呢?
如前所述,通过存储库,我们不但可以永久性地存储各种镜像,还能几秒钟之内构建出自己的镜像系统,并且运行整个集群。另外,您还可以在任何环境中随时对它们进行按需复制。
动手实践:使用Docker和Jenkins来构建CI/CD管道
步骤 1:在VM中打开终端,使用以下命令启动Jenkins和Docker:
systemctl start jenkins
systemctl enable jenkins
systemctl start docker
注意: 如果系统显示“特权错误(privileges error)”,请在上述命令之前先使用sudo。
步骤 2:在指定端口上打开Jenkins。单击“新建项目”以创建新的作业。
步骤 3:选择一个自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job1),然后单击确定。
步骤 4:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。
步骤 5:然后依次点击构建(Build) - 选择执行(Execute)Shell。
步骤 6:逐条输入shell命令。在此,它将通过建立存档文件,来产生一个war文件。之后,它通过“拉”的方式获得相关代码,并且使用maven来安装软件包。注意,它只需安装各个依赖项,并对应用程序进行编译。
步骤 7:单击“新建项目”,以创建新的作业
步骤 8:选择自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job2),然后单击确定
步骤 9:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。
步骤 10:然后依次点击构建(Build) - 选择执行(Execute)Shell。
步骤 11:逐条输入shell命令。在此,它将进入集成阶段,并生成相应的Docker容器。
步骤 12:单击“新建项目”,以创建新的作业。
步骤 13:选择自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job3),然后单击确定
步骤 14:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。
步骤 15:然后依次点击构建(Build) - 选择执行(Execute)Shell。
步骤 16:逐条输入shell命令。在此,它将检查Docker的容器文件,然后将其部署到8180号端口上。请单击“保存”按钮。
步骤 17:现在依次点击Job1 - 配置(Configure)。
步骤 18:单击构建后操作(Post-build Actions) - 构建其他项目(Build other projects)。
步骤 19:输入在Job1之后构建的项目名称(此处为Job2),然后单击“保存”。
步骤 20:现在点击Job2 - 配置(Configure)。
步骤 21:单击构建后操作(Post-build Actions) - 构建其他项目(Build other projects)
步骤 22:输入在Job2之后构建的项目名称(此处为Job3),然后单击“保存”。
步骤 23:现在,我们将创建一个管道的视图。请点击“+”号。
步骤 24:选择“构建管道视图(Build Pipeline View)”,并输入视图的名称(此处我命名为CI CD Pipeline)。
步骤 25:选择初始化作业(initialJob,这里我输入了Job1),并单击确定。
步骤 26:单击“运行(Run)”按钮,以启动CI/CD进程。
步骤 27:在成功构建之后,请输入localhost:8180/sample.text。它将能够运行该应用程序。
至此,我们已经了解了如何使用Docker和Jenkins来创建一个CI/CD管道。
记住:DevOps的宗旨就是为了能够更快速、更可靠地创建出更高质量的软件,同时也能促进团队之间更密切的沟通和协作。
结语:以上就是首席CTO笔记为大家介绍的关于devops如何配置的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。