DevOps:优于其各部分之和
当我们这些长期从事系统管理员工作的人开始谈论 DevOps 时,通常会有点紧张。这是一个被神秘和困惑包围的 IT 话题,很像几年前的术语“云计算”。值得庆幸的是,DevOps 不是系统管理员需要害怕的东西。它不是让开发人员能够完成传统系统管理员工作的软件,而只是一个使开发和系统管理都变得更好的概念。像 Chef 和 Puppet(以及 Salt Stack、Ansible、New Relic 等等)这样的工具不是“DevOps”,它们只是让 IT 专业人员能够采用 DevOps 思维模式的工具。让我们从那里开始。
什么是 DevOps?让十个人定义 DevOps,你可能会得到 11 个不同的答案。(这些数字在二进制中也适用,尽管我建议更大的样本量。)问题是很多人将 DevOps 与 DevOps 工具混淆了。如今,当人们问我“什么是 DevOps?”时,我通常会回答:“DevOps 不是一个事物,而是一种做事的方式。”
从历史上看,系统管理和开发的世界一直非常分离。作为一名系统管理员,我倾向于从与开发人员不同的角度思考计算。对我来说,像可扩展性和冗余这样的东西至关重要,我的成功通常以正常运行时间来衡量。如果事情正在运行,我就成功了。开发人员有不同的工作方式,需要考虑效率、稳定性、安全性和功能等方面。他们的成功通常以可用性来衡量。
希望您正在思考我列出的特性对于开发和系统管理都很重要。事实上,DevOps 正是从这种思维模式中诞生的。如果我们采用开发领域中的最佳实践,并将它们注入到运营流程中,这将使系统管理更高效、更可靠,并最终变得更好。对于开发人员来说也是如此。如果他们可以开始将自己的硬件“编码”作为开发过程的一部分,他们就可以更快、更高效地生产和部署代码。这基本上是 IT 领域的 Reese's Peanut Butter Cup。结合两个部门的优势,创造的结果优于其各部分之和。
一旦你理解了 DevOps 的真正含义,就很容易理解人们如何将工具(Chef、Puppet、New Relic 等等)与 DevOps 本身混淆。这些工具使人们如此容易地采用 DevOps 思维模式,以至于它们几乎成为这个概念本身的代名词。但不要被玩具所迷惑——一个组织可以通过简单地关注沟通和跨学科学习,转向非常成功的 DevOps 工作方式。这些工具使它更容易,但就像拥有一把耙子并不能使人成为农民一样,将 DevOps 工具楔入你的组织并不能为你创建一个 DevOps 团队。也就是说,就像任何农民都欣赏一把好耙子一样,任何 DevOps 团队都将受益于使用 DevOps 世界中的大量工具。
系统管理员的新耙子在本文中,我想谈谈如何将 DevOps 工具用作系统管理员。如果你是一名系统管理员,并且没有使用配置管理工具来跟踪你的服务器,我敦促你查看一下。我将谈论 Chef,因为在我的日常工作中,我最近教了一门关于如何使用它的课程。由于你基本上是在学习 DevOps 工具背后的概念,因此你专注于 Chef 也没关系。Kyle Rankin 是 Puppet 的忠实粉丝,从概念上讲,它只是另一种类型的耙子。如果你有自己喜欢的应用程序,而不是 Chef,那也很棒。
如果我完全诚实,我必须承认我曾犹豫学习 Chef,因为它听起来很可怕,而且似乎没有做任何我用 Bash 脚本和 cron 作业没有做的事情。此外,Chef 使用 Ruby 编程语言作为其配置文件,而我的编程技能在
10 PRINT "Hello!"
20 GOTO 10
尽管如此,我还是必须了解它,这样我才能教这门课。我可以自信地告诉你,这是值得的。Chef 基本上不需要任何编程知识。事实上,如果没有人提到它的配置文件是 Ruby,我会认为 conf 文件的语法是特定的和唯一的。奇怪的配置文件并不新鲜,老实说,Chef 的配置文件很容易理解。
Chef:其无限潜力DevOps 是一个强大的概念,因此,Chef 可以做令人惊奇的事情。真的。使用创造性的“配方”,可以在云中启动数百台服务器,部署应用程序,根据需要自动扩展,并将计算的每个方面都视为只是从简单代码调用的函数。你可以在本地服务器上运行 Chef。你可以使用 Chef 公司的基于云的服务,而不是托管服务器。你甚至可以完全无服务器地使用 Chef,在单台计算机上以单机模式部署代码。
一旦设置好,Chef 就支持类似基础设施的多个环境。你可以拥有一个与生产完全分离的开发环境,并且完全通过配置文件的版本号来区分。你可以让你的配置完全与平台无关地运行,因此无论你使用 CentOS、Ubuntu、Windows 还是 OS X,启动 Apache 服务器的配方都将有效。基本上,Chef 可以成为组织整个基础设施的中心资源,包括硬件、软件、网络甚至用户管理。
值得庆幸的是,它不必做所有这些。如果使用 Chef 意味着让你的整个组织天翻地覆,那么没有人会采用它。Chef 可以从小处安装,如果你愿意,它可以扩展以处理你公司中越来越多的事情。继续我的农民类比,Chef 可以是一把简单的花园耙子,也可以是一台巨大的柴油联合收割机。有时,你只需要一把花园耙子。这就是你今天要学习的东西。Chef 工作方式的简单介绍,允许你在以后构建或不构建它。
零零碎碎最初,这将是一篇关于为你的环境设置 Chef 的具体细节的多部分文章。我仍然可能会为 Chef 或另一个 DevOps 配置自动化包做一个类似的系列,但在这里,我希望每个人不仅要理解 DevOps 本身,还要理解 DevOps 工具的作用。再说一遍,我的例子将是 Chef。
Chef 的核心功能是作为所有配置文件的中央存储库。这些配置文件还包括在服务器上执行功能的能力。如果你是一名系统管理员,可以将其视为中央的、动态的 /etc 目录,以及所有 Bash 和 Perl 脚本都存放的地方。参见图 1,了解 Chef 信息流的可视化效果。

