實戰操作!如何快速有效部署ansible
ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量執行命令等功能。
ansible是基於模組工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所執行的模組,ansible只是提供一種框架。主要包括:
(1) 連線外掛connection plugins:負責和被監控端實現通訊;
(2) host inventory:指定操作的主機,是一個配置檔案裡面定義監控的主機;
(3) 各種模組核心模組、command模組、自定義模組;
(4) 藉助於外掛完成記錄日誌郵件等功能;playbook:劇本執行多個任務時,非必需可以讓節點一次性執行多個任務。
如何部署ansible ?
1.準備如表-1所示的實驗環境,作業系統為RHEL8,配置主機名稱、IP地址、YUM源。
ansible原理:
控制端主機自帶很多模組(模組就是指令碼);
ansible通過ssh遠端被管理主機,將控制端的模組(指令碼)或命令傳輸到被管理主機;
在被管理端主機執行模組(指令碼)或命令,執行不同的模組或命令可以實現不同的功能;
最後ansible退出ssh遠端。
絕大多數模組(指令碼)都需要引數才能執行成功!!!類似於shell指令碼的位置變數!
拓撲結構如圖-1所示。
步驟一:準備基礎環境
控制節點要求:
· 域名解析(為了方便後期操作,可以不做)
· 配置SSH金鑰(ansible是基於ssh實現遠端控制)
· 安裝Ansible軟體
1)Control控制節點
修改/etc/hosts,在檔案中手動新增如下內容,修改該檔案的目的是做域名解析。 1. [root@control ~]# vim /etc/hosts #修改檔案,手動新增如下內容(不要刪除檔案原來的內容) 2. 192.168.4.253 control 3. 192.168.4.11 node1 4. 192.168.4.12 node2 5. 192.168.4.13 node3 6. 192.168.4.14 node4 7. 192.168.4.15 node5
如何驗證?
[root@control ~]# ping node1 #可以使用ping命令依次ping所有域名
配置SSH金鑰實現免密碼登入(非常重要)
Ansible是基於SSH遠端的原理實現遠端控制,如果控制端主機無法免密登入被管理端主機,後續的所有試驗都會失敗!!
1. [root@control ~]# ssh-keygen -f /root/.ssh/id_rsa -N '' #生成ssh金鑰
2. #-f指定金鑰檔案存放在哪個目錄,檔案叫什麼名字,-N ''設定金鑰的密碼為空
3. [root@control ~]# for i in node1 node2 node3 node4 node5
4. do
5. ssh-copy-id $i
6. done
7. #拷貝金鑰到遠端主機
8. #提示:拷貝金鑰到遠端主機時需要輸入對方電腦的賬戶密碼才可以!!
9. #拷貝金鑰到node1就需要輸入node1對應賬戶的密碼,拷貝金鑰到node2就需要輸入node2對應的密碼
如何驗證?
警告:如果有任何一臺主機遠端還需要密碼,就不要往下繼續操作,後面實驗都會失敗!!!
[root@control ~]# ssh node1 #使用ssh命令依次遠端
所有主機都可以免密碼登入
2) 部署Ansible軟體(僅Control主機操作,軟體包在ansible_soft目錄)
1. [root@control ~]# tar -xf ansible_soft.tar.gz
2. [root@control ~]# cd ansible_soft
3. [root@control ansible_soft]# dnf -y install *
被控制節點要求:
· Ansible預設通過SSH協議管理機器
· 被管理主機要開啟SSH服務,並允許控制主機登入
· 被管理主機需要安裝有Python
步驟二:修改配置檔案
主配置檔案說明:
主配置檔案ansible.cfg(主配置檔案的內容可以參考/etc/ansible/ansible.cfg)
ansible配置檔案查詢順序
首先檢測ANSIBLE_CONFIG變數定義的配置檔案(預設沒有這個變數)
其次檢查當前目錄下的./ansible.cfg檔案
再次檢查當前使用者家目錄下~/ansible.cfg檔案
最後檢查/etc/ansible/ansible.cfg檔案
1) 修改主配置檔案
1. [root@control ~]# mkdir ~/ansible
2. [root@control ~]# vim ~/ansible/ansible.cfg
3. [defaults]
4. inventory = ~/ansible/inventory
5. #主機清單配置檔案(inventory可以是任意檔名),英語詞彙:inventory(清單、財產清單)
6. #forks = 5 #ssh併發數量
7. #ask_pass = True #使用金鑰還是密碼遠端,True代表使用密碼
8. #host_key_checking = False #是否校驗金鑰(第一次ssh時是否提示yes/no)
- 修改主機清單檔案(清單檔名必須與主配置檔案inventory定義的一致)
1. [root@control ~]# vim ~/ansible/inventory
2. [test] #定義主機組(組名稱任意)
3. node1 #定義組中的具體主機,組中包括一臺主機node1
4. [proxy] #定義主機組(組名稱任意),英語詞彙:proxy(代理人,委託人)
5. node2 #proxy組中包括一臺主機node2
6. [webserver]
7. node[3:4] #這裡的node[3:4]等同於node3和node4
8. [database]
9. node5
10. [cluster:children] #巢狀組(children為關鍵字),不需要也可以不建立巢狀組
11. webserver #巢狀組可以在組中包含其他組
12. database
如果你覺得本篇文章對你有幫助的話,記得點贊收藏加關注哦!
福利:豆花同學為大家精心整理了一份關於linux和python的學習資料大合集!有需要的小夥伴們,關注豆花個人公眾號:python頭條!回覆關鍵詞“資料合集”即可免費領取!