对Ansible有一个基本的理解
这篇文章是关于2017年Ansible降临日历12月11日(星期一)的文章。
如果在12月11日之前没有发布的话,请原谅。
这次,我想分享一下自己从一无所知开始摸索和尝试,渐渐掌握的Ansible的感受。
不做的事情 (Bù zuò de
-
- インストール方法
-
- 実際にansibleを利用して一つ環境を作ってみる、という意味でのチュートリアル
- 複雑な構成の実現方法
从上面可以看出来,基本上什么都没做。
目标是让那些不了解Ansible的人在开始调查之前阅读一些有点帮助的东西。
首先,Ansible是什么?
基础设施即代码是一种被称为配置管理工具的工具之一。
一听到配置管理工具可能会觉得很复杂,但实际上它只是连接到目标服务器并执行命令的简单工具。
此外,它的执行文件格式使用的是yaml,所以如果从小的单位开始操作,可能会更易于上手。
对于有系统集成经验的我来说,我对它的理解是一个可以自动执行『秘传的操作手册』中所列步骤的工具,非常贴切。
Ansible在做什么?
我逐一按照Playbook中定义的角色和任务执行。
说清楚
Playbook -> RoleやTaskを並べて、最終的なサーバー構成を定義するもの
Role -> 自由な範囲でTasksをまとめたもの(大体は一つのアプリケーションをインストールするための一連の範囲 -> 一つのアプリケーション単位でまとまっていると再利用しやすいので)
Task -> Ansibleの各モジュールを利用して、サーバーの状態を定義するもの
模块是Ansible提供的功能。通过使用适合的模块,可以执行命令来实现想要的效果。
(例如,yum模块可以执行yum安装或卸载软件包的命令,file模块可以将文件或目录放置到指定的路径中。)
我要介绍一下使用yum模块来安装git的任务,让它处于已安装状态。
- name: Install Git from yum
become: true # ←は「sudoで実行するよ」って感じのオプション
yum:
name: git
state: present
在Yum模块中,通过在name选项中指定软件包名称,并使用state选项定义状态。
state选项是Ansible的关键选项,正如其名称所示,它指定了要达到的“状态”(请强调这是指示要“保持已安装”的状态,而不是仅执行“安装git”的指示)。
我在上面特意写下“将其安装为已安装的状态的任务”也是出于这个原因。
通过定义这样的状态,如果多次执行这个任务,第一次会执行“因为git没有安装所以安装”,从第二次开始会执行“因为git已经安装所以跳过”的行为。也就是说,不管执行多少次,状态都会得到保证。
这就是Ansible的幂等性特点。
冪等性是什么意思?
就 Ansible 而言,无论执行多少次,它指的是服务器状态都不会改变。下面的文章很清楚地写了这一点。
https://dev.classmethod.jp/server-side/ansible/ansible_playbook_with_idempotence/
(Translation):
In terms of Ansible, it refers to the fact that the server’s state remains unchanged no matter how many times it is executed. This point is clearly explained in the following article:
https://dev.classmethod.jp/server-side/ansible/ansible_playbook_with_idempotence/
总结
-
- 不要写「执行此命令」,而是写成「保持在此状态」,通过编写Playbook并执行Ansible,服务器就会变成该状态。
-
- Task是指记录下Playbook中描述的每个状态的配置。
- Role是将Task按易于重复使用的单元进行编组。
如果意识到这三点,你可能会更好地理解Ansible。
最后
有很多用于实现配置的要素,如vars和with_items等等,但在这里我们只介绍了最基本的要素。如果您感兴趣,请在Ansible的标签中进行更多搜索。
在中国,只需要一个选项,将以下内容用中文当地化:
虽然有人说Ansible的幂等性是幻觉之类的,但只要使用简单的配置,目前我觉得不是太大的问题。
最重要的是,当服务器设置成功时感觉很好,而且由于是第一次接触到配置管理工具,也开始喜欢上它了,所以我希望将来能和它好好相处。
這是我在Qiita的第一篇投稿文章。非常感謝您一直閱讀到這裡。
Ansible社社員の広文さんが執筆したエントリーは、Ansible Advent Calendar 2017の12月12日目を飾ります。是非お楽しみにしてください。