Ansible 自動化運維工具:介紹與完整部署(RHEL 9)

Ansible 自動化運維工具:介紹與完整部署(RHEL 9)

在這里插入圖片描述

Ansible 的介紹與安裝

一、自動化運維的必要性

傳統手動運維依賴圖形/命令行界面、檢查清單或記憶執行任務,存在以下核心問題:

  • 易出錯:易跳過步驟或執行錯誤操作,結果驗證有限;
  • 效率低:重復性任務占用大量時間,無法聚焦核心工作;
  • 一致性差:不同服務器配置易出現差異,影響業務穩定性。

自動化運維可解決上述問題,實現快速、標準化、無差異的系統部署與配置,釋放運維人力。

二、什么是 Ansible

Ansible 是基于 Python 開發的開源自動化運維平臺,核心能力包括:

  • 批量操作:支持批量系統配置、程序部署、命令執行;
  • 無代理架構:無需在被管節點安裝客戶端(Agent),通過 SSH/WinRM 通信;
  • 模塊化驅動:本身僅提供框架,實際功能由模塊實現(核心模塊+自定義模塊);
  • 全生命周期管理:覆蓋配置管理、應用部署、工作流編排、網絡自動化;

其工作原理:控制主機通過 SSH 推送臨時模塊到被管節點,執行任務后自動刪除模塊,確保被管節點清潔。

三、Ansible 核心優點

  1. 跨平臺支持:覆蓋 Linux、Windows、Unix 及網絡設備,適配物理機、虛擬機、云、容器;
  2. 易讀的自動化腳本:通過 YAML 格式的 Playbook 編寫任務,人類可讀,便于團隊協作;
  3. 版本控制友好:Playbook 為純文本文件,可直接納入 Git 等版本控制系統;
  4. 動態清單:支持從外部來源(如云平臺、CMDB)動態獲取被管主機列表,適應架構變化;
  5. 靈活集成:可與 Puppet、Jenkins、紅帽衛星等現有系統集成,復用現有架構。

四、Ansible 管理架構

Ansible 由控制主機被管節點組成,核心組件如下:

組件作用
控制主機運行 Ansible 核心程序,發起任務執行(需安裝 Ansible,被管節點無需)
被管節點接收控制主機的任務指令,執行對應操作(僅需支持 SSH,無需安裝 Ansible)
Host Inventory主機清單,記錄被管節點的 IP、端口、賬號等信息,支持分組管理
Modules任務執行單元(核心模塊/自定義模塊),如 ping(測試連通性)、yum(安裝軟件)
Playbooks任務劇本,通過 YAML 組合多個模塊,定義被管節點的最終狀態(例行任務首選)
Plugins擴展功能,如日志插件(記錄執行日志)、郵件插件(任務結果通知)
Connection Plugins連接插件,默認使用 SSH 插件與被管節點通信

五、Ansible 任務執行模式

Ansible 提供兩種核心執行模式,適配不同場景:

模式特點適用場景
Ad-hoc 模式(點對點)單條命令+單個模塊,無需保存,執行快速臨時性操作(如批量查看磁盤、測試連通性)
Playbook 模式(劇本)多模塊按邏輯組合,YAML 格式保存,可重復執行例行性任務(如 Web 服務部署、數據庫備份)

六、Ansible 完整部署流程(RHEL 9)

環境規劃

共 6 臺 RHEL 9 主機,1 臺控制主機(master)+ 5 臺被管節點(node1~node5),網絡信息如下:

主機名IP 地址角色用途
master.example.com192.168.122.100控制主機運行 Ansible,管理被管節點
node1.example.com192.168.122.10被管節點測試節點(test01 組)
node2.example.com192.168.122.20被管節點測試節點(test02 組)
node3.example.com192.168.122.30被管節點Web 節點(web 組)
node4.example.com192.168.122.40被管節點Web 節點(web 組)
node5.example.com192.168.122.50被管節點測試節點(test05 組)
ansible.example.com192.168.122.1宿主機提供 YUM 倉庫服務
步驟 1:基礎環境準備(所有主機)
1.1 安裝 RHEL 9 虛擬機
  • 安裝 1 臺 RHEL 9 虛擬機作為“模板機”,配置 IP 后,通過 virt-manager 克隆出 5 臺,共 6 臺主機;
  • 注意:克隆后需刪除所有主機網卡配置文件的 UUID(避免沖突),路徑:/etc/sysconfig/network-scripts/ifcfg-<網卡名>(如 ifcfg-ens33)。
