如何在 Ubuntu 20.04 上安裝和配置 Ansible

介紹

配置管理系統旨在簡化對大量伺服器的控制過程,供管理員和運維團隊使用。它們允許您從一個中央位置自動化地控制許多不同的系統。

雖然有許多為Linux系統設計的熱門配置管理工具,例如ChefPuppet,但這些工具通常比許多人想要或需要的要複雜得多。Ansible是這些選項的絕佳替代品,因為它提供了一個不需要在節點上安裝特殊軟件的架構,使用SSH執行自動化任務,並使用YAML文件定義配置細節。

在本指南中,我們將討論如何在Ubuntu 20.04伺服器上安裝Ansible,並介紹如何使用這款軟件的一些基本知識。有關Ansible作為配置管理工具的更高級概述,請參閱使用Ansible進行配置管理的介紹

先決條件

要遵循本教程,您需要:

  • 一個 Ansible 控制節點: Ansible 控制節點是我們將用來通過 SSH 連接並控制 Ansible 主機的機器。您的 Ansible 控制節點可以是本地機器,也可以是專用於運行 Ansible 的服務器,不過本指南假定您的控制節點是一台 Ubuntu 20.04 系統。確保控制節點擁有:

    • 一個具有 sudo 權限的非 root 用戶。要設置這個,您可以按照我們的 Ubuntu 20.04 初始服務器設置指南的第 2 和第 3 步。但是,請注意,如果您將遠程服務器用作 Ansible 控制節點,則應該按照本指南的 每一步 進行操作。這樣做將在服務器上配置一個使用 ufw 的防火牆,並啟用對非 root 用戶配置文件的外部訪問,這兩者都有助於保持遠程服務器的安全性。
    • 與該用戶關聯的一對 SSH 密鑰。要設置這個,您可以按照我們的 在 Ubuntu 20.04 上設置 SSH 密鑰的指南的第 1 步
  • 一個或多個Ansible主機:Ansible主機是您的Ansible控制節點配置為自動化的任何機器。本指南假定您的Ansible主機是遠程Ubuntu 20.04服務器。請確保每個Ansible主機都有:

    • Ansible控制節點的SSH公鑰添加到系統用戶的authorized_keys中。此用戶可以是root或具有sudo權限的常規用戶。要設置這個,您可以按照Ubuntu 20.04上如何設置SSH金鑰的第2步

步驟1 — 安裝 Ansible

要開始使用 Ansible 來管理您的伺服器基礎架構,您需要在將作為 Ansible 控制節點的機器上安裝 Ansible 軟體。

從您的控制節點運行以下命令,將官方專案的 PPA(個人套件存檔)包含在系統的來源列表中:

  1. sudo apt-add-repository ppa:ansible/ansible

在提示時按下 ENTER 接受 PPA 添加。

接下來,刷新您系統的套件索引,使其了解新添加的 PPA 中可用的套件:

  1. sudo apt update

完成更新後,您可以使用以下命令安裝 Ansible 軟體:

  1. sudo apt install ansible

您的 Ansible 控制節點現在擁有管理主機所需的所有軟體。接下來,我們將介紹如何將您的主機添加到控制節點的庫存檔案中,以便它可以控制它們。

步驟2 — 設置庫存檔案

庫存文件 包含有關您將使用 Ansible 管理的主機的信息。您可以在庫存文件中包含從一個到幾百台服務器,並且主機可以組織成組和子組。庫存文件通常也用於設置僅對特定主機或組有效的變量,以便在 playbook 和模板中使用。某些變量還可以影響 playbook 的運行方式,例如我們馬上就會看到的 ansible_python_interpreter 變量。

要編輯默認 Ansible 庫存的內容,請使用您喜歡的文本編輯器在您的 Ansible 控制節點上打開 /etc/ansible/hosts 文件:

  1. sudo nano /etc/ansible/hosts

注意:儘管 Ansible 通常在 /etc/ansible/hosts 路徑下創建默認庫存文件,但您可以自由地在任何更適合您需求的位置創建庫存文件。在這種情況下,運行 Ansible 命令和 playbook 時,您需要使用 -i 參數提供您自定義庫存文件的路徑。使用每個項目的庫存文件是一種良好的做法,可以最大程度地減少在錯誤的服務器組上運行 playbook 的風險。

