介紹
配置管理系統旨在簡化對大量伺服器的控制過程,供管理員和運維團隊使用。它們允許您從一個中央位置自動化地控制許多不同的系統。
雖然有許多為Linux系統設計的熱門配置管理工具,例如Chef和Puppet,但這些工具通常比許多人想要或需要的要複雜得多。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 步。
- 一個具有 sudo 權限的非 root 用戶。要設置這個,您可以按照我們的 Ubuntu 20.04 初始服務器設置指南的第 2 和第 3 步。但是,請注意,如果您將遠程服務器用作 Ansible 控制節點,則應該按照本指南的 每一步 進行操作。這樣做將在服務器上配置一個使用
-
一個或多個Ansible主機:Ansible主機是您的Ansible控制節點配置為自動化的任何機器。本指南假定您的Ansible主機是遠程Ubuntu 20.04服務器。請確保每個Ansible主機都有:
- Ansible控制節點的SSH公鑰添加到系統用戶的
authorized_keys
中。此用戶可以是root或具有sudo權限的常規用戶。要設置這個,您可以按照Ubuntu 20.04上如何設置SSH金鑰的第2步。
- Ansible控制節點的SSH公鑰添加到系統用戶的
步驟1 — 安裝 Ansible
要開始使用 Ansible 來管理您的伺服器基礎架構,您需要在將作為 Ansible 控制節點的機器上安裝 Ansible 軟體。
從您的控制節點運行以下命令,將官方專案的 PPA(個人套件存檔)包含在系統的來源列表中:
- sudo apt-add-repository ppa:ansible/ansible
在提示時按下 ENTER
接受 PPA 添加。
接下來,刷新您系統的套件索引,使其了解新添加的 PPA 中可用的套件:
- sudo apt update
完成更新後,您可以使用以下命令安裝 Ansible 軟體:
- sudo apt install ansible
您的 Ansible 控制節點現在擁有管理主機所需的所有軟體。接下來,我們將介紹如何將您的主機添加到控制節點的庫存檔案中,以便它可以控制它們。
步驟2 — 設置庫存檔案
庫存文件 包含有關您將使用 Ansible 管理的主機的信息。您可以在庫存文件中包含從一個到幾百台服務器,並且主機可以組織成組和子組。庫存文件通常也用於設置僅對特定主機或組有效的變量,以便在 playbook 和模板中使用。某些變量還可以影響 playbook 的運行方式,例如我們馬上就會看到的 ansible_python_interpreter
變量。
要編輯默認 Ansible 庫存的內容,請使用您喜歡的文本編輯器在您的 Ansible 控制節點上打開 /etc/ansible/hosts
文件:
- sudo nano /etc/ansible/hosts
注意:儘管 Ansible 通常在 /etc/ansible/hosts
路徑下創建默認庫存文件,但您可以自由地在任何更適合您需求的位置創建庫存文件。在這種情況下,運行 Ansible 命令和 playbook 時,您需要使用 -i
參數提供您自定義庫存文件的路徑。使用每個項目的庫存文件是一種良好的做法,可以最大程度地減少在錯誤的服務器組上運行 playbook 的風險。
Ansible 安裝提供的默認庫存文件包含許多示例,您可以用它們作為設置庫存的參考。下面的示例定義了一個名為 [servers]
的組,其中包含三個不同的服務器,每個服務器都由自定義別名標識:server1, server2, 和 server3。請確保將突出顯示的 IP 地址替換為您的 Ansible 主機的 IP 地址。
[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
保存并关闭文件以确认更改。
每当您想要检查清单时,可以运行:
- ansible-inventory --list -y
您将看到类似于此的输出,但包含在清单文件中定义的您自己的服务器基础结构:
Outputall:
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控制節點運行:
- ansible all -m ping -u root
運行此命令將使用Ansible內置ping
模塊在默認清單上對所有節點運行連通性測試,以root用戶身份連接。 ping
模塊將測試:
- 主機是否可訪問;
- 您是否具有有效的SSH憑證;
- 主機是否能夠使用Python運行Ansible模塊。
您應該會得到類似於以下的輸出:
Outputserver1 | 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执行的任何命令。例如,您可以检查所有服务器的磁盘使用情况:
- 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
的最新版本:
- ansible all -m apt -a "name=vim state=latest" -u root
在运行Ansible命令时,您还可以针对单个主机、组和子组进行操作。例如,这是您如何检查servers
组中每个主机的uptime
:
- ansible servers -a "uptime" -u root
我们可以通过冒号分隔它们来指定多个主机:
- ansible server1:server2 -m ping -u root
有關如何使用Ansible的更多信息,包括如何執行Playbooks以自動化伺服器設置,您可以查看我們的Ansible參考指南。
結論
在這個指南中,您已經安裝了Ansible並設置了一個清單文件,以從Ansible控制節點執行即時命令。
一旦確認您能夠從中央Ansible控制器機器連接並控制基礎設施,您可以在這些主機上執行任何命令或Playbook。
有關如何使用Ansible的更多信息,請查看我們的Ansible速查表指南。