1. Ansible概述與基本概念
1.1. 什么是Ansible?
Ansible 是一款用 Python 編寫的開源 IT 自動化工具,主要用于配置管理、軟件部署及高級工作流編排。它能夠簡化應用程序部署、系統更新等操作,并且支持自動化管理大規模的計算機系統。Ansible 的設計簡單易懂,且無代理(agentless),這使得它可以快速集成到現有環境中。
大量任務基于ssh解析,會出現瓶頸。
1.2. 初學者官方指南
推薦閱讀官方的入門指南:redhat ansible。該指南將幫助你快速上手 Ansible,了解其基本概念和用法,助你掌握自動化運維的基礎技能。
2. 學習目的與實踐場景
2.1. 學習目標
- 自動化運維:通過Ansible實現服務器管理和配置的自動化,減少手動操作,提升效率,降低錯誤率。
- 簡化配置管理:使用簡潔的腳本和配置文件,快速完成大規模系統配置和部署。
- 提升運維效率:通過自動化流程減少重復工作,使運維人員能夠專注于更有價值的任務。
2.2. 適合的受眾:
- 運維工程師:Ansible可以幫助運維人員管理大量的服務器,自動化配置和部署,減少人工干預。
- 開發人員:開發人員通過使用Ansible能在開發環境中快速部署應用,環境搭建,減少手動配置環境的時間。
2.3. 實踐場景:
- 系統初始化:在公司部署一批新服務器時,使用Ansible自動化配置操作系統、系統參數調整、批量創建用戶、設置用戶權限、基礎環境、軟件安裝等,確保所有服務器按照公司標準配置,無需手動配置每臺服務器。
- 配置變更:服務器中配置Nginx時,修改Nginx配置文件(如
nginx.conf
),并通過Ansible將配置推送到所有相關服務器,確保負載均衡策略一致,并自動重啟服務生效。 - 應用部署:通過Ansible Playbook部署Zookeeper集群、kafka集群,確保多節點間的通信和數據同步,每個節點的配置都被統一管理。
- 計劃任務:使用Ansible定期配置和執行服務器備份任務(例如通過cron),確保數據每周定時備份到遠程存儲,不遺漏任何重要數據。
- 環境一致性:Ansible保證開發環境、測試環境和生產環境的配置一致性,在每個環境中部署的Nginx服務配置、SSL證書、日志路徑等完全相同,避免環境間的配置差異引發問題。
二、Ansible安裝配置
1. Ansible架構與工作原理
控制機:通過命令行接口(CLI)或 Playbook 發起任務請求。
SSH通信:控制機通過 SSH 協議向受控節點發送任務請求(控制機要免密登錄被控機)。
受控節點:接收到任務并執行。受控節點可以是多個,Ansible 通過并行執行提高效率。
模塊:Ansible 使用模塊在受控節點上執行特定操作,如安裝軟件、復制文件等。
結果反饋:執行完畢后,受控節點將執行結果反饋給控制機,顯示成功或失敗的狀態,并提供執行細節。
2. 安裝與環境配置
2.1. 節點規劃
用途 | 主機 IP | 操作系統 | 備注 |
Ansible 控制機 | 192.168.101.100 | Rocky Linux 9.4 | 安裝 ansible-core、用于運行 playbook |
被控節點(node1) | 192.168.101.101 | Rocky Linux 9.4 | RockyLinux9 |
被控節點(node2) | 192.168.101.110 | CentOS 7.9 | 測試兼容性,常用老版本系統 |
被控節點(node3) | 192.168.101.120 | ubuntu 20.04 | ubuntu操作系統 |
2.2. 安裝Ansible
# 啟用epel 源
sudo dnf install epel-release -y
# 安裝ansible
sudo dnf install ansible-core -y
ansible --version
2.3. Asnsible節點與被管理節點基于Key(免密登錄)SSH
# 生成ssh key
ssh-keygen
# 拷貝ssh key到遠程主機,ssh的時候就不需要輸入密碼了
ssh-copy-id root@192.168.101.101
2.4. SSH公私鑰用途(補充)
2.4.1. SSH 公鑰與私鑰的用途解釋
用于通過不安全的網絡安全地訪問遠程計算機。它使用 公鑰加密 和 私鑰解密 機制來實現安全的身份驗證和加密通信。
2.4.2. 公鑰與私鑰的基本概念
公鑰(Public Key):
?用于加密數據或進行身份驗證。
?可公開共享,并添加到遠程服務器中以允許驗證客戶端身份。
私鑰(Private Key):
?用于解密數據或驗證身份。
?必須保密,泄露可能導致安全問題。
非對稱加密的特點:
?公鑰和私鑰成對使用,公鑰加密的數據只能通過對應的私鑰解密,反之亦然。
2.4.3. SSH 免密登錄原理
1.生成密鑰對:在客戶端生成公鑰和私鑰(使用 ssh-keygen)。私鑰保存在本地,公鑰可公開。
2.部署公鑰:將公鑰復制到目標服務器的 ~/.ssh/authorized_keys 文件中。
3.身份驗證:
?客戶端連接時,服務器發送一個加密的隨機挑戰信息。
?客戶端使用私鑰解密挑戰信息,并返回解密結果。
?如果解密正確,服務器允許登錄。
免密登錄本質:
?通過 公鑰加密 和 私鑰解密 來驗證客戶端身份,無需使用密碼。
公鑰和私鑰比作一個 鎖和鑰匙:
- 公鑰:如一把可以公開的鎖,任何人都可以用它鎖住東西(加密)。
- 私鑰:如僅你擁有的鑰匙,只有你能打開鎖(解密)。
3. Ansible 常用命令
3.1. 定義主機組
[rockylinux]
192.168.101.100
192.168.101.101[centos]
192.168.101.110[ubuntu]
192.168.101.120
3.2. 遠程執行Linux命令(使用常用命令批量管理機器)
指定用戶沒有做過免密登錄提示任務運行失敗,也可以指定密碼,相對繁瑣。
ansible all -m ping -u xinglu
ansible all -m ping -u xinglu
3.3. 執行命令
在所有的遠程主機上,以當前bash的同名用戶,在遠程主機執行“echo bash”
ansible -i hosts all -m command -a "pwd"
指定rockylinux 組創建文件
所有組創建文件
查看詳細信息加v
ansible -i hosts all -a 'w' -vvv