图 1. 这是基本的 Chef 设置,显示了数据如何流动。
管理员工作站是创建配置文件和脚本的计算机。在 Chef 的世界中,这些被称为食谱和菜谱,但基本上,它是完成所有人工工作的地方。通常,本地 Chef 文件保存在像 Git 这样的修订控制系统中,以便在发生故障时可以回滚配置。这是我的第一个线索,表明 DevOps 可能会使系统管理员的工作变得更好,因为过去我所有的配置修订控制都是通过在编辑配置文件之前复制一份配置文件,并在文件名末尾添加 .date 来完成的。与开发人员世界中的代码修订工具相比,这种方法(或者至少是我的方法)充其量是粗糙的。
在管理员工作站上创建的食谱和菜谱描述了诸如应该在服务器节点上安装哪些文件、配置应该是什么样子、应该安装哪些应用程序以及诸如此类的内容。Chef 在平台中立性方面做得非常出色,因此如果你的食谱安装了 Apache,它通常可以安装 Apache,而无需你指定它安装在什么类型的系统上。如果你曾经对 Red Hat 变体将 Apache 称为“httpd”,而 Debian 变体将其称为“apache2”感到沮丧,你就会喜欢 Chef。
一旦你创建了配置服务器所需的食谱和菜谱,你就可以将它们上传到 Chef 服务器。你可以通过其 Web 界面连接到 Chef 服务器,但是很少有实际工作是通过 Web 界面完成的。大多数配置都是在管理员工作站的命令行上完成的。老实说,这是 Chef 有点令人困惑的地方,但每次更新都会有所改善。有些东西可以通过网页界面修改,但很多东西不能。有些东西只能在网页上修改,但并不总是清楚哪些或为什么。
随着代码、配置和文件上传到 Chef 服务器,注意力转向节点。在节点成为 Chef 环境的一部分之前,必须对其进行“引导”。该过程并不困难,但要使用 Chef 是必需的。客户端软件安装在每个新节点上,然后从 Chef 服务器拉取配置文件和命令。事实上,为了让 Chef 正常运行,必须将节点配置为定期轮询服务器以查找任何更改。没有“推送”方法将更改或更新发送到节点,因此定期客户端更新很重要。(这些通常通过 cron 执行。)
在这一点上,当一个简单的 FOR 循环和一些 SSH 命令可以从工作站完成相同的任务,并且具有无需 Chef 客户端安装或定期轮询的优势时,拥有所有这些额外的步骤似乎有点傻。我承认,这起初也是我的想法。然而,当像 Chef 这样的程序真正证明其价值时,是在节点数量开始增加时。一旦创建了公认复杂的设置,启动新服务器实际上只是一个引导节点的单行命令。使用像 Amazon Web Services 或 Vagrant 这样的东西,甚至计算机本身的创建也可以成为 Chef 过程的一部分。
托管还是不托管Chef 的人在获取 Chef 服务器实例的过程中,只需在其云基础设施上注册一个免费帐户即可。他们维护一个“Chef 服务器”,允许你将所有代码和配置上传到他们的服务器,因此你只需要担心你的节点。他们甚至允许你免费连接五个服务器节点。如果你有一个小型环境,或者你没有资源托管自己的 Chef 服务器,那么仅仅使用他们预配置的云服务是很诱人的。但是,请注意,它是免费的,只是因为他们希望你开始依赖该服务,并最终支付连接超过最初五个免费节点的费用。
他们有一个基于企业的自托管解决方案,可以将 Chef 服务器移动到你的环境中,如图 1 所示。但重要的是要意识到 Chef 是开源的,因此有一个完全免费且功能齐全的开源服务器版本,你也可以下载并安装到你的环境中。你确实失去了他们的支持,但如果你刚刚开始使用 Chef 或只是在玩它,那么拥有开源版本是一个明智的选择。
如何开始?关于 Chef 最好的消息是,存在令人难以置信的资源来学习如何使用它。在 http://getchef.com 网站上,有一个视频系列概述了在你的服务器节点上安装 Apache 的基本设置,作为该过程的示例。此外,还有很棒的文档描述了开源 Chef 服务器的安装过程,如果你想尝试这条路。
一旦你熟悉了 Chef 的工作方式(真的,去观看培训视频,或者在其他地方找到其他 Chef 基础知识培训),下一步就是查看充满活力的 Chef 社区。几乎可以找到适用于你可能想象到的任何情况的食谱和菜谱。这些食谱只是开源代码和配置文件,因此你可以调整它们以适应你的特定需求,但就像任何下载的代码一样,最好从某个东西开始并对其进行调整,而不是从头开始。
DevOps 不是开发人员为了摆脱讨厌的系统管理员而发明的一种可怕的新趋势。我们不会被代码取代,我们的技能也不会变得无用。DevOps 思维模式意味着我们可以窃取开发人员用来保持代码组织和高效的强大工具,同时我们可以将我们讨厌的一些任务(例如启动测试服务器)交给开发人员,以便他们可以更好地完成他们的工作,而我们可以专注于更重要的系统管理工作。拆除开发和运营之间的墙壁确实使每个人的工作都变得更容易,但这需要沟通、信任和一些好的耙子才能成功。查看像 Chef 这样的工具,看看 DevOps 是否可以使你的工作更轻松、更棒。
资源Chef 基础知识视频系列:https://learn.getchef.com/fundamentals-series
Chef 文档:https://docs.getchef.com
社区食谱/工具:https://supermarket.getchef.com