Rocky Linux 9安装与配置Ansible:完整指南
引言
配置管理系统旨在使管理员和操作团队能够轻松控制大量服务器。它们允许您从一个集中位置以自动化的方式控制许多不同的系统。虽然对于Linux系统有许多流行的配置管理系统可用,如Chef和Puppet,但这些系统往往比许多人想要或需要的要复杂。Ansible是这些选项的一个很好的替代品,因为它具有更低的入门成本。
Ansible的工作原理是通过从安装了Ansible组件的计算机对客户端进行配置。它通过普通的SSH通道与远程机器进行信息检索、发出命令和拷贝文件。因此,Ansible系统不需要在客户端计算机上安装任何额外的软件。这是Ansible实现服务器管理的一种方式。只要服务器的SSH端口暴露,就可以将其纳入Ansible的配置范围,而无论其在生命周期的哪个阶段。
Ansible采用模块化的方法,使得可以利用主系统的功能来处理特定场景。模块可以使用任意语言编写,并以标准的JSON进行通信。由于YAML数据序列化格式的表达能力以及其与流行标记语言的相似性,配置文件主要以YAML格式编写。Ansible可以通过命令行工具或称为Playbooks的配置脚本与客户端进行交互。
在本指南中,您将在Rocky Linux 9服务器上安装Ansible并学习如何使用该软件的基础知识。
先决条件
要按照本教程进行操作,你需要准备以下物品:
- 一个Ansible控制节点:Ansible控制节点是您将用于通过SSH连接和控制Ansible主机的机器。您的Ansible控制节点可以是您的本地机器,也可以是专门用于运行Ansible的服务器,尽管本指南假设您的控制节点是Rocky Linux 9系统。请确保控制节点具备:
- 一个具有sudo权限的非root用户。要进行此设置,您可以遵循我们《Rocky Linux 9初始服务器设置指南》的第2步和第3步。但是,请注意,如果您使用远程服务器作为Ansible控制节点,则应遵循本指南的每一个步骤。
- 与此用户关联的SSH密钥对。要进行此设置,您可以遵循我们《如何在Rocky Linux 9上设置SSH密钥》指南的第1步。
- 一个或多个Ansible主机:Ansible主机是您的Ansible控制节点配置为自动化的任何机器。本指南假设您的Ansible主机是远程Rocky Linux 9服务器。请确保每个Ansible主机具备:
- Ansible控制节点的SSH公钥已添加到系统用户的
authorized_keys
文件中。此用户可以是root用户或具有sudo权限的普通用户。要进行此设置,您可以遵循《如何在Rocky Linux 9上设置SSH密钥》的第2步。
- Ansible控制节点的SSH公钥已添加到系统用户的
一切准备就绪后,您可以开始第一步。
第一步 – 安装Ansible
要开始探索Ansible作为管理各种服务器的手段,首先需要在至少一台机器上安装Ansible软件。
要在Rocky Linux 9上获取Ansible,首先使用dnf
确保安装了Rocky Linux 9 EPEL仓库。
- sudo dnf install epel-release
一旦仓库安装完毕,请安装Ansible。
- sudo dnf install ansible
现在你已经拥有了通过Ansible管理服务器所需的所有软件。
第二步 – 配置Ansible主机
Ansible 通过一个 hosts
文件来跟踪它所了解的所有服务器。在与其他机器通信之前,您需要先设置好这个文件。
以root权限打开文件,可以按照以下步骤进行。请记住,Rocky Linux 9 的默认文本编辑器是vi
。
- sudo vi /etc/ansible/hosts
请注意,该文件中有很多示例配置已经被注释掉了。在文件中保留这些示例,以帮助您学习Ansible的配置,如果您希望在将来实施更复杂的场景。
主机文件非常灵活,可以以几种不同的方式进行配置。您将要使用的语法结构如下所示:
[group_name]
alias ansible_ssh_host=your_server_ip
群组名称是一个组织标签,让您只需一个词汇便能提及该群组下的任何服务器。别名则是指代该服务器的名称。
例如,想象一下你想用Ansible来控制三台服务器。Ansible通过SSH与客户端机器进行通信,所以你想管理的每个服务器都可以从Ansible服务器访问到。如果你按照先决条件中的一个或多个Ansible主机选项进行操作,你的主机将通过运行以下命令来设置并可访问SSH密钥:
- ssh root@your_server_ip
您不需要输入密码。虽然Ansible可以处理基于密码的SSH身份验证,但SSH密钥可以使事情更加简单无缝。
在您的文件已经打开的情况下,您可以将以下服务器的IP地址作为示例:203.0.113.111,203.0.113.112和203.0.113.113。确保用您自己的IP地址替换这些IP地址。接下来,设置这样的环境,以便您可以单独将每个服务器称为host1,host2和host3,或者作为组称为servers。为了配置这个,您需要将以下区块添加到您的hosts文件中。您可以按i
键插入文本,完成后按ESC
键退出。
[servers]
host1 ansible_ssh_host=203.0.113.111
host2 ansible_ssh_host=203.0.113.112
host3 ansible_ssh_host=203.0.113.113
加入完模块之后,请保存并退出文件。可以通过输入 :wq
,然后按下回车键来完成此操作。
主机可以同时属于多个组,而组可以为其所有成员配置参数。您可以尝试通过运行以下命令来实现这一点:
- ansible -m ping host1
host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: sammy@203.0.113.111: Permission denied (publickey).", "unreachable": true }
默认情况下,Ansible会尝试使用当前用户名连接到远程主机。上述错误表明,如果远程系统上不存在该用户,连接将会失败。
因此,让我们明确告诉Ansible使用sammy
用户连接服务器组中的服务器。首先,在Ansible配置结构中创建一个名为group_vars
的目录。
- sudo mkdir /etc/ansible/group_vars
在这个文件夹中,您可以为想要配置的每个组创建以YAML格式编写的文件。之前,您使用vi
文本编辑器编辑了该文件。或者,您也可以使用nano
编辑该文件,但需要使用以下命令进行安装:
- sudo dnf -y install nano
如果您喜欢使用nano
,安装完成后将打开/etc/ansible/group_vars/servers
文件来编辑配置。
- sudo nano /etc/ansible/group_vars/servers
在文件中添加以下代码。YAML文件以---
开头,所以不要忘记这一部分。
这应该是 /etc/ansible/group_vars/servers
这个路径的意思。
---
ansible_ssh_user: sammy
当你完成后,保存并退出文件。在nano
中,你可以通过按下CTRL +X
,然后按Y
和ENTER
来完成操作。
现在Ansible将始终使用sammy
用户来管理服务器群组,无论当前用户如何。
如果您想为每个服务器指定配置详细信息,而不管其所属的群组,您可以将这些详细信息放入位于/etc/ansible/group_vars/all
的文件中。通过在/etc/ansible/host_vars
目录下创建文件,可以配置单个主机。
步骤3 – 使用基本的Ansible命令
现在,你已经设置好了你的主机,并且有足够的配置细节可以让你成功连接主机,你可以尝试一些命令。
首先,对你配置的所有服务器进行ping
测试。命令中的"-m ping"
部分是告诉Ansible使用ping
模块进行操作。这些是你可以在远程主机上运行的常用命令。ping
模块的操作方式与Linux中的ping
实用程序类似,但其检查的是Ansible的连通性。
- ansible -m ping all
Ansible 将返回如下输出:
host3 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } host1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } host2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
这个输出是一个基本测试,用于确认Ansible与所有主机的连接。
除了all
命令之外,还有其他命令可以针对不同的服务器集合进行操作。您还可以指定一个组。
- ansible -m ping servers
您还可以指定一个单独的主机:
- ansible -m ping host1
另外,您可以通过用冒号分隔它们来指定多个主机。
- ansible -m ping host1:host2
shell
模块允许您向远程主机发送终端命令并检索结果。例如,要了解host1
机器上的内存使用情况,您可以使用以下命令:
- ansible -m shell -a ‘free -m’ host1
你可能会注意到,通过使用-a
开关将参数传递到脚本中。这里是可能返回的输出内容。
host1 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 7951 234 6768 0 948 7461 Swap: 0 0 0
你现在已经成功在你的各个主机上运行了几个基本的Ansible命令。
结论
您的Ansible服务器现在已经配置好,可以与您希望控制的服务器进行通信。您可以使用ansible
命令远程执行基本任务,以验证Ansible能够与每个主机进行通信。
你已经通过Ansible为与服务器工作打下了坚实的基础,所以你的下一步是学习如何使用Playbooks来为你承担大部分工作。你可以在我们的《配置管理101:编写Ansible Playbooks》指南中了解更多信息。