当前位置:网站首页>ansible自動化運維詳解(一)ansible的安裝部署、參數使用、清單管理、配置文件參數及用戶級ansible操作環境構建
ansible自動化運維詳解(一)ansible的安裝部署、參數使用、清單管理、配置文件參數及用戶級ansible操作環境構建
2022-04-23 08:17:00 【是大姚呀】
文章目錄
ansible自動化運維詳解(一)ansible的安裝部署、參數使用、清單管理、配置文件參數及用戶級ansible操作環境構建
一、ansible的安裝部署
1.1、ansible簡介
ansible是新出現的自動化運維工具,其基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。作為一個開源配置管理工具,我們可以使用ansible來自動化執行任務,部署應用程序實現IT基礎架構,如服務器的初始化配置、安全基線配置、更新和打補丁系統,安裝軟件包等。ansible架構相對比較簡單,僅需通過SSH連接遠程主機即客戶機執行任務即可。
使用ansible的過程中會用到一些概念術語,這裏介紹如下:
術語 | 含義 |
---|---|
Control node | 控制節點,指的是安裝了ansible的主機,也叫ansible服務器端、管理機。ansible控制節點主要用於發布運行任務,執行控制命令。控制節點需要安裝Python和ansible所需的各種依賴庫。 |
Managed nodes | 受控節點,即利用ansible執行任務的客戶服務器 |
Inventory | 清單,指的是受控節點的列錶,即所有要管理的主機的列錶 |
host文件 | 清單列錶通常保存在一個名為host文件中,在host文件中,可以使用IP地址或者主機名來錶示具體的管理主機和認證信息,並可以根據主機的用戶進行分組 |
Modules | 模塊,即ansible執行特定任務的代碼塊 |
Task | ansible客戶主機上執行的操作 |
Playbook | 利用YAML標記語言編寫的可重複執行的任務的列錶 |
roles | 角色,用於層次性、結構化地組織playbook,roles能够根據層次型結構自動裝載變量文件、tasks以及handlers等 |
1.2、實驗環境
在安裝部署ansible之前,我們需要搭建好實驗環境:
這裏需要用到兩臺rhel8.2版本的虛擬機(一主一從):
westosa(172.25.33.100):控制節點
westosb(172.25.33.200):受控節點
實驗步驟:
1、在虛擬化存儲目錄中重置兩個虛擬機硬盤,准備兩臺新的虛擬機westosa和westosb
2、配置控制節點westosa:修改westosa的域名為westos_ansible.westos.org
使用圖形化方式為westosa配置網絡
設置其IP為172.25.33.100,網關為172.25.33.250,為其配置域名解析
完成後使用命令查看虛擬機ip,設置成功
修改開機啟動默認運行級別為multi-user.target
,這是因為使用ansible時不需要圖形接口,只需要支持用戶SSH遠程連接,所以運行級別選擇 3,完成設置後進入命令行模式
3、配置受控節點westosb:修改westosb的域名為westos_node1.westos.org,使用圖形化方式為westosb配置網絡
設置其IP為172.25.33.200,受控節點不需要設置網關,為其配置域名解析
完成後使用命令查看虛擬機ip,設置成功,同樣地修改開機啟動默認運行級別為multi-user.target
,進入命令行模式
4、打開真實主機防火牆的地址偽裝功能,使虛擬機可以聯網
遠程連接上控制節點westosa,測試可以ping通baidu
1.3、安裝部署ansible
實驗步驟:
1、遠程連接上控制節點westosa,查看虛擬機操作系統版本,這是因為安裝ansible的軟件倉庫源版本要和系統版本一致
2、編寫控制節點westosa的軟件源倉庫指向文件,注意版本一致性
3、安裝方式一: 下載epel源的rpm安裝包進行安裝,這裏我們使用了已有的epel安裝包
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
rpm -ivh epel-release-latest-8.noarch.rpm
epel源安裝完成後,軟件源倉庫目錄/etc/yum.repos.d
中會自動生成對應的repo文件,接著使用yum install -y ansible
就可以直接安裝ansible
4、安裝方式二: dnf install安裝ansible,這裏需要說明的一點是,使用dnf install安裝ansible時解决不了ansible軟件的依賴性(沒有sshpass這個包),因此除了ansible的rpm包,還需要事先下載好sshpass的rpm包
依賴性解决方法一: 安裝yum-utils工具,yumdownloader
從網上下載得到依賴包後進行安裝
依賴性解决方法二: 這裏我們本地有sshpass和ansible的rpm安裝包,其他依賴在系統鏡像中有,所以只需要先安裝sshpass,再安裝ansible(其他依賴包會自動安裝)
先安裝sshpass
解决了依賴性問題後安裝ansible
查看ansible的版本,驗證ansible已經成功安裝
二、ansible的基本信息和參數使用
2.1、ansible的基本信息
/etc/ansible | 主配置目錄 |
---|---|
/etc/ansible/ansible.cfg | 全局配置文件,默認很少修改 |
/etc/ansible/hosts | 全局主機清單文件,管理主機列錶 |
2.2、ansible的參數使用
實驗步驟:
1、使用ansible的ping模塊(-m參數
錶示模塊)連接受控主機westosb,出現報警無法ping通,這是因為主機清單中的管理主機中沒有172.25.33.200主機
2、編輯hosts主機清單,在最後輸入受控主機的ip添加被控節點,添加成功即可列出主機,這時可以使用ping模塊管理該主機
但此時輸入命令回車會報錯,這是因為在控制連接172.25.33.200主機的過程中,首先要在ansible控制主機中生成python脚本,然後遠程通過sshd服務傳輸到被控主機上,在傳py文件的過程中需要被控主機的認證通過。這裏控制主機還不能通過被控主機的認證,所以需要加-K參數
錶示在執行ansible時詢問ssh密碼,出現pong錶示和172.25.33.200主機之間可以實現ansible連接管理
3、由於使用root用戶權限調用受控主機權限太大,所以一般需要使用普通用戶的身份在受控節點執行管理操作,這裏我們為受控節點創建普通用戶devops並設置用戶密碼
4、為了避免每次連接受控主機時都要輸入密碼進行ssh認證,這裏我們需要對控制節點做ssh免密認證:首先生成密鑰對
將生成的公鑰複制給受控節點中創建的普通用戶devops
這裏直接調用ping模塊連接受控節點會報錯,這是因為ssh遠程連接默認使用root用戶身份登錄,而我們將公鑰複制給的是受控節點中的普通用戶devops,因此我們需要使用-u參數
指定用戶身份連接,此時不需要加-k即可連接管理受控節點
5、使用ansible的shell模塊測試在受控節點建立文件( shell -a參數
錶示在shell中所要執行的內容),文件創建失敗,這是因為當前在受控主機中運行指令時用到的是devops普通用戶身份,無權限
我們需要visudo下放權力給devops,賦予devops用戶所有權限
再次測試在受控節點建立文件,-K參數
錶示詢問sudo密碼,文件依然創建失敗,這是因為還需要使用--become參數
指定devops在執行命令時用sudo調用,這樣才能真正提權,而不是直接執行,此時文件可以成功創建
6、為了避免在每次提權時輸入sudo密碼,我們可以visudo為devops用戶做NOPASSWORD免密
完成免密設置後執行相應操作即可不需要使用-K參數
詢問sudo密碼
文件成功删除
三、ansible的清單管理
實驗步驟:
1、在ansible的主配置目錄中創建自定義清單並編輯,添加兩個受控主機的ip,此時列出主機無法讀取自定義清單,需要使用-i參數
指定清單
2、ungrouped
列出清單中未在任何組中的主機
編輯默認清單文件,設置單層清單,定義兩個組westos1和westos2
此時指定組的名稱,即可列出指定組中的受控主機
編輯默認清單文件,設置嵌套清單,定義westos清單中有westos1和westos2兩個子清單
此時指定嵌套清單的名稱,即可列出其所有子清單的受控主機
3、編輯默認清單文件,通過指定組中主機名稱或IP的範圍可以簡化ansible主機清單
4、在清單中添加受控主機時,除了使用ip,還可以使用受控主機的域名(前提是要有域名解析,不區分大小寫)
5、清單中的正則錶達式:編輯默認清單文件,在westos1組中添加ip為192網段的受控主機,另外定義組192
列出192*錶示列出清單文件中所有以192開頭的清單或清單中的主機(* 所有
)
列出清單文件中所有以172或192開頭的清單或清單中的主機(:邏輯或
)
編輯默認清單文件,在westos2組中添加一個westos1組中已有的受控主機
列出清單文件中在westos1清單和westos2清單中都有的主機(:& 邏輯與
)
列出清單文件中在westos1清單但不在westos2清單中的主機(:!邏輯非(注意要用單引號引起來,“”轉譯不了!)
)
列出清單文件中以172開頭的清單或清單中的主機(~ 以...開頭
)
列出清單文件中以172或192開頭的清單或清單中的主機(~(a|b) 以 a 或 b 開頭
)
四、ansible配置文件的參數詳解
ansible配置文件中常用參數的釋義如下:
[default] 基本信息設定
inventory= 指定清單路徑
remote_user= 在受管主機上登陸的用戶名稱,未指定使用當前用戶
ask_pass= 是否提示輸入SSH密碼,如果公鑰登陸設定為false
library= 庫文件存放目錄
local_tmp= 本機臨時命令執行目錄
remote_tmp= 遠程主機臨時py命令文件存放目錄
forks= 默認並發數量
host_key_checking= 第一次連接受管主機時是否要輸入yes建立host_key
sudo_user= 默認sudo用戶
ask_sudo_pass= 每次在受控主機執行ansible命令時是否詢問sudo密碼
module_name= 默認模塊,默認使用command,可以修改為shell
log_path= 日志文件路徑
[privilege_escalation] 身份信息設定
become= 連接後是否自動切換用戶
become_method= 設定切換用戶的方式,通常用sudo
become_user= 在受管主機中切換到的用戶,通常為root
become_ask_pass= 是否需要為become_method提示輸入密碼,默認為false
實驗步驟:
1、在ansible的主配置目錄/etc/ansible中創建自定義清單文件westos並添加受控主機,此時無法列出清單中組內的受控主機
這是因為在ansibe的默認主配置文件中,指定的清單路徑為/etc/ansible/hosts,我們需要在主配置文件中添加指定的清單路徑(注意多個路徑用,隔開)
此時可以成功列出自定義清單中指定組內的受控主機
2、主配置文件中的remote_tmp、local_tmp指定了在執行ansibble時,控制主機生成的python脚本臨時文件的存放路徑/比特置,這些臨時文件在控制命令結束後會自動删除
切換到指定的存放路徑可以看到,此時目錄為空
另外開啟一個新的終端,遠程連接到控制主機,開啟監控實時查看指定的存放路徑
此時顯示目錄為空
切換到ansible的主配置目錄進行測試,執行等待100秒
查看監控界面可以看到在100秒內,這一指定臨時文件存放路徑中存在py臨時文件
命令執行完畢後,再次查看監控界面顯示目錄為空,py臨時文件自動删除
在命令執行的100秒內,受控主機的同一指定路徑下也存在py臨時文件,同樣地在命令執行完成後自動删除
3、編輯主配置文件打開ask_pass
執行命令進行測試,可以看到在每次執行ansible時都會詢問連接用戶的密碼(相當於-K參數)
編輯主配置文件關閉ask_pass
再次執行命令進行測試,可以看到在執行ansible時不再詢問連接用戶的密碼
4、删除~/.ssh/known_hosts文件,當know_hosts文件不存在時,連接受控主機時會詢問是否接收受控主機發送過來的身份認證key,需要輸入yes,如果受控節點數量巨多會大大增加命令執行的時間開銷
編輯主配置文件關閉host_key_checking,即不再詢問是否接受受控主機發送過來的身份認證key
此時ssh遠程連接受控主機時會自動輸入yes,直接顯示輸入連接密碼
5、編輯主配置文件設置默認使用的ansible模塊為ping
此時執行ansible命令ping受控主機時不需要指定模塊,會自動執行ping操作
6、使用ansible的shell模塊測試在受控節點建立文件,文件創建失敗,這是因為當前在受控主機中運行指令時用到的是devops普通用戶身份,devops在執行命令時沒有用sudo調用,沒有真正提權
編輯主配置文件設置遠程主機中用devops用戶操作指令時轉換用戶身份,轉換用戶身份執行命令時用sudo調用(相當於–become參數),轉換成root用戶,執行sudo調用指令時不提示輸入密碼(NOPASSWD)
此時再次測試在受控節點建立文件,文件創建成功
7、編輯主配置文件設置執行ansible控制遠程主機時用到的遠程主機用戶為所創建的devops
使用ansible的shell模塊測試在受控節點建立文件,此時不需要使用-u參數指定以devops用戶身份進行創建
五、構建用戶級ansible操作環境
在實際應用中,對於不同的用戶ansible的配置也不同,且ansible的默認主配置文件只有一個,因此一般不直接修改主配置文件,我們需要把ansible的配置根據用戶獨立出來。
實驗步驟:
1、創建用戶lee並設置用戶密碼,切換到所創建的用戶,在當前用戶的家目錄下建立使用ansible的目錄,進入目錄生成自己的配置
2、編寫主配置文件ansible.cfg(只寫入需要的參數即可,這裏~/
錶示當前用戶家目錄)
注意: ansible配置文件的優先級為—當前目錄>當前用戶家目錄>ansible默認主配置目錄/etc/ansible
3、在當前ansible的目錄下創建對應的主機清單列錶文件,添加受控主機
4、切換回超級用戶,由於ansible控制主機本身也作為了受控主機,而當前控制主機中無配置文件中設定的在受控主機上登陸的devops用戶,因此需要先創建devops用戶並設置用戶密碼,再將受控主機的公鑰複制給所創建的devops用戶
再切換回lee用戶,將受控主機的私鑰複制給lee用戶
5、切換回超級用戶,為控制主機也是受控主機上執行ansible的登錄用戶devops提權
6、此時切換回lee用戶,切換到當前用戶家目錄中的ansible配置目錄(注意:執行ansible命令時必須在配置文件所在目錄中,否則識別不了),執行命令測試所有受控主機可以成功ping通,用戶級ansible操作環境構建成功
版权声明
本文为[是大姚呀]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204230716403982.html
边栏推荐
猜你喜欢
Ubuntu安装Mysql并查询平均成绩
There are some problems when using numeric type to query string type fields in MySQL
每周leetcode - 06 数组专题 7~739~50~offer 62~26~189~9
Search the complete navigation program source code
Discussion on ES6 tail tune optimization
dried food! Point based: differentiable Poisson solver
[appium] encountered the problem of switching the H5 page embedded in the mobile phone during the test
在MATLAB中快速画圆(给出圆心坐标和半径就能直接画的那种)
为什么会存在1px问题?怎么解决?
vslam PPT
随机推荐
An idea plug-in that doesn't work, but can install X
Qt编译QtXlsx库
js常用数组方法
LeetCode简单题之计算字符串的数字和
Face to face summary 2
刨析——浏览器如何工作
一个没啥L用,但可以装X的IDEA插件
Hump naming object
redis主从服务器问题
Brief description of CPU
编译原理题-带答案
Briefly describe the hierarchical strategy of memory
基于TCP/IP协议的网络通信实例——文件传输
一款拥有漂亮外表的Typecho简洁主题_Scarfskin 源码下载
欧圣电气深交所上市:市值52亿 陆为东父女为美国籍
Samsung, March to the west again
PHP high precision computing
PyQt5开发之QTableWidget表头自定义与美化(附源代码下载)
英语课小记(四)
Solidity IDE Remix中文版使用手册