如果您是系統管理員,擁有一種一致的方式來管理您正在使用的所有伺服器和電腦是非常重要的。組態管理系統可以在很大程度上簡化這個過程。它們能從中央位置高效地管理所有系統。
在 Linux 上,有多個組態管理系統可用。例如,Puppet, Chef, Ansible, Bcfg2, Juju, CFEngine 等。雖然像 Puppet 和 Chef 這樣的工具往往更複雜且先進,但 Ansible 提供了簡單與易用性。您不需要在節點上安裝任何額外的用戶端軟體即可讓 Ansible 運作。相反地,Ansible 使用 SSH 來管理系統並使其自動化。Ansible 是開源軟體。它還具有高度可擴充性、一致性和可靠性。
本指南 示範如何在 Ubuntu 20.04.
Ubuntu 上的 Ansible
Ansible 可以實現三種類型的自動化:
-
資源配置: 它可以根據基礎架構的需求建立各種伺服器。
-
組態管理: 它可以對伺服器進行各種組態變更。例如,啟動和停止服務、安裝應用程式和更新、實施安全性原則等。
-
應用程式部署: 透過將內部開發的應用程式自動部署到生產系統,使 DevOps 變得更容易。
Ansible 幾乎可以在任何 IT 環境中完美運作 – 無論是代管或傳統伺服器、虛擬化平台,還是在雲端中。它還支援管理各種系統,例如資料庫、網路、防火牆、儲存裝置等。 CloudSigma 也支援 Ansible 用於我們的雲端基礎架構。
先決條件
在本指南中,我們需要幾台機器:
-
控制節點: 控制節點是連接到所有主機節點並發布任務以及管理系統各個方面的中央節點。控制節點可以是任何設備 – 本地機器或遠端伺服器。
-
主機節點: Ansible 主機是 Ansible 控制節點可以進行自動化管理的機器。
正如指南標題所示,所有這些機器都應該配置安裝了最新套件的 Ubuntu 20.04。以下是關於 設定 Ubuntu 伺服器 的快速指南。因為 Ansible 使用 SSH 連接到機器,所以所有主機節點都必須與控制節點正確設定 SSH 金鑰。請確保所有主機節點都已將控制節點的 SSH 公鑰新增至 authentication_keys 檔案中。請按照我們的教學來學習 如何產生 SSH 金鑰並將其新增至 Linux 伺服器.
步驟 1:安裝 Ansible
對於 Ubuntu,不需要任何額外的套件或軟體庫配置。Ansible 可以直接從 Ubuntu 官方套件伺服器取得。執行任何系統級別的變更都需要管理員權限 – root 使用者或具有 sudo 權限的非 root 使用者。 sudoers 檔案 管理使用者和群組的 sudo 權限。
首先,我們將在作為控制節點的電腦上安裝 Ansible。要在控制節點上安裝 Ansible,請執行以下命令:
|
1 |
sudo apt update |

|
1 |
sudo apt install ansible -y |

如果您打算使用密碼作為 SSH 驗證機制,則需要安裝套件 sshpass :
|
1 |
sudo apt install sshpass |

步驟 2:設定 Inventory 檔案
在 Ansible 中,inventory 檔案包含有關所有 hosts 的資訊,這些是 ansible 將管理的對象。它可以是註冊在 inventory file 中的數十或數百台伺服器。這些伺服器也可以分為群組和子群組。通常, inventory file 是用來建立僅對特定 hosts 或群組有效的變數。這是編寫 playbook 和範本時非常實用的技術。某些變數還會影響 playbook 的執行方式。
Ansible 附帶一個預設的 inventory 檔案。首先,在文字編輯器中開啟該檔案:
|
1 |
sudo vim /etc/ansible/hosts |

預設情況下,inventory 檔案包含各種範例以供參考。以下是一個群組名稱為 servers 的範例,其中包含三台不同的伺服器。變數 ansible_python_interpreter 定義了所有 hosts 包含在 inventory 中的 Python 解譯器。透過指令 ansible_user,我們可以宣告 Ansible 將連接的使用者帳戶:
|
1 2 3 4 5 6 7 |
[servers] server_1 ansible_host=<server_1_ip> ansible_user=<server_1_username> server_2 ansible_host=<server_2_ip> ansible_user=<server_2_username> server_3 ansible_host=<server_3_ip> ansible_user=<server_3_username> [all:vars] ansible_python_interpreter=/usr/bin/python3 |

接下來,儲存檔案並關閉編輯器。要檢查 inventory,請執行以下命令:
|
1 |
ansible-inventory --list -y |
輸出結果應該類似這樣:

步驟 3:連線測試
設定好 inventory 檔案後,我們需要測試 Ansible 是否可以透過 SSH 連線到這些伺服器。我們可以透過簡單地 ping 所有主機節點來完成。從 控制 節點,ping 所有的 主機 節點:
|
1 |
ansible all -m ping |
這個 ping 模組 會檢查以下事項:
-
主機可達性
-
SSH 憑證的有效性
-
主機可以使用 Python 執行 Ansible 模組
輸出結果應該類似這樣:

如果特定節點的回應是 pong,這表示該節點已準備好在伺服器上執行 Ansible 指令和 playbook。
步驟 4:執行 Ad-Hoc 指令
這是一個選用步驟。然而,這對於驗證 Ansible 對遠端伺服器的完整功能非常有用。本節也可以作為其他 Ansible 使用和設定的基本介紹。一旦我們確認了與節點的連線,就可以開始執行 ad-hoc 指令和 playbook。您平時在遠端伺服器上正常執行的任何指令,都可以透過 Ansible 在所有伺服器上執行。
在這裡,執行以下指令。它將同時檢查所有節點上的磁碟使用情況:
|
1 |
ansible all -a "df -h" |

我們也可以使用 ad-hoc 指令功能來執行各種 Ansible 模組,就像我們執行 ping 模組進行測試一樣。例如, apt 模組適用於 Ubuntu 上的 APT 套件管理員。它可以管理遠端 Ubuntu 節點上的套件。請注意,進行系統級別的變更需要 root 權限。遠端節點必須允許 root 登入,或者使用者必須擁有執行管理任務的權限。
在以下範例中,Ansible 會在所有主機節點上安裝 Nginx :
|
1 |
ansible all -m apt -a "name=nginx state=latest" -u root |
如果只想在單一伺服器上執行指令呢?我們將使用伺服器別名(在 inventory 檔案中分配)來指定伺服器:
|
1 |
ansible server_1 -a "df -h" -u cloudsigma |

我們也可以指定多台伺服器。使用冒號作為分隔符號來宣告每個目標伺服器的別名:
|
1 |
ansible server_1:server_2:server_3 -a "df -h" -u cloudsigma |

結語
在本指南中,我們向您展示了安裝 Ansible 並設定 inventory 檔案以從 Ansible 控制節點執行 ad-hoc 指令的逐步方法。設定完成後,控制節點即可執行您希望在主機上執行的任何指令或 playbook。
祝您運算愉快!
留言
目前尚無留言。成為第一個留言的人吧。