1.2 配置主機名與 /etc/hosts

所有主機統一配置 /etc/hosts,實現主機名解析(無需 DNS):

vim /etc/hosts
# 添加以下內容
192.168.122.1          ansible.example.com  ansible
192.168.122.100        master.example.com  master
192.168.122.10         node1.example.com  node1
192.168.122.20         node2.example.com  node2
192.168.122.30         node3.example.com  node3
192.168.122.40         node4.example.com  node4
192.168.122.50         node5.example.com  node5
步驟 2:配置控制主機(master)免密鑰登錄

Ansible 通過 SSH 通信,需實現 master 到所有被管節點(node1~node5)的免密登錄(root + student 用戶)。

2.1 生成 SSH 密鑰(master 主機)

分別切換 rootstudent 用戶,生成密鑰(一路回車,不設密碼):

# root 用戶
[root@master ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:fu+YtSh2VzPILf27GULLWKt/71xihlpGacQABgid3PU root@master.example.com
The key's randomart image is:
+---[RSA 3072]----+
|  .+ +.o+..      |
|    = .. . o     |
|          E o    |
|           . .   |
|        S  .+*   |
|       .   oO.O  |
|        . ..=B+=.|
|        o..Xo+.+=|
|       . o=+=..=B|
+----[SHA256]-----+# student 用戶(若不存在,先創建:useradd student && passwd student)
[root@master ~]# su - student
[student@master ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa): 
/home/student/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/student/.ssh/id_rsa
Your public key has been saved in /home/student/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:N5v5lxQ1PcwK9bqjZllkxr7voQJ8IR8KzdBtYxjaiE4 student@master.example.com
The key's randomart image is:
+---[RSA 3072]----+
|        ..+ ..o .|
|      ..+o *  .=o|
|     E o+.o + .oo|
|    o  . + o *o  |
|     .  S * B. . |
|         = B oo  |
|          * o+.o |
|           *..= .|
|          o.oooo |
+----[SHA256]-----+
2.2 批量分發公鑰(master 主機)

通過循環腳本將公鑰分發到所有被管節點:

# 1. root 用戶分發到被管節點 root/student
[root@master ~]# for i in node{1..5}; dossh-copy-id -i ~/.ssh/id_rsa.pub root@$i    # 免密登錄被管節點 rootssh-copy-id -i ~/.ssh/id_rsa.pub student@$i  # 免密登錄被管節點 student
done# 2. student 用戶分發到被管節點 root/student(切換到 student 執行)
su - student
[root@master ~]# for i in node{1..5}; dossh-copy-id -i ~/.ssh/id_rsa.pub root@$issh-copy-id -i ~/.ssh/id_rsa.pub student@$i
done

驗證:執行 ssh node1(root/student 用戶),無需輸入密碼即登錄成功。

[root@master ~]# for i in node{1..5}; do scp /etc/hosts root@$i:/etc/hosts; done
hosts                                             100%  437   520.7KB/s   00:00    
hosts                                             100%  437   700.9KB/s   00:00    
hosts                                             100%  437   472.2KB/s   00:00    
hosts                                             100%  437   141.6KB/s   00:00    
hosts                                             100%  437   660.6KB/s   00:00    
步驟 3:配置 YUM 倉庫(宿主機 + master)

Ansible 安裝依賴自定義 YUM 倉庫(宿主機提供源,master 及被管節點使用)。

3.1 宿主機(ansible.example.com)配置倉庫
  1. 掛載 RHEL 9 鏡像,安裝 Apache 服務:
    # 掛載鏡像
    [root@ansible ~]# mount /dev/cdrom /mnt
    # 安裝 Apache
    [root@ansible ~]# yum -y install httpd
    [root@ansible ~]# systemctl restart httpd 
    [root@ansible ~]# systemctl enable httpd
    # 關閉防火墻與 SELinux
    [root@ansible ~]# systemctl stop firewalld 
    [root@ansible ~]# systemctl disable firewalld
    

[root@ansible ~]# setenforce 0
[root@ansible ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config

  1. 復制鏡像文件到 Apache 根目錄(供遠程訪問):
   # 上傳 Ansible自動化平臺包 BaseOS 與 AppStream源到 /var/www/html/(需提前準備包自行上傳)[root@ansible ~]# ls /var/www/html/ansible-automation-platform  materials  rhel9  roles
3.2 master 主機配置 YUM 倉庫

創建 /etc/yum.repos.d/server.repo,指向宿主機倉庫:

[root@master ~]$ vim /etc/yum.repos.d/server.repo[aa]
name=RHEL9 BaseOS
baseurl=http://ansible.example.com/rhel9/BaseOS
enabled=1
gpgcheck=0[cc]
name=RHEL9 AppStream
baseurl=http://ansible.example.com/rhel9/AppStream
enabled=1
gpgcheck=0[dd]
name=Ansible Automation Platform
baseurl=http://ansible.example.com/ansible-automation-platform
enabled=1
gpgcheck=0

驗證:執行 yum -y install vim,確認能正常安裝軟件。

步驟 4:student 用戶提權(所有主機)

Ansible 通常使用普通用戶(student)執行任務,需配置 sudo 免密提權:

# master 主機創建提權文件
[root@master ~]# vim /etc/sudoers.d/studentstudent   ALL=(ALL)   NOPASSWD: ALL  
# student 免密執行所有 sudo 命令# 批量分發到所有被管節點
[root@master ~]# [root@master ~]# for i in node{1..5}; do scp /etc/sudoers.d/student root@$i:/etc/sudoers.d/; done
student                                           100%   32    68.3KB/s   00:00    
student                                           100%   32    61.5KB/s   00:00    
student                                           100%   32    41.3KB/s   00:00    
student                                           100%   32    37.0KB/s   00:00    
student                                           100%   32    52.1KB/s   00:00    
步驟 5:安裝 Ansible(master 主機)

切換到 student 用戶,安裝 Ansible 核心組件:

[root@master ~]$ su - student
[student@master ~]$ sudo yum -y install ansible-core ansible-navigator
步驟 6:配置 Ansible(master 主機,student 用戶)

student 家目錄下創建 Ansible 工作目錄、主機清單、配置文件。

6.1 創建工作目錄
# 新建核心目錄
[student@master ansible]$ mkdir -p /home/student/ansible/{inventory,roles,collections}
[student@master ansible]$ cd /home/student/ansible
6.2 定義主機清單(inventory)

按業務分組管理被管節點,編輯 inventory 文件:

[student@master ansible]$ vim inventorynode1
node1
node2
node3
node4
node5
6.3 生成并配置 Ansible 主配置(ansible.cfg)
  1. 生成默認配置文件:

    [student@master ansible]$ ansible-config init --disabled > ansible.cfg
    
  2. 編輯配置文件,修改核心參數:

    [student@master ansible]$ vim ansible.cfg
    [defaults]
    inventory=/home/student/ansible/inventory  # 主機清單路徑
    remote_user=student                       # 遠程執行用戶
    roles_path=/home/student/ansible/roles    # 角色存放路徑
    host_key_checking=False                   # 關閉 SSH 主機密鑰檢查(避免首次登錄交互)
    collections_path=/home/student/ansible/collections  # 集合存放路徑[privilege_escalation]
    become=True                               # 啟用權限提升(普通用戶→root)
    become_ask_pass=False                     # 提升權限不詢問密碼
    become_method=sudo                        # 提升方式為 sudo
    become_user=root                          # 提升到 root 用戶
    
步驟 7:驗證 Ansible 環境

執行 ping 模塊,測試所有被管節點連通性,成功標志所有節點返回 SUCCESS,示例如下:

[student@master ansible]$ ansible all -m ping
node5 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node4 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}
node2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"
}

