目錄
- Ansible概述
- 1:什么是Ansible
- 2:Ansible的架構組成
- 3:Ansible與SaltStack的對比
- 安裝部署Ansible服務
- 1:系統環境設置
- 2:安裝Ansible(第一臺)
- 2:配置主機清單
- 3:修改Ansible配置文件
- Ansible命令應用基礎
- 1:command模塊
- 2:shell模塊
- 3:user模塊
- 4:cron模塊
- 5:group模塊
- 6:copy模塊
- 7:file模塊
- 9:script模塊
- 10:yum模塊
- 11:service模塊
- 12:setup模塊
Ansible概述
1:什么是Ansible
Ansible 是基于 Python 開發,集合了眾多優秀運維工具的優點,實現了批量運行命令、部署程序、配置系統等功能的自動化運維管理工具。默認通過 SSH 協議進行遠程命令執行或下發配置,無需部署任何客戶端代理軟件,從而使得自動化環境部署,變得更加簡單。可同時支持多臺主機并行管理,使得管理主機更加便捷。
2:Ansible的架構組成
Ansible 可以看作是一種基于模塊進行工作的框架結構, 批量部署能力就是由Ansible 所運行的模塊實現的。簡而言之 Ansible 是基于“模塊”完成各種“任務”的。其基本框架結構如下圖 所示。
由上圖可以得出 Ansible 的基本架構由六大件構成。
Ansible core 核心引擎:即 Ansible 本身;
Host Inventory 主機清單: 用來定義 Ansible 所管理主機, 默認是在 Ansible 的 hosts 配置文件中定義被管理主機, 同時也支持自定義動態主機清單和指定其它配置文件的位置;
Connect plugin 連接插件:負責和被管理主機實現通信。除支持使用SSH連接被管理主機外,Ansible 還支持其它的連接方式,所以需要有連接插件將各個主機用連接插件連接到 Ansible;
Playbook( yaml, jinjia2) 劇本:用來集中定義 Ansible 任務的配置文件, 即將多個任務定義在一個劇本中由 Ansible自動執行, 可以由控制主機針對多臺被管理主機同時運行多個任務;
Core modules 核心模塊:是 Ansible 自帶的模塊,使用這些模塊將資源分發到被管理主機使其執行特定任務或匹配特定的狀態;
Custom modules 自定義模塊:用于完成模塊功能的補充,可借助相關插件完成記錄日志、發送郵件等功能。
3:Ansible與SaltStack的對比
(1)Ansible 安裝部署簡單
默認情況下,Saltstack 需要安裝客戶端接收服務器發送過來的命令。Ansible 不需要在被控服務器上部署任何的客戶端,直接使用ssh 通道進行遠程命令的執行或者下發配置。
(2)Saltstack 響應速度快默認情況下,Ansible 使用 的是標準的 SSH協議,而 Saltstack 使用 ZeroMQ 進行通信和傳輸。因此,僅僅從響應速度來講,Saltstack 比 Ansible 快很多,甚至快十幾倍。在一般運維場景下,Ansible的響應速度完全可以滿足需求
(3)Ansible 更安全
Ansible 使用標準的 SSH 連接傳輸數據,不需要在遠程主機上啟動守護進程。此外,標準的 SSH 數據傳輸本身就是加密傳輸,遠程主機不易被攻擊。
(4)對 Windows 的支持
Saltstack 對 windows 的支持比較友好,Ansible 從 1.7 版本開始加入了對 Windows 的支持。由于Windows 默認沒有 SSH,而 Ansible 有依賴 SSH 進行通信,所以在 Windows下 Ansible 需要依賴PowerShell 來實現遠程管理。Ansible 必須使用 Linux 系統運行控制端。
(5)Ansible 自身運維比較簡單
Saltstack 需要在 Master 和 Minion 主機啟動一個守護進程,自身需要檢測守護進程的運行狀態,增加了運維成本。Ansible 和服務器之間用 SSH 進行通信,服務器上值需要運行 SSH 進程就可以進行運維操作。因此,從工具本身的運維角度來說,Ansible 要比 Saltstack簡單很多。
安裝部署Ansible服務
Ansible 自動化運維環境由控制主機與被管理主機組成。由于 Ansible 是基于 SSH 協議進行通信的,所以控制主機安裝 Ansible 軟件后不需要重啟或運行任何程序,被管理主機也不需要安裝和運行任何代理程序。
資源清單
我現在將根據你提供的圖片內容生成Markdown格式的表格。
操作系統 | 主機名 | IP地址 | 組 | 角色 |
---|---|---|---|---|
openEuler 24.03 | ansible-node1 | 192.168.10.101 | 管理節點 | |
openEuler 24.03 | ansible-node2 | 192.168.10.102 | web | 被管理主機 |
openEuler 24.03 | ansible-node3 | 192.168.10.103 | db | 被管理主機 |
1:系統環境設置
2:安裝Ansible(第一臺)
Ansible 可以使用源碼方式進行安裝,也可以使用操作系統中 YM 軟件包管理工具進行安裝。 YUM方式安裝 Ansible,需要依賴第三方的 EPEL 源。
安裝Ansible
注:需要時間同步否則安裝不上,以下命令可以時間同步
dnf install chrony -y
systemctl enable --now chronyd
查看版本信息
查看安裝目錄
2:配置主機清單
/etc/ansible/hosts 文件中可以定義被管理主機,Ansible 通過讀取/etc/ansible/hosts 文件內定義的主機清單批量做一些操作。比如定義一個 websrvs 組,包含一臺主機,再定義一個 dbsrvs 組,包含另一臺主機,內容如下:
3:修改Ansible配置文件
Ansible命令應用基礎
Ansible 可以使用命令行的方式進行自動化管理。
Ansible 的命令行管理工具都是由一系列模塊、參數組成的,使用某些模塊或參數之前, 可以在命令后面加上-h 或–help 來獲取幫助。例如,ansible-doc 工具可以使用 ansible-doc -h 或者ansible-doc --help 查看其幫助信息。
ansible-doc 工具用于査看模塊幫助信息。主要選項包括:
-l 用來列出可使用的模塊;
-s用來列出某個模塊的描述信息和使用示列。
列出所有可用模塊
列出yum模塊的描述信息和操作動作
備注:
按q退出
Ansible 自帶了很多模塊,能夠下發執行 Ansible 的各種管理任務。首先來了解下 Ansible常用的這些核心模塊。
1:command模塊
Ansible 管理工具使用-m 選項來指定所使用模塊,默認使用 command 模塊,即-m 選項省略時會運行此模塊,用于在被管理主機上運行命令。例如在被管理主機上執行 date 命令,顯示被管理主機時間。有三種執行命令的方式來管理寫入主機清單中的主機。
使用IP地址查看被管理的主機日期
分別查看web組和db組的所有主機日期
查看所有被管理主機的日期
注意:
若省略-m 選項,默認運行 command 模塊。
2:shell模塊
Ansible 中的 shell 模塊可以在被管理主機上運行命令,并支持像管道符等功能的復雜命令。
在被管理組 db 里所有主機創建用戶 user1,uid 和 gid 都為 1001,用戶家目錄為/home/user1,shel1
為/bin/bash。
使用無交互模式給用戶設置密碼。
3:user模塊
Ansible 中的 user 模塊用于創建新用戶和更改、刪除已存在的用戶。其中 name 選項用于指明創建的用戶名稱。主要包括兩種狀態(state):
present 表示添加(省略狀態時默認使用);
absent 表示移除。
刪除上述創建的用戶 user1
4:cron模塊
Ansible 中的 cron 模塊用于定義任務計劃。主要包括兩種狀態(state):
present 表示添加(省略狀態時默認使用);
absent 表示移除。
添加任務計劃,使得被管理組 db 里所有主機每十分鐘輸出 hello 字符串
移除任務計劃
注意:出現
可以使用setenforce 0處理也可以安裝
5:group模塊
Ansible 中的 group模塊用于對用戶組進行管理。
被管理組 db里所有主機創建 mysql 組,gid 為 306
將被管理組 db 里所有主機的 mysql 用戶添加到 mysql 組中
6:copy模塊
Ansible 中的 copy 模塊用于實現文件復制和批量下發文件。其中使用 src 來定義本地源
文件路徑;使用 dest 定義被管理主機文件路徑;使用 content 則是使用指定信息內容生成目標文件。
將本地文件/etc/fstab復制到被管理組db里的所有主機上的/tmp/fstab.ansible并將所有者設置為 root,權限設置為 640。
將”hello” 寫入到被管理組 db 里所有主機上的/tmp/ test.ansible 文件中
7:file模塊
Ansible 中使用 file 模塊來設置文件屬性。其中使用 path 指定文件路徑;使用 src 定義源文件路徑;使用 name 或 dest 來替換創建文件的符號鏈接。
設置被管理組 dbsrvs 里所有主機中/tmp/fstab.ansible 文件的所屬主為 mysql,所屬組為 mysq1,
權限為 644。
設置被管理組 dbsrvs 里的所有主機的/tmp/fstab.link 文件為/tmp/fstab.ansible 文件的鏈接文件。
9:script模塊
Ansible 中的 script 模塊可以將本地腳本復制到被管理主機上進行運行。需要注意的是使用相對路徑指定腳本位置。
編輯一個本地腳本,復制到db里所有主機運行
10:yum模塊
Ansible 中的 yum 模塊負責在被管理主機上安裝與卸載軟件包,但是需要提前在每個節點配置自己的YUM 倉庫。
其中:
使用 name 指定要安裝的軟件包,還可以帶上軟件包的版本號;否則安裝最新的軟件包。
使用 state 指定安裝軟件包的狀態, present、latest 用來表示安裝, absent 表示卸載。
db 里所有主機安裝 zsh 軟件包。
卸載軟件包
11:service模塊
Ansible 中使用 service 模塊來控制管理服務的運行狀態。其中使用 enabled 表示是否開機自動啟動,取值為 true 或者 false;使用 name 定義服務名稱;使用 state 指定服務狀態,取值有 started、stoped、 restarted.
査看被管理組 web里所有主機 httpd 服務的狀態
httpd 服務是否是開機自動啟動狀態。
提示表示被管理組里所有主機的 httpd 服務沒有設置為開機自動啟動狀態
設置遠程主機自啟動 httpd 服務
査看被管理主機 ansible-node2 的 httpd 狀態
查看被管理組里所有主機的 httpd 服務是否是開機自動啟動狀態
12:setup模塊
Ansible 中使用 setup 模塊收集、査看被管理主機的 facts(facts 是 Ansible 采集被管理主機設備信息的一個功能)。每個被管理主機在接收并運行管理命令之前,都會將自己的相關信息( 操作系統版本、IP 地址等)發送給控制主機。