Ansible與Ansible部署

2023-10-26 21:00:38

Ansible與Ansible部署

Ansible簡介:

Ansible是一個基於Python開發的設定管理和應用部署工具,現在也在自動化管理領域大放異彩。它融合了眾多老牌運維工具的優點,Pubbet和Saltstack能實現的功能,Ansible基本上都可以實現。

Ansible能批次設定、部署、管理上千臺主機。比如以前需要切換到每個主機上執行的一或多個操作,使用Ansible只需在固定的一臺Ansible控制節點上去完成所有主機的操作。

Ansible是基於模組工作的,它只是提供了一種執行框架,它本身沒有完成任務的能力,真正執行操作的是Ansible的模組, 比如copy模組用於拷貝檔案到遠端主機上,service模組用於管理服務的啟動、停止、重啟等。

Ansible其中一個比較鮮明的特性是Agentless,即無Agent的存在,它就像普通命令一樣,並非C/S軟體,也只需在某個作為控制節點的主機上安裝一次Ansible即可,通常它基於ssh連線來控制遠端主機,遠端主機上不需要安裝Ansible或其它額外的服務。

使用者在使用時,在伺服器終端輸入命令或者playbooks,會通過預定好的規則將playbook拆解為play,再組織成ansible可以識別的任務,呼叫模組和外掛,根據主機清單通過SSH將臨時檔案發給遠端的使用者端執行並返回結果,執行結束後自動刪除

Ansible的另一個比較鮮明的特性是它的絕大多數模組都具備冪等性(idempotence)。所謂冪等性,指的是無論執行多少次同樣的運算,結果都是相同的,即一條命令,任意多次執行所產生的影響均與一次執行的影響相同。比如執行 systemctl stop xxx 命令來停止服務,當發現要停止的目標服務已經處於停止狀態,它什麼也不會做, 所以多次停止的結果仍然是停止,不會改變結果,它是冪等的,而 systemctl restart xxx 是非冪等的。

Ansible的很多模組在執行時都會先判斷目標節點是否要執行任務,所以,可以放心大膽地讓Ansible去執行任務,重複執行某個任務絕大多數時候不會產生任何副作用。

ansible 環境安裝部署

管理端:192.168.1.100 ansible 被管理端:192.168.1.101 被管理端:192.168.1.102

管理端安裝 ansible

yum install -y epel-release         //先安裝 epel 源
yum install -y ansible

image-20231026182023518

image-20231026182120595

ansible 目錄結構

/etc/ansible/
├── ansible.cfg         #ansible的組態檔,一般無需修改
├── hosts               #ansible的主機清單,用於儲存需要管理的遠端主機的相關資訊
└── roles/              #公共角色目錄

image-20231026182331692

設定主機清單

cd /etc/ansible
vim hosts       
[webservers]            #設定組名
192.168.1.101           #組裡包含的被管理的主機IP地址或主機名(主機名需要先修改/etc/hosts檔案)
​
[dbservers]
192.168.1.102

image-20231026182930791

設定金鑰對驗證

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
​
yum install -y sshpass
sshpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected]
sshpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected]

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa用於生成一個RSA型別的SSH金鑰對。以下是對該命令中各個選項的解釋:

  • -t rsa:指定使用RSA演演算法生成金鑰對。

  • -P '':設定金鑰的密碼為空(即無密碼)。

  • -f ~/.ssh/id_rsa:指定生成的金鑰檔案的路徑和名稱

image-20231026183158238

shpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected]用於通過SSH複製公鑰到目標主機。以下是對該命令中各個選項的解釋:

  • sshpass -p '123123':使用sshpass工具來提供密碼,其中-p選項用於指定密碼。請注意,使用明文密碼是不安全的,在生產環境中應該避免使用此方法。

  • ssh-copy-id:該命令用於將本地公鑰複製到遠端主機的authorized_keys檔案中,以實現無密碼登入。

  • -o StrictHostKeyChecking=no:該選項用於禁用StrictHostKeyChecking,以便在首次連線時不會提示對目標主機的驗證。

image-20231026183747005

驗證:

image-20231026184008610