Ansible 是一個用於配置和管理計算機的開源軟件平台。 它結合了多節點軟件部署、臨時任務執行和配置管理。 Ansible 通過 SSH 工作,不需要在遠程節點上安裝任何軟件或守護進程。 擴展模塊可以用任何語言編寫; Node.js 是目前最流行的選擇。
Ansible 將系統狀態建模為一系列關於設備所需狀態的斷言,由名稱、IP 地址、端口號等變量定義。程序然後執行有關係統的“事實”(例如存在哪些用戶帳戶) ) 評估該狀態是否為真; 如果不正確,則必須採取措施改變系統的實際狀態以匹配其模型的狀態。
Ansible 始於 2012 年,作為 Puppet 和 Chef 的開源替代品,以及配置管理領域的其他工具。 它由 Michael DeHaan 開發,他是 Rackspace 內部基礎設施雲供應基礎設施的創建者,Red Hat 後來在 OpenStack 下收購了該雲。 他說他創建 Ansible 是出於對現有工具的不滿,因為它們太“笨重”。 他沒有重新發明“ping”或“ls”等常見的 shell 命令,而是編寫了一些小模塊,這些模塊可以組合起來執行有用的任務,而無需了解它們的內部工作原理。 為了 example,在編寫管理 MySQL 數據庫的模塊時,他不必實施安全最佳實踐; 相反,它包含在 Ansible 附帶的默認模塊庫中。
使用 Ansible 的好處之一是它可以管理異構基礎設施。 為了 example,您的組織可能同時擁有 Linux 和 Windows 服務器。 Ansible 可以管理這兩個系統,而無需單獨的配置文件或管理工具。
本教程將教您如何在 Rocky Linux 9 上安裝和配置 Ansible,以實現網絡自動化、供應和配置管理。 我們還將使用一個基本的工作 example 演示如何在實踐中使用 Ansible。
先決條件
要學習本教程,您需要具備以下條件:
- 運行 Rocky Linux 9 的計算機
- 根權限或 sudo 訪問計算機
- Ansible 版本 2.0 或更高版本安裝在您的計算機上
- OpenSSH 服務器在端口 22 上運行並接受連接
更新你的 Rocky Linux 9 系統
保持系統更新始終是個好主意。 要更新您的 Rocky Linux 8,請運行以下命令。 這些命令將檢查您的系統是否有任何可用的更新,並且 sudo dnf 更新將安裝它們。
sudo dnf check-update sudo dnf update -y
更新過程可能需要幾分鐘,具體取決於您的 Internet 連接速度和服務器負載,請耐心等待。
接下來,運行以下命令以安裝系統的企業 Linux 額外軟件包 (EPEL) 存儲庫。 安裝後,您將需要再次更新,因為 EPEL 引入了自己的軟件包版本和編號,可能與官方 Rocky 存儲庫的版本和編號不匹配。
sudo dnf install epel-release && sudo dnf update -y
在 Rocky Linux 上安裝 Ansible
現在您已經啟用了 EPEL 存儲庫,您可以在您的系統上安裝 Ansible。 我們將使用下面的命令來安裝 Ansible 的當前穩定版本。
sudo dnf install ansible -y
運行以下命令以驗證 Ansible 是否已正確安裝。 此命令將打印 Ansible 版本號。
ansible --version
示例輸出:
在目標服務器上配置 SSH
在您將 SSH 配置為接受來自您計算機的連接之前,您的目標服務器還沒有準備好使用 Ansible。 我們將使用 ssh-keygen 實用程序在您的計算機上創建公鑰/私鑰對。 私鑰將存儲在您的計算機上,而公鑰將被複製到目標服務器。
這 example 將使用 Ubuntu 22.04 LTS 作為目標服務器,但您可以替換為您自己的目標服務器。 如果您的目標服務器是不同的操作系統,則必須相應地調整命令。
首先,運行以下命令在目標服務器上安裝 OpenSSH 服務器。
sudo apt install openssh-server -y
接下來,運行以下命令以啟用 ssh 服務。
sudo systemctl enable ssh
最後,運行下面的命令打開端口 22,以便 ansible 可以連接。
sudo ufw allow 22
配置您的本地計算機以使用目標服務器
現在 SSH 已啟用,您需要在本地計算機(您的 Rocky Linux)上生成一個密鑰對。 運行下面的命令來執行此操作。 ssh-keygen 是一個生成一對加密密鑰的程序,一個公鑰,一個私鑰。 這些密鑰用於在通過 SSH 連接時識別計算機。
ssh-keygen
運行命令後,您將被問到幾個問題。 提供的默認答案適合我們的目的,因此您可以按 Enter 直到生成密鑰。
現在,您需要將公鑰複製到目標服務器。 您可以使用 ssh-copy-id 命令執行此操作,該命令默認包含在大多數 Linux 發行版中。 您需要指定您在遠程服務器上使用的用戶帳戶 (root)、遠程主機名或遠程 IP 地址 (11.22.33)。
cd ~/.ssh ssh-copy-id [email protected]
提示時提供目標服務器上用戶帳戶的密碼,公鑰將被複製到您的目標服務器。
配置本地計算機的主機文件
ssh 命令提供的一個非常有用的工具是能夠為多個服務器使用單個 SSH 密鑰對。 Ansible 將查看本地計算機的 /etc/hosts 文件,並在其 playbook 運行期間遇到主機名時嘗試解析其中列出的 IP 地址。 由於我們之前將公鑰複製到目標服務器,因此我們會將 11.22.33 地址添加到本地計算機的 /etc/hosts 文件中,以便 Ansible 可以正確解析它。
sudo nano /etc/ansible/hosts
您將把 11.22.33 添加到 webservers 主機組的底部。 請記住將 11.22.33 替換為您的實際 IP 地址。
Ansible 中的組只是一個應該被類似對待的主機列表。
為了 examplewebservers 是一組主機,它們都運行相同的 web 應用程序,db-servers 是一組主機,它們都運行相同的數據庫應用程序。
假設您有幾個不同的服務器,它們都將運行類似的劇本。 在這種情況下,您可能會考慮將它們全部放入一個主機組中,以便在這些系統上運行的每個劇本都可以利用整個組共享的任何變量或其他功能。
Save 和 close 完成後的文件。
測試您的配置
現在,我們可以通過對目標服務器使用 ping 模塊來測試 Ansible 是否在本地計算機上正確配置。 這將檢查您的配置文件中是否有任何語法錯誤會阻止 ansible 連接到目標服務器。
ansible -m ping webservers
如果一切配置正確,ansible 將返回主機組中所有主機的列表及其相應的 ping 狀態。
輸出應如下所示:
SUCCESS 表示命令已在遠程服務器上成功運行。 此輸出將根據 ansible 是否可以聯繫目標服務器以及您傳遞給 ping 的參數(例如 -m ping)而有所不同。
“ansible_facts”: { 表示 ansible 能夠收集有關遠程服務器的事實。
“discovered_interpreter_python”: “/usr/bin/python3” 表示 ansible 發現了遠程目標服務器上可用的解釋器,在本例中為 /usr/bin/python3。 假設您在運行 ping 模塊後沒有看到任何輸出。 在這種情況下,您的主機文件中可能有拼寫錯誤,或者您的配置中存在其他一些錯誤,導致 ansible 無法連接到目標服務器。
“changed”: false 表示由於運行此特定模塊而未在遠程服務器上進行任何更改。
“ping”:“pong”按預期返回 pong。 這是您應該看到的響應,如果一切配置正確並且 ansible 可以成功到達目標服務器。
結論
在本文中,我們在本地 Rocky Linux 9 機器上安裝了 Ansible,並將其配置為連接到遠程服務器。 然後使用 Ansible ping 遠程服務器以確保一切配置正確。
現在您已經安裝並配置了 ansible,您可以使用它來管理您的遠程服務器。
更多關於使用Ansible的信息,請查看其官方Ansible 文檔.