九天猎人 发表于 2024-7-23 09:00:49

在Ubuntu 14.04上安装和配置Ansible的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介

配置管理体系旨在使管理员和运维团队轻松控制大量服务器。它们答应您从一个中心位置以自动化的方式控制很多不同的体系。
虽然对于 Linux 体系有很多流行的配置管理体系,好比 Chef 和 Puppet,但这些体系通常比很多人想要或必要的要复杂得多。Ansible 是这些选项的一个很好的替换方案,因为它的启动开销要小得多。
在本指南中,我们将讨论如何在 Ubuntu 14.04 呆板上安装 Ansible,并介绍如何使用该软件的一些基础知识。
Ansible 是如何工作的?

Ansible 通过在安装和配置了 Ansible 组件的盘算机上配置客户端呆板来工作。
它通过普通的 SSH 通道举行通信,以从远程呆板检索信息、发出下令和复制文件。由于这一点,Ansible 体系不必要在客户端盘算机上安装任何额外的软件。
这是 Ansible 简化服务器管理的一种方式。只要一个服务器暴露了 SSH 端口,就可以将其纳入 Ansible 的配置范围,而不管它在生命周期的哪个阶段。
任何您可以通过 SSH 管理的盘算机,也可以通过 Ansible 举行管理。
Ansible 接纳模块化方法,使其易于扩展以使用主体系的功能来处理特定场景。模块可以用任何语言编写,并以标准 JSON 举行通信。
由于 YAML 数据序列化格式具有表达能力强和与流行标记语言的相似性,因此配置文件紧张是用它来编写。Ansible 可以通过下令行工具或称为 Playbooks 的配置脚本与客户端举行交互。
在 Ubuntu 14.04 上安装 Ansible

要开始探索 Ansible 作为管理各种服务器的手段,我们必要在至少一台呆板上安装 Ansible 软件。在本节中,我们将使用 Ubuntu 14.04 VPS 实例。
在 Ubuntu 上获取 Ansible 的最佳方式是将该项目的 PPA(个人软件包存档)添加到您的体系中。
为了有效地执行此操作,我们必要安装 software-properties-common 软件包,它将使我们能够轻松地使用 PPA。(在旧版本的 Ubuntu 上,此软件包称为 python-software-properties。)
sudo apt-get update
sudo apt-get install software-properties-common
安装完软件包后,我们可以通过输入以下下令来添加 Ansible PPA:
sudo apt-add-repository ppa:ansible/ansible
按 ENTER 键担当 PPA 添加。
接下来,我们必要刷新体系的软件包索引,以便它相识 PPA 中可用的软件包。之后,我们可以安装软件:
sudo apt-get update
sudo apt-get install ansible
现在我们已经拥有了通过 Ansible 管理服务器所需的全部软件。
设置 SSH 密钥

如上所述,Ansible 紧张通过 SSH 与客户端盘算机举行通信。虽然它固然可以处理基于暗码的 SSH 认证,但 SSH 密钥有助于保持事变简单。
我们可以根据您是否已经有要使用的密钥来以两种不同的方式设置 SSH 密钥。我们将假设您要管理的服务器将是 DigitalOcean droplets。
创建新的 SSH 密钥对

如果您还没有要用于 Ansible 管理的 SSH 密钥对,我们可以在您的 Ansible VPS 上现在创建一个。
我们将在我们的 Ansible droplet 上创建一个 SSH 密钥对,以便用于对其举行管理的主机举行身份验证。
以您将用于控制 Ansible 的用户身份,输入以下下令创建一个 RSA 密钥对:
ssh-keygen
您将被要求指定创建的密钥对的文件位置、暗码和暗码确认。通过全部这些按 ENTER 键担当默认值。
您的新密钥现在可以在用户的 ~/.ssh 目录中找到。公钥(可共享的)称为 id_rsa.pub。私钥(必要保密的)称为 id_rsa。
您可以将它们添加到您的 DigitalOcean 控制面板,以便将您的 SSH 密钥嵌入到新创建的 droplets 中。这将答应您的 Ansible droplet 立即 SSH 进入您的新 droplets,而无需任何其他身份验证。
要执行此操作,请单击左侧导航菜单上的“SSH Keys”链接。在新屏幕中,单击右上角的“Add SSH Key”按钮:
!DigitalOcean add key
在顶部字段中输入要与此密钥关联的名称。在您的 Ansible VPS 实例上,键入以下内容以获取您的公钥的内容:
cat ~/.ssh/id_rsa
.pub