至此,Ansible 控制主機部署完成,可通過 Ad-hoc 命令或 Playbook 對被管節點執行自動化任務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94633.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

構建生產級 RAG 系統:從數據處理到智能體(Agent)的全流程深度解析

文章目錄一、 整體架構設計&#xff1a;邁向智能體&#xff08;Agent&#xff09;驅動的 RAG二、 數據準備與預處理&#xff1a;構建高質量知識庫2.1 數據加載與初步提取2.2 多策略分塊 (Multi-Strategy Chunking)邏輯分塊&#xff1a;按故障章節和關鍵說明傳統分塊&#xff1a…

Duplicate Same Files Searcher v10.7.0,秒掃全盤重復檔,符號鏈接一鍵瘦身

[軟件名稱]: Duplicate Same Files Searcher v10.7.0 [軟件大小]: 3.3 MB [軟件大小]: 夸克網盤 | 百度網盤 軟件介紹 Duplicate Same Files Searcher&#xff08;重復文件搜索&#xff09;是一款強大且專業的重復文件查找與清理工具。通過使用該軟件&#xff0c;用戶可以方…

C/C++ 數據結構 —— 樹(2)

? &#x1f381;個人主頁&#xff1a;工藤新一 ? &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; ? &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 ? &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章…

EEA架構介紹