Ansible 安裝提供的默認庫存文件包含許多示例,您可以用它們作為設置庫存的參考。下面的示例定義了一個名為 [servers] 的組,其中包含三個不同的服務器,每個服務器都由自定義別名標識:server1, server2, 和 server3。請確保將突出顯示的 IP 地址替換為您的 Ansible 主機的 IP 地址。

/etc/ansible/hosts
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

all:vars 子组设置了适用于此清单中所有主机的 ansible_python_interpreter 主机参数。此参数确保远程服务器使用 /usr/bin/python3 Python 3 可执行文件,而不是 /usr/bin/python(Python 2.7),后者在最新的 Ubuntu 版本中不存在。

完成后,请按 CTRL+X,然后按 Y 然后 ENTER 保存并关闭文件以确认更改。

每当您想要检查清单时,可以运行:

  1. ansible-inventory --list -y

您将看到类似于此的输出,但包含在清单文件中定义的您自己的服务器基础结构:

Output
all: children: servers: hosts: server1: ansible_host: 203.0.113.111 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 203.0.113.112 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 203.0.113.113 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}

现在您已配置了清单文件,您拥有测试与 Ansible 主机的连接的所有所需内容。

第 3 步 — 测试连接

在设置清单文件以包括您的服务器后,现在是时候检查 Ansible 是否能够连接到这些服务器并通过 SSH 运行命令。

对于本指南,我们将使用 Ubuntu root 帐户,因为这通常是默认在新创建的服务器上唯一可用的帐户。如果您的 Ansible 主机已经创建了常规 sudo 用户,建议使用该帐户。

您可以使用-u參數來指定遠程系統用戶。如果未提供,Ansible將嘗試以控制節點上的當前系統用戶連接。

從您的本地計算機或Ansible控制節點運行:

  1. ansible all -m ping -u root

運行此命令將使用Ansible內置ping模塊在默認清單上對所有節點運行連通性測試,以root用戶身份連接。 ping模塊將測試:

  • 主機是否可訪問;
  • 您是否具有有效的SSH憑證;
  • 主機是否能夠使用Python運行Ansible模塊。

您應該會得到類似於以下的輸出:

Output
server1 | SUCCESS => { "changed": false, "ping": "pong" } server2 | SUCCESS => { "changed": false, "ping": "pong" } server3 | SUCCESS => { "changed": false, "ping": "pong" }

如果這是您首次通過SSH連接到這些服務器,您將被要求通過Ansible確認主機的真實性。提示時,輸入yes然後按ENTER鍵確認。

一旦您從主機收到"pong"回復,這意味著您已準備好在該服務器上運行Ansible命令和Playbook。

注意: 如果無法從您的服務器獲得成功的響應,請查看我們的Ansible速查表指南,了解如何使用不同的連接選項運行Ansible命令的更多信息。

第4步 — 运行临时命令(可选)

确认您的Ansible控制节点能够与主机通信后,您可以在服务器上开始运行临时命令和Playbooks。

您可以使用Ansible在清单文件中指定的服务器上运行通常在远程服务器上通过SSH执行的任何命令。例如,您可以检查所有服务器的磁盘使用情况:

  1. ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0 ...

突出显示的命令 df -h 可以替换为您想要的任何命令。

您还可以通过临时命令执行Ansible模块,类似于我们之前使用ping模块进行连接测试的操作。例如,这是我们如何使用apt模块在清单中的所有服务器上安装vim的最新版本:

  1. ansible all -m apt -a "name=vim state=latest" -u root

在运行Ansible命令时,您还可以针对单个主机、组和子组进行操作。例如,这是您如何检查servers组中每个主机的uptime

  1. ansible servers -a "uptime" -u root

我们可以通过冒号分隔它们来指定多个主机:

  1. ansible server1:server2 -m ping -u root

有關如何使用Ansible的更多信息,包括如何執行Playbooks以自動化伺服器設置,您可以查看我們的Ansible參考指南

結論

在這個指南中,您已經安裝了Ansible並設置了一個清單文件,以從Ansible控制節點執行即時命令。

一旦確認您能夠從中央Ansible控制器機器連接並控制基礎設施,您可以在這些主機上執行任何命令或Playbook。

有關如何使用Ansible的更多信息,請查看我們的Ansible速查表指南

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-ubuntu-20-04