如何安裝和配置 Ansible 控制節點?
Ansible 是一款開源自動化工具,使系統管理員能夠自動化 IT 任務,例如應用程式部署、配置管理和基礎架構編排。Ansible 使用宣告式語言來描述系統配置,並同時在多臺機器上並行執行任務。Ansible 部署的關鍵元件之一是控制節點,它管理部署過程。
在本文中,我們將指導您完成在 Linux 機器上安裝和配置 Ansible 控制節點的過程。
先決條件
在開始之前,您需要以下條件:
執行 Linux 發行版(例如 Ubuntu、CentOS 或 Debian)的機器,至少具有 2GB 的 RAM。
具有 sudo 許可權的使用者帳戶。
步驟 1:安裝 Ansible
第一步是在控制節點上安裝 Ansible。Ansible 可在大多數 Linux 發行版的預設軟體包儲存庫中找到。要安裝它,請更新您的軟體包列表並安裝 ansible 軟體包:
sudo apt update sudo apt install ansible
如果您使用的是不同的 Linux 發行版,您可以按照相關的文件來安裝 Ansible。
步驟 2:配置控制節點
安裝 Ansible 後,您需要配置控制節點。Ansible 使用清單檔案來定義它將管理的主機。清單檔案是一個純文字檔案,列出了 Ansible 將管理的機器的主機名或 IP 地址。
預設情況下,Ansible 在 /etc/ansible/hosts 中查詢清單檔案。您可以手動建立檔案或使用 ansible-inventory 命令生成它。
要手動建立一個清單檔案,請在 /etc/ansible/hosts 建立一個新檔案:
sudo nano /etc/ansible/hosts
在檔案中,列出您希望 Ansible 管理的主機。例如:
[webservers] web1.example.com web2.example.com [dbservers] db1.example.com
在這個例子中,我們定義了兩個組:webservers 和 dbservers。webservers 組包含兩個主機,web1.example.com 和 web2.example.com。dbservers 組包含一個主機,db1.example.com。
定義清單檔案後,您可以透過執行以下命令來測試 Ansible 是否能夠連線到您的主機:
ansible all -m ping
此命令將向清單檔案中定義的所有主機發送 ping 命令。如果 Ansible 能夠連線到主機,它將返回成功訊息。
步驟 3:配置 SSH 認證
Ansible 使用 SSH 連線到遠端主機並執行命令。預設情況下,Ansible 使用您當前登入的使用者帳戶連線到遠端主機。但是,最佳實踐是為 Ansible 建立一個單獨的使用者帳戶,並配置 SSH 認證以使用公鑰認證而不是密碼。
要建立一個新的使用者帳戶,請執行以下命令:
sudo adduser ansible
出現提示時,輸入新使用者帳戶的密碼。您可以將其他欄位留空。
接下來,為新使用者帳戶配置 SSH 公鑰認證。首先,切換到新使用者帳戶:
su ansible
接下來,生成一個新的 SSH 金鑰對:
ssh-keygen
出現提示時,按 Enter 鍵接受預設檔案位置,並將密碼短語留空。
接下來,將公鑰複製到您希望 Ansible 管理的每個主機:
ssh-copy-id hostname
將 hostname 替換為每個遠端主機的 hostname 或 IP 地址。第一次連線時,您需要輸入每個遠端主機的密碼。
將公鑰複製到遠端主機後,您應該能夠在不輸入密碼的情況下連線到它:
ssh hostname
如果系統提示您輸入密碼,則表示公鑰認證未正確設定。
最後,退出新使用者帳戶並切換回您的原始使用者帳戶:
exit
步驟 4:配置 SSH 連線設定
預設情況下,Ansible 使用控制節點上安裝的 SSH 客戶端連線到遠端主機。您可以透過在 ~/.ssh/config 建立一個 SSH 配置檔案來配置 SSH 客戶端設定。此檔案可以包含預設使用者名稱和私有 SSH 金鑰位置等設定。
要建立 SSH 配置檔案,請執行以下命令:
nano ~/.ssh/config
將以下幾行新增到檔案中:
Host * User ansible IdentityFile /home/ansible/.ssh/id_rsa
這將配置 SSH 客戶端預設使用 ansible 使用者和位於 /home/ansible/.ssh/id_rsa 的私鑰。如果您的私鑰位置不同,請將其替換為您的私鑰位置。
使用 Ansible 時,您可以探索更多高階配置和功能。以下是一些示例:
組和主機變數
Ansible 允許您為清單檔案中的每個組或主機定義變數。這些變數可以在您的劇本中使用,以自定義每個主機或組的配置。
要為組定義變數,請在 /etc/ansible/group_vars/ 目錄中建立一個與您的組同名的檔案。例如,要為 webservers 組定義變數,請建立一個名為 webservers.yml 的檔案。在這個檔案中,您可以將變數定義為鍵值對:
nginx_version: 1.18
要為特定主機定義變數,請在 /etc/ansible/host_vars/ 目錄中建立一個與您的主機同名的檔案。例如,要為 web1.example.com 定義變數,請建立一個名為 web1.example.com.yml 的檔案。
劇本
劇本是 Ansible 定義應該應用於一組主機的任務和配置的方式。劇本使用 YAML 編寫,可以包含多個任務。
這是一個在 web 伺服器組上安裝 Nginx 的示例劇本:
--- - name: Install Nginx on webservers hosts: webservers become: true tasks: - name: Install Nginx apt: name: nginx state: present
此劇本定義了一個單一任務,該任務在 webservers 組中的所有主機上安裝 Nginx。become 關鍵字用於在執行任務之前切換到 root 使用者。
角色
角色是將任務和配置組織成可重用元件的方式。角色可以包含任務、模板、檔案和其他定義特定功能的元件,例如安裝 web 伺服器或配置資料庫。
要建立一個新角色,請使用 ansible-galaxy 命令:
ansible-galaxy init myrole
這將建立一個名為 myrole 的新目錄,其中包含新角色的基本結構。
可以使用 roles 關鍵字在劇本中包含角色:
--- - name: Install and configure web server hosts: webservers become: true roles: - myrole
以下是一些您在使用 Ansible 時可能想要探索的其他主題:
變數
變數是 Ansible 的一個關鍵特性,允許您定義可以在多個劇本和角色中重用的值。變數可以透過多種方式定義,包括:
內聯變數 - 直接在任務或劇本中定義。
清單變數 - 在清單檔案中為特定主機或組定義。
組變數 - 在 /etc/ansible/group_vars 目錄中為特定組定義的 YAML 檔案中定義。
主機變數 - 在 /etc/ansible/host_vars 目錄中為特定主機定義的 YAML 檔案中定義。
角色變數 - 在角色的 vars 目錄中的 YAML 檔案中定義。
可以使用 {{ variable_name }} 語法在任務和劇本中使用變數。
條件語句
條件語句允許您根據特定條件控制劇本和任務的流程。Ansible 支援各種條件語句,包括 when、failed_when 和 changed_when。這些條件語句可用於檢查系統的狀態或確定是否需要執行任務。
處理器
處理器是僅在滿足特定條件時才執行的任務。處理器通常用於重新啟動服務或執行僅在進行配置更改時才必要的其他操作。處理器在劇本或角色中使用 notify 關鍵字定義。
模板
模板允許您定義動態配置檔案,這些檔案可以為每個主機或組定製。模板通常使用 Jinja2 語法編寫,可以包含變數和條件語句。模板在角色或劇本中使用 template 關鍵字定義。
結論
在本文中,我們指導您完成了在 Linux 機器上安裝和配置 Ansible 控制節點的過程。我們首先安裝 Ansible 並建立了一個清單檔案來定義 Ansible 將管理的主機。然後,我們配置了 SSH 認證和連線設定,以使 Ansible 能夠連線到遠端主機。
按照以下步驟,您現在應該已經擁有一個功能齊全的 Ansible 控制節點,可以高效且輕鬆地管理您的 IT 基礎設施。