现代 IT 人一定要知道的 Ansible系列教程:是什么Ansible ? #
什么是 Ansiable ? #
Ansiable 是新出现的自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible 是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。
ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
使用 Ansible 需要具备什么基础知识? #
- 具备 Linux 服务器 (server) 基础操作和管理经验。
- 会使用
ssh
远程连接至 server。 - 知道基本的标准输入 (
stdin
) 输出 (stdout
) 等观念。 - 会安装 Linux 套件。
- 知道 指令在做什么,并且会使用它。
sudo
- 知道什么是档案权限,并且会修改它。
- 知道如何启用和停止系统服务 (Daemon / Service)。
- 会撰写简易的脚本(Script)。
Ansible 环境部署 #
Ansible 是如何运作的? #
在 Ansible 的世界里,我们会通过 inventory 文件来定义有哪些 Managed node (被控端),并由 SSH 和 Python 进行沟通。
当 Control Machine (主控端) 可以用 SSH
连上 Managed node,且被连上的机器里有预载 Python
时,Ansible
就可以运作了!
Control Machine
指的是我们主要会在上面操作 Ansible 的机器。 它可以是我们平时用的电脑、手机或机房里的某一台机器。Managed node
则是被 Ansible 操纵的机器,可以用被控端来形容它。
Ansible 是如何发挥作用的? #
模块 Ansible 会连接到您的节点,并向节点推送这种称为“模块”的小程序。这些模块可用于完成 Ansible 中的自动化任务。这些程序被编写成系统理想状态的资源模型。然后 Ansible 会执行这些模块,并在完成后将其移除。如果没有这些模块,我们就必须靠临时命令和脚本来完成任务。
Ansible 本身就有多个内置模块,我们可以使用那些模块自动执行任务,也可以编写自己的模块。Ansible 模块可用任何能返回 JSON
的语言编写,如 Ruby
、Python
或 bash
。
无代理自动化 Ansible 采用无代理设计,这意味着其所管理的节点不需要安装任何软件。Ansible 会从清单中读取要管理的机器的有关信息。Ansible 有默认的清单文件,但我们也可以自己创建清单文件,并定义想要管理的服务器。
环境要求 #
- 控制节点要求(Control Machine)
对于控制节点(运行 ansiable 的计算机),我们可以使用几乎任何安装了 Python 的类 UNIX 的计算机,没有 WSL 的 windows 本身不支持作为控制节点。
- 被控制节点的要求(Managed node)
被控制的节点不需要安装 ansiable,但是需要 Python 的环境,用来运行 ansiable 生成的 Python 代码。受控节点还需要一个可以通过 ssh 使用交互方式。
Ansible安装 #
在一般的情况下,我们只需在 Control Machine 里安装 Ansible 即可,因为 GNU/Linux 和 macOS 的 Managed node 都早已预载了 Python 2.5 以上的版本,且开通了 SSH 连线的条件。
Ansible 使用 SSH 协议连接至服务器并运行任务。Ansible 默认会使用 ssh-agent 的 SSH 密钥,并用当前的用户名连接到远程机器。无需使用 root
用户名登录。您能以任何用户的身份登录,然后对任何用户使用 su
或 sudo
命令。
Ansible 一旦连接,就会将我们的命令或 Playbook
所需的模块传输到远程机器上执行。Ansible 使用人类可读的 YAML 语言模板,因此用户无需学习高级编程语言就可以对重复性任务进行编程以使其自动运行。
在 Fedora Linux 上安装 Ansible #
要安装完整的ansible
软件包,请运行:
$ sudo dnf install ansible
要安装最小的ansible-core
软件包,请运行:
$ sudo dnf install ansible-core
在 OpenSUSE 上安装 Ansible #
$ sudo zypper install ansible
在 Ubuntu 上安装 Ansible #
Ubuntu 版本可在此处的 PPA 中获取。
要在系统上配置 PPA 并安装 Ansible,请运行以下命令:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
PS: 在其他的环境安装 ansitable 可以参考官方文档:https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html#installing-ansible-on-fedora-linux
使用 pipx 安装和升级 Ansible #
在您的环境中使用pipx
安装完整的 Ansible 软件包:
$ pipx install --include-deps ansible
要将现有 Ansible 安装升级到最新发布的版本:
$ pipx upgrade --include-injected ansible
安装可能需要的其他 python 依赖项,以安装 argcomplete
python 包为例,如下所述:
$ pipx inject ansible argcomplete
包含 --include-apps
选项以使附加 Python 依赖项中的应用程序在您的 PATH 上可用。这允许您从 shell 执行这些应用程序的命令。
$ pipx inject --include-apps ansible argcomplete
使用 pip 安装和升级 Ansible #
要验证pip
是否已安装您首选的 Python:
python -m pip -v
Command 'python' not found, did you mean:
command 'python3' from deb python3
command 'python' from deb python-is-python3
如果看到以上这样的错误,那么确定你的环境是没有安装 pip 的。可以自行查找 pip 的安装方法。
安装 Ansible #
在您选择的 Python 环境中使用 pip
为当前用户安装完整的 Ansible 软件包:
$ python3 -m pip install --user ansible
升级 Ansible #
要将此 Python 环境中现有的 Ansible 安装升级到最新发布的版本,只需将 --upgrade
添加到上面的命令:
$ python3 -m pip install --upgrade --user ansible
可以通过检查版本来测试 Ansible 是否安装正确:
$ ansible --version