赞
踩
Devops一词来自于Development 和 Operations 的组合,从字面意思了解,就是让软件开发人员和运维人员更好的沟通合作,通过自动化流程让软件开发、测试、发布更快捷。
DevOps 强调通过一系列手段来实现既快又稳的工作流程,使每个想法(比如一个新的软件功能,一个功能增强请求或者一个 bug 修复)在从开发到生产环境部署的整个流程中,都能不断地为用户带来价值。这种方式需要开发团队和运维团队密切交流、高效协作并且彼此体谅。DevOps 可以加快一个想法从提出到部署的整个过程。DevOps 的核心在于,在应用的整个生命周期中,都要确保日常运维任务自动化和环境的标准化。
DevOps 团队经常会使用微服务架构来构建软件,并通过 API 将这些服务彼此相连。通过构建较小的功能单元,开发团队就可以加速交付。因此,您必须关注如何管理这些服务和 API,并制定敏捷集成等策略,让它们能够协同工作。
另外,我们不得不说下CI 、CD(Continuous delivery ) ,持续集成和持续部署管道(CI/CD)是实施开发运维 的一大重要成果。CI/CD 可帮助您频繁地向客户交付应用并检验软件质量,而且只需极少的人工干预。
具体而言,CI/CD 在整个应用生命周期内(从集成和测试阶段,到交付和部署)都引入了持续自动化和持续监控,让您能够快速识别和改正问题与缺陷。这些关联的事务通常被统称为"CI/CD 管道",由开发和运维团队以敏捷方式协同支持。
(1)版本控制系统Git
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
(2)代码托管平台 GitLab
GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
(3)代码评审工具 Gerrit
Gerrit是一个免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。
(4)版本控制系统 Mercurial
Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。
(5)版本控制系统 Subversion
Subversion 是一个版本控制系统,相对于的 RCS、CVS,采用了分支管理系统,其设计目标是取代CVS。
(6)版本控制系统 Bazaar
Bazaar 是一个分布式的版本控制系统,它发布在 GPL 许可协议之下,并可用于 Windows、GNU/Linux、UNIX 以及 Mac OS 系统。
(7)Apache Ant
Apache Ant是一个将软件编译、测试、部署等步骤联络在一起加以自动化的一个工具,大多用于Java环境中的软件开发。
(8)Maven
Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。因为 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本即可以构建简单的项目,而使用 Ant 则需要十几行。
(9)Selenium集成测试工具
(10)Python单元测试框架
(11)QUnit 是 jQuery 的单元测试框架。
(12)JMeter功能和性能测试的工具,完全用java实现。
(13)Gradle
Gradle 是可以使用 Groovy 来书写构建脚本的构建系统,支持依赖管理和多项目,相似 Maven。
(14)PHPUnit
PHPUnit 是一个轻量级的PHP测试框架。
(15)Jenkins 可扩展的持续集成引擎
jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。Jenkins作为一种持续集成的工具,功能包括:持续的软件版本发布/测试项目和监控外部调用执行的工作。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
Jenkins可以构建一个自动化的持续集成环境可以使用它来“自动化”编译、打包、分发部署应用,它兼容ant、maven、gradle等多种第三方构建工具,同时与svn、git能无缝集成,也支持直接与知名源代码托管网站,如github、bitbucket直接集成。
Jenkins的功能:
- 定时拉取代码并编译
- 静态代码分析
- 定时打包发布测试版
- 自定义操作,如跑单元测试等
- 出错提醒
持续集成的分类:
- 持续集成:指程序员在代码的开发工程中,可以频繁的将代码部署到主干上,并进行自动化测试
- 持续交互:指在持续集成的基础之上,将代码部署到线上测试环境
- 持续部署:指在持续交互的基础之上,将要部署的代码实现自动部署,包括持续交互、持续部署
持续集成的好处:
- 对重复的编译发布等操作进行抽象,减少重复过程
- 及早发现各种冲突和错误,减少风险
- 任何时间、任何地点生成可部署的软件
官网:https://www.jenkins.io/; 文档:https://www.jenkins.io/doc/book/
中文网站:http://www.jenkins.org.cn/
k8s官方插件:https://plugins.jenkins.io/kubernetes/
官方的Jenkins镜像网站:https://hub.docker.com/r/jenkins/jenkins/
1> 产品架构及原理
上图中Gitlab作为git server,功能和Github差不多,且是开源的,多用来搭建私有git server,同时提供了非常强大的web GUI,这样开发者互相review源代码的时候就会很方便。系统的工作流程大概分为以下几步:
1、开发者将新版本push到git server (Gitlab)。
2、Gitlab随后触发jenkins master结点进行一次build。(通过web hook或者定时检测)
3、jenkins master结点将这个build任务分配给若干个注册的slave结点中的一个,这个slave结点根据4一个事先设置好的脚本进行build,比如编译,测试,生成测试报告等等。这些原本需要手动完成的任务都可以交给jenkins来做。
4、我们在build中要进行编译,这里使用了分布式编译器distcc来加快编译速度。
jenkins工作原理:
jenkins先将源代码从github中拷贝一份到本地,然后根据设置的脚本进行build。整个系统的关键就是build脚本,用来告诉jenkins在一次集成中需要执行的任务。当代码提交至git,通过jenkins进行配置,将git代码提交至服务器,并且发布到指定的文件夹,jenkins有触发器配置,每次有新代码提交,git上代码会自动上传到服务器并自动更新发布。
持续集成的分类:
持续集成:指程序员在代码的开发工程中,可以频繁的将代码部署到主干上,并进行自动化测试
持续交互:指在持续集成的基础之上,将代码部署到线上测试环境
持续部署:指在持续交互的基础之上,将要部署的代码实现自动部署,包括持续交互、持续部署
Jenkins的分布式节点构建:
通过将构建过程分配到从属Slave节点上,从而减轻Master节点的压力,而且可以同时构建多个slave,起到负载均衡的效果。而且随着现在容器的盛行,我们可以将server节点和slave节点(又称agent节点)在容器或者基于Kubernetes中部署, 可以实现动态的资源分配等。其中,server 节点主要用于处理调度构建作业,把构建分发到slave节点进行实际执行,监视slave节点的状态(必要时让它们进行上线或者离线),记录和发布构建产物;agent节点主要用于处理Job任务等例如编译和发布, agent节点可以分为静态节点和动态节点; 静态节点是固定的一台vm虚机或者容器。动态节点是随着任务的构建来自动创建agent节点。master与agent通信常用2种方式:ssh和JNLP,其中JNLP与ssh方式是master主动连接slave不同,JNLP方式是slave主动连接master。
上图中k8s中部署jenkins,Jenkins Master 和 Jenkins Slave 以 Pod 形式运行在 Kubernetes 集群的 Node 上,Master 运行在其中一个节点,并且将其配置数据存储到一个 Volume 上去,Slave 运行在各个节点上,并且它不是一直处于运行状态,它会按照需求动态的创建并自动删除。这种方式的工作流程大致为:
当 Jenkins Master 接受到 Build 请求时,会根据配置的 Label 动态创建一个运行在 Pod 中的 Jenkins Slave 并注册到 Master 上,当运行完 Job 后,这个 Slave 会被注销并且这个 Pod 也会自动删除,恢复到最初状态。
常采用 Kubernates + Harbor + Jenkins + gitlab 的持续集成方案,大致工作流程:
手动 /自动构建 -> Jenkins 调度 K8S API -> 动态生成 Jenkins Slave pod -> Slave pod 拉取 Git 代码/编译/打包镜像 ->推送到镜像仓库 Harbor -> Slave 工作完成,Pod 自动销毁 -> 部署 到测试或生产 Kubernetes平台。(完全自动化,无需人工干预)
微服务部署与监控运维架构图:
jenkins+Kubernets动态节点自动化部署:
jenkins+maven自动部署项目到k8s:
Jenkins docker Kubernetes持续集成:
2> 部署参考:
(16)Capistrano
Capistrano 是用来并行在多台机器上执行相同命令的工具,使用用来安装一整批机器。
(17)BuildBot
BuildBot是进行系统自动化编译/测试周期最需要的软件,用于验证代码的变化。
(18)Fabric
fabric8 是开源 Java Containers(JVMs) 深度管理集成平台。能够很方便的从 UI 和 UX 一致的中央位置进行自动操作,配置和管理。fabric8还提供了少量非功能性需求,比方配置管理,服务发现故障转移,集中化监控,自动化等等。
(19)Tinderbox
(20)Travis CI
Travis CI 是一个基于云的持续集成项目, 可以支持大部分主流语言,比方:C,PHP,Ruby,Python, Nodejs等等。
(21)Continuum是最新的 CI 服务器之一,基于 Web 界面配置容易。
(22)LuntBuild自动构建工具。通过web接口可以很容易地进行系统的持续构建。
(23)CruiseControl
CruiseControl 是一个针对持续构建程序(项目持续集成)的框架,包括email通知的插件,Ant和各种各样的CVS工具,还提供了一个Web接口, 可随时查看当前的编译状况和历史状况
(24)Integrity是 Ruby 开发的持续集成服务器。
(25)Gump
Gump 是 Apache 的整合工具。它以 Python 写成、完全支持 Apache Ant、Apache Maven 等等软件组建工具。
(26)Go
Go 是 Google 开发的一种编译型,并发型,并具备垃圾回收功能的编程语言。
(27)Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
(28)Rocket
Rocket (也叫 rkt)是 CoreOS 推出的一款容器引擎,和 Docker 相似,帮助开发者打包应用和依赖包到可移植容器中,简化搭环境等部署工作。
(29)Ubuntu(LXC)
LXD 是 ubuntu 基于 LXC 技术的重构,容器天然支持非特权和分布式。LXD 与 Docker 的思路不同,Docker 是 PAAS,LXD 是 IAAS。LXC 项目由一个 Linux 内核补丁和少量 userspace 工具组成。这些 userspace 工具使用由补丁添加的内核新特性,提供一套简化的工具来维护容器。
(30)Chef
Chef 是一个系统集成框架,为整个架构提供配置管理功能。它也是一个自动化配置管理工具,用于定义和管理基础设施的状态。它使用 Ruby 语言来编写配置代码,并提供了丰富的资源和模板来管理系统配置。
(31)Puppet
Puppet 是一个基于模型驱动的自动化工具,用于配置和管理基础设施。它使用自定义的声明式语言来描述系统配置,并提供了丰富的资源类型和模块来管理各种操作系统和应用程序。
(32)CFengine
Cfengine(配置引擎)是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。Cfengine 适用于管理各种环境,从一台主机到上万台主机的机群均可使用。
(33)Bash
bash 是大多数Linux系统以及Mac OS X v10.4默认的shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。
(34)Rudder
Rudder 已改名为Flannel,为每个使用 Kubernetes 的机器提供一个子网。也就是说 Kubernetes 集群中的每个主机都有自己一个完整的子网,例如机器 A 和 B 可以有 10.0.1.0/24 和 10.0.2.0/24 子网。
(35)Powershell
通过windows环境的ps脚本来实现批量管理,很多产品开放了ps的脚本接口;
(36)RunDeck
RunDeck 是用 Java/Grails 写的开源工具,帮助客户在数据中心或者者云环境中自动化各种操作和流程。通过命令行或者者web界面,客户可以对任意数量的服务器进行操作,大大降低了对服务器自动化的门槛。
(37)Saltstack
Saltstack是一个事件驱动的自动化工具,用于配置管理、远程执行和监控。它使用 YAML 或 Python 语法来描述系统配置,并提供了强大的远程执行和事件驱动的功能。 可以把它看做是func的加强版+Puppet的弱化版。因基于Python编写,非常好用,可以基于EPEL快速部署。Salt 作为一个开源的工具,可轻松管理成千上万台服务器,方便管理你的基础架构。
(38)Ansible
Ansible 是用于发布、管理和编排计算机系统的自动化运维工具,Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。它是一个功能强大的自动化工具,可用于配置管理、应用程序部署、编排和远程执行任务。只需使用简单的 YAML 语法和 SSH 协议就能管理和配置众多远程主机。
ansible是基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
如上图所示,Ansible由5 个部分组成:
Ansible:核心
Modules:包括 Ansible 自带的核心模块及自定义模块
Plugins:完成模块功能的补充,包括连接插件、邮件插件等
Playbooks:剧本,定义 Ansible 多任务配置文件,由Ansible自动执行
Inventory:定义 Ansible 管理主机的清单
任务执行流程:
http://blog.xiaorui.cc/category/ansible/
http://lixcto.blog.51cto.com/4834175/d-4
https://github.com/ansible/ansible-examples
http://rfyiamcool.blog.51cto.com/1030776/d-51
http://dl528888.blog.51cto.com/2382721/d-4/p-1
http://edu.51cto.com/course/course_id-2220.html
http://edu.51cto.com/course/course_id-2032.html
http://www.shencan.net/index.php/category/%e8%87%aa%e5%8a%a8%e5%8c%96%e8%bf%90%e7%bb%b4/ansible/
http://docs.ansible.com/modules_by_category.html
http://www.ansible.cn/docs/
(39)OpenShift
OpenShift 是由红帽推出的一款面向开源开发人员开放的平台即服务(PaaS)。 OpenShift通过为开发人员提供在语言、框架和云上的更多的选择,使开发人员可以构建、测试、运行和管理他们的应用。红帽 OpenShift 4 就是一个支持 DevOps 的企业就绪型 Kubernetes 平台。
(40)Cloud Foundry
Cloud Foundry 是VMware于2011年4月12日推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发 人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
(41)Kubernetes
Kubernetes 是来自 Google 云平台的开源容器集群管理系统。基于 Docker 构建一个容器的调度/容器编排服务。该系统可以自动在一个容器集群中选择一个工作容器供使用。其核心概念是 Container Pod。可用于自动化部署、扩展和管理容器化应用程序。它提供了强大的容器编排、服务发现和自动伸缩功能,使得应用程序的部署和管理更加简单和可靠。
(42)Mesosphere
Apache Mesos 是一个集群管理器,提供了有效的、跨分布式应用或者框架的资源隔离和共享,可以运行Hadoop、MPI、Hypertable、Spark。
(43)Puppet
Puppet,您可以集中管理每一个重要方面,您的系统使用的是跨平台的规范语言,管理所有的单独的元素通常聚集在不同的文件,如客户, CRON作业,和主机一起显然离散元素,如包装,服务和文件。
(44)Razor
(45)Docker Swarm
Docker Swarm 是一个Dockerized化的分布式应用程序的本地集群,它是在Machine所提供的功能的基础上优化主机资源的利用率和容错服务。具体来 说,Docker Swarm支持客户创立可运行Docker Daemon的主机资源池,而后在资源池中运行Docker容器。Docker Swarm可以管理工作负载并维护集群状态。
(46)Vagrant
Vagrant 是一个基于 Ruby 的工具,用于创立和部署虚拟化开发环境。它使用 Oracle 的开源 VirtualBox 虚拟化系统,使用 Chef 创立自动化虚拟环境。
(47)Powershell
(48)OpenStack Heat
(49)Logstash
Logstash 是一个应用程序日志、事件的传输、解决、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。
(50)CollectD
Collectd 是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。比方以RRD 文件形式。
(51)StatsD
StatsD 是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后台服务,例如 Graphite。
(52)Nagios
Nagios 是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或者远程主机以及服务,同时提供异常通知功能等。
(53)Ganglia
Ganglia 是一个跨平台可扩展的,高 性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据存储和可视化。
(54)Sensu
Sensu 是开源的监控框架。主要特性:高度可组合;提供一个监控代理商,一个事件解决器和文档 APIs;为云而设计;Sensu 的现代化架构允许监控大规模的动态基础设备,能够通过复杂的公共网络监控几千个全球分布式的机器和服务;热情的社区。
(55)Zabbix
Zabbix 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源处理方案。
(56)ICINGA
ICINGA 项目是 由Michael Luebben、HendrikB?cker和JoergLinge等人发起的,他们都是现有的Nagios项目社区委员会的成员,他们承诺,新的开源项 目将完全兼容以前的Nagios应用程序及扩展功能。
(57)Graphite
Graphite 是一个用于采集网站实时信息并进行统计的开源项目,可用于采集多种网站服务运行状态信息。Graphite服务平均每分钟有4800次升级操作。
(58)Kibana
Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作。
(59)Prometheus
(60)ducter:
Ducter是面向设备、产品的分布式命令平台,为第三方提供针对设备与产品的信息收集或操控的命令通道,命令的action由用户脚本实现:shell、python、ruby等。。作为国内已在多个公司投入使用的一款开源产品运维管理系统。 Ducter是产品的管理平台,实现任意产品的管理、监控及用户自定义的发布与回退,为第三方提供产品运行状况的实时数据及事件通知。Ducter是集设备管理、产品管理、服务上线和服务器操作等于一体的运维管理系统。该系统分为Dcuter-Server/Ducter-Web两个部分。
puppet、cfengine:面向配置
ducter:面向交互,可与puppet等集成。
与Mesos的关系:
Mesos:资源管理、调度平台。
Ducter:分布式任务与命令平台,服务管理平台,资源及服务调度有第三方实现。
(61)CheungSSH
CheungSSH自动化运维工具,批量管理Linux服务器,自动监控服务器,自动部署Tomcat,Apache软件,管理GitHub,批量执行命令,传送文件,全自动化过程。计划任务功能,权限的审计,权限的控制,和操作记录。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。