Ansible 是一个开源工具,它使用 playbook 来实现配置管理、软件供应和应用程序部署。 它主要是用 Python 编写的,并于 2012 年发布。从那时起,它节省了部署和维护 IT 基础设施的无数小时的琐碎工作。 总体而言,Ansible 非常一致、安全、可靠,并且它需要的学习曲线极小。 简而言之,Ansible 是用于自动化应用程序和基础架构的强大工具。 您可以在我们最近发表的文章中阅读有关一般 Ansible 信息的更多信息。
什么是 Ansible Playbook?
Ansible Playbooks 是用户可以发送到单个目标服务器或多个服务器的“指令”(或播放)集。 它们是 Ansible 本身的核心,可实现基础设施管理的自动化。 Ansible Playbooks 在管理和部署简单或复杂的应用程序方面提供了出色的可重复性和可重用性,通常在大量机器上进行。 打个比方,想象一支 NBA 球队使用他们在比赛当天为特定情况创建的各种剧本。 事情类似于公司内的 IT 部门。 Ansible Playbooks 使他们能够为特定目的部署多个“剧本”。
基本的 Ansible 语法
Ansible Playbook 以 YAML(另一种标记语言)表示(编写)。 Ansible 创建者选择了 YAML,因为它对于人类来说相对容易编写、阅读和理解(与 XML 或 JSON 相比)。 需要注意的是,YAML 是一种用于表示数据的空格缩进格式。 YAML 是一种严格的语言,文件以 —(3 个连字符)开头。
总的来说,Ansible playbook 是一个单一的 YAML 文件。 在剧本中,我们有单独的剧本(我们可以在一个剧本文件中有一个或多个剧本),它定义了一组将在服务器上运行的任务。 总之,任务是将在目标主机名/s 上执行的操作(执行命令、安装包等)
基本的 YAML 标签
- 姓名: 名称标签定义了特定 Ansible Playbook 的名称。 它用简单的英语解释了该剧将要做什么。
- 主持人: hosts 标记使我们能够指定要在剧本中使用的特定主机名或组(在清单文件中定义)。 该标签在剧本中是必需的。
- 任务: 任务是将要执行的特定操作。 它通常有一个描述任务的名称字段。
- 谁的: 这个标签使我们能够定义我们将在我们的剧本中使用的变量。 Ansible 中的变量帮助我们弥合各种系统之间的差异。 用法类似于编程语言。
调整库存文件
在本文中,我们不会介绍 Ansible 的安装,正如我们在此处所写的那样。 但是,在创建和执行 Playbook 之前,我们需要编辑 Ansible 目录中的清单文件。 默认清单位置是 /etc/ansible/hosts。 但是,我们可以使用以下命令创建自定义清单。
touch inventory
此外,请注意,我们可以指定要与 -i 运行剧本时的选项。
在清单文件(无论我们决定使用哪个)中,我们可以添加我们的主机名,以便 Ansible 了解执行剧本的主机。 Ansible 通过在清单中定义主机名提供了极大的额外灵活性。 我们可以一个一个地添加它们,但我们也可以创建一个组,以便在剧本中更容易地定位。 让我们看一个示例清单文件。
mainserver.test.com [webservers] web01.test.com web02.test.com [dbservers] db01.test.com db02.test.com [apps] app01.test.com app02.test.com
剧本示例
让我们看看以下简单的 Ansible playbook 示例:
--- name: install and start HTTPD hosts: mainserver.test.com remote_user: root tasks: - name: Install HTTPD yum: name: httpd state: present - name: Start HTTPD service: name: httpd state: started
如上例所述,我们将仅在一个主机名上运行此剧本 – mainserver.test.com。 同样重要的是要注意,我们所针对的主机是在剧本内的播放级别定义的。 如果我们想在我们的网络服务器上运行这个剧本,我们可以用一组网络服务器替换 mainserver.test.com 条目。 这样,将选择清单文件中注明的该组中的所有 Web 服务器。
在这个简单的例子中,这个剧本将安装和启动 httpd。 尽管这是显而易见的和合乎逻辑的,但我们的第一个任务是安装 httpd,而不是启动它。 YAML 语法受到严格监管,准确性至关重要,尤其是在执行任务时。 注意我们在剧本中创建的任务的缩进和顺序至关重要,因为它们是一个接一个地执行的。
剧本到剧本
扩展我们之前的安装示例 Apache,想象安装 Apache 没有 Ansible 提供的自动化的 100 个不同服务器上的 Web 服务器。 这项任务必须手动完成,这既没有效率,也没有效率。 如果系统管理员必须手动执行此操作,他们可能会使用这样的脚本。
#!/bin/bash # Install Apache. yum install --quiet -y httpd # Copy configuration files. cp httpd.conf /etc/httpd/conf/httpd.conf cp httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf # Start Apache and configure it to run at system boot. service httpd start chkconfig httpd on
Ansible Playbooks 的最佳属性之一是将 shell 脚本转换为使用 YAML 编写的 Playbooks 相对容易。 为了避免一次在一台服务器上运行此脚本的繁琐劳动,我们可以创建以下 Ansible Playbook,并使用以下命令从 Playbook 所在的同一目录中运行它。
[email protected]:~# ansible-playbook playbook.yaml
--- name: Install and configure Apache remote_user: root hosts: webservers tasks: - name: Install Apache. command: yum install --quiet -y httpd httpd-devel - name: Copy configuration files. command: cp httpd.conf /etc/httpd/conf/httpd.conf command: cp httpd-vhosts.conf /etc/httpd/conf/httpd-vhosts.conf - name: Start Apache and configure it to run at boot. command: service httpd start command: chkconfig httpd on
此任务将安装和配置 Apache 在我们所有的服务器上 [webservers] 库存文件中记录的组。
结论
在本文中,我们从基础层面概述了 Ansible Playbook。 Playbooks 更高级的功能可用于部署多层应用程序,在服务器和负载均衡器集群以及其他特定监控服务器(例如 Prometheus 或 Nagios)上运行更新。 自发布以来,Ansible 在过去八年中改变了整个行业。 它是现代技术公司的关键组成部分之一,这些公司依赖于他们在日常业务中需要维护的大量机器或服务器。
今天就开始吧!
立即致电 1.800.580.4985 与我们联系,与知识渊博的解决方案提供商交谈,他们可以为您提供所需的信息,以便立即做出明智的决定。
忙到不想说话? 点击 这里 与我们进行快速聊天以了解更多信息。
想要通过电子邮件了解更多信息,您可以在闲暇时查看? 立即给我们发送电子邮件,获取有关哪种产品最适合您的需求的便捷建议。
我们期待您的回音!