1. 程式人生 > 實用技巧 >實戰操作!如何快速有效部署ansible

實戰操作!如何快速有效部署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)
  1. 修改主機清單檔案(清單檔名必須與主配置檔案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頭條!回覆關鍵詞“資料合集”即可免費領取!