前言 本文主要對EEA架構的理解進行了記錄&#xff0c;以加深理解及方便后續查漏補缺。 EEA架構 硬件架構 EEA架構作用 提升算力利用率、數據統一交互&#xff0c;實現整車功能協同、縮短線束、降低重量、降低故障率、提升裝配自動化 EEA架構發展趨勢 分布式–>域集中式–>…

【目標跟蹤】《FastTracker: Real-Time and Accurate Visual Tracking》論文閱讀筆記

0.參考 論文:https://arxiv.org/pdf/2508.14370v1 代碼:github.com/HamidrezaHashempoor/FastTracker, huggingface.co/datasets/HamidrezaHashemp/FastTracker-Benchmark. 1.摘要 提高多目標跟蹤在多物體跟蹤上的性能(從前主要是針對行人場景做的優化)。 該方法包含兩…

C++ 內存安全與智能指針深度解析

C 內存安全與智能指針深度解析面試官考察“野指針”&#xff0c;實際上是在考察你對 C “資源所有權” (Ownership) 和 “生命周期管理” (Lifetime Management) 的理解。現代 C 的答案不是“如何手動避免”&#xff0c;而是“如何自動化管理”。第一部分&#xff1a;核心知識點…

Vue SFC Playground 如何正確引入 naive-ui

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

音頻轉文本技術詳解:API接口、實用示例與最佳實踐

音頻轉文本技術詳解&#xff1a;API接口、實用示例與最佳實踐 目錄 概述接口類型與模型說明支持的音頻格式與文件大小限制快速入門音頻轉錄&#xff08;Transcription&#xff09;音頻翻譯&#xff08;Translation&#xff09;支持的語言列表時間戳功能處理較長音頻上下文提示…

QT-布局管理器

Qt布局管理器 一、布局管理器介紹布局管理器&#xff08;Layout Manager&#xff09;是在圖形用戶界面&#xff08;GUI&#xff09;應用程序中用于自動管理和排列窗口部件&#xff08;Widget&#xff09;的工具。Qt 共提供了 5 種布局管理器&#xff0c;來幫助開發者方便地組織…

Linux CentOS 安裝 .net core 3.1

打開終端&#xff0c;輸入以下命令以添加 .NET Core Yum 倉庫&#xff1a;sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm安裝 .NET Core SDK&#xff1a;sudo yum install dotnet-sdk-3.1驗證安裝&#xff1a;dotnet --versionre…

深度剖析Spring AI源碼(三):ChatClient詳解,優雅的流式API設計

