Ansible 致力於簡化應用程式與系統佈署,透過 SSH 和 WinRM 等原生通訊協定,實作一致且可重複的自動化流程。其無代理架構只需 Python 環境,無需在受管系統上安裝額外軟體,大幅降低佈署複雜度。無論是單一主機或大規模叢集,Ansible 都能有效管理,並減少人工介入的需求,提升整體效率。本篇將引導讀者逐步瞭解 Ansible 的安裝、設定,並示範如何在不同作業系統上操作,包含 Linux、macOS 和 Windows。同時,也將探討 Playbook 和角色的撰寫,以及 Inventory 的定義,讓讀者能快速掌握 Ansible 的核心功能。
第一部分:學習Ansible基礎知識
在本部分中,我們將瞭解Ansible的基本知識。我們將從安裝Ansible的過程開始,然後掌握基礎知識,包括語言基礎和即席命令。然後,我們將探討Ansible庫存,接著編寫我們的第一個劇本和角色,以完成多階段自動化任務。
本部分包含以下章節:
- 第1章:Ansible入門
- 第2章:瞭解Ansible基礎知識
- 第3章:定義您的庫存
- 第4章:劇本和角色
開始使用 Ansible
Ansible 讓您能夠輕鬆地以一致且可重複的方式佈署應用程式和系統,使用原生通訊協定如 SSH 和 WinRM。最重要的是,Ansible 是無代理的,因此除了 Python(如今大多數系統都已安裝)之外,不需要在受管理的系統上安裝任何東西。因此,您可以為您的環境建立一個簡單而強壯的自動化平台。
Ansible 的安裝簡單直接,並且為大多數現代系統提供了套件。它的架構是無伺服器和無代理的,因此佔用空間極小。您可以選擇從中央伺服器或自己的筆記型電腦執行它——選擇權完全在您。您可以從一台 Ansible 控制機器管理從單一主機到數十萬台遠端主機的所有內容。所有的遠端機器都可以(只要編寫足夠的 playbook)被 Ansible 管理,並且只要一切都正確建立,您可能永遠不需要個別登入這些機器。
在本章中,我們將開始教授您 Ansible 的基本知識,從如何在各種作業系統上安裝 Ansible 開始。然後,我們將探討如何設定 Windows 主機以使其能夠被 Ansible 自動化管理,然後探討 Ansible 如何連線到其目標主機的主題。接著,我們將瞭解節點需求以及如何驗證您的 Ansible 安裝,最後探討如何取得和執行最新的 Ansible 原始碼,如果您希望為其開發做出貢獻或獲得最新功能。
在本章中,我們將涵蓋以下主題:
安裝和設定 Ansible
瞭解您的 Ansible 安裝
從原始碼執行與預建的 RPM
技術需求
Ansible 的系統需求相當少——因此,您應該會發現,如果您有一台機器(無論是筆記型電腦、伺服器還是虛擬機器)能夠執行 Python,那麼您就能在其上執行 Ansible。在本章的後面,我們將展示在各種作業系統上安裝 Ansible 的方法——因此,您可以自行決定哪種作業系統適合您。
Microsoft Windows 是上述陳述的一個例外——儘管有適用於 Windows 的 Python 環境,但目前尚無原生 Ansible 版本。執行最新版本 Windows 的讀者將能夠使用 Windows Subsystem for Linux(以下簡稱 WSL)安裝 Ansible,並按照稍後為所選 WSL 環境概述的程式進行操作(例如,如果您在 WSL 上安裝 Ubuntu,您只需按照本章中給出的在 Ubuntu 上安裝 Ansible 的說明進行操作)。
安裝和設定 Ansible
Ansible 是用 Python 編寫的,因此可以在廣泛的系統上執行。這包括大多數流行的 Linux 發行版、FreeBSD 和 macOS。唯一的例外是 Windows,儘管存在原生的 Python 發行版,但目前尚無原生的 Ansible 版本。因此,在撰寫本文時,最好的選擇是在 WSL 下安裝 Ansible,就像在原生 Linux 主機上一樣。
一旦您確定了要在其上執行 Ansible 的系統,安裝過程通常簡單直接。在下面的章節中,我們將討論如何在各種不同的系統上安裝 Ansible,以便大多數讀者能夠在幾分鐘內啟動並執行 Ansible。
在 Linux 和 FreeBSD 上安裝 Ansible
Ansible 的發行週期通常約為四個月,在此短暫的發行週期中,通常會有許多變化,從小的錯誤修復到大的錯誤修復、新功能,甚至有時對語言的基本變化。要不僅僅是啟動並執行 Ansible,還要保持最新狀態,最簡單的方法是使用為您的作業系統構建的原生套件。
例如,如果您希望在 CentOS、Fedora、Red Hat Enterprise Linux(RHEL)、Debian 和 Ubuntu 等 Linux 發行版上執行最新版本的 Ansible,強烈建議您使用作業系統套件管理器,如 Red Hat 系統上的 yum 或 Debian 系統上的 apt。透過這種方式,每當您更新作業系統時,您將同時更新 Ansible。
在 Ubuntu 上安裝 Ansible:
要在 Ubuntu 上安裝最新版本的 Ansible 控制機器,apt 套件管理工具使其變得容易,使用以下命令:
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt-get install ansible
如果您正在執行較舊版本的 Ubuntu,您可能需要將 software-properties-common 替換為 python-software-properties。
在 Debian 上安裝 Ansible:
您應該在 /etc/apt/sources.list 檔案中新增以下行:
deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main
請注意,在上述設定行中出現了 ubuntu 和 trusty,後者是 Ubuntu 的一個版本。在撰寫本文時,Ansible 的 Debian 版本取自 Ubuntu 的 Ansible 儲存函式庫,並且可以正常工作。您可能需要根據您的 Debian 版本更改上述設定中的版本字串,但對於大多數常見的使用情況,這裡參照的行就足夠了。
內容解密:
$ sudo apt-get update:更新套件列表,以確保我們獲得最新版本的軟體。$ sudo apt-get install software-properties-common:安裝software-properties-common套件,這是新增 PPA(個人套件存檔)所必需的。$ sudo apt-add-repository --yes --update ppa:ansible/ansible:新增 Ansible 的官方 PPA,並更新套件列表。$ sudo apt-get install ansible:從新增的 PPA 安裝最新版本的 Ansible。
這些命令確保了在 Ubuntu 系統上正確安裝了最新版本的 Ansible。
在不同作業系統上安裝Ansible
Ansible是一種自動化工具,可用於管理和組態多台伺服器。為了使用Ansible,首先需要在控制機上安裝它。本章節將介紹如何在不同的Linux發行版和macOS上安裝Ansible。
在Debian上安裝Ansible
要在Debian上安裝Ansible,請執行以下命令:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
$ sudo apt-get update
$ sudo apt-get install ansible
內容解密:
apt-key adv:此命令用於管理Debian系統中的軟體包簽名金鑰。--keyserver keyserver.ubuntu.com:指定金鑰伺服器為Ubuntu的金鑰伺服器。--recv-keys 93C4A3FD7BB9C367:接收指定的金鑰。apt-get update:更新軟體包列表。apt-get install ansible:安裝Ansible。
在Gentoo上安裝Ansible
要在Gentoo上安裝Ansible,請執行以下命令:
$ echo 'app-admin/ansible' >> /etc/portage/package.accept_keywords
$ emerge -av app-admin/ansible
內容解密:
echo 'app-admin/ansible' >> /etc/portage/package.accept_keywords:將Ansible新增到接受的關鍵字列表中,以便安裝。emerge -av app-admin/ansible:使用Portage包管理器安裝Ansible。
在FreeBSD上安裝Ansible
要在FreeBSD上安裝Ansible,請執行以下命令:
$ sudo pkg install py36-ansible
$ sudo make -C /usr/ports/sysutils/ansible install
內容解密:
pkg install py36-ansible:使用PKG包管理器安裝Ansible的Python 3.6版本。make -C /usr/ports/sysutils/ansible install:使用Ports集合安裝Ansible。
在Fedora上安裝Ansible
要在Fedora上安裝Ansible,請執行以下命令:
$ sudo dnf -y install ansible
內容解密:
dnf -y install ansible:使用DNF包管理器安裝Ansible,-y選項自動確認安裝。
在CentOS或RHEL上安裝Ansible
要在CentOS或RHEL上安裝Ansible,請執行以下命令:
$ sudo yum install epel-release
$ sudo yum -y install ansible
內容解密:
yum install epel-release:安裝EPEL(Extra Packages for Enterprise Linux)倉函式庫。yum -y install ansible:使用YUM包管理器從EPEL倉函式庫安裝Ansible。
在Arch Linux上安裝Ansible
要在Arch Linux上安裝Ansible,請執行以下命令:
$ pacman -S ansible
內容解密:
pacman -S ansible:使用Pacman包管理器安裝Ansible。
驗證Ansible安裝
無論使用哪種方法安裝Ansible,都可以透過執行以下命令來驗證其版本:
$ ansible --version
內容解密:
此命令顯示已安裝的Ansible版本、組態檔案路徑、模組搜尋路徑等資訊。
在macOS上安裝Ansible
在macOS上,可以使用Homebrew或Python包管理器(pip)來安裝Ansible。
使用Homebrew安裝
首先,需要安裝Homebrew。然後,執行以下命令:
$ brew install ansible
使用pip安裝
或者,可以使用pip來安裝Ansible。首先,確保Python版本至少為2.7,然後執行:
$ sudo pip install ansible
內容解密:
brew install ansible:使用Homebrew安裝Ansible。pip install ansible:使用pip安裝Ansible。
在 macOS 上安裝與升級 Ansible
在 macOS 上安裝 Ansible 的方法有多種,包括使用 pip 或 brew。使用 pip 安裝 Ansible 的命令如下:
$ sudo pip install ansible
若要升級 Ansible 版本,pip 也提供了簡便的方式:
$ sudo pip install ansible --upgrade
同樣地,如果你使用 brew 安裝 Ansible,可以透過以下命令進行升級:
$ brew upgrade ansible
為 Ansible 組態 Windows 主機
儘管 Ansible 在 Windows 上沒有直接的安裝方法,但它能夠透過 WinRM 協定實作對 Windows 主機的無代理管理。Ansible 可以利用 PowerShell 執行多種任務,包括收集遠端主機的事實、安裝和解除安裝 Windows 功能、管理 Windows 服務、管理使用者帳戶和套件等。
Ansible 在 Windows 自動化方面的能力
- 蒐集遠端主機的事實
- 安裝和解除安裝 Windows 功能
- 管理和查詢 Windows 服務
- 管理使用者帳戶和使用者列表
- 使用 Chocolatey 管理套件
- 執行 Windows 更新
- 從遠端機器擷取多個檔案到 Windows 主機
- 在目標主機上執行原始 PowerShell 命令和指令碼
組態 Windows 主機以實作 Ansible 自動化
要使 Ansible 能夠與 Windows 主機通訊,需要滿足以下需求:
- Windows 版本需在微軟的當前或擴充套件支援之下,包括 Windows 7、8.1、10 及 Windows Server 2008(及 R2)、2012(及 R2)、2016 和 2019。
- 需要安裝 PowerShell 3.0 或更高版本,以及至少 .NET 4.0。
- 需要建立並啟用 WinRM 監聽器。
準備 Windows 主機以實作 Ansible 自動化
- 升級 PowerShell 和 .NET Framework:確保 PowerShell 版本至少為 3.0,.NET Framework 版本至少為 4.0。可以使用以下 PowerShell 指令碼自動完成此過程:
$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
$file = "$env:temp\Upgrade-PowerShell.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
&$file -Verbose
Set-ExecutionPolicy -ExecutionPolicy Restricted -Force
內容解密:
此指令碼會檢查需要安裝的程式(如 .NET Framework 4.5.2)和所需的 PowerShell 版本,必要時會重新啟動,並設定使用者名稱和密碼引數。指令碼會自動重新啟動並登入,以便繼續執行,直到 PowerShell 版本符合目標版本。
- 組態 WinRM 服務:升級 PowerShell 後,需要組態 WinRM 服務以便 Ansible 連線。有三種方法可以設定 WinRM 監聽器:
- 使用
winrm quickconfig命令進行 HTTP 組態,或使用winrm quickconfig -transport:https命令進行 HTTPS 組態。 - 在域環境中,建議使用組策略物件(GPO)進行組態。
- 使用 PowerShell 命令手動建立監聽器,例如:
- 使用
$selector_set = @{
Address = "*"
Transport = "HTTPS"
}
$value_set = @{
CertificateThumbprint = "E6CDAA82EEAF2ECE8546E05DB7F3E01AA47D76CE"
}
New-WSManInstance -ResourceURI "winrm/config/Listener" -SelectorSet $selector_set -ValueSet $value_set
內容解密:
此命令建立了一個 WinRM 監聽器,使用指定的 SSL 證書指紋。需將 CertificateThumbprint 替換為有效的 SSL 證書指紋,該證書應事先建立或匯入到 Windows 證書儲存中。