现代 IT 人一定要知道的 Ansible系列教程:是什么Ansible ?

什么是 Ansiable

Ansiable 是新出现的自动化运维工具,基于 Python 开发,集合了众多运维工具(puppetcheffuncfabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。   ansible 是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

使用 Ansible 需要具备什么基础知识?

  1. 具备 Linux 服务器 (server) 基础操作和管理经验。
  2. 会使用 ssh 远程连接至 server
  3. 知道基本的标准输入 (stdin) 输出 (stdout) 等观念。
  4. 会安装 Linux 套件。
  5. 知道 指令在做什么,并且会使用它。sudo
  6. 知道什么是档案权限,并且会修改它。
  7. 知道如何启用和停止系统服务 (Daemon / Service)。
  8. 会撰写简易的脚本(Script)。

Ansible 环境部署

Ansible 是如何运作的?

Ansible 的世界里,我们会通过 inventory 文件来定义有哪些 Managed node (被控端),并由 SSHPython 进行沟通。

image-20231218141235681

Control Machine (主控端) 可以用 SSH 连上 Managed node,且被连上的机器里有预载 Python 时,Ansible 就可以运作了!

  • Control Machine 指的是我们主要会在上面操作 Ansible 的机器。 它可以是我们平时用的电脑、手机或机房里的某一台机器。
  • Managed node 则是被 Ansible 操纵的机器,可以用被控端来形容它。

Ansible 是如何发挥作用的?

模块 Ansible 会连接到您的节点,并向节点推送这种称为“模块”的小程序。这些模块可用于完成 Ansible 中的自动化任务。这些程序被编写成系统理想状态的资源模型。然后 Ansible 会执行这些模块,并在完成后将其移除。如果没有这些模块,我们就必须靠临时命令和脚本来完成任务。

Ansible 本身就有多个内置模块,我们可以使用那些模块自动执行任务,也可以编写自己的模块。Ansible 模块可用任何能返回 JSON 的语言编写,如 RubyPythonbash

无代理自动化 Ansible 采用无代理设计,这意味着其所管理的节点不需要安装任何软件。Ansible 会从清单中读取要管理的机器的有关信息。Ansible 有默认的清单文件,但我们也可以自己创建清单文件,并定义想要管理的服务器。

环境要求

  • 控制节点要求(Control Machine)

对于控制节点(运行 ansiable 的计算机),我们可以使用几乎任何安装了 Python 的类 UNIX 的计算机,没有 WSL 的 windows 本身不支持作为控制节点。

  • 被控制节点的要求(Managed node)

被控制的节点不需要安装 ansiable,但是需要 Python 的环境,用来运行 ansiable 生成的 Python 代码。受控节点还需要一个可以通过 ssh 使用交互方式。

Ansible安装

在一般的情况下,我们只需在 Control Machine 里安装 Ansible 即可,因为 GNU/Linux 和 macOSManaged node 都早已预载了 Python 2.5 以上的版本,且开通了 SSH 连线的条件。

Ansible 使用 SSH 协议连接至服务器并运行任务。Ansible 默认会使用 ssh-agentSSH 密钥,并用当前的用户名连接到远程机器。无需使用 root 用户名登录。您能以任何用户的身份登录,然后对任何用户使用 susudo 命令。

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

类似的帖子