如何在 Ubuntu 上安裝 Ansible

Ansible 是一個開源工具,允許您配置、配置、管理和部署應用程序。 它有助於將基礎設施作為代碼運行,基本上是一個自動化工具。 Ansible 在 Linux、類 Unix 和 Windows 系統上運行。 它是一個用 Python 編寫的免費工具。

使用 Ansible,簡化了大量服務器的自動化和控制。 這使得系統 admin 或 DevOps 工程師從單個控制節點管理所有服務器。

與 Chef 和 Puppet 不同,Ansible 不需要在節點上安裝任何特殊軟件。 Ansible 使用 SSH 執行任務,使用 YAML 文件定義供應信息。

本教程將向您展示如何在 Ubuntu 20.04 上安裝 ansible 並學習基礎知識。

Ansible 控制節點和主機

Ansible 控制節點是一台安裝了 ansible 並控制一個或多個遠程主機的計算機。 控制節點使用命令行工具或配置腳本(劇本)通過 SSH 與主機或節點進行通信。

主機或受管節點是 ansible 管理的網絡設備或服務器。 Ansible 通過使用 SSH 簡化了操作,因此主機只需要運行 SSH 服務並打開端口。

在下一節中,我們將學習如何設置控制節點並從主機檢索信息。

要求

  • 一個帶有 ssh 密鑰對的控制節點
  • 一台或多台主機 – 添加了 ssh 公鑰的遠程服務器

為了演示,我們將使用一台 Ubuntu 20.04 機器來實現這兩個目的。

在 Ubuntu 上安裝 Ansible

Ansible 組件安裝在控制節點上。 以下命令在 Ubuntu 上安裝 Ansible。

首先,從其來源獲取所有軟件包的更新列表:

$ sudo apt update

現在安裝ansible,輸入:

$ sudo apt install ansible

設置控制節點和主機

建議創建一個非 root 用戶 sudo Ansible 控制節點上的權限。 然後為該用戶設置一個 SSH 密鑰對。

創建一個新的非 root 用戶:

$ sudo adduser controller

然後,您必須分配 sudo 許可 controller 用戶:

$ sudo usermod -aG sudo controller

現在,您可以登錄 controller 用戶會話並生成 SSH 密鑰:

$ su - controller
$ ssh-keygen

輸出:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/controller/.ssh/id_rsa):
Created directory '/home/controller/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/controller/.ssh/id_rsa
Your public key has been saved in /home/controller/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:R033P2ygbVuZv5jJdRbIZtaPG8Af7ZFL2pE9vbzQgP0 controller@linoxide
The key's randomart image is:
+---[RSA 3072]----+
| . . |
| o . . |
| . .. .|
| . .* =.O|
| S .oo@.^=|
| . =o%+@|
| ++E*|
| . *++|
| =.o |
+----[SHA256]-----+

我們必須啟用從 Ansible 控制節點到每個主機的無密碼 SSH。 基本上,我們必須將控制節點的公鑰複製到每個主機上的authorized_keys 文件中。

在本教程中,我們將使用兩個 ansible 主機: host1@ip_address_1host2@ip_address_2.

在 Ansible 控制節點上,運行以下命令將公鑰複製到主機服務器:

$ ssh-copy-id host1@ip_address_1
$ ssh-copy-id host2@ip_address_2

設置庫存文件

Ansible 使用 inventory file 存儲有關 Ansible 控制節點管理的遠程服務器(主機)的信息。 主機可以組織成組或子組。

默認的 ansible 清單文件位於 /etc/ansible/hosts,但您可以在任何位置創建清單文件,並且必須使用 -i 運行 Ansible 命令時的參數。

現在,您可以使用您喜歡的編輯器打開清單文件並進行如下修改:

$ sudo vim /etc/ansible/hosts

請注意,將以下 IP 替換為您的 Ansible 主機的 IP 地址。

[servers]
server1 ansible_host=178.0.113.111
server2 ansible_host=178.0.113.112

通過以下命令驗證清單:

$ ansible-inventory --list -y

輸出:

all:
children:
servers:
hosts:
server1:
ansible_host: 178.0.113.111
server2:
ansible_host: 178.0.113.112
ungrouped: {}

測試連接

是時候檢查 Ansible 是否可以連接到遠程服務器了。 您可以使用 -u 參數來指定服務器上的遠程用戶。 為了 example:

$ ansible all -m ping -u root

命令使用 ansible ping 模塊來檢查從 Ansible 控制節點到遠程服務器的連接。

server1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}

當您收到一份 pong 從遠程服務器回复,您可以在該服務器上運行 ansible 命令和劇本。

運行一個 Ad-hoc 遠程 ansible 主機上的命令,用於 example:

$ ansible all -a "df -h" -u root

輸出:

server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.7G 0 3.7G 0% /dev
tmpfs 746M 2.3M 744M 1% /run
/dev/sda1 20G 4.7G 15G 25% /
tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup
/dev/loop1 130M 130M 0 100% /snap/google-cloud-sdk/161
/dev/loop0 32M 32M 0 100% /snap/snapd/10238
/dev/sda15 105M 3.6M 101M 4% /boot/efi
tmpfs 746M 0 746M 0% /run/user/1001
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.7G 0 3.7G 0% /dev
tmpfs 746M 1.7M 745M 1% /run
/dev/sda1 20G 4.2G 16G 22% /
tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup
/dev/loop0 56M 56M 0 100% /snap/core18/1932
/dev/loop1 32M 32M 0 100% /snap/snapd/10492
/dev/sda15 105M 3.6M 101M 4% /boot/efi
tmpfs 746M 0 746M 0% /run/user/1001

結論

Ansible 現在歸 Redhat 所有,並對代碼進行了大量改進。 Ansible Tower 是 Ansible 的企業版,您可以在其中從基於 Web 的現代 UI 管理服務器。

在本教程中,您通過示例學習瞭如何在 Ubuntu 上安裝 ansible 和基本設置。 感謝您的閱讀,請在下面的評論部分留下您的建議。