如何在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并学习如何使用该软件的基础知识。

先决条件

要按照这个教程进行操作,你需要准备以下物品:

  • One Ansible Control Node: The Ansible control node is the machine you’ll use to connect to and control the Ansible hosts over SSH. Your Ansible control node can either be your local machine or a server dedicated to running Ansible, though this guide assumes your control node is a Rocky Linux 9 system. Make sure the control node has:A non-root user with sudo privileges. To set this up, you can follow Steps 2 and 3 of our Initial Server Setup with Rocky Linux 9 guide. However, please note that if you’re using a remote server as your Ansible Control node, you should follow every step of this guide.
    An SSH keypair associated with this user. To set this up, you can follow Step 1 of our guide on How to Set Up SSH Keys on Rocky Linux 9.
  • One or more Ansible Hosts: An Ansible host is any machine that your Ansible control node is configured to automate. This guide assumes your Ansible hosts are remote Rocky Linux 9 servers. Make sure each Ansible host has:The Ansible control node’s SSH public key added to the authorized_keys of a system user. This user can be either root or a regular user with sudo privileges. To set this up, you can follow Step 2 of How to Set Up SSH Keys on Rocky Linux 9.

一切准备就绪后,您可以开始第一步。

第一步 – 安装Ansible

要开始探索Ansible作为管理各种服务器的手段,首先需要在至少一台机器上安装Ansible软件。

要在Rocky Linux 9上获取Ansible,首先使用dnf确保安装了Rocky Linux 9 EPEL仓库。

  1. sudo dnf install epel-release

 

一旦存储库安装完毕,请安装Ansible。

  1. sudo dnf install ansible

 

现在你已经拥有了通过Ansible管理服务器所需的所有软件。

第二步——配置Ansible主机

在中国,模仿以下母语的概念:Ansible 通过一个 hosts 文件来跟踪它所了解的所有服务器。在与其他机器通信之前,您需要先设置好这个文件。

以root权限打开文件,可以按照以下步骤进行。请记住,Rocky Linux 9 的默认文本编辑器是vi。

  1. sudo vi /etc/ansible/hosts

 

请注意,该文件中有很多示例配置已经被注释掉了。在文件中保留这些示例,以帮助您学习Ansible的配置,如果您希望在将来实施更复杂的场景。

主机文件非常灵活,可以以几种不同的方式进行配置。您将要使用的语法结构如下所示:

示例主机文件
[group_name]
alias ansible_ssh_host=your_server_ip

群組名稱是一個組織標籤,讓您只需一個詞彙便能提及該群組下的任何伺服器。別名則是指代該伺服器的名稱。

例如,想象一下你想用Ansible来控制三个服务器。Ansible通过SSH与客户端机器进行通信,所以你想管理的每个服务器都可以从Ansible服务器访问到。如果你按照先决条件中的一个或多个Ansible主机选项进行操作,你的主机将通过运行以下命令来设置并可访问SSH密钥:

  1. 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键退出。

/etc/ansible/hosts的中文译文可以是:主机清单文件
[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”,然后按下回车键来完成此操作。

主机可以同时属于多个组,而组可以为其所有成员配置参数。您可以尝试通过运行以下命令来实现这一点:

  1. ansible -m ping host1

 

Ansible connection error

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的目录。

  1. sudo mkdir /etc/ansible/group_vars

 

在这个文件夹中,您可以为想要配置的每个组创建以YAML格式编写的文件。之前,您使用vi文本编辑器编辑了该文件。或者,您也可以使用nano编辑该文件,但需要使用以下命令进行安装:

  1. sudo dnf -y install nano

 

如果你喜欢使用nano,安装完之后将打开/etc/ansible/group_vars/servers文件来编辑配置。

  1. 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的连通性。

  1. ansible -m ping all

 

Ansible 将返回如下输出:

Output

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命令之外,还有其他命令可以针对不同的服务器集合进行操作。您还可以指定一个组。

  1. ansible -m ping servers

 

您还可以指定一个单独的主机:

  1. ansible -m ping host1

 

另外,您可以通过用冒号分隔它们来指定多个主机。

  1. ansible -m ping host1:host2

 

shell模块允许您向远程主机发送终端命令并检索结果。例如,要了解host1机器上的内存使用情况,您可以使用以下命令:

  1. ansible -m shell -a ‘free -m’ host1

 

你可能会注意到,通过使用-a开关将参数传递到脚本中。这里是可能返回的输出内容。

Output

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》指南中了解更多信息。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds