当前位置: 首页 > 科技观察

自动化运维经验谈,以及为什么Docker是革命性的

时间:2023-03-21 20:12:25 科技观察

自动化运维经验,Docker为何具有革命性在此背景下,定位于为互联网公司提供运维服务的云络科技接触了越来越多的客户,对运维水平有了相当的了解。国内互联网公司。他们看到的现状是什么?技术团队应该从哪里开始实现运维的自动化?Docker这样的技术对开发者和运维工程师有什么影响?在这次采访中,云络科技的CEOSteveMushero谈到了这些话题。嘉宾简介SteveMushero从硅谷来到中国,在全球多个行业和公司拥有超过25年的技术管理经验,包括IT运营、软件开发、物流、制造和机械。曾在土豆(中国)、Intermind、NewVineLogistics和AdvancedManagementSystems等企业担任CTO。为某全球财富5***公司的全球化项目提供指导。自动化从构建和测试开始运维自动化的关键是标准化。当你拥有了成熟的团队和标准化的流程,那么运维自动化自然而然就来了。如果您一无所有,则需要先确定优先级。当然,我们的目标是把所有的流程都标准化,先做哪些呢?做起来比较简单,也比较重要。我认为构建和测试的过程是最基本的第一步。这对于交付产品的公司来说更容易,对于互联网公司来说更复杂,测试比构建更复杂,但这是基础。一旦构建和测试过程标准化,就可以进行自动化工作了。但是,我见过的很多公司连Git都没有,还在用最原始的FTP推送来更新代码。我的观点是,如果你没有用过Git这样的工具,你根本不用考虑自动化,因为条件完全不成熟。所以,假设你的团队可以很好地使用Git,然后你建立了一个标准化的构建和测试流程,然后你可以使用工具来自动化它。这可能是像Jenkins这样的工具,但Jenkins更复杂。如果你只是一个非常简单的网站,那么自己写一些脚本来自动化是比较合适的。至此,我们说的不是自动化运维,而是自动化工具链。工具链就是开发工具链,从IDE,到代码提交,代码审查,构建,到测试,还是属于开发的范畴。之后就是运维范围,就是部署到生产环节。部署运维自动化最关键的是运营环境的定义。我们的目标是让各个阶段的代码完全一致,即开发人员在笔记本上写的代码,集成阶段的代码,线上环境的代码都是一致的。Docker之所以如此受欢迎,是因为它可以帮助开发人员轻松地使他们的开发环境与生产环境保持一致。环境的标准化是指目录、路径、配置文件、用户名和密码的存储、访问权限、域名等各种细节的一致性和标准化。这涉及到很多方面,也是自动化运维中最难的部分。这里需要注意的是,像Puppet这样的工具并不是魔法。您需要自己为您的环境定义一套描述方法,而工具无法为您完成这项工作。无论是Puppet还是Jenkins,您都可以根据您的定义来管理您的环境。您确定用户名和密码的存储方式,并确定配置文件的路径。开发者喜欢将各种配置、url等参数硬编码到代码中,速度快;他们也喜欢用一些乱七八糟的手段让软件通过测试,但是如果你要搭建一个真正的系统,这些小技巧根本就没有用。你要强制他们用标准的方式写代码,比如强制他们把用户名和密码写在固定的地方,然后你可以告诉Puppet配置文件在这里,测试环境使用这个配置,然后将该配置用于生产链接。这里很简单。线上环境问题排查对于线上环境问题的发现和解决,可以通过工具自动发现和提醒大部分基础问题,比如磁盘空间不足,比如MySQL崩溃,比如访问网站时出现错误页面等。有许多工具可以捕获他们的错误信息。更困难的是解决性能问题,例如网站速度缓慢的原因。我们经常看到客户的开发团队提交新代码后引入的问题。当测试没有做好时,这是很常见的。其实很多东西是很难测试的,尤其是性能;互联网公司尤其没有测试文化。与传统企业不同,互联网开发者大多专注于功能的实现。有许多测试工具和流程,例如关卡开发。理想情况下,每个人都应该在提交代码之前进行测试。但是由于无论如何都没有人这样做,所以拥有工具来提供帮助仍然很有用。比如像NewRelic这样的工具就非常强大,它可以在代码层面发现问题。我们有时也会使用我们的工具来帮助客户进行测试,包括负载测试。性能测试是一件非常困难的事情。既不好用,也不容易别人用。一般来说,你需要一个专门的团队来做性能测试,但是互联网公司基本没有(Google、Facebook等除外),你想做也找不到人。所以明智地使用你的工具。Docker的含义Docker很有趣,很火,很新,当然也有很多问题。目前没有多少大规模的部署案例,所以不断有人发现问题很正常。总的来说,Docker对于开发者来说是一个非常友好的东西:简单的实现了环境在不同机器上的标准化,可以方便的使用,在不同的云平台上都有支持。使用Docker对运维来说是一个很大的挑战。我们帮助一个客户做了大规模的Docker部署,一个经验丰富的DevOps团队也花了几个月的时间。为什么?Docker容器类似于VM。从运维的角度,想像管理VM一样管理Docker容器,但是Docker容器默认没有SSH,很难排错。怎么登录容器查看呢?里面出了什么问题?故障排除,这是一个地狱般的问题。Docker容器默认不能运行cron任务或者批处理任务,也就是说你不能让它自动做备份之类的,这是最基本的运维工作,这是另一个必须要解决的问题。否则,你根本无法构建一个自动化的管理云环境,而要解决这个问题,你需要做一些事情,比如改造它的架构,但是你引入了很多新的问题来解决。Docker有很好的网络机制,但是也很复杂,所以我们绕过了所有的Docker网络,这也引入了一些问题。Docker容器也没有很好的重启方式,因为你很难分辨哪个是哪个,这需要一个管理系统来进行一些良好的命名映射。综上所述,要在大型部署中玩好Docker,需要方方面面的高手,也需要时间。我不怀疑Docker是趋势,这是一个非常好的概念,将大大改善开发人员的世界。如果你的系统比较简单,不是很大,那么用Docker完全没问题。而且它有据可查,这也是一个加号。我相信这将是未来。只是需要时间来完善。这并不奇怪:想想KVM。其实KVM做的事情很简单,专注于系统层与CPU、内存、存储、网络的交互。这不难理解,但即便是一个目标如此简单的项目,多年来也陷入困境。状态是无穷无尽的,人们围绕着它不断开发工具,完善它,才到了今天可用的状态。Docker要复杂得多,有很多层次:它是一个环境管理系统,它是一个打包系统,它是一个文件系统,它包含了一套网络机制,它是一个repo系统,它是一个代码系统,以及很快。基本上,Docker想把所有东西都扔进一个五脏六腑的小盒子里。当您使用Docker提交代码时,您做的事情与以前完全不同。以前我们只是提交代码,但是在Docker中我们提交的是整台电脑(虚拟机)。想象一下,这就像交换计算机。开发商将整台电脑交给运维。往回走,需要处理很多变化,比如变化的IP、用户名、文件系统等等。这是一种全新的方式。