返回给您的字符串是您必要粘贴到 DigitalOcean 控制面板中的第二个字段中的内容:
!DigitalOcean Ansible key
单击“Create SSH Key”以将您的密钥添加到控制面板。现在,每当您创建一个新的 droplet 时,您将能够将您的公共 SSH 密钥嵌入到新服务器中,从而使您能够与您的 Ansible 实例举行通信。您只必要在 droplet 创建过程的“Add optional SSH Keys”部分中选择该密钥:
!DigitalOcean embed key
将现有的 SSH 密钥对转移到 Ansible

如果您已经有一个用于验证您的 droplets 的 SSH 密钥对,您可以将凭据转移到新的 Ansible droplet,而不是创建一个新的密钥对。这样做的好处是它可以自动与您已经配置为使用该密钥的任何服务器配合使用。
在您已经为 droplets 配置了 SSH 密钥验证的盘算机上,通过输入以下下令获取公钥:
cat ~/.ssh/id_rsa
.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

在您的 Ansible 服务器上,您必要创建一个隐藏目录来存储您的密钥。将其命名为 .ssh,这样 SSH 步伐就知道在那里找到它:
mkdir ~/.ssh
我们应该限制对这个目录的访问,以便只有您可以进入或写入它:
chmod 700 ~/.ssh
现在,进入该目录并在文本编辑器中打开一个名为 id_rsa.pub 的文件:
cd ~/.ssh
nano id_rsa
.pub
未来自您家用盘算机的公钥输出粘贴到这个文件中:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDzmGgsqjSFuOBbjZB1sgquKpp3Ty+FgqoLrzjKbbk9VGOH6kM37aAhyxxmTQfe69lhYi/WCai+mrXOyY9IiQbUfZ4jsfPE9DS3zHhmnGiBWA7pedCTJ/Nhf06dmhAJIbExW3uDghbPbzbSA5Ihn1x0F5FXtSMDoFtyjcwUwJxc2z/kk9TKcFSl8qqf4IYBYE7c+EKaYRBjjDP4AQmiwjTPuipsmub7C0OGF0dTMatIa0lok6rwy91nmhCQV6polG0+Fsk4YrY8Yh5xz6wE0lOvc8BwP9nL0zsnw6Ey0MHV9BbMqtyD6x/fCurpIkMHJK4nv79rToSWA0AwoP/bJXh7 demo@ansible0

生存并关闭文件。我们将通过输入以下下令确保该文件具有精确的权限:
chmod 644 id_rsa.pub
现在,回到您已配置 SSH 密钥访问的当地盘算机,输入:
cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----
输出会相称长。
回到您的 Ansible droplet,我们必要在 ~/.ssh 目录中创建一个新文件:
nano id_rsa
在此中,粘贴您在当地盘算机上执行的上一个下令的结果:
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA85hoLKo0hbjgW42QdbIKriqad08vhYKqC684ym25PVRjh+pD
N+2gIcl8Zk0H3uvZYWIv1gmsfpq1zsmPSIkG1H2eI7HzxPQ0qMx4ZpxogVgO6XnQ
kyfzYX9OnZoQCSGxMVt7g4IWz2820gOSIZ9cdBeRV7UjA6Bbco3MFMCcXNs/5JPU
ynBUpfKqn+CGAWBO3PhCmmEQY4wz+AEJosI0z7oqbJrm/AtDhhdHUzGrSGtJaJOq
. . .
. . .
cqsqOEzXAoGBAPMJJ8RrKUBuSjVNkzebst9sBgNadmaoQUoMHUDr8KpCZhWAoHB7
1VKmq7VSphQSruI31qy2M88Uue1knC/nQr1bE1DITZgezETSsDqsAMBo8bqDN6TT
qVJgG+TS9BRC+IowuzMVV5mzrfJjkrb+GG+xWSXrTLZMbeeTf+D0SfVo
-----END RSA PRIVATE KEY-----
确保包罗第一个和末了一个标记行。这些行是必需的,以使密钥文件有效。生存并关闭文件。
我们必要更改权限以掩护此文件:
chmod 600 id_rsa
此时,Ansible 将能够使用这些 SSH 密钥与任何嵌入了该密钥的服务器举行通信。
配置 Ansible 主机

Ansible 通过一个 “hosts” 文件来跟踪全部它所知道的服务器。在我们开始与其他盘算机通信之前,我们必要先设置这个文件。
起首以 root 权限打开文件:
sudo nano /etc/ansible/hosts
你会看到一个文件,此中包含很多示例配置,但这些示例配置对我们来说都不实用,因为这些主机都是假造的。因此,让我们起首通过在每行前面添加 “#” 来注释掉文件中的全部行。
我们将保留这些示例配置,以资助我们在未来实现更复杂的场景时举行配置。
一旦全部行都被注释掉,我们就可以开始添加我们实际的主机了。
主机文件相称灵活,可以以几种不同的方式举行配置。但我们要使用的语法看起来是这样的:


alias ansible_ssh_host=your_server_ip
group_name 是一个组织标签,让你可以用一个词来引用其下列出的任何服务器。alias 只是一个用来引用该服务器的名称。
因此,在我们的场景中,我们假设我们有三台服务器要用 Ansible 控制。这些服务器可以通过在 Ansible droplet 上键入以下下令来访问:
ssh root@your_server_ip
如果你设置精确的话,你不应该被要求输入暗码。我们假设我们的 droplets 的 IP 地址分别是 192.0.2.1、192.0.2.2 和 192.0.2.3。我们将设置这样,以便我们可以分别将它们称为 host1、host2 和 host3,大概作为一个组称为 droplets。
这是我们应该添加到我们的主机文件中以实现这一点的代码块:

host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3
主机可以属于多个组,组可以为其全部成员配置参数。现在让我们试一下。
根据我们当前的设置,如果我们实行用 Ansible 连接到这些主机中的任何一个,下令将失败(假设你不是以 root 用户身份操作)。这是因为你的 SSH 密钥嵌入到了远程体系的 root 用户中,而 Ansible 默认会实行以当前用户身份连接。连接实行将会得到以下错误:

host1 | FAILED => SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue
在我的 Ansible 盘算机上,我使用一个名为 demo 的用户。Ansible 将实行用 ssh demo@server 连接到每个主机。如果远程体系上没有 demo 用户,这将不起作用。
我们可以创建一个文件,告诉 “droplets” 组中的全部服务器使用 root 用户连接。
为此,我们将在 Ansible 配置布局中创建一个名为 group_vars 的目录。在这个文件夹中,我们可以为要配置的每个组创建 YAML 格式的文件:
sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/droplets
我们可以在这里放置我们的配置。YAML 文件以 “—” 开头,所以确保你不要忘记这一部分。

---
ansible_ssh_user: root
完成后生存并关闭此文件。
如果你想为每台服务器指定配置细节,而不管其组关联如何,你可以将这些细节放在 /etc/ansible/group_vars/all 文件中。通过在 /etc/ansible/host_vars 目录下创建文件,可以为单独的主机举行配置。
使用简单的 Ansible 下令

现在我们已经设置好我们的主机,并且有足够的配置细节可以让我们乐成连接到我们的主机,我们可以实行我们的第一个下令了。
通过键入以下下令来 ping 全部你配置的服务器:
ansible -m ping all

host1 | success >> {
    "changed": false,
    "ping": "pong"
}

host3 | success >> {
    "changed": false,
    "ping": "pong"
}

host2 | success >> {
    "changed": false,
    "ping": "pong"
}
这是一个根本测试,以确保 Ansible 与全部主机都有连接。
“all” 表现全部主机。我们也可以轻松地指定一个组:
ansible -m ping droplets
我们也可以指定一个单独的主机:
ansible -m ping host1
我们可以通过用冒号分隔它们来指定多个主机:
ansible -m ping host1
:host2 下令中的 -m ping 部分是对 Ansible 使用 “ping” 模块的指示。这些根本上是你可以在远程主机上运行的下令。ping 模块在很多方面类似于 Linux 中的普通 ping 实用步伐,但它是用来查抄 Ansible 连通性的。
ping 模块实际上并不担当任何参数,但我们可以实行另一个下令来看看它是如何工作的。我们通过 -a 将参数传递给脚本。
“shell” 模块让我们向远程主机发送终端下令并检索结果。例如,要相识我们的 host1 呆板上的内存使用情况,我们可以使用:
ansible -m shell -a 'free -m' host1

host1 | success | rc=0 >>
             total       used       free   shared    buffers   cached
Mem:          3954      227       3726          0         14         93
-/+ buffers/cache:      119       3834
Swap:            0          0          0
结论

到现在为止,您应该已经配置好了您的 Ansible 服务器,可以与您想要控制的服务器举行通信。我们已经验证了 Ansible 能够与每个主机举行通信,并且使用 ansible 下令远程执行了简单的任务。
虽然这很有用,但在本文中我们还没有涵盖 Ansible 最强大的功能:Playbooks。我们已经为通过 Ansible 使用我们的服务器打下了良好的基础,但在未来的文章中,当我们介绍如何使用 Playbooks 自动配置远程盘算机时,将会涉及更多的工作。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 在Ubuntu 14.04上安装和配置Ansible的方法