在本章中,我将为您介绍如何迈出使用 Ansible 技术的第一步,包括如何连接到受管主机以及如何使用命令行执行一些简单任务。
Ansible 架构
让我们先来谈谈 Ansible 的架构。安装了 Ansible 的节点被称为“控制节点”,它管理着您所有的节点集群。而被管理的节点则被称为“受管节点”。目标节点可以是 Linux、Mac、Windows 以及各种网络设备。每个目标节点都有其特殊性,例如不同的 Linux 发行版和模块的使用。我们将在后续章节中讨论这些特殊性。
与受管节点的连接
“控制节点”与“受管节点”之间的连接通过 SSH 协议实现,无需在目标机器上安装特定的客户端软件。其他竞争产品通常需要安装称为“代理”的客户端软件,但 Ansible 不需要。通过 SSH 连接,唯一的要求是用户名和证书,用于访问目标机器。还有一些方法可以自动化这一初始脚本步骤。完成 SSH 连接后,另一个要求是目标机器上必须有 Python 解释器,而现代操作系统通常自带 Python。默认情况下,Ansible 使用 SFTP 传输文件,但您可以在配置中切换到 SCP。对于 Windows 目标节点,可以通过 WinRM 技术连接,并使用 PowerShell 作为解释器。
创建基本的主机清单
/etc/ansible/hosts
1 host1.example.com
- 默认主机清单文件路径为
/etc/ansible/hosts - “host1.example.com” 是一个受管主机
受管主机的列表存储在 /etc/ansible/hosts 文件中。在本例中,它只包含一个名为 host1.example.com 的主机。
执行您的第一个 Ansible 命令
1 $ ansible all -m ping
2 host1.example.org | SUCCESS => {
3 "ansible_facts": {
4 "discovered_interpreter_python": "/usr/bin/python"
5 },
6 "changed": false,
7 "ping": "pong"
8 }
- 在“所有”主机上执行了“ping”模块
- “host1.example.com” 回复了一个成功代码
现在我们已经准备好执行您的第一个 Ansible 命令。在 Ansible 中,命令被称为模块。第一行在所有主机上执行了 Ansible 的 ping 模块,返回的结果是“pong”。请注意,这表明 Ansible 能够通过 SSH 用户名、使用公钥进行身份验证,并执行本地的 Python 解释器。因此,它与网络中的 ping 命令完全不同。
在 Ansible 上执行即时命令复制
1 $ ansible all -a "/bin/echo hello"
2 host1.example.org | CHANGED | rc=0 >>
3 hello
- 在“所有”主机上执行了 “/bin/echo hello” 命令
- “host1.example.com” 回复了一个已更改代码,并在标准输出中打印 “hello”
Ansible 还可以在目标主机上执行某些命令,并在“控制节点”的控制台上报告状态。在本例中,“/bin/echo hello” 命令在“所有”主机上执行。“host1.example.com” 回复了一个已更改代码,并在标准输出中打印了 “hello”。请注意,每次在远程机器上运行命令时,您都会收到一个“已更改”状态。
在 Ansible 上使用特权提升执行即时命令
1 $ ansible all -m ping -u devops --become
2 host1.example.org | SUCCESS => {
3 "ansible_facts": {
4 "discovered_interpreter_python": "/usr/bin/python"
5 },
6 "changed": false,
7 "ping": "pong"
8 }
- 以用户 “devops” 登录后,以 “root” 用户身份在“所有”主机上执行了 “ping” 模块
- “host1.example.com” 回复了一个已更改代码,并在标准输出中打印 “hello”
在本例中,我以用户 “devops” 登录后,以 “root” 用户身份在“所有”主机上运行了 “ping” 模块。“host1.example.com” 回复了一个已更改代码,并在标准输出中打印了 “hello”。
总结
在本章中,我们学习了 Ansible 架构的基本概念,如何编写受管主机的清单,以及如何对它们执行一些简单命令。