《DevOps实战:VMware管理员运维方法、工具及最佳实践》——1.2 采用系统思维

简介:

本节书摘来自华章计算机《DevOps实战:VMware管理员运维方法、工具及最佳实践》一书中的第1章,第1.2节,作者:小特雷弗 A. 罗伯茨(Trevor A. Roberts Jr.)乔希·阿特韦尔(Josh Atwell)埃格勒·西格勒(Egle Sigler)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

1.2 采用系统思维

系统思维意味着将涉及软件发行版本部署的所有团队当成一个紧密相连的单位,而不是日程安排相互冲突的多个分散团队。这些团队包括信息安全、运营、开发、质量保证(QA)、产品管理等。
在我们的讨论中所提到的系统指的是经历整个软件开发生命期(规划、开发、QA、部署和维护)的任何项目,不管这些项目是供内部还是外部消费的。
1.2.1 改变团队的互动方式
我们将焦点放在第一件应该做的事:成为开发团队的顾问。和负责定期规划会议的开发团队领导(在敏捷的术语中称为产品负责人和敏捷教练)对话,要求加入他们的一些回忆。主动倾听可能需要基础设施采购/部署的任何团队目标或者可交付成果。下面的几段强调来自开发团队的需求/规格示例,说明了在这种会议期间你所能提供的反馈/专业意见。
“我们需要用于客户源代码的长期数据存储。”
开发团队不一定直接说出他们需要一个新的磁盘阵列,甚至没有意识到需要采购存储设备。但是,对存储系统的认识会提示你,有必要和存储主题专家(SME)一起进行容量规划。
你还需要在开发人员讨论用户数据生命期管理时考虑不同的存储层次。
“我们需要在生产环境中运行独立于客户使用实例的Taao项目实例。”
这立即让你想起附加虚拟网络或者虚拟防火墙的需求,这能够使生产和客户数据流量与内部流量分隔开。你还需要咨询信息安全团队,了解提供客户数据分离保证的审计过程。
“在我们的最后一个发行周期中,代码在我的便携电脑上成功编译和运行,但是在部署到生产环境时崩溃。”
开发人员可能提出一个在之前的代码部署中遇到的问题,提交的代码在她的便携电脑上工作正常,但是在生产部署时发生故障。她的本地开发环境运行的是Ubuntu虚拟机(VM),和非军事区(DMZ)中的CentOS服务器上实施的安全补丁或者防火墙规则不匹配。所以,需要立即打补丁以满足最后限期(对于开发团队和运营团队都是一个漫长的夜晚)。你对Vagrant和Packer等环境构建工具和Puppet、Chef及Ansible等配置管理工具的认识,使你能够构建一个用于开发人员便携电脑且匹配生产服务器规格的标准测试环境。
由于开发团队领导了解了运营团队在发行周期早期为了缓解开发环境问题所做出的努力,你在协调与此努力相关的一些活动时就会更容易一些。首先,这意味着开发团队需要确保其成员不会将任务推给其他团队。(也就是说,“现在是周五下午5点了,我不知道代码能不能在生产环境中正常工作,但是无论如何,我都会把它提交到存储库!”)
某组织在最近的PuppetConf上发表讲话,分享其代码部署策略:当代码部署到生产环境时,编写代码的开发人员参与更改窗口期的轮班。这样,如果代码中出现任何复杂现象,他们可以立即协助运营团队查错和解决。坦率地说,这也使开发人员有动力编写更好的代码,避免在凌晨3点接到电话去修复缺陷。
在继续之前,对于可能阅读本书的经理,Jez Humble强烈建议:不要构建新的DevOps团队!雇用在DevOps方法学上有专业能力的开发人员、QA工程师、运营人员是个好主意,但是创建不同于组织其余团队的全新DevOps团队只会带来新的“竖井”,可能对你的目标造成反作用。相反,应该像前面提到的那样,继续更好地协调各个团队,使他们像一个团队那样思考和行动,而不是各自寻求自己的最大利益。
1.2.2 改变基础设施部署方法
数据中心的一些扰人而又常见的现象可能妨碍系统的进展:手工制作的“金映像”、雪花服务器和易碎箱。
服务器(不管是物理还是虚拟服务器)部署的常用方法是维护一组包含必要更新、补丁、设置等内容的操作系统配置,人工运用这些配置使系统立刻为部署做好准备。这些配置被称作“金映像”,传统上采用ISO形式,已经根据某个运行手册人工应用补丁。最近,金映像已经采用模板VM的形式保存。但是,老实说:金映像也可能生锈!
金映像本身没有什么问题。但是,构建它们的方式可能带来问题。如果人工构建,该过程可能是一个全职工作,必须跟踪模块更新、安全补丁等,然后重新配置ISO/模板VM供以后使用。必须有一种更有效的方法,也的确有!
使用第4~13章介绍的配置管理技术,可以自动构建映像。随着服务器配置更改并登记到Git(第3章中介绍)等存储库,Jenkins(参见第18章)等持续集成(CI)系统可以输出一个更新的金映像。CI系统可以使用Packer等工具生成用于Vagrant、虚拟化管理器和云提供商的模板VM。
Martin Fowler提出了“雪花服务器”的思路,雪花服务器是一台物理机器或者VM,最初是为了保持标准化的良好愿望。但是,不管是为了完成故障报告而进行快速修复、高管要求的特殊项目还是其他原因,这种服务器都变成高度定制的。这些特殊更改解决了短期问题,但是会造成长期的麻烦。当对这些服务器上的软件包升级时会发生什么?安全补丁甚至操作系统升级又会发生什么?
如何解决雪花服务器的问题?首先,我们通过登录到服务器命令行界面强制避免任何更改;不允许一次性执行前端和软件包更新工具或者更改配置文件。所有服务器更改都只能通过配置管理技术进行。
对于现有的雪花服务器,必须进行一些乏味而不必要的工作。首先,检查服务器配置,以便准确地知道需要修改的配置文件、需要安装的软件包和其他需要包含在配置管理脚本中的关键设置。多次迭代构建和测试服务器,每次都对配置管理脚本进行调整,直到测试环境与雪花服务器完全相同。将更改提交到源代码库,就可以拥有一个可在生产服务器无法恢复时使用的可重复构建过程。
易碎箱这一术语来源于Nassim Nicholas Taleb的《Antifragile》一书,描述了一台运行关键软件栈的物理或者虚拟服务器,每个人都害怕接触它,因为业务可能因此遭遇重大故障。通过许多支持电话/专业服务,这台服务器已经达到了一个稳定状态,糟糕的是,管理该服务器的SME离开了公司。
如果稳定性确实是个考虑因素,进行物理-虚拟转换或者虚拟-虚拟迁移到VMware vSphere平台是个好主意。这样,你可以利用分布式资源调度器(DRS)、存储DRS、高可用性(HA)等VMware基础设施可靠性机制。在服务器转换且拥有成功的业务持续性工作流(备份、快照)后,就可以考虑是否可以利用前面雪花服务器的弥补措施复制这一服务器。开发和QA工程师就可以很容易地构建一个测试环境而不接触易碎箱。
1.2.3 改变软件开发和部署方法
我们已经解决了基础设施部署的速度和质量问题,那么团队如何减少从开发、展示到生产阶段代码移动引起的缺陷?众所周知,在开发周期中越早发现缺陷,修复的代价就越低。这就是我们首先要有QA团队的原因。
但是,如果我们可以在代码移交给QA工程师之前就捕捉到缺陷,又会如何?这就是前面提到的持续集成系统的用途所在。我们后面会更详细地讨论CI,基本要点是,当你将源代码提交到存储库时,CI系统可以修改并设置为自动执行对提交代码的一系列单元测试。在过程结束时,可以构建一个软件包并自动分发给QA团队,实施他们的全面测试。
1.2.4 经常收集和响应有用的系统反馈并相应调整
系统思维的转变只有在有能力监控和分析系统性能时才能成功。业务的变化节奏似乎是指数级的,消费者对系统响应能力和正常运行时间有更高的预期,被动的问题解决方案不再成为选择;相反,你的团队必须在问题发生之前预测到它们,以维护系统稳定性。
日志分析可能是最重要的工具之一,尤其是在启用了二进制代码的调试选项时。如果你的环境由较多的服务器组成,就应该采用某种形式的自动化日志分析。这方面的选择很多,包括VMware vRealize Log Insight、Splunk甚至Logstash、Elasticsearch和Kibana等开源工具(第17章中介绍)。这些解决方案使系统管理员能够检查重复的事件与低下的性能关联。当团队更加熟悉这些工具,且更擅长识别问题时,系统的实用性就会提升。