深度剖析Spring AI源碼&#xff08;三&#xff09;&#xff1a;ChatClient詳解&#xff0c;優雅的流式API設計“The best APIs are those that make simple things simple and complex things possible.” —— Alan Kay (計算機科學巨匠) Spring AI的ChatClient API正是這句話…

C語言基礎:(二十五)預處理詳解

目錄 前言 一、預處理符號 二、#define 定義常量 三、#define 定義宏 四、帶有副作用的宏參數 五、宏替換的規則 六、宏函數對比 七、# 和 ## 7.1 #運算符 7.2 ##運算符 八、命名約定 九、#undef 十、命令行定義 十一、條件編譯 十二、頭文件的包含 12.1 頭…

本地文件夾即時變身 Web 服務器(文件服務器)

一&#xff1a;http-server npm install --global http-server 使用&#xff0c;在一個目錄下打開 cmd http-server [path] [options] [path] defaults to ./public if the folder exists, and ./ otherwise. 可以下載文件&#xff0c;但是不能下載文件夾。 二&#xff1a;…

Golang云端編程入門指南:前沿框架與技術全景解析

Golang云端編程入門指南&#xff1a;前沿框架與技術全景解析 1 引言&#xff1a;Go語言在云原生時代的優勢 Go語言&#xff08;Golang&#xff09;由Google開發&#xff0c;憑借其簡潔的語法、卓越的并發性能和高效的編譯速度&#xff0c;已成為云端應用開發的首選語言之一。…

藍凌EKP產品:從 XML 到 JSON ——表單存儲的性能優化實踐

1. 背景介紹藍凌 EKP 的表單引擎&#xff0c;是整個低代碼平臺的核心能力之一。它不僅僅是“存儲表單”&#xff0c;更是 企業級應用快速構建的基礎設施。它支持各種復雜表單配置&#xff08;字段、布局、校驗、權限、聯動、子表單&#xff09;。它能靈活綁定流程&#xff0c;實…

STM32高級定時器-輸出比較模式

一.輸出比較原理1.輸出比較 通過定時器的外部引腳對外輸出控制信號&#xff0c;將通道X(x1,2,3,4)通常設置為PWM1、PWM2模式。 2.比較寄存器 當計數器CNT和比較寄存器CCR的值相等時&#xff0c;輸出參考信號OCxREF的信號的極性發生改變&#xff0c;其中OCxREF1(高電平)稱為有效…

深入理解Unity中的`.meta`文件:以紋理文件為例

在Unity開發中&#xff0c;.meta文件是一個經常被提及但又容易被忽視的組成部分。這些隱藏的元數據文件在項目的穩定性和一致性中扮演著重要角色&#xff0c;尤其是在處理紋理文件時。本文將深入探討.meta文件的作用、內容、版本控制以及常見問題&#xff0c;幫助開發者更好地理…

【機器學習】3 Generative models for discrete data

本章目錄 3 Generative models for discrete data 65 3.1 Introduction 65 3.2 Bayesian concept learning 65 3.2.1 Likelihood 67 3.2.2 Prior 67 3.2.3 Posterior 68 3.2.4 Posterior predictive distribution 71 3.2.5 A more complex prior 72 3.3 The beta-binomial mod…

Gemini CLI 與 MCP 服務器:釋放本地工具的強大潛力

前言 Gemini CLI 是一款強大的命令行工具&#xff0c;它將 Google 的 Gemini 模型帶入了您的終端。然而&#xff0c;其真正的潛力在于通過 模型上下文協議&#xff08;Model Context Protocol, MCP&#xff09; 與外部工具集成。本文將結合兩篇關鍵文章&#xff0c;深入探討什…

HTTP、HTTPS 與 WebSocket 詳解

HTTP、HTTPS 與 WebSocket 詳解 在網絡通信中&#xff0c;HTTP、HTTPS 和 WebSocket 是三種常見的應用層協議&#xff0c;分別適用于不同的場景。以下從定義、特點、工作原理和適用場景等方面詳細解析&#xff1a; 一、HTTP&#xff08;HyperText Transfer Protocol&#xff0c…