相关文章
|
21天前
|
缓存 运维 监控
运维之道:从故障响应到系统优化的实战之旅
在信息技术飞速发展的今天,高效、可靠的系统运维已成为企业IT部门的核心任务。本文将通过一系列真实案例分析,深入探讨运维团队如何从日常的故障响应出发,逐步过渡到系统性能的深度优化。我们将一起探索运维的最佳实践,包括自动化工具的应用、性能监控的重要性以及如何构建一个弹性和高可用性的系统架构。文章旨在为读者提供一套完整的运维解决方案,帮助他们在面对复杂多变的技术环境时,能够迅速定位问题并实施有效的解决策略。
101 0
|
19天前
|
人工智能 运维 Cloud Native
实战基于阿里云的AIGC在运维领域的探索
传统运维模式已难以应对日益复杂的海量数据和业务需求,效率低下,故障难解。而人工智能的崛起,特别是AIGC技术的出现,为运维领域带来了新的机遇。AIGC能够自动生成运维脚本、分析海量数据,预测潜在故障,甚至提供解决方案,为运维工作注入智能化力量,推动运维向更高效、更智能的方向发展。
16241 18
实战基于阿里云的AIGC在运维领域的探索
|
3天前
|
运维 监控 Unix
运维必看,Linux 远程数据同步工具详解。
运维必看,Linux 远程数据同步工具详解。
|
14天前
|
运维 Kubernetes 网络协议
Istio的运维-诊断工具
Istio的运维-诊断工具
14 2
|
17天前
|
运维 监控 安全
自动化运维工具的设计与实现
【8月更文挑战第2天】在现代IT架构中,自动化运维工具是提高系统稳定性、效率和安全性的关键。本文将深入探讨自动化运维工具的设计原则与实现过程,通过一个具体的代码示例来展示如何构建一个简易的自动化部署脚本。文章旨在为读者提供一套完整的方法论和实操指导,以应对日常运维任务的挑战。
16 3
|
25天前
|
机器学习/深度学习 边缘计算 运维
智能化运维的演进之路:从脚本工具到AIOps
在数字化浪潮下,企业运维管理正经历一场深刻的变革。本文将探索智能化运维的发展脉络,从最初的脚本工具应用到当下的AIOps实践,揭示这一过程中的关键技术进步和理念更新。我们将通过具体案例,展示如何利用大数据、机器学习等技术提升运维效率,降低人力成本,并预测未来运维领域的发展趋势。
|
26天前
|
API 运维
开发与运维工具问题之开源的大语言模型能够自由与外部工具交互如何解决
开发与运维工具问题之开源的大语言模型能够自由与外部工具交互如何解决
25 2
|
4天前
|
负载均衡 安全 虚拟化
VMware产品问题之在产品体系中实现平台化思维如何解决
VMware产品问题之在产品体系中实现平台化思维如何解决
6 0
|
1月前
|
人工智能 运维 自然语言处理
|
1月前
|
运维 监控 Devops
DevOps(Development和Operations的组合)是一种强调软件开发(Dev)和信息技术运维(Ops)之间协作与沟通的文化、方法和实践。
DevOps(Development和Operations的组合)是一种强调软件开发(Dev)和信息技术运维(Ops)之间协作与沟通的文化、方